dealer-scheme-advisor/README.md
Yashas 134db9a06c Dealer Scheme Advisor console: dealer portal + supplier console over the Zino runtime
Vite + React + TS + Tailwind v4, runtime config.js and base-href contract
(same shape as HDFC-Loan-Desk). Dealer: home, place order with the scheme
engine live beside the form (query-kind record views over simulate()), orders
with the Advisor's advice and one-click confirm-as-advised, schemes with
progress to the next slab, incentives. Supplier: clusters + near-slab sweeps,
dealers and dealer 360, advisories, scheme catalogue with draft → Analyst
costing → approval, settlement runs with release/hold.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-22 16:38:05 +05:30

3.0 KiB

Dealer Scheme Advisor — console

The custom frontend for the Meru Cement · Dealer Scheme Advisor demo app on the Zino platform (dev: org 900000123 / app 900000123). Two personas behind one login:

  • Dealer portal (/d): this month at a glance, place an order with the scheme engine live beside the form, my orders with the Advisor's advice and one-click "take the advice", my schemes with progress to the next slab, incentives and credit notes.
  • Supplier console (/s, roles asm / rso_manager / ho_scheme_admin): clusters and the near-slab sweep, dealers and a dealer 360 with "ask the Advisor", advisories, the scheme catalogue with drafts → Analyst costing → RSO approval, settlement runs.

Vite + React 18 + TypeScript + Tailwind v4, built by frontgen on push. The platform config this talks to is seeded from sm2/custom-apps/dealer-schemes/.

Runtime contract (do not break)

  • VITE_ZINO_API_URL is read at runtime from config.js, which frontgen writes when it places the build (frontgen.projects.zino_api_url). Nothing is compiled in; one build is promoted between environments unchanged. For npm run dev the value comes from .env (copy .env.example).
  • The router basename comes from the <base href> frontgen writes into index.html (<!--BASE_HREF-->), and vite.config.ts keeps base: './'.
  • Every colour is a token in src/styles.css; dark mode redefines the tokens. No literal colours in components. Amber (accent) is reserved for money at stake; violet (ai) for what the AI wrote.

How the data flows

Need Call
Sign in POST /usr/login (org_id as a string) → JWT; GET /usr/me for roles
Who am I in the estate record view dsa-rv-portal_user (email → dealer code / territory)
Lists POST /app/900000123/view/recordview with rv_template_uid + search_query.filters (customer_no, rso_code, instance_id …)
The engine, live the same endpoint with params: dsa-rv-simulate (customer_no, hypo_json), dsa-rv-dealer_snapshot, dsa-rv-monthly_history, dsa-rv-upcoming_schemes — query-kind RDBMS templates over scheme_erp.simulate() and friends
Act POST /app/900000123/start / /activity with the activity's field keys; forms render from POST /app/900000123/view/form-screens (ActivityForm)
What the AI did /app/900000123/view/audit?instance_id= + /monitor/decisions?instance_id=

The AI never runs in the browser: placing an order creates a Draft, the trigger wakes the Scheme Advisor on the platform, and the order screen polls until the advice and the recommendation rows land.

Run

npm install
cp .env.example .env     # VITE_ZINO_API_URL=https://dev.getzino.in
npm run dev              # http://localhost:5175
npm run build            # tsc -b && vite build → dist/

Demo logins (password in the sm2 README): sharma@dealers.meru.example (dealer, the hero), rso.bengaluru@meru.example (RSO), asm.hubballi@meru.example (ASM), ho.schemes@meru.example (HO).