You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
sims-hq/docs/04-ROADMAP.md

126 lines
7.7 KiB
Markdown

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

# 04 — Roadmap
Assumes a core team of ~46 (23 app devs, 12 backend, 1 QA/support who knows Classic).
Durations stretch/shrink with team size; the **sequence and exit criteria** are the point.
Dates below start from project kickoff.
> ## ⚡ Staging update (founder call, 2026-07-09 — see D14)
> **Build the local product first; add the cloud tier afterwards.** Phase 1 ships a
> fully working local-only system: POS counters (SQLite buffer) + the existing in-store
> Oracle 12c as store master (D12), offline licensing as Classic does today, local +
> exported backups. The cloud tier (Postgres, sync agent, licensing service, auto-update
> channel) is stood up as its own workstream and switched on per store afterwards.
>
> **The one non-negotiable that makes this safe:** even in local-only v1, every write
> uses client-generated UUIDs and also writes its outbox row (dormant, drained by
> nothing). Cloud enablement then = install sync agent + drain backlog — a switch-on,
> not a data migration. Skip this and "add cloud later" becomes a second migration project.
>
> **Deferred until the cloud tier exists** (moves with it, not with the phase numbers
> below): owner mobile app, Purchase Inbox, WhatsApp e-bills/reminders, UPI webhook
> auto-confirm, central backups, silent auto-update, HQ fleet dashboards (the HQ *ops*
> console starts earlier — see the HQ Ops workstream below), e-Invoice via
> GSP (can interim-run through a manual portal flow if needed before then).
## Phase 0 — Prove the risky bits (46 weeks)
Goal: kill the project-killers before writing product code.
- **Sync spike**: two POS clients + cloud; bills offline on both, kill the network, sync,
verify stock & numbering correctness. Evaluate PowerSync/ElectricSQL vs custom outbox.
- **Hardware spike**: Electron app printing ESC/POS (2"/3"), cash-drawer kick, scanner
input, one weighing scale. This decides Electron vs Tauri (vs Flutter).
- **Billing engine v0**: pure-TS pricing/GST/rounding engine with golden tests derived
from real Classic bills (grab 100 real bills, new engine must reproduce them to the paisa).
- **Classic data audit**: map the Oracle schema; export 23 real customer datasets;
identify the ugly bits (they exist).
- **UX prototype**: clickable billing screen; put it in front of 3 real cashiers; time them.
- Founder decisions locked: 06-DECISIONS items D1D5.
**Exit criteria:** sync demo survives a pulled cable; printed bill from Electron; engine
reproduces Classic bills; stack decision written down.
## Phase 1 — MVP: one store bills on it all day (34 months)
Scope (all "M" items in [01-SCOPE.md](01-SCOPE.md)): masters + import, POS billing
offline with print, payments (cash/UPI-static/card/khata), returns, purchases (manual),
stock, day-end, party ledgers, GST invoice formats, core reports, users/roles/audit,
licensing skeleton, auto-update, cloud backup, **Classic migration tool alpha**.
**Pilot:** 35 friendly existing customers (one mini, one medium, one busy counter) run
Next **in parallel with Classic** for 2+ weeks, then cut over. Their cashiers' stopwatch
beats our opinions.
**Exit criteria:** a real store bills a full day with zero Classic fallback; migration
tool moves a real customer with verification report green; counter timing ≤ Classic.
## Phase 2 — Compliance depth + counter polish (23 months)
GSTR-1/3B exports, e-Invoice + e-Way via GSP, Tally export, schemes/offers, UPI dynamic
QR with auto-confirm, WhatsApp e-bills & khata reminders, multi-counter + Store Hub LAN
sync, weighing-scale barcodes, salesman tracking, accounting vouchers/day book,
multi-language UI (top 2 languages), onboarding wizard.
**Exit criteria:** a supermarket with 3+ counters runs through GST filing month entirely
on Next; dealer can onboard a new store without us on the call.
## Phase 3 — The differentiators (23 months)
**Purchase Inbox** (email/upload → AI parse → review queue → posted purchase, with
item-matching memory), GSTR-2B reconciliation, owner mobile app v1, stock-take mobile
scanning, dashboards & scheduled digests, loyalty, PO/GRN flow, expiry dashboards.
**Exit criteria:** ≥50% of pilot stores' purchase lines flow through the Inbox;
owner app DAU > 60% of owners.
## Phase 4 — Scale-out (ongoing)
Multi-store HO console, central pricing, inter-store transfers, consolidated reporting,
Enterprise onboarding for chains, API access, customer display/promo engine, offer
broadcasts, then evaluate: Android POS terminals, ONDC/e-commerce bridges, restaurant mode.
## Migration & go-to-market thread (runs across all phases)
1. Phase 1: migration tool + parallel-run playbook; migrate the 5 pilots.
2. Phase 2: dealer training kit, migration-week checklist, Classic price-lock offer;
migrate the top 20% (largest/most engaged) of the base.
3. Phase 3: mass migration waves by region with dealer incentives; Classic enters
maintenance-only mode (security/GST patches).
4. Phase 4: Classic sunset date announced — only after >80% of active base has moved
and Next's support ticket rate is demonstrably lower.
## HQ Ops workstream — the internal console (parallel track)
New workstream (founder call, 2026-07-09 — **D15 ✅ RESOLVED**, [06-DECISIONS.md](06-DECISIONS.md)):
build `apps/hq` per [14-SPEC-HQ-CONSOLE.md](14-SPEC-HQ-CONSOLE.md) — the
[doc-11 HQ Console](11-ADMIN-SUPPORT-CONSOLE.md) **started early**, aimed at the
**current ~300 Classic clients** (quotations/proforma/invoices in minutes, recurring
billing + reminders, AMC, per-client AWS cost, interaction log), replacing the internal
Oracle APEX app entirely. Runs **in parallel with Phases 04**, staffed lightly (~1 dev),
reusing the tested foundation packages (billing-engine, domain, ui, auth patterns) — it
doesn't compete with the product track for people.
**Reconciling with the staging note above:** this does **not** change D14 — the store
product stays local. The HQ Console is *vendor-side* cloud, which doc 11 already
prescribes. The **fleet half** (fleet dashboards, migration tracker UI, remote support)
still waits for the cloud tier as deferred above — only the **ops/billing slice** starts
now, on the same client registry the fleet features will later share.
| Phase | Ships (condensed from spec §6) |
|---|---|
| **HQ-1** | Skeleton + auth/audit; client registry (APEX import + verification); module catalog + module_price_book; client_module tracking; **quotation/proforma/invoice + letterhead PDF + Gmail send + payment recording** |
| **HQ-2** | Recurring plans + reminder engine (auto + manual queue); AMC contracts; money dashboard + follow-ups; interaction/visit/call/training log |
| **HQ-3** | AWS usage & cost per client + margin view; reports (dues aging, module revenue, client profitability); Client 360° polish |
| **HQ-4** | Convergence with doc-11 fleet features once SiMS Next ships — migration tracker, fleet dashboards, support queue on the same registry, no rebuild |
## Standing risks to watch
| Risk | Mitigation |
|------|-----------|
| Sync correctness bugs erode trust fast | Phase-0 spike, property-based tests, sync health dashboard, replayable op logs |
| New POS feels slower than Classic to veteran cashiers | Keyboard-first + "Classic keys" preset; measure per-bill timings in pilots; don't ship until ≤ Classic |
| GST rule changes mid-build | Rates/thresholds as dated config; GSP handles portal churn |
| Migration data horror stories | Verification report (counts, balances, stock match) per migration; parallel-run period mandatory |
| Scope creep from Classic parity ("but it had X") | Parity backlog triaged against usage data from Classic telemetry/pilots, not memory |
| Team spread across 4 surfaces | Phase 1 ships POS + minimal back office only; owner app waits for Phase 3 |