|
|
||
|---|---|---|
| src | ||
| .env.example | ||
| .gitignore | ||
| index.html | ||
| package-lock.json | ||
| package.json | ||
| README.md | ||
| tsconfig.app.json | ||
| tsconfig.json | ||
| tsconfig.node.json | ||
| vite.config.ts | ||
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_URLis read at runtime fromconfig.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. Fornpm run devthe value comes from.env(copy.env.example).- The router basename comes from the
<base href>frontgen writes intoindex.html(<!--BASE_HREF-->), andvite.config.tskeepsbase: './'. - 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).