Swasti · mForm V2→V3

At a glance

Server

Frappe v16.13

Python + MariaDB. REST + WebSocket. Doctype-first schema. Workflow engine for follow-up status transitions.

  • frappe-mobile-control companion app
  • mobile_auth.* + mobile_sync.* APIs
  • Bulk-fetch endpoint for 500-record pages
  • Mobile Configuration Single Doctype
Mobile

Flutter + frappe-mobile-sdk

Offline-first. SQLite local store with queue-based sync. Dynamic form rendering from Frappe Doctype metadata — no code changes for new fields.

  • Branch: om/offline_improvement (v2.1.0)
  • Bulk-fetch: 500/page, full sync on login
  • Auth: JWT + refresh via mobile_auth.login
  • Geography: district → block → GP → village chain
Conversion

mform-to-frappe skill

Claude plugin skill. Turns V2 form JSONs into Frappe Doctype artefacts — 4 files per form.

  • 5 phases: prep → scaffold → field-map → validate → output
  • 7 recipes × 3 vendored skills, 82 files
  • Output: Doctype JSON + .py + .js + .dart
  • Gated per-form, not end-to-end automated
QA

Playwright + AI regression

Frappe web tests run in Playwright. Mobile regression on dedicated QA PC + emulator. AI-assisted chart spec for dashboards.

  • Dedicated PC + emulator (decision D10)
  • AI-driven regression on every APK build
  • Sachin owns first-run tests for new features
  • HS Test Cases → regression fixtures (A25)
Data source

mForm V2 (Diceflow v4.11.4)

13 V2 form JSONs (1000–1012, skip 1012 up-test). Content source only — PM sheet overrides V2 quirks. order is the universal join key across all forms.

  • Access method TBD: REST? DB dump? (A14)
  • Self-link: form 1011 closedItself terminal codes 2/4/5/12/13/14 on order 22
  • Three known dump gaps (forms 1008/1009/1012)
Reference

rel-mis Frappe app

Reference only — not template. The Reliance V3 deployment shows what production-grade looks like. Two deltas: simpler geography for Swasti, import-first bootstrap (no greenfield for existing programs).

Branch map

Repo Branch Role
frappe-mobile-sdk om/offline_improvement Flutter pub package. Mobile runtime — sync, auth, dynamic forms, SQLite.
frappe-mobile-control om/mobile-sync-bulk-fetch Frappe companion app. Server-side auth + sync + bulk-fetch APIs.
mform-to-frappe (Claude plugin skill) Conversion skill. Runs inside Claude Code session.

Key design constraints

  • PM design sheet is authority. V2 form JSONs are content source — where the two disagree, PM wins.
  • rel-mis is reference, not template. Geography model for Swasti is simpler (single location per user); no User Program Assignment multi-geography.
  • Offline-first on mobile. Sync queue holds mutations until connectivity restored. Conflicts resolved server-side.
  • Self-link collapse. mForm's follow-up response chains (form 1011 closedItself) collapse into Frappe-native audit log on the original record (D3).
  • Hidden member-ID carry-forward. Child forms (Scheme, Health, Document) prefill member geography at app layer, not data layer (D2).

Last updated 2026-06-05