Lendly — Functional specification
Version 1.0 · 01 November 2026 · India personal-loan MVP
1. Purpose and status
Design an original mobile borrowing experience and a lender operations console for a single-partner personal-loan product. Moneyview is a category reference, not an affiliation, licensed asset or copied interface. Its public personal-loan page illustrates an online application and cost-disclosure journey; our proposed limits and rates are independent assumptions. Reference: Moneyview.
This package is a medium-fidelity design handoff with offline simulations. It contains no backend, native application, real OTP, KYC, credit decision, signature, bank connection or payment capability. Do not enter actual personal information. State exists in browser memory and disappears on reload. The design-review rail can jump to any scenario; this is not a production permission model.
2. Proposed scope
| Item |
Proposed MVP decision |
Owner before production |
| Business model |
Lendly is an LSP/DLA interface for one regulated lender |
Business + lender |
| Customer |
Salaried adult residents meeting lender policy |
Lender credit/compliance |
| Channels |
Android and iOS mobile app; desktop operations console |
Product |
| Language |
English first; localization-ready |
Product |
| Loan |
Unsecured, fixed installment, INR only |
Lender |
| Illustrative range |
₹25,000–₹3,00,000; 6, 12, 18 or 24 months |
Lender; not an eligibility promise |
| Example pricing |
18% annual reducing interest; 2% processing fee; illustrative 18% tax on fee |
Lender + tax adviser |
| Limit |
One active application and one active loan per borrower for MVP |
Lender |
| Decision |
Provider checks plus lender assessment; manual review available |
Lender |
| Money |
Borrower and lender authorized accounts; no LSP wallet |
Lender operations |
Outside the first release: multiple-lender marketplace, self-employed underwriting, credit cards, BNPL, investments, insurance cross-sell, referral incentives, top-ups, co-lending, DLG arrangements and a new in-house core banking ledger. No approval-speed guarantee or preselected marketing consent.
3. Roles and responsibilities
| Role |
Responsibilities |
Restrictions |
| Borrower |
Apply, consent, verify, review, sign, repay, raise complaints |
Own records only |
| Credit maker |
Review lender-owned evidence and propose outcome |
Cannot confirm own proposal |
| Credit checker |
Independently approve or return maker proposal |
Distinct authenticated user; fresh evidence required |
| Operations |
Enquire transfers, reconcile receipts, manage authorized collections workflows |
Cannot change credit decision or bank details casually |
| Support |
Investigate assigned tickets and route corrections |
No unrestricted KYC document access |
| Auditor |
Inspect permitted evidence and audit history |
Read-only |
| Access administrator |
Manage role requests through approved workflow |
Cannot grant self elevated financial permissions |
Prototype role switching simulates different roles in one page. Production must use separate identities, MFA and backend authorization. The sample dashboard is illustrative; only APP-1042, its amount/decision, repayment state and created ticket have linked interactions.
4. Screen inventory and production behavior
| ID |
Screen |
Main action |
Success / exception |
| M01 |
Welcome |
Start application |
M02; disclose actual lender before application |
| M02 |
Mobile & OTP |
Verify registered mobile |
M03; wrong/expired code, cooldown and locked challenge |
| M03 |
Consent centre |
Authorize purpose-specific assessment |
M04; decline exits without application submission |
| M04 |
Your profile |
Save identity, occupation, income, location |
M05; validate age, name and serviceability server-side |
| M05 |
Choose your loan |
Select amount and tenor |
M06; outside policy range blocked |
| M06 |
Verify identity |
Launch lender KYC provider |
M07 or M19/manual review |
| M07 |
Verify income |
Authorize supported provider or alternative |
M08 or M19/manual review |
| M08 |
Bank account |
Verify ownership and submit |
M09; mismatched account needs correction |
| M09 |
Application tracker |
View actual lender state |
M10, M19 or M20; resume requested step |
| M10 |
Loan offer |
Inspect lender, principal, APR, net proceeds and costs |
M11; decline or M21 on expiry |
| M11 |
Key facts statement |
Read and acknowledge versioned lender KFS |
M12; missing acknowledgement blocks progression |
| M12 |
Agreement & mandate |
Sign and authorize separately |
M13 only after both server confirmations |
| M13 |
Transfer status |
Track lender disbursement |
M14 on settlement; unknown to operations, failure to recovery |
| M14 |
Loan home |
Inspect balance, next EMI and documents |
M15, M17, M18 or M22 |
| M15 |
Repayment schedule |
Inspect lender-issued amortization |
M16; documents available throughout loan life |
| M16 |
Pay installment |
Initiate payment through lender route |
Pending, confirmed, failed; receipt after confirmation |
| M17 |
Help & complaints |
Create and track ticket |
Reference, SLA and escalation route |
| M18 |
Privacy controls |
Revoke optional use or request review/deletion |
Purpose-specific response with retained-data explanation |
| M19 |
Action needed |
Retry affected step or request manual review |
Existing verified progress retained |
| M20 |
No offer available |
Correct information or contact support |
No promise of approval; policy-based future application |
| M21 |
Offer expired |
Request new assessment/offer |
Recheck consent; issue and acknowledge new KFS |
| M22 |
Cooling-off exit |
Request valid exit quote |
Pay exact lender quote; await confirmed closure |
The M11 disclosure is deliberately simplified for wireframe review. It is not a substitute for the prescribed KFS, full amortization schedule or an executed loan agreement. M14 and M22 can be opened as separate settled-loan and immediate-post-disbursement scenarios; the prototype does not enforce real elapsed time.
Admin workspaces
| ID |
Workspace |
Production purpose |
Prototype coverage |
| A01 |
Dashboard |
Intake, aging, collections and reconciliation visibility |
Sample metrics and queue links |
| A02 |
Applications |
Case evidence, requests, proposal and independent decision |
Linked APP-1042; maker/checker guards |
| A03 |
Customers |
Masked profile, consents, references and privacy requests |
One sample profile |
| A04 |
Disbursements |
Status enquiry, trace and reconciliation |
Unknown-status enquiry; no payout control |
| A05 |
Repayments |
Match receipts and detect duplicates |
Sample confirmation updates mobile installment |
| A06 |
Collections |
Assigned cases, borrower notice and contact history |
Separate overdue sample and audit event |
| A07 |
Support |
Complaints, investigation, escalation, resolution |
Sample ticket creation and resolution event |
| A08 |
Policy & access |
Versioned policy and role administration |
Read-only proposed policy and role boundaries |
| A09 |
Audit log |
Trace actor, event and evidence |
In-memory simulated events |
Production additions to each queue: server pagination, permitted search, assigned-user scope, date/status filters, meaningful empty/error states, permission-checked exports and case drill-down. These are specified, not fully implemented in the wireframe.
5. Functional flows
Borrower happy path
M01 Start → M02 OTP → M03 Consent → M04 Profile → M05 Amount/tenor
→ M06 Identity → M07 Income → M08 Bank ownership → Submit
→ M09 Lender review → M10 Offer → M11 KFS acknowledgement
→ M12 Agreement + mandate → M13 Disbursement pending
→ confirmed settlement → M14 Active loan → M15 Schedule
→ M16 Payment pending → verified settlement → Receipt / balance update
→ final confirmed allocation → lender closure → closure document
Production prerequisite: an application may reach an offer only after the lender's required assessment gates pass. A confirmed admin decision does not itself disburse funds. The customer may abandon before signing; application withdrawal and post-signing cancellation use lender-specific rules.
Credit review and exception flow
Submitted → Checks pending → Review queue
├─ Need information → borrower correction → recheck
├─ Provider issue → retry / manual review
└─ Maker proposal → independent checker
├─ Return → maker
├─ Decline → M20
└─ Approve → versioned offer
Every decision retains policy version, evidence references, reasons and actor identity. Material borrower changes invalidate stale evidence and any unaccepted offer when required. New proposal versions invalidate earlier checker requests. The server rejects a self-approval even when the UI is bypassed.
Funds and repayments
Accepted offer + verified KYC + bank + signature + mandate
→ lender payout request → submitted → pending / unknown
├─ confirmed failure → controlled retry
└─ confirmed settlement → active loan
Installment due → lender-authorized payment intent → pending
→ verified provider event + reconciliation → ledger allocation
→ borrower receipt → paid / partial / overdue according to ledger
An unknown transfer or payment is never automatically retried as a new financial instruction. A duplicate callback cannot create a second allocation. A reversal uses a compensating lender-ledger entry, not deletion. Manual matching requires authorized evidence and independent approval when value changes.
Servicing, complaints and privacy
Borrower request → ticket/reference → assigned owner → investigation → documented response → borrower acknowledgement or escalation. Complaints track receipt time separately from first response and resolution. Privacy requests have a separate purpose, legal-retention evaluation and completion record. Cooling-off exit uses an expiring lender quote, payment reconciliation and explicit closed confirmation. Foreclosure after that window follows the applicable lender product rules and is a separate implementation path.
6. State model
| Aggregate |
Allowed high-level states |
Critical rule |
| Application |
DRAFT, SUBMITTED, CHECKS_PENDING, ACTION_REQUIRED, IN_REVIEW, APPROVED, DECLINED, WITHDRAWN |
Terminal decisions require lender evidence; no client override |
| Verification |
NOT_STARTED, PENDING, VERIFIED, FAILED, MANUAL_REVIEW |
Verification is per type and per evidence version |
| Offer |
ISSUED, ACCEPTED, EXPIRED, DECLINED, SUPERSEDED |
Accept atomically only if valid and still current |
| Signature |
NOT_STARTED, PENDING, SIGNED, FAILED, EXPIRED |
Browser redirect alone does not mean signed |
| Mandate |
NOT_STARTED, PENDING, ACTIVE, FAILED, REVOKED |
Failed mandate blocks payout under proposed MVP policy |
| Disbursement |
CREATED, SUBMITTED, PENDING, UNKNOWN, SETTLED, FAILED, REVERSED |
Only confirmed settlement activates servicing |
| Loan |
ACTIVE, OVERDUE, EXIT_REQUESTED, CLOSURE_PENDING, CLOSED |
Closure requires lender confirmation and zero due under quote |
| Payment |
CREATED, PENDING, UNKNOWN, SETTLED, FAILED, REVERSED |
Allocation only once per unique settlement |
| Complaint |
OPEN, ASSIGNED, WAITING, RESOLVED, ESCALATED, CLOSED |
Escalation does not reset original receipt time |
7. Calculation example
For planning only: principal P = ₹1,00,000, nominal annual rate 18%, monthly rate r = 0.18/12, n = 12.
EMI = P × r / (1 − (1+r)^(-n))
Fee = P × 2%; illustrative fee tax = fee × 18%
Net proceeds = P − fee − tax
Total installments = unrounded EMI × n
Monthly cash-flow rate i solves:
Net proceeds = Σ[EMI / (1+i)^k], k = 1..n
Illustrative nominal annualized APR = 12 × i × 100
Prototype uses equal monthly periods with the first installment one month after disbursement; APR is illustrative. Production must use the lender-approved KFS calculation, actual dates, complete included charges, rounding and tax treatment. Store paise and fixed decimal rates; do not use JavaScript floating point for ledger posting. The final installment absorbs agreed rounding adjustments. Displayed whole-rupee figures may differ slightly from exact totals.
8. Experience and accessibility requirements
Use plain language and disclose the lender, costs and pending status at the decision point. Each control needs an accessible name; production targets WCAG 2.2 AA, keyboard support for admin, screen reader semantics, dynamic type, visible focus and 44px touch targets. Status uses text as well as color. Support back/resume without repeating completed checks, and announce errors near the relevant field. Do not clear borrower entries on provider failure. The design rail and simulation controls disappear from the native app.
9. Regulatory design checkpoints
The following is a scoped reference summary, not a complete compliance assessment. Confirm current applicability with the lender before launch.
RBI’s 2025 Digital Lending Directions address lender/LSP oversight, borrower disclosures, direct lender–borrower fund flows, grievance handling and purpose-specific consent. The design should provide a cooling-off exit, minimize LSP data storage, avoid access to contacts/call logs and use India-hosted data. The lender remains responsible for outsourced activity. Multi-lender matching has additional display requirements and is outside this MVP. RBI Digital Lending Directions, 2025.
The KFS circular addresses standardized borrower disclosures, APR computation, acknowledgement and an amortization schedule. For loans of seven days or longer, the KFS validity period is at least three working days; shorter loans have a one-working-day minimum. Implement lender-approved validity and document generation rather than copying the prototype’s seven-day example. RBI KFS circular, 15 April 2024.
Other launch reviews: applicable KYC/AML rules, privacy and data-protection obligations and their commencement status, communications consent, credit-information reporting, outsourcing/cybersecurity, recovery conduct, tax, e-sign validity and applicable prepayment rules. These reviews are unresolved dependencies, not certified features of this package.
10. Acceptance scenarios for production
| Scenario |
Expected result |
| Wrong or expired OTP; resend flood |
Clear error, rate limit, expiring challenge; no session issued |
| Required assessment consent declined |
No bureau/income request made; marketing stays independent |
| Reload or app killed after saved step |
Resume from authenticated server draft |
| Out-of-range amount, future DOB, invalid PAN or unsupported location |
Backend rejects with safe field-level error |
| KYC failure or unsupported bank |
Specific retry/alternative route; progress preserved |
| Another customer’s application ID requested |
Access denied without data leakage |
| Maker tries to approve own proposal |
Backend denies; audit records attempt |
| Two checkers confirm different versions |
Only current version can succeed atomically |
| Offer expires while borrower reads KFS |
Acceptance rejected; refresh and new acknowledgement required |
| e-sign return arrives before provider callback |
Signature remains pending |
| Payout request times out |
UNKNOWN; enquiry with original reference; no new payout |
| Duplicate or late settlement callback |
One allocation; monotonic status or explicit reversal |
| Partial payment or reversal |
Lender schedule/ledger determines revised due; no false paid state |
| Consent revoked or deletion requested with active loan |
Explain permitted retention; route to lender; preserve obligations |
| Complaint remains unresolved |
Original receipt time and applicable escalation route retained |
| Last installment / cooling-off amount reconciles |
Close only on lender confirmation; issue closure record |
11. Delivery phases and open decisions
- Product and lender alignment: validate customer segment, lending contract, credit rules, fees, KFS, collections, privacy and support responsibilities.
- UX refinement: usability-test these flows, finalize design system, error copy, native navigation, localization and accessible high-fidelity screens.
- Sandbox implementation: OTP, consent, applications, provider adapters, review, document/signature, mandate and status flows.
- Financial operations: lender disbursement adapter, schedule mirror, repayments, reconciliation, complaints and reporting.
- Controlled pilot: security assessment, restore exercise, lender UAT, operational training, support readiness and limited rollout.
A team capacity plan and vendor sandbox access are required before estimating calendar dates or cost. No delivery timeline is promised in this package.
Decisions still needed: legal entity and lender; age/income/serviceability thresholds; provider list; exact interest/fees; KFS and exit terms; retention schedule; underwriting authority; bank and collection arrangements; complaint contacts; languages; expected volumes; native release targets and hosting contracts. The defaults above are proposals that make the wireframes reviewable.
Lendly — Technical design and implementation handoff
Version 1.0 · 01 November 2026 · Proposed architecture; not deployed
1. Architecture decision
Use a modular backend for the MVP instead of independently deployed microservices. Separate application/consent, verification, offers/documents, operations and servicing modules by interfaces and database ownership. Split services only when load, isolation or team ownership justifies the overhead.
Two deployment domains are essential. The LSP domain handles minimal profile/contact data, user experience, references and scoped workflow coordination. A lender-owned or lender-controlled domain owns sensitive assessment/KYC evidence, issued offers, financial instructions and the authoritative ledger. Contractual permission and legal review determine exact boundaries; hosting a database in India alone does not authorize unrestricted LSP storage.
Borrower mobile app Operations browser
│ │
├──── LSP edge / API gateway ────────────┤
│ Auth, minimal profile, ticket routing,
│ consent UI references, status projection
│ │ mTLS / scoped API
└──────────── LENDER CONTROLLED DOMAIN ────────────┐
Application workflow │
Verification adapters │
Credit review + policy versions │
Offer / KFS / document signing │
Payout & repayment orchestration │
Ledger / LOS / LMS integration │
│ │
PostgreSQL + outbox + job worker │
Encrypted document vault │
│ │
Authorized external providers ◄───────┘
OTP · KYC · bureau · income · signing
mandate · bank / payment rails
Funds: lender account ⇄ verified borrower account
No funds pass through the LSP application or its accounts.
The diagram is a proposed ownership model, not an assertion that every lender offers these APIs. Agree an integration boundary with the selected lender first. Browser/mobile clients never carry provider secrets or directly trust redirect parameters.
2. Proposed stack
| Layer |
Recommendation |
Rationale |
| Mobile |
React Native + TypeScript |
Shared Android/iOS product logic; validate provider SDK support |
| Admin |
React + TypeScript |
Component reuse, accessible case workflows |
| Backend |
NestJS + TypeScript modular application |
Explicit modules, guards, validation and adapter boundaries |
| Transaction store |
Managed PostgreSQL in India |
Transactional state, constraints and durable workflow records |
| Async work |
Durable queue and worker with transactional outbox |
Reliable delivery and controlled retries |
| Documents |
India-region private object store with key management |
Versioned lender-controlled evidence and short-lived retrieval |
| Identity |
Borrower OTP/session service; workforce OIDC + MFA |
Separate consumer and operator trust boundaries |
| Observability |
Structured logs, metrics, traces and alert routing |
Correlation without exposing raw PII |
These are proposed engineering choices, not user-mandated technologies. Pin supported stable versions after checking lender SDKs, security maintenance and native build compatibility. This package deliberately does not guess a dependency lockfile.
Official implementation references: React Native, NestJS, PostgreSQL transaction isolation. PostgreSQL documents concurrency behavior; choose explicit locking/version checks for decision and financial transitions rather than assuming a read followed by write is atomic.
3. Modules and contracts
| Module |
Inputs |
Outputs / responsibility |
| Authentication |
OTP challenge or workforce token |
Identity, session, role and lender/customer scope |
| Consent |
Purpose, notice version, recipients, action |
Immutable evidence reference and current grant projection |
| Application |
Profile reference, requested amount/tenor |
Versioned draft, status and submission validation |
| Verification |
Application version and valid consent |
Provider reference, result, expiry, manual-review reason |
| Credit review |
Current evidence and policy version |
Maker proposal and independent lender decision |
| Offers |
Lender decision, pricing and schedule |
Versioned offer, KFS and expiry |
| Contracting |
Accepted offer and acknowledgements |
Signature reference, mandate reference and verified status |
| Money movement |
Fully satisfied lender release gates |
Idempotent payout/payment instruction and enquiry status |
| Servicing projection |
Lender ledger/schedule events |
Customer-visible due, receipt and status; no independent ledger truth |
| Complaints/privacy |
Request, requester and scope |
Case, ownership, deadline, response and evidence |
| Audit/reporting |
Authorized command/event |
Append-only activity and controlled exports |
Keep lender-specific integration DTOs inside adapters. Normalize states into the documented application model while preserving raw provider status in the lender-controlled event record.
4. Data model and ownership
All identifiers are UUIDs or opaque lender references. Every applicable record includes lender_id, timestamps, version and provenance. Store money as integer paise in bigint; rates as fixed decimal. Record timestamps in UTC and display borrower schedules in the lender's business timezone, proposed Asia/Kolkata. Encrypt sensitive columns with managed keys and rotation policy.
| Entity / key |
Essential fields and relationships |
Storage owner |
| Customer / id |
auth_subject, masked contact, lender_customer_ref |
LSP minimal permitted data; lender full customer |
| ConsentEvent / id |
customer_id, purpose, recipient_set, notice_version, action, recorded_at, evidence_ref |
Lender evidence; LSP scoped reference |
| Application / id |
customer_id, amount_paise, tenor_months, profile_ref, status, policy_version, version |
Lender authoritative; LSP status/reference |
| Verification / id |
application_id, kind, provider_ref, status, evidence_version, expires_at |
Lender; provider-controlled raw evidence |
| BankAccount / id |
customer_id, provider_token, last4, match_status, verified_at |
Lender vault; masked LSP reference if permitted |
| DecisionProposal / id |
application_id, application_version, maker_user_id, outcome, reason_code, evidence_hash |
Lender |
| Decision / id |
proposal_id, checker_user_id, outcome, policy_version, decided_at |
Lender |
| Offer / id |
application_id, principal, rate, fees, tax, apr, net_disbursal, expires_at, version, status |
Lender |
| Document / id |
offer_id, type, storage_key, sha256, version, delivered_at |
Lender-controlled vault |
| Acknowledgement / id |
document_id, customer_id, hash, notice_version, accepted_at |
Lender |
| Signature / id |
offer_id, provider_ref, status, signed_document_ref |
Lender |
| Mandate / id |
bank_account_id, provider_ref, max_amount, frequency, status |
Lender |
| Disbursement / id |
offer_id, unique_instruction_ref, net_amount, provider_ref, status |
Lender |
| Loan / id |
customer_id, lender_loan_ref, offer_id, status, disbursed_at |
Lender; scoped servicing mirror |
| Installment / id |
loan_id, sequence, due_date, principal, interest, amount_due, settled_amount |
Lender schedule/ledger |
| Payment / id |
loan_id, installment_id, intent_ref, provider_ref, amount, status |
Lender |
| Allocation / id |
payment_id, installment_id, amount, lender_ledger_ref |
Lender; unique ledger posting reference |
| Ticket / id |
customer_ref, category, received_at, status, assignee, response_ref |
Approved service scope; avoid raw KYC attachments |
| PrivacyRequest / id |
customer_ref, purpose, requested_at, retention_decision, completed_at |
Lender decision; routed LSP reference |
| ProviderEvent / id |
provider, event_id, raw_hash, signature_result, processing_status |
Lender inbox; unique provider/event pair |
| AuditEvent / id |
actor, role, resource_ref, action, reason, request_id, occurred_at |
Append-only, access-controlled |
Relationships: Customer 1:N Application; Application 1:N Verification/Proposal/Offer; Offer 1:N Documents and 0:1 settled Loan; Loan 1:N Installments/Payments; Payment 1:N Allocations. Support ticket references a customer and optional application/loan, without duplicating sensitive evidence.
Constraints: one active application/loan per borrower according to policy; one accepted current offer; unique payout instruction per offer; unique provider event; unique lender-ledger posting reference. Enforce financial and version constraints in the database, not only form validation. Maintain current status projections separately from immutable events.
5. API conventions and draft contract
api-contract.json is an OpenAPI 3.1 draft describing the principal borrower/admin resources. It is a starting contract, not a deployed endpoint set or a complete vendor specification. Its example server uses the reserved .invalid domain. Application authentication uses bearer tokens; workforce tokens require a separate audience and role/tenant verification.
Amounts are integer INR paise, never formatted strings. IDs are opaque. List responses use bounded cursor pagination. All state-changing business requests carry Idempotency-Key; sensitive commands require an expected resource version. Provider callbacks use provider-specific signatures over the raw body with replay checks and are specified separately from bearer authentication.
Representative operations include OTP challenge/verification, draft creation/update/submission, consent events, verification sessions, current offers, offer acceptance, contracting sessions, application status, loan/schedule retrieval, payment intents, exit quotes, tickets, privacy requests, admin proposals/confirmations and reconciliation enquiries. The contract labels actor scopes and includes conflict, auth, validation and throttling errors.
{
"error": {
"code": "OFFER_EXPIRED",
"message": "This offer has expired. Request a refreshed offer.",
"requestId": "opaque-correlation-id"
}
}
Error classes: 400 malformed request; 401 invalid authentication; 403 resource/role denied; 404 absent or deliberately concealed resource; 409 version/idempotency/state conflict; 422 business validation; 429 throttled; 503 temporary dependency unavailability. Never expose stack traces, bureau details or provider secrets in errors.
6. Critical transactional sequences
Decision confirmation
Verify workforce identity, checker scope, lender scope and checker_user_id != maker_user_id. In one transaction lock the application, compare expected version and proposal status, verify current evidence/policy and commit decision, new version, audit event and outbox event. A repeated idempotency key with the same body returns the prior result; a changed body returns conflict. A stale proposal cannot be confirmed after borrower data changes.
Offer acceptance and contracting
The server checks borrower ownership, current offer, expiry, required acknowledgement/document hash and application validity atomically. Persist acceptance and contracting request before contacting providers through a worker. Signature and mandate are separate records. Revalidate the final disbursement gates against the accepted offer and verified provider results. A button tap or provider redirect is never a trusted completion event.
Financial instruction and webhook processing
Create a unique instruction and outbox message in a transaction. Worker sends the instruction with a stable provider reference; persist attempts. A timeout becomes UNKNOWN and triggers enquiry against that reference. Verified events enter a durable inbox with unique provider/event ID before asynchronous processing. Acknowledge successful receipt only after durable persistence; repeated valid deliveries return success without duplicate effects. Check monotonic state rules, amount, currency and reference; send conflicting events for investigation.
After provider confirmation, reconcile with lender settlement/ledger evidence. Post one allocation or store the authoritative lender posting reference, then update the servicing projection and emit the receipt notification. Reversal is explicit and compensating. A failed callback arriving after settlement cannot erase a paid status. Network retries must never invent a new payout reference.
Privacy and document handling
Validate requester, purpose and lender scope. Route privacy changes to the lender and provide a request reference. A deletion request creates a case; retention decisions are recorded per data category. Do not promise immediate erasure of loan records. Documents use hash/version binding and short-lived, scope-limited retrieval; no public URLs or KYC attachments in support email.
7. Security and deployment
Use TLS for clients, mTLS or equivalent service authentication where supported, secret storage with rotation and separate development/test/production credentials. Workforce MFA and least privilege are mandatory proposed controls. Validate ownership for every resource, prevent object-level authorization bypass, sanitize uploads inside lender-approved flows and redact PII/tokens from analytics and logs. Mobile tokens belong in platform-protected storage; clear sessions on logout and support session revocation.
Host approved data stores, backups, logs, observability and document processing in contracted India locations. Review telemetry vendors and support access as part of the same boundary. Infrastructure should use separate accounts/projects, private databases, restricted egress, encrypted backups and audited privileged access. Keep production customer data out of development environments.
The prototype stores no real records and has no security boundary. Do not deploy it as a borrower-facing loan application. Its role picker and rail are review controls.
8. Operational targets and observability
Proposed pilot targets, subject to capacity and lender agreements: 99.5% monthly availability for owned non-provider services; p95 under 700ms for simple owned API reads at 50 requests/second; no synchronous provider latency promise. Load-test the agreed traffic model before accepting these targets. Initial recovery objectives: RPO 15 minutes and RTO 4 hours, proven by restore exercises and reconciled against lender financial records.
Track application conversion by step without raw PII, provider success/latency, stale reviews, expiring offers, unknown payout age, unreconciled receipts, duplicate callbacks, queue lag, complaint age and notification failures. Alert on financial mismatches and persistent unknowns; identify an on-call owner and runbook for each. Dashboard reporting must distinguish counts of attempts, unique borrowers, approved applications and settled loans.
Runbooks: provider outage pauses new affected steps while preserving drafts; unknown payout opens enquiry and blocks duplicate issue; settlement mismatch goes to authorized operations; compromised credential triggers revocation, investigation and applicable reporting; restore test replays only deduplicated durable events and checks lender ledger consistency.
9. Implementation phases and verification
| Phase |
Deliverable |
Exit evidence |
| Foundation |
Identity, scopes, consent, draft persistence, schema, audit |
Ownership/role tests and consent evidence review |
| Assessment |
KYC/income/bureau adapters, requests, maker/checker |
Provider sandbox results; self-approval/version-race tests |
| Contracting |
Pricing, KFS, acknowledgement, e-sign, mandate |
Golden lender fixtures; expiry/hash/callback ordering tests |
| Servicing |
Payout, schedule mirror, payment, reconciliation |
Timeout/duplicate/reversal/partial-payment scenarios |
| Operations |
Complaints, privacy, reporting, controlled exports |
Role-scope UAT, retention and grievance exercises |
| Pilot |
Hardened native/admin build, monitoring and runbooks |
Pen test fixes, restore drill, lender signoff, rollback rehearsal |
Use unit tests for pricing/state guards, contract tests for each adapter, integration tests for transaction/idempotency behavior and end-to-end tests for borrower and operator journeys. Include concurrent checker approval, cross-customer access, revoked consent, expired KFS, provider callback replay and orphaned payment recovery. A passing UI test cannot demonstrate regulatory compliance or real bank settlement.
For the delivered wireframe package, verify JavaScript syntax, screen render/navigation, calculator sensitivity, consent and acknowledgement guards, role-based proposal confirmation, linked application status, settlement deduplication, local document links and narrow viewport layout. Production criteria above remain implementation work.
10. Dependencies and decision register
Before engineering estimates: choose the lender/LOS/LMS and clarify APIs, identity/KYC route, bureau permissions, income provider, signing, mandate, bank rails, notification provider and service-level agreements. Obtain approved fee/tax fixtures, actual KFS/agreement templates, credit-policy versions, complaint ownership and a record-retention schedule. Confirm which domain may store each field.
The API contract intentionally uses generic verification/contracting adapters until vendor selection. Vendor signature algorithms, callback schemas, request credentials, bank settlement formats and detailed decision engine rules cannot be finalized without those agreements. No hidden real providers or credentials are included.
Regulatory basis and remaining legal reviews are in the functional specification. This document is an engineering proposal and does not certify licensing or compliance.