# 360DLM ERP-Lite — Software Landscape Research & Roadmap Inputs
_Date: 2026-07-03 (IST) · Session: RESEARCH · Method: deep-research workflow (105 agents, 23 sources fetched, 109 claims extracted, 25 adversarially verified: 14 confirmed / 11 refuted) + eFlexo extraction agent + open-source data-model mining agent + local Flutter-readiness audit._

> Confidence legend: ✅ = adversarially verified (multi-vote) · ◐ = single-agent researched, cited but not adversarially verified · ⚠️ = claim REFUTED or unverifiable — do not rely on it.

> **Addendum (2026-07-03, later same day):** Gap 4 in §8 (MDD coverage was 5/28 = 18%) is now CLOSED — 28/28 real PWAs have an MDD (29 files; custodian correctly folds into MDD_finance.md, 3 non-PWA dirs correctly excluded). Ran via the `/mdd-reverse` skill, 8 agent queues, each claim code-verified. Surfaced two "dev-live/prod-absent" ghost modules (dispatch, contacts) plus a third (production) — schemas existed on dev DB but were never migrated to prod nor captured as SQL artifacts; decisions logged in `dbt_pending.md`. Also surfaced, while grounding a follow-on JWT ADR: `tour-pg-proxy`'s proxy auth header is unsigned/forgeable (see ADR-105) — a live security defect, not a Flutter-only concern. Gaps 1–3 (JWT/session, native navigation, design-system specs) are unaffected by this addendum; ADR-105 addresses Gap 1's design (not yet Accepted/implemented).

---

## 0. Executive summary

1. **360LM already covers more of the "mini ERP" surface than any single commercial product surveyed.** The gaps are not new PWAs — they are four missing *capabilities*: an **estimation/costing engine** (print + fabrication), an **asset/equipment booking model** with conflict detection (events), **production scheduling** (job → machine/crew timeline), and **retainer/recurring contracts** (future marketing arm).
2. **eFlexo** (eflexo.in, Insight-IRS, Pune, ~1,200 users, from ₹6,970 ◐) is a strong *workflow* reference (15-second job card → challan → multi-jobcard invoice → GST, WhatsApp/SMS/Email dispatch) but its **estimation algorithm is not public** — the highest-value artefacts must be captured manually inside the 45-day trial (checklist in §2.3).
3. **ERPNext/Frappe is the single best open-source study target** ✅: GPL-3.0, metadata-driven DocTypes, auto-generated REST APIs (philosophically identical to PostgREST), and the **India Compliance app** ✅ (GST ledgers, 12,000+ HSN/SAC, e-invoicing IRN→QR, GSTR-1/3B) — study it for schema and GST logic; do not adopt the stack.
4. **Best directly-reusable schemas found**: RentalCore (rental/booking conflict detection in plain SQL), Beveren FSM (field-service state machine matching recce→install flow), Twenty (workspace/RLS isolation for the future multi-client consultancy).
5. **Flutter verdict** ✅◐: the current API-first PostgREST architecture is a sound scaffold (local audit: **65–70% ready**), and Flutter's official offline-first patterns (repository + Stream cache-first reads; local-write-then-sync) map 1:1 onto the ADR-020 IndexedDB pattern. **Recommendation: defer the Flutter build until API contracts are frozen and MDD coverage is complete; do the MDD + JWT + design-system groundwork now** (in progress — see §8).

---

## 1. What the adversarial verification actually confirmed (and killed)

The deep-research workflow verified 25 claims with 3-vote adversarial review. Notable outcomes:

**Confirmed ✅**
- ERPNext: GPL-3.0, no proprietary tiers; auto REST APIs per DocType; metadata-as-data architecture. (github.com/frappe/erpnext, docs.frappe.io)
- ERPNext India Compliance app: pre-configured GST ledgers, 12,000+ HSN/SAC codes, e-invoicing with QR, GSTR-1/GSTR-3B. (docs.indiacompliance.app, github.com/resilient-tech/india-compliance)
- eFlexo module set: job cards, delivery challans, multi-jobcard invoicing, purchases, payment/salary, GST. (eflexo.in)
- PrintVis: five core modules — cost estimating, production planning/scheduling, purchasing, inventory, shop-floor data collection. Proprietary; study only. (printvis.com, Capterra)
- Ordant: per-product-type workflows across 9 production types (digital, large-format, signage, offset, screen, labels, sublimation, vehicle wrap, apparel) + hot-folder sync + email approvals. (ordant.com)
- Rentman: serial-number-level asset tracking with QR/barcode/RFID; availability timeline + bulk booking. (rentman.io)
- Flutter offline-first: repository as single source of truth, Stream emits cached-then-fresh; write-local-first with documented sync-divergence risk and mitigations (sync flags, backoff, LWW). (docs.flutter.dev/app-architecture/design-patterns/offline-first)

**Refuted / do NOT cite ⚠️**
- PrintVis "$60/user/month" pricing — failed verification (0–3 votes). Treat PrintVis pricing as unknown (quote-based).
- Brick ORM's production maturity + auto-retry claims (from Supabase blog) — failed verification. If Flutter offline lib is needed later, evaluate **Drift/PowerSync** hands-on rather than trusting Brick marketing.
- Rentman "automatic crew conflict detection" — failed verification. Its *equipment* conflict tooling is verified; crew-side claims are marketing.
- ERPNext "14,000+ HSN codes" (the verified number is 12,000+) and some broad module-count claims — verify per-module before relying.

**Open questions the workflow flagged**
1. eFlexo INR pricing tiers + whether self-host exists (capture in trial account).
2. Whether PrintVis exposes its estimation data model anywhere (likely not — black-box in Business Central).
3. Minimum API-contract stability window before committing to Flutter (recommendation below: freeze after MDD program + JWT refactor).
4. Open-source print-MIS codebases — partially answered by the mining agent (§7): nothing production-grade exists for print estimation; this is a **build** area.

---

## 2. Domain 1 — Branding & printing (print MIS)

### 2.1 Product landscape

| Product | Origin/Target | Pricing | Standout features to borrow | Confidence |
|---|---|---|---|---|
| **eFlexo** (eflexo.in, Insight-IRS, Pune) | Indian SME flexo/digital/offset/signage printers | From ₹6,970 (TechJockey); tiers incl. Platinum | 15-sec job card entry; challan (single/multi); multi-jobcard invoice; WhatsApp/SMS/Email dispatch of docs; GST baked in; role-based access | ✅ modules / ◐ pricing |
| **PrintVis** | Global, on MS Dynamics 365 BC | Quote-based (⚠️ $60/user refuted) | Time-based costing, material waste factors, visual production scheduling, shop-floor data capture via e-job-tickets | ✅ |
| **Ordant** | US/CA/UK print shops | Quote-based | **Per-product-type workflow routing** (9 types incl. signage & vehicle wrap — exactly 360DLM's mix); hot-folder sync; email approval automation | ✅ |
| **PrintPLANR** | Indian, multi-segment print MIS | Quote-based | Full quote→job→dispatch MIS + Web2Print + API integration | ◐ |
| **ECERP** (Chennai) | Indian print & packaging mfg | Quote-based | Multi-process job tracking (print→die-cut→laminate→finish), wastage tracking per process | ◐ |
| **eresource Xcel** | Indian enterprise print/packaging | Quote-based | Artwork/version control, prepress module, machine scheduling, QC | ◐ |

### 2.2 Estimation logic (highest-value extraction)

eFlexo's algorithm is **not public**. Industry-standard flexo estimation inputs (from Flexo Exchange / Luminite / Zeller+Gmelin calculators ◐):
- Substrate: width, length/repeat, quantity + overrun %, material type, GSM
- Print: colors (stations), coverage % per color, quality level
- Press: anilox volume (BCM), ink transfer % (~20–25%), speed, setup time
- Costs: substrate per unit/kg, ink consumption (formula below), plate per color, cylinder amortization
- Wastage: 3–10% by run length; labor + overhead burden

```
Ink consumed = (width × length × coverage%) / (transfer% × anilox volume) × quantity
```

**360DLM estimation engine design (build-custom):** PostgreSQL tables — `substrate_master (gsm, cost_per_unit, supplier)`, `ink_master (color, cost_per_ml, coverage_lookup)`, `plate_cost (fixed | per_color | per_cm2)`, `wastage_config (global % + per-job override)`, `estimate` + `estimate_line` with a costing RPC that rolls up material + setup + labor + overhead. Track **actual vs estimated consumption** per job card (PrintVis-style variance) — this is the moat none of the Indian SME tools expose well.

### 2.3 eFlexo 45-day trial — capture checklist (do before expiry)

1. **Quotation/Estimation screen**: screenshot every input field; export a sample 2-color flexo estimate; note which fields trigger recalculation; is plate cost computed or manual?
2. **Job Card**: full template (all fields — job ID, client, substrate spec, plates, ups/repeat); is ink volume pre-populated?; multi-job aggregation behaviour.
3. **Material masters**: ink catalog cost model (per kg? per color?), plate cost model, substrate master fields, wastage settings (global vs per-job).
4. **Reports**: job cost breakdown, material consumption vs estimate (variance), press utilization if present.
5. **Workflow specifics**: multi-color repeat/UPS calculation; common-cylinder cost savings handling; Tally/accounting export.
6. **Admin config**: estimation model presets, GST calculation method, custom-field capability.

Each capture feeds a reference MDD (`MDD_print_estimation.md`) before building.

---

## 3. Domain 2 — Branding fabrication & signage installation

_Coverage note: the adversarial pass spent its budget on domains 1/3/6/7; this domain's commercial rows are single-source ◐._

| Product | Focus | Pricing (indicative) | Features to borrow | Confidence |
|---|---|---|---|---|
| **ShopVOX** | Sign-shop MIS | ~US$99+/user/mo tiers | Sign-specific quoting templates, proof approval flow, job boards | ◐ |
| **Corebridge** | Signage ERP | Quote-based | Quote→production→install pipeline for signage | ◐ |
| **simPRO** | Field service + projects | Quote-based | Multi-stage projects, asset maintenance, mobile field app | ◐ |
| **Zuper / Zoho FSM** | Field service (India-friendly) | Zoho FSM from ~₹1,000/user/mo | Dispatch board, checklists, photo proof, customer notifications | ◐ |

**Open-source to study (verified by mining agent):**
- **Beveren FSM** (Frappe app, AGPL — github.com/Beveren-Software-Inc/Field_Service_Management): Service Request → Quotation → Service Order → Appointment → Execution → Invoice state machine; parts consumed from inventory; photo evidence per appointment. **This is almost exactly recce → offer → job → installation → invoice.**
- **open-fieldservice** (MIT): Job/Technician/Visit/Checklist/Photo entities, GPS dispatch.

**360DLM position:** recce, dispatch, installation, activity PWAs already implement most of this (site survey with photos, crew dispatch, installation checklist). **Adapt**: formalize the cross-PWA *job state machine* (one `job` spine from enquiry → recce → quote → fabrication → installation → invoice) rather than adding a new tool.

---

## 4. Domain 3 — Event management & production

| Product | Focus | Pricing (indicative) | Features to borrow | Confidence |
|---|---|---|---|---|
| **Rentman** | AV/event equipment & production | ~€39+/user/mo tiers | **Serial-number asset tracking + QR/barcode/RFID** ✅; **availability timeline + bulk booking** ✅; crew scheduling (⚠️ auto conflict detection refuted) | ✅ |
| **Current RMS** | Rental management | ~US$50+/user/mo | Quote→rental lifecycle, sub-rentals | ◐ |
| **HireHop** | Equipment rental | Free tier exists | Budget-friendly rental ops | ◐ |
| **Zoho Backstage / Eventbrite** | Registration/attendee side | Freemium | Only if 360DLM ever runs attendee-facing events | ◐ |

**Open-source to study (verified by mining agent):**
- **RentalCore** (github.com/nbt4/rentalcore, Go+React, full schema at `database/RentalCore.sql`): `device` (serial, condition_rating, maintenance), `job` (booking period, quote→approved→confirmed→in_rental→returned), `job_device` (rate/day, damage on return), and an **availability view using NOT EXISTS over overlapping bookings — directly portable to a PostgREST view**:

```sql
-- pattern to port into an `events` schema
SELECT d.id FROM devices d
WHERE NOT EXISTS (
  SELECT 1 FROM job_devices jd JOIN jobs j ON jd.job_id = j.id
  WHERE jd.device_id = d.id
    AND j.status IN ('approved','confirmed','in_rental')
    AND j.end_date > $1 AND j.start_date < $2);
```
- **LibreBooking** (752★, GPL): simpler resource→reservation model with conflict detection.

**360DLM build:** an `events` schema PWA = asset master (serial + QR; reuse the printing QR patterns) + booking with the conflict view + crew roster (reuse hub employees + dispatch) + run-sheet (ordered task list per event) + vendor POs (reuse expense/finance party model).

---

## 5. Domain 4 — Digital marketing services (future arm)

| Product | Focus | Pricing (indicative) | Features to borrow | Confidence |
|---|---|---|---|---|
| **GoHighLevel** | White-label agency platform | ~US$97–497/mo | Snapshot/template-per-client-industry concept; unified client comms | ◐ |
| **Vendasta** | Agency marketplace/white-label | Quote-based | Client-facing report card concept | ◐ |
| **Zoho (One/Marketing Plus)** | India-friendly suite | ₹-denominated plans | CRM+campaigns+books integration pattern | ◐ |
| **ClickUp/Monday agency templates** | Work management | Freemium | Campaign task templates, client dashboards | ◐ |

**Open-source to study:** **Twenty** (10K★, AGPL, metadata-driven CRM — workspace isolation pattern), **Krayin** (Laravel CRM), Dolibarr projects module. Retainer pattern: `contract` → `contract_billing_cycle` → auto-invoice trigger on billing day.

**360DLM approach:** don't build yet. When the arm launches: add `contracts` (retainers) + `campaigns` (tasks per client per month) to the existing sales/finance schemas. Blogsmith is already the first deliverable-automation tile.

---

## 6. Domain 5 — AI & automation services for SMEs (future arm)

| Platform | Role | Pricing | Relevance | Confidence |
|---|---|---|---|---|
| **n8n** | Self-hostable workflow automation (fair-code) | Free self-host; cloud from ~€20/mo | The natural delivery vehicle for client automations from your VPS skillset | ◐ |
| **Activepieces** | Open-source (MIT core) Zapier alternative | Free self-host | Simpler, MIT-licensed pieces model — embeddable in client offers | ◐ |
| **Flowise / Botpress** | LLM-app / chatbot builders | Freemium | Client-facing AI chat deliverables | ◐ |
| **Make / Zapier** | Managed automation | ₹/US$ per-op plans | Use only when client insists on managed SaaS | ◐ |

**360DLM approach:** your existing pattern (Paperclip, OpenClaw, proxy sidecars, Claude-driven pipelines) *is already* the productized service. Package per-client automations as n8n/Activepieces instances + a 360LM-style status PWA. The consultancy offer = "observed workflow → custom Lite ERP module" using the same MDD → scaffold pipeline being built now.

---

## 7. Domain 6 — Open-source ERP frameworks (study/borrow list)

| Project | License | Why it matters to 360DLM | What exactly to borrow |
|---|---|---|---|
| **ERPNext / Frappe** ✅ | GPL-3.0 | Closest philosophical cousin: metadata-driven, auto REST APIs | DocType pattern → metadata-as-data; **immutable doc states (draft→submitted→amended→cancelled)**; workflow hooks; India Compliance GST models (ledgers, HSN, e-invoice IRN/QR, GSTR-1/3B) |
| **Dolibarr** | GPL | Pragmatic, no framework bloat | JSON custom-fields pattern (no schema migration per client); trigger-based audit trail |
| **Twenty** | AGPL | Modern metadata CRM | `workspace_id` scoping + RLS — the multi-tenant pattern for the consultancy offering |
| **RentalCore** | (check repo) | Rental MIS in plain SQL | Booking conflict view (§4); condition/damage model |
| **Beveren FSM** | AGPL | Field service on Frappe | Service-order state machine + photo proof (§3) |

**Full-detail appendix:** [`reference_oss_schema_patterns_2026-07-03.md`](reference_oss_schema_patterns_2026-07-03.md) — concrete SQL sketches (immutable versioning, custom-fields, workspace RLS, document state-machine RPC), exact file paths per repo, and the full ranked 10-item borrow list. This table is the condensed, spot-checked summary; the appendix has what you actually need when implementing.

**Top borrow list for a PostgREST mini-ERP** (mining agent, ranked): 1) immutable document versioning/states (GST audit trail), 2) JSONB custom fields, 3) multi-status workflow state machine enforced by triggers, 4) location-based scheduling (+PostGIS later), 5) workspace/RLS isolation, 6) asset condition ratings + damage log, 7) consumption-based costing (actual vs estimate), 8) photo proof-of-completion tables, 9) retainer contracts with auto-invoice, 10) append-only audit trail.

**Consultancy note (AGPL/GPL):** studying schemas and reimplementing concepts in your own SQL/JS is fine; *copying code* from GPL/AGPL projects into client deliverables would force those licenses — reimplement, don't copy.

---

## 8. PWA → Flutter: verdict and sequencing

**Verified externally ✅:** Flutter's official offline-first architecture (repository single-source-of-truth; Stream emits local-then-fresh; write-local-first + async sync with divergence mitigations) matches ADR-020/021 patterns nearly 1:1. An API-first REST backend needs **zero backend change** for a Flutter client. ⚠️ Brick ORM maturity claims failed verification — evaluate Drift (+PowerSync) hands-on when the time comes.

**Local audit (this session):** **65–70% scaffold-ready.**
- Transfers directly: PostgREST + 12 proxy REST services; theme-v2 tokens → ThemeData; 40 Playwright specs (~12,680 lines) as the behavior contract; offline IndexedDB pattern → SQLite/Drift; 105 ADRs.
- Gap 1 — **JWT/refresh-token auth** (hub verify_pin returns table row; session = localStorage JSON; proxies have heterogeneous auth). ~days of work, and it benefits the PWAs too.
- Gap 2 — **Navigation model** (?next= redirects + ADR-026 localStorage bridge are browser-only) → native deep links + route stack design.
- Gap 3 — **Design-system completeness** (tokens exist; spacing scale/component/interaction specs don't).
- Gap 4 — **MDD coverage was 5/28 (18%)** → *being fixed now*: 8-queue MDD reverse-engineering program running (waves of 2 agents, house format, code-verified claims).

**Sequencing recommendation (aligned with the workflow's medium-confidence finding):**
1. **Now**: finish MDD program → 100% module specs (in progress).
2. **Next**: JWT + refresh token ADR & hub refactor; proxy auth standardization (`Authorization: Bearer`).
3. **Then**: design-system spec expansion (spacing/components/motion) + freeze API contracts for the ported-first modules.
4. **Flutter PoC**: one small module (counters or tour-pg) re-implemented in Flutter against the frozen contract, passing the same behavioral specs.
5. **Only then** decide full-port vs hybrid (PWAs remain fine for desktop/admin; Flutter for field apps needing camera/GPS/offline robustness).

---

## 9. Common-module matrix (what ERP-Lite must have vs what exists)

| Capability | Print | Fabrication/Install | Events | Mktg (future) | AI svcs (future) | 360LM today | Verdict |
|---|---|---|---|---|---|---|---|
| Party/client master | ✔ | ✔ | ✔ | ✔ | ✔ | sales/customers, finance parties | **Adapt** (unify) |
| Enquiry → Quote/Estimate | ✔ | ✔ | ✔ | ✔ | ✔ | offer skill (docs only) | **Build** (estimation engine + quote entity) |
| Job/Work order + state machine | ✔ | ✔ | ✔ | ✔ | ✔ | scattered (recce, dispatch, installation) | **Adapt** (one job spine) |
| Site survey + photo proof | — | ✔ | ✔ | — | — | recce, installation ✅ | **Adopt own** |
| Scheduling (machine/crew) | ✔ | ✔ | ✔ | — | — | dispatch (partial) | **Build** (timeline view) |
| Asset/equipment booking | — | partial | ✔ | — | — | vehicle only | **Build** (RentalCore pattern) |
| Inventory/materials | ✔ | ✔ | ✔ | — | — | printing (partial) | **Build** (material master + consumption) |
| Delivery challan | ✔ | ✔ | ✔ | — | — | — | **Build** (eFlexo pattern, GST) |
| Invoice + GST (e-invoice later) | ✔ | ✔ | ✔ | ✔ | ✔ | offer/PI skill only | **Build** (study India Compliance models) |
| Payments/expenses/payroll | ✔ | ✔ | ✔ | ✔ | ✔ | expense, finance, hr, custodian ✅ | **Adopt own** |
| Retainer contracts | — | — | — | ✔ | ✔ | — | **Defer** |
| Dashboards/MIS reports | ✔ | ✔ | ✔ | ✔ | ✔ | per-PWA | **Adapt** (cross-schema views) |

---

## 10. Recommended action queue

1. **eFlexo trial captures** (§2.3) — time-boxed by the 45-day window; feeds `MDD_print_estimation.md`. ← *user action + CiC session*
2. **MDD program** — complete all 8 queues (running). Then a `job-spine` ADR unifying enquiry→invoice states across PWAs.
3. **Estimation engine v1** (print first, fabrication second) — schema per §2.2.
4. **Challan + GST invoice module** — study India Compliance app's models first.
5. **Events asset-booking schema** — RentalCore conflict view + QR labels.
6. **JWT/refresh ADR** — prerequisite for Flutter and better security anyway.
7. **Flutter PoC** — only after 1–6; pick counters or tour-pg.

## Sources (primary)
- Deep-research result JSON (23 fetched sources, stats, refuted list): session scratchpad `deep-research-result.json`
- eflexo.in (+features/about), techjockey.com/detail/eflexo, YouTube @eFlexoERPBillingSoftware
- printvis.com, Capterra PrintVis; ordant.com/print-mis; printplanr.com; ecerp.in; eresourceerp.com
- rentman.io/solutions/inventory-management; github.com/nbt4/rentalcore; LibreBooking
- github.com/frappe/erpnext; docs.frappe.io; docs.indiacompliance.app; github.com/resilient-tech/india-compliance
- github.com/Beveren-Software-Inc/Field_Service_Management; github.com/twentyhq/twenty; Dolibarr
- docs.flutter.dev/app-architecture/design-patterns/offline-first
- Flexo estimation: flexoexchange.com, blog.luminite.com, giugni.it, zeller-gmelin.us
