What's pending across every project
10 open · sorted by priority then due-date
Filtered by tag walkin-qr clear
todo
high
TDD: Walk-in UPI QR Pay — final technical design document
After BRD + design review are locked, produce the formal technical design doc covering:
- Sequence diagram (customer → Razorpay → backend → OCPP → charger)
- Data model changes (schema migration text)
- API contracts (webhook handler, admin QR provisioning, guest-mode read endpoints)
- Idempotency + concurrency model
- Failure/retry semantics (webhook re-fires, gun offline, RemoteStart rejected, refund flow)
- SMS content + provider integration details
- Observability (metrics + logs to add)
- Test plan (unit + integration + one live pilot station)
- Rollout / rollback plan
- Estimated effort per phase
Commit finalized TDD to docs/TDD-walkin-qr.md in the backend repo. Only after this ships do we start implementation items.</body>
Vajra Volt Mobile App
· vajra-mobile-app
· by saravanan@scrumclaw.ai
42d ago
07-31 03:24
07-31 03:24
todo
high
Register DLT entity + SMS templates for walk-in flow (English/Hindi/Tamil/Telugu/Kannada)
DLT SMS registration is NOT done. 2–4 weeks external timeline. Track in parallel to Phase 1 build.
Templates needed (send via Fast2SMS post-approval):
- **wk_session_start** — "Vajra Volt: Charging started at {station}·Gun {gun}. ₹{reserved} reserved. Support: 88831-61155."
- **wk_session_low_balance** — "Vajra Volt: Wallet running low (₹{remaining}). Scan QR to add money and keep charging."
- **wk_session_end** — "Vajra Volt: Session complete. Used {kwh} kWh, cost ₹{cost}. Balance ₹{remaining}. Reply CLAIM to link this account."
- **wk_payment_gun_busy** — "Vajra Volt: Payment ₹{amount} received but Gun {gun} is unavailable. Amount saved to your wallet. Support: 88831-61155."
- **wk_refund_initiated** — "Vajra Volt: Refund of ₹{amount} initiated to your UPI. Reflects in 1–3 business days."
All 4 languages (Q11 answer). English variants can be filed immediately; regional translations need vendor.
Phase 1 launches WITHOUT SMS (see decision item). SMS goes live in Phase 1.5 once DLT approved.</body>
Vajra Volt Mobile App
· vajra-mobile-app
· by saravanan@scrumclaw.ai
40d ago
08-02 11:44
08-02 11:44
decision
high
Phase 1 launches WITHOUT SMS — LED-only confirmation, SMS in Phase 1.5
DLT registration is 2–4 weeks. Rather than delay walk-in launch, Phase 1 will ship with LED-based confirmation only:
- Customer knows charging started when the green LED on the gun activates (Q5 confirmed).
- No SMS on session start, low balance, or session end for Phase 1 walk-ins.
- App users still get all their existing notifications (unaffected).
- After DLT approval + template registration, Phase 1.5 patches SMS in as a config flip — no schema change needed.
Trade-off: walk-in session-end UX is worse. If a customer left their car and walked away, they won't know when charging finished. Mitigation:
- Set the 2-hour hard cap (Q6) so guns don't stay locked forever.
- Print the phone number on the QR sticker so customers can call to check status.
- Auto-stop threshold of ₹50 remaining (Q7) reduces the "session died silently" scenario for underpayers.
If DLT lands earlier than expected we'll enable SMS immediately.</body>
Vajra Volt Mobile App
· vajra-mobile-app
· by saravanan@scrumclaw.ai
40d ago
08-02 11:45
08-02 11:45
todo
high
Pilot: end-to-end test on real UPI apps (BHIM/GPay/PhonePe/Paytm) at VAJRA0001
Pre-launch gate for Phase 1. Test matrix:\n\n- App: BHIM, Google Pay, PhonePe, Paytm, WhatsApp Pay (5 apps)\n- Amount: ₹100, ₹500, ₹1000 (3 amounts)\n- Scenario: happy path, gun offline (simulate), gun already charging, RemoteStart rejected (simulate)\n\nTotal ~30 test runs at pilot station. Log any UPI-app-specific quirks (BHIM in particular has stricter parsing).\n\nWhoever pilots — use throwaway UPI-linked phone number so we can also validate the walk-in-user creation path (not an existing app user's phone).\n\nBlocked on Phase 1 implementation complete + QR sticker printed.</body>
Vajra Volt Mobile App
· vajra-mobile-app
· by saravanan@scrumclaw.ai
40d ago
08-02 11:53
08-02 11:53
todo
high
Ops: pilot station rollout at VAJRA0001 (2 QR stickers)
Physical rollout for Phase 1 pilot.\n\n- Confirm which station is the pilot (default VAJRA0001)\n- Send print design (#56) to signage vendor (#Q17 answer: existing vendor)\n- Receive 2 laminated A5 stickers (Gun 1 + Gun 2)\n- Physically apply to gun/panel\n- Coordinate with ops staff to be on-site during pilot testing window\n- Document station-owner communications (landlord awareness of pilot)\n\nBlocked on #56 (design finalized) + Razorpay QR issued (#52 + #61).</body>
Vajra Volt Mobile App
· vajra-mobile-app
· by saravanan@scrumclaw.ai
40d ago
08-02 11:53
08-02 11:53
todo
Design print-ready A5 QR sticker with station+gun ID + typical-cost hint
BRD Q8 spec locked:
- A5 landscape (5.8" × 8.3"), vinyl, laminated for outdoor durability
- Contents: Razorpay QR image (large, centered) + human-readable station+gun ID (e.g., "Vajra Volt · VAJRA0001 · Gun 2") + typical-cost hint ("Typical 30-min charge ≈ ₹150–300")
- Support phone number visible
- English only (Q20 answer)
- Print files: SVG + PDF at 300 DPI
- Vendor: existing signage vendor already identified (Q17)
Sample layout:
[ Vajra Volt logo ] [ QR CODE 4"x4" ]
VAJRA0001 · Gun 2
Scan any UPI app to pay
Typical charge ≈ ₹150–300
Support: 88831-61155
Deliverable: printable design ready for vendor.</body>
Vajra Volt Mobile App
· vajra-mobile-app
· by saravanan@scrumclaw.ai
40d ago
08-02 11:45
08-02 11:45
todo
SMS templates + Fast2SMS integration for walk-in (Phase 1.5)
Behind WALKIN_QR_SMS_ENABLED flag. 5 templates × 4 languages (see #53).\n\nBackend changes:\n- Templates stored in Go source (map[templateKey]map[lang]string) with DLT template IDs from #53\n- Language selection: prefer user.preferred_language if set; fallback to English\n- Dispatch service reuses existing Fast2SMS integration (already in codebase for OTP)\n- Fire-and-forget from webhook handler (async goroutine); log failures but don't block webhook response\n\nBlocked on DLT approval (#53).</body>
Vajra Volt Mobile App
· vajra-mobile-app
· by saravanan@scrumclaw.ai
40d ago
08-02 11:52
08-02 11:52
todo
Admin console: "list payments for QR" endpoint (Razorpay debug aid)
Useful for ops debugging (missing webhook, dispute lookup, reconciliation).
Wraps Razorpay:
GET https://api.razorpay.com/v1/payments/qr_codes/:qr_id/payments
Backend endpoint:
GET /admin/chargers/:charger_id/connectors/:connector_id/payments
Returns array of payments captured against that gun's QR (all-time), each with vpa, contact, email, amount, timestamp, status. Enables ops to answer "who paid at this gun today" without querying our DB.
Small addition to the admin endpoints in #65. Roughly 1 hour of Go + admin console UI work.</body>
scrumclaw#61scrumclaw#65
Vajra Volt Mobile App
· vajra-mobile-app
· by saravanan@scrumclaw.ai
40d ago
08-02 12:10
08-02 12:10
decision
Walk-in QR runs in-process in cmd/api, not as a separate walkin-service
Chose to mount walkin's routes on the main API router instead of deploying cmd/walkin-service on port 8082. Reason: Saravanan did not want two processes to supervise on a 2GB VM, and the "microservice" boundary was not real — same DB, same .env, same host, same webhook secret.
Commit c17a33a, merged to app as 3f826d7. cmd/walkin-service deleted in b3b0fa7 with docs updated.
Trade-off accepted: forwardWalkinQRCredit in wallet_handler.go still makes an HTTP round-trip to this same process (WALKIN_SERVICE_URL and API_BASE_URL both = http://127.0.0.1:8080). Both are deliberately loopback, NOT https://api.vajraev.com — routing back out through nginx during webhook handling can tie up nginx workers waiting on a process that is waiting on nginx.
Cleanup owed: collapse the self-call into a direct service-method call and drop both env vars. Deferred because it touches the payment path.
Whoever wrote cmd/walkin-service has NOT been told it was removed — worth asking whether there was a reason for the split that the docs never recorded.
internal/routes/routes.gointernal/handlers/wallet_handler.go::forwardWalkinQRCreditc17a33a3f826d7b3b0fa7
Vajra Volt Mobile App
· vajra-mobile-app
· by saravanan@scrumclaw.ai
from the conversationsaravanan: No lets merge it together - i dont want two different things
claude: Merging is ~6 lines — mount walkin's internal endpoint and health route on the main API router, and point WALKIN_SERVICE_URL at 127.0.0.1:8080. Honest tradeoff: it keeps a pointless HTTP round-trip to itself; the fully clean version deletes forwardWalkinQRCredit, which touches the payment path.
3d ago
09-07 22:19
09-07 22:19
note
low
Reference: Razorpay VPA + customer data extraction from qr_code.credited
Where to find each customer field in the qr_code.credited webhook payload. Confirmed from Razorpay official docs (docs/webhooks/qr-codes).
**Payload path for VPA:** `payload.payment.entity.vpa`
**Trimmed sample:**
```json
{
"event": "qr_code.credited",
"contains": ["payment", "qr_code"],
"payload": {
"payment": {
"entity": {
"id": "pay_HO2fEpc9JeOQU5",
"amount": 200,
"method": "upi",
"vpa": "gauri.kumar@okhdfcbank",
"email": "gauri.kumari@example.com",
"contact": "+919000090000",
"customer_id": "cust_HKsR5se84c5LTO",
"notes": {},
"acquirer_data": { "rrn": "116812981837" }
}
},
"qr_code": {
"entity": {
"id": "qr_HO2e0813YlchUn",
"notes": { "charger_id": "VAJRA0001", "connector_id": "2" }
}
}
}
}
```
**Two subtle gotchas:**
1. **Two separate `notes` blocks** — `payload.payment.entity.notes` is per-payment (usually empty for QR), and `payload.qr_code.entity.notes` is the QR's notes (where we set charger_id + connector_id at QR creation). Read the second one for gun identification.
2. **VPA presence:** always present for QR-triggered payments (method is always upi). Fallback: null.
**Go struct extraction:** see TDD §4.3 `qrCreditedPayload`.
**Fallback retrieval (webhook lost):**
- `GET /v1/payments/pay_XXX` — fetch single payment; includes vpa
- `GET /v1/payments/qr_codes/qr_XXX/payments` — list all payments for a QR (great for admin ops "show all payments to this gun")
Sources:
- https://razorpay.com/docs/webhooks/qr-codes/
- https://razorpay.com/docs/webhooks/payloads/payments/</body>
docs/TDD-walkin-qr-v0.md↗ https://razorpay.com/docs/webhooks/qr-codes/↗ https://razorpay.com/docs/webhooks/payloads/payments/
Vajra Volt Mobile App
· vajra-mobile-app
· by saravanan@scrumclaw.ai
40d ago
08-02 12:10
08-02 12:10