Product Setup

Loan Product Setup Guide

This guide explains how to configure loan products in the Hiana Loans system. Each product type has different requirements — this document covers the configuration layers, recommended settings, and the order of operations.

For employer-backed lending, use the complete employer-backed configuration and acceptance guide. It supersedes abbreviated workflow examples and documents employer-request delivery controls and deployment requirements.


Table of Contents

  1. Prerequisites
  2. Configuration Layers
  3. Product Types Overview
  4. Nano Loan Setup
  5. Employer-Based Loan Setup
  6. Traditional Loan Setup
  7. Payment Config & Schedule Shape
  8. Floating Rate Config
  9. Staged Disbursement
  10. Conditional Workflow Steps
  11. Post-Setup Verification
  12. Configuration Reference

For post-disbursement operations (waivers, top-ups, delinquency pause, re-aging, maker-checker, repricing), see the Loan Servicing Operations Guide.


Prerequisites

Before creating any loan product, ensure the following are in place:

  • Jurisdiction — A jurisdiction record must exist first. Products reference a jurisdiction_id. Create jurisdictions via POST /api/v1/jurisdictions.
  • Currency Code — Know the ISO 4217 currency code for the product (e.g., KES, USD, ZMW).
  • GL Accounts — If using internal accounting, have account codes ready for fee mapping and interest income tracking.
  • Permissions — The user creating products must have product.create for creation and product.update for configuration.

Configuration Layers

Each product requires multiple layers of configuration. Create them in this order:

LayerEndpointPurpose
1. Base ProductPOST /api/v1/productsCore loan terms — amounts, term, interest, repayment
2. FeesPOST /api/v1/products/:id/feesOrigination, processing, insurance, late payment fees
3. Credit Risk ConfigPUT /api/v1/products/:id/config/credit-risk5-pillar scoring weights, DTI limits, auto-approve/decline thresholds
4. Approval ConfigPUT /api/v1/products/:id/config/approvalWho approves, at what amount threshold, in what sequence
5. Intake ConfigPUT /api/v1/products/:id/config/intakeDocument KYC, selfie verification, face match requirements
6. Required DocumentsPUT /api/v1/products/:id/config/documentsDocument checklist per workflow stage
7. Form ConfigPUT /api/v1/products/:id/config/formWhich fields to render in the application form
8. Disbursement ConfigPUT /api/v1/products/:id/config/disbursementDisbursement channel (bank, mobile money, etc.), staged disbursement
9. Payment ConfigPUT /api/v1/products/:id/config/paymentAllocation order, partial payments, prepayment recalc strategy, schedule shape
10. Floating RatePUT /api/v1/products/:id/config/floating-rateOptional — index + spread pricing for floating-rate products
11. Rate TiersPOST /api/v1/products/:id/rate-tiersOptional — for risk-based pricing tiers
12. Workflow draftPUT /api/v1/products/:id/config/workflowStep types, modes, handlers, roles and rework
13. Publish workflowPOST /api/v1/products/:id/config/workflow/publishValidates dependencies and publishes the immutable application sequence

Product Types Overview

The system supports the following product types:

TypeCodeTypical Use Case
PersonalPERSONALGeneral consumer loans, employer-based loans
BusinessBUSINESSSME and corporate loans
MortgageMORTGAGEHome loans (long-term, secured)
AutoAUTOVehicle financing
EducationEDUCATIONSchool fees loans
PaydayPAYDAYShort-term salary advance
MicrofinanceMICROFINANCESmall group or individual loans
NanoNANODigital micro-loans with credit limits

Application workflow contract

Updated: 11 September 2026. Commercial values elsewhere in this guide are illustrative configurations; apply your approved policy. Supported setup requires the UI choice, save schema, backend task type, handler and operational screen to agree.

Task type (dropdown displays spaces)Supported mode/handlerCompletion
DOCUMENT_UPLOADMANUALRequired application-linked document references
DOCUMENT_REVIEWMANUALVerify active mandatory document quantities in /admin/documents/queue
KYC_CHECKMANUAL, or AUTOMATED / kyc_verificationProduct-specific identity requirements; review via /admin/kyc-verifications
FRAUD_CHECKAUTOMATED / fraud_screeningSuccessful fraud check; errors require investigation/retry
CREDIT_CHECKAUTOMATED / credit_decisionRecorded credit assessment, followed by review
UNDERWRITINGMANUALClaim/save/finalize assessment on Application → Workflow
OFFER_PROPOSALMANUALPrepare offer and obtain acceptance on Application → Term Proposals / borrower portal
OFFER_ACCEPTANCEMANUALOptional separate acceptance stage; do not duplicate the combined offer stage in the baseline
CONSENT_CAPTUREMANUALCapture active required application consent templates
AGREEMENT_GENERATIONMANUALGenerate agreement for accepted proposal and obtain required signatures
APPROVALAPPROVAL / explicit levelConfigured role, independent checker and level quorum

DISBURSEMENT is a linked workflow after origination, not an application step. The old auto_disburse preset cannot complete the application journey: it expects a loan to exist and creates a request rather than confirming funds transfer. New draft/save validation rejects it under any step key.

The traditional baseline is document upload → document review → KYC → automated credit → underwriting → offer acceptance → consent → signed agreement → final approval. Employer-backed products insert employer approval before credit and use a separate final lender level. Nano products use the nano template, including fraud screening and review. These are unconditional baseline sequences.

For automatic document correction, configure document_review rework to document_upload, reason DOCUMENT_NEEDS_CORRECTION, notes and borrower action required, permitted reviewer roles. The normal document approval endpoints write review audit history and synchronize the currently waiting document task. Generic completion commands cannot substitute for the evidence-producing actions above.

Keep identity policy distinct from onboarding and file approval. Configure document KYC, selfie, face matching and freshness to match the product. A document-only product does not require a selfie unless enabled; selfie-only verification must not enable face matching. IN_REVIEW means required identity work is pending. Neither document approval nor onboarding_status establishes missing face-match evidence.

Save dependent document, consent, approval and other product settings before publication. New applications freeze the published version; publishing does not modify existing task lists. After final approval, origination requires matching accepted terms and a fully signed agreement. Funding, repayment and closure have their own operational checks.


1. Nano Loan

Nano loans are short-term, small-ticket digital loans with minimal documentation and fast approval.

Base Product

POST /api/v1/products
FieldValueNotes
product_typeNANORequired
term_unitDAYSNano loans use days
min_term77 days minimum
max_term3030 days maximum
min_amount500Adjust per market
max_amount10,000Adjust per market
base_interest_rate5–15Monthly rate
interest_rate_periodMONTHLYRate quoted per month
interest_rate_typeFIXEDFixed rate for short term
interest_calculation_methodFLATSimple flat interest
interest_accrual_frequencyDAILYAccrues daily
interest_capitalization_frequencyNONENo compounding
repayment_frequencyDAILY or WEEKLYFlexible repayment
day_count_conventionACT/365Actual days / 365
grace_period_days3Short grace period
default_days7Quick default for short-term
requires_collateralfalseUnsecured
requires_guarantorfalseNo guarantor
requires_guaranteefalseNo guarantee
allows_early_settlementtrueAllow early payoff
early_settlement_penalty_rate0No penalty
initial_credit_limit2,000Starting credit limit for new borrowers
allow_daily_repaymenttrueEnable daily repayment option
open_lending_rate_multiplier1.0No multiplier (no guarantee needed)

Fees

Fee TypeCalculationCollectionMandatoryNotes
ORIGINATION2–5% PERCENTAGEDEDUCT_FROM_DISBURSEMENTYesDeducted from loan amount
LATE_PAYMENTFixed amountADD_TO_BALANCENoAdded to balance on late payment
INSURANCESmall fixed or %DEDUCT_FROM_DISBURSEMENTNoOptional credit life insurance

Credit Risk Config

SettingValueRationale
score_weight_repayment_behavior0.30Slightly lower — limited history
score_weight_debt_capacity0.25Balanced
score_weight_credit_history0.20Higher weight — transaction history matters
score_weight_financial_strength0.10Less relevant for small loans
score_weight_behavioral0.15Higher — mobile behavior is key
minimum_loan_term3Short loans, 3-month minimum for DTI calc
max_debt_to_income_ratio0.50More lenient for small amounts
requires_credit_bureau_checkfalseNot required for nano
requires_fraud_checktrueAlways check fraud
auto_approve_min_score650Approval-decision score threshold; final workflow approval still required
auto_approve_max_amount5,000Maximum amount for an approval decision; not automatic origination
auto_decline_max_score450Decline-decision threshold; staff review the recorded outcome

Approval Config

  • Level 1: OPERATIONS_MANAGER, required count 1 in the reference nano setup. Scoring thresholds produce decision evidence; they do not replace the final approval task. See the nano guide for the complete sequence.

Intake Config

SettingValueNotes
require_document_kycfalseLightweight — no document KYC
require_verified_selfietrueBasic identity verification
require_face_matchfalseNot required for nano
require_manual_selfie_reviewfalseAutomated only
employment_freshness_days90If employment data is collected
financial_freshness_days30If financial data is collected

Required Documents

Nano loans typically require minimal documents:

  • NATIONAL_ID — mandatory, stage: DOCUMENT_UPLOAD

2. Employer-Based Loan

Employer-based loans are repainted through salary deductions, with the employer providing a guarantee.

Base Product

POST /api/v1/products
FieldValueNotes
product_typePERSONALPersonal loan type
term_unitMONTHSMonthly terms
min_term33 months minimum
max_term1212 months maximum
min_amount5,000Adjust per market
max_amount100,000Adjust per market
base_interest_rate12–24Annual rate
interest_rate_periodANNUALRate quoted per year
interest_rate_typeFIXEDFixed for employer loans
interest_calculation_methodREDUCING_BALANCEStandard reducing balance
interest_accrual_frequencyMONTHLYMonthly accrual
interest_capitalization_frequencyNONENo compounding
repayment_frequencyMONTHLYMonthly repayment (salary deduction)
day_count_conventionACT/365Actual days / 365
grace_period_days7One week grace
default_days3030 days to default
requires_collateralfalseUnsecured — employer guarantees
requires_guarantorfalseEmployer guarantee replaces guarantor
requires_guaranteetrueEmployer guarantee required
allowed_guarantee_types["EMPLOYER_GUARANTEE"]Only employer guarantees
default_guarantee_typeEMPLOYER_GUARANTEEDefault to employer
open_lending_rate_multiplier1.5Higher rate without guarantee
allows_early_settlementtrueAllow early payoff
early_settlement_penalty_rate22% penalty for early settlement

Fees

Fee TypeCalculationCollectionMandatoryNotes
ORIGINATION2–3% PERCENTAGEDEDUCT_FROM_DISBURSEMENTYesStandard origination
PROCESSINGFixed amountDEDUCT_FROM_DISBURSEMENTYesProcessing fee
LATE_PAYMENTFixed or %ADD_TO_BALANCENoPenalty for late payment
INSURANCEOptionalDEDUCT_FROM_DISBURSEMENTNoCredit life insurance

Credit Risk Config

SettingValueRationale
score_weight_repayment_behavior0.35Standard weight
score_weight_debt_capacity0.30Standard weight
score_weight_credit_history0.15Standard weight
score_weight_financial_strength0.15Standard weight
score_weight_behavioral0.05Standard weight
minimum_loan_term66-month minimum for DTI calc
max_debt_to_income_ratio0.4040% DTI max
requires_credit_bureau_checktrueBureau check recommended
requires_fraud_checktrueAlways check fraud
auto_approve_min_score700Approval-decision score threshold; final workflow approval still required
auto_approve_max_amount50,000Maximum amount for an approval decision; not final approval
auto_decline_max_score500Decline-decision threshold; staff review the recorded outcome

Approval Config

  • Level 1: EMPLOYER, one authorized employer confirmation.
  • Level 2: OPERATIONS_MANAGER, independent final approval for all amounts in the baseline. Configure the employer step, linked employment and active MOU as described in the employer guide.

Intake Config

SettingValueNotes
require_document_kyctrueFull KYC required
require_verified_selfietrueIdentity verification
require_face_matchtrueMatch selfie to ID
require_manual_selfie_reviewfalseAutomated review
employment_freshness_days30Employment data must be recent
financial_freshness_days30Financial data must be recent

Required Documents

DocumentMandatoryQuantityFreshnessStage
NATIONAL_IDYes1—DOCUMENT_UPLOAD
PAYSLIPYes330 daysDOCUMENT_UPLOAD
EMPLOYMENT_LETTERYes130 daysDOCUMENT_UPLOAD
BANK_STATEMENTYes3 months30 daysDOCUMENT_UPLOAD

3. Traditional Loan

Traditional loans are medium to long-term loans with full underwriting, collateral, and multi-level approval chains.

Base Product

POST /api/v1/products
FieldValueNotes
product_typePERSONAL or BUSINESSDepending on borrower type
term_unitMONTHSMonthly terms
min_term1212 months minimum
max_term6060 months maximum
min_amount50,000Adjust per market
max_amount5,000,000Adjust per market
base_interest_rate12–18Annual rate
interest_rate_periodANNUALRate quoted per year
interest_rate_typeFIXED or VARIABLEFixed or variable
interest_calculation_methodREDUCING_BALANCEStandard reducing balance
interest_accrual_frequencyMONTHLYMonthly accrual
interest_capitalization_frequencyNONENo compounding
repayment_frequencyMONTHLYMonthly repayment
day_count_conventionACT/365Actual days / 365
grace_period_days15Two weeks grace
default_days9090 days to default
requires_collateraltrueSecured loan
requires_guarantortrueGuarantor required
requires_guaranteetrueGuarantee required
allowed_guarantee_types["CASH_DEPOSIT", "PROPERTY", "VEHICLE"]Accepted guarantee types
open_lending_rate_multiplier1.5Higher rate without guarantee
allows_early_settlementtrueAllow early payoff
early_settlement_penalty_rate33% penalty for early settlement

Fees

Fee TypeCalculationCollectionMandatoryNotes
ORIGINATION1–2% PERCENTAGEDEDUCT_FROM_DISBURSEMENTYesStandard origination
PROCESSINGFixed amountDEDUCT_FROM_DISBURSEMENTYesProcessing fee
VALUATIONFixed amountUPFRONTYesCollateral valuation
INSURANCEPercentageCAPITALIZE_INTO_LOANYesCredit life insurance
LATE_PAYMENTPercentageADD_TO_BALANCENoPenalty for late payment
LEGALFixed amountADD_TO_BALANCENoLegal fees if needed

Credit Risk Config

SettingValueRationale
score_weight_repayment_behavior0.40Highest weight — repayment history critical
score_weight_debt_capacity0.35High weight — affordability key
score_weight_credit_history0.15Standard weight
score_weight_financial_strength0.10Standard weight
score_weight_behavioral0.00Not relevant for traditional loans
minimum_loan_term1212-month minimum for DTI calc
max_debt_to_income_ratio0.3636% DTI max (conservative)
max_loan_to_value_ratio0.8080% LTV max
requires_credit_bureau_checktrueBureau check required
credit_bureau_sources["TRANSUNION", "EXPERIAN"]Multiple bureaus
requires_fraud_checktrueAlways check fraud
auto_decline_on_fraudtrueAuto-decline on fraud
check_watchlisttrueCheck watchlists
auto_decline_watchlisttrueAuto-decline on watchlist match
auto_approve_min_score750Approval-decision score threshold; final workflow approval still required
auto_approve_max_amount100,000Maximum amount for an approval decision; not automatic origination
auto_decline_max_score550Decline-decision threshold; staff review the recorded outcome

Approval Config

  • Level 1: Loan Officer — all amounts
  • Level 2: Operations Manager — amounts > 100,000
  • Level 3: Compliance Officer (2 approvers) — amounts > 1,000,000

Intake Config

SettingValueNotes
require_document_kyctrueFull KYC required
require_verified_selfietrueIdentity verification
require_face_matchtrueMatch selfie to ID
require_manual_selfie_reviewtrueManual review for large loans
employment_freshness_days90Employment data within 90 days
financial_freshness_days30Financial data within 30 days

Required Documents

DocumentMandatoryQuantityFreshnessStage
NATIONAL_IDYes1—DOCUMENT_UPLOAD
PAYSLIPYes390 daysDOCUMENT_UPLOAD
BANK_STATEMENTYes6 months30 daysDOCUMENT_UPLOAD
COLLATERAL_DOCUMENTYes1—DOCUMENT_UPLOAD
VALUATION_REPORTYes1—DOCUMENT_UPLOAD
BUSINESS_REGISTRATIONIf business1—DOCUMENT_UPLOAD

Payment Config & Schedule Shape

PUT /api/v1/products/:id/config/payment (Product Config → Payment tab) controls repayment behavior beyond the base schedule:

FieldEffect
payment_allocation_orderOrder payments settle fees/interest/principal
allow_partial_paymentsAccept less-than-installment amounts
prepayment_penalty_enabled + rulesPenalty tiers on early settlement
prepayment_recalc_strategyNONE (default) · REDUCE_EMI — same term, lower installment · REDUCE_TERM — same installment, shorter term. Applied when principal is paid ahead of schedule
interest_only_installmentsFirst N installments collect interest only
balloon_percentageFraction (0–0.99) of principal deferred to the final installment; intermediate installments amortize the remainder
grace_period_extensionExtra days beyond the product grace period

Interest-only and balloon can combine — e.g. 3 interest-only months then amortize 80% of principal with a 20% balloon. Restructuring regenerates a standard equal-annuity schedule and drops the shape.

Floating Rate Config

PUT /api/v1/products/:id/config/floating-rate (Product Config → Floating tab) prices the product as a rate index + spread:

{ "rate_index_id": "<index uuid>", "spread_percent": 6.0, "reprice_strategy": "REDUCE_EMI" }

Requires a rate index and at least one effective rate entry — create/manage them under Admin → Rate Indices (POST /api/v1/rate-indices, POST /api/v1/rate-indices/:id/entries). Origination fails without an effective index value. When a new in-force entry is posted, every active loan on the index reprices and its unpaid installments are rebuilt. Full operating notes: Loan Servicing Operations Guide.

Staged Disbursement

Disbursement Config → enable Staged Disbursement and define ordered tranches (percentage or fixed amount, optional required_documents per stage). Loans on staged products cannot use the single-shot disbursement endpoint — each tranche is released from the loan's funding panel and follows its own verify → process → confirm cycle. Details: Loan Servicing Operations Guide.


Disbursement Checklist

The funding gate is configured per product on the Disbursement Checklist tab (API GET/POST/PUT /api/v1/products/:id/checklist-template). The template defines the items staff must verify before funds release; each loan originated on the product gets a checklist instance from the active template, and required items block release until completed.

Each item: name, type (DOCUMENT_VERIFY, CREDIT_CHECK, FRAUD_CHECK, COMPLIANCE_CHECK, OTHER), required flag, display order. Keep items specific to the product's real release risk — the checklist is the last gate before money moves, not a re-review of evidence earlier stages already produced.

Product typeChecklist emphasis
Employer-MOUMOU active/unexpired; employer confirmation complete; agreement + deduction mandate signed; verified payroll payout destination; independent release authorization
Nano / instantVerified payout wallet/account; automated checks already passed; transfer confirmation captured
TraditionalVerified bank destination; signatures complete; collateral recorded where required; independent release authorization; transfer confirmation

Conditional Workflow Steps

Use unconditional stages for the reference configurations in these guides. Conditions are available for additional policy-specific stages, but must not bypass required identity, employer confirmation, offers, consents, signatures or final approval.

The evaluator supports equals, not_equals, greater_than, less_than, contains and in. A missing field blocks evaluation; it does not mean false. Publication recognizes fields in Form Config plus requested_amount, requested_term, requested_term_unit, purpose, borrower_id, product_id and jurisdiction_id.

Runtime limitation: task progression evaluates the evidence supplied by the completing action. Publication accepting a field does not guarantee that every preceding action supplies it. The simulation endpoint (POST /api/v1/products/{product_id}/config/workflow/simulate) evaluates caller-supplied facts; it is not an end-to-end rehearsal. Test a real application through the exact predecessor before enabling a condition. The baseline templates use no conditions for this reason.

Do not use the former examples that skipped nano offer/consent capture or employer confirmation based on amount. Skipping an offer step does not automatically generate an accepted offer, and returning customers still need the consent/signature evidence required for their application. credit_decision is not a built-in condition field; the credit handler records decision. Automatic routing from failed KYC/fraud checks to a referral stage is not implemented by the current handlers.


Workflow Operations (Rework, Resubmit, Recovery)

Once a workflow is published and applications are flowing, staff can move applications back and forth through the workflow:

Returning Applications Back (Rework)

Staff can send an application back to an earlier step for correction (e.g., if documents are missing during underwriting). This is configured via rework_rules on each step:

  • Each rework rule specifies a target_step_key, allowed_roles, reason_codes, and whether borrower_action_required
  • When rework is triggered, the application moves to CORRECTION_REQUIRED status
  • Compensation handlers can undo side effects of steps being rolled back
  • The rework_attempts counter on the target task is incremented

API: POST /api/v1/applications/:id/workflow/rework

Resubmitting After Correction

Once corrections are made, the application is resubmitted to move forward:

  • If borrower_action_required: true, the borrower calls the resubmit endpoint
  • If borrower_action_required: false, staff with LoanUpdate permission resubmit
  • The workflow creates a RESUBMIT transition and returns to active processing

API: POST /api/v1/applications/:id/workflow/resubmit

Available Workflow Actions

The backend provides a single source of truth for what the current actor can perform:

API: GET /api/v1/applications/:id/workflow/actions

Returns applicable complete, rework, and resubmit actions based on the actor's role and the workflow's current state. The frontend should use this endpoint to determine which buttons/actions to show — do not compute the action list client-side. Automated steps and evidence-producing document/identity/assessment/offer/consent/signature stages do not expose a generic completion action.

Recovery Operations

For automated step failures, task reassignment, and other recovery scenarios:

OperationWhen to Use
RetryAutomated step failed, want to re-run
CompensateUndo side effects of a completed automated step
ReassignMove task to a different user
ExpireTask past due date, fail it
CancelCancel entire workflow
MigrateMove instance to newer definition version

Full documentation: See docs/PRODUCT_WORKFLOW_SETUP_GUIDE.md for complete configuration details, transition types, notifications, borrower workflow state, and pipeline analytics.


Pipeline Analytics

The system provides real-time pipeline monitoring through analytics endpoints:

EndpointPurpose
GET /api/v1/analytics/pipeline/overviewHigh-level metrics (total, completed, failed, rolled back, reworked, success rate)
GET /api/v1/analytics/pipeline/stagesPer-stage breakdown with WIP, durations, and counts
GET /api/v1/analytics/pipeline/bottlenecksBottleneck analysis with severity classification
GET /api/v1/analytics/pipeline/stuck-loansLoans stuck in a specific stage
GET /api/v1/analytics/pipeline/application-timingTurnaround dashboard with SLA data

Key metrics tracked per stage: WIP count, completed/failed/rolled back/reworked counts, and duration percentiles (avg, median, P95).


Collections Pipeline

When loans become delinquent, the collections pipeline automatically manages escalation and agent assignment:

Delinquency Escalation Levels

DPD RangeLevelPriorityTypical Actions
1–7EARLYLOWAutomated email/SMS reminders
8–15STANDARDMEDIUMPhone calls, follow-up SMS
16–30ELEVATEDHIGHLetters, formal demand
31–60SEVEREURGENTField visits, legal notice prep
61+CRITICALCRITICALLegal action, recovery

Collections API

  • POST /api/v1/collections/cases — Create a collections case
  • GET /api/v1/collections/cases/:id — Retrieve case details
  • POST /api/v1/collections/cases/:id/assign — Assign case to an agent

Collections policies also control re-aging (reaging_enabled): when enabled, a delinquent loan that fully cures its past-due amount resets to CURRENT classification. Delinquency can additionally be paused per loan (late fees, escalation and IFRS staging suspend while paused). See the Loan Servicing Operations Guide.

For group-based lending (e.g., employer MOU loans), a default on one loan can trigger a cascade that escalates all related loans to collections.

Full documentation: See docs/PRODUCT_WORKFLOW_SETUP_GUIDE.md → Collections Pipeline section for complete details.


Post-Setup Verification

After configuring all layers, verify the product is correctly set up:

1. Check the Full Product Schema

GET /api/v1/products/:id/schema

This returns the complete ProductSchema combining all configuration layers in one response. Verify that:

  • product — base product fields are correct
  • form_config — form sections and fields are defined
  • intake — KYC and selfie requirements are set
  • documents — required documents are listed
  • workflow — workflow stages are configured
  • guarantor — guarantor requirements are set
  • disbursement — disbursement channel is configured
  • payment — payment configuration is set
  • affordability — affordability rules are defined
  • credit_risk — scoring weights and thresholds are correct
  • approval — approval chain is defined
  • fees — all fees are listed
  • rate_tiers — rate tiers if using risk-based pricing

2. Test Product Activation

PUT /api/v1/products/:id

Set is_active: true to make the product available for applications.

3. Verify Frontend Rendering

The frontend reads the product schema and dynamically renders:

  • Application form fields (from form_config)
  • Document checklist (from documents)
  • Workflow stages (from workflow)
  • Fee breakdown (from fees)

New products can reuse the supported configuration types above. Adding a new task type or automation handler requires implementation and end-to-end verification; a new display name alone is insufficient.


Configuration Reference

Available Product Types

CodeDescription
PERSONALGeneral consumer loans
BUSINESSSME and corporate loans
MORTGAGEHome loans
AUTOVehicle financing
EDUCATIONSchool fees loans
PAYDAYSalary advance
MICROFINANCESmall group/individual loans
NANODigital micro-loans with credit limits

Term Units

CodeDescription
DAYSTerm in days (e.g., 7 = 7 days)
WEEKSTerm in weeks (e.g., 2 = 2 weeks)
MONTHSTerm in months (e.g., 12 = 12 months)

Interest Rate Types

CodeDescription
FIXEDFixed rate for entire term
VARIABLERate changes with market
HYBRIDFixed for initial period, then variable

Floating rates (index + spread repricing of outstanding loans) are configured separately via the Floating Rate Config layer — not through interest_rate_type.

Interest Rate Periods

CodeDescription
DAILYRate quoted per day
WEEKLYRate quoted per week
MONTHLYRate quoted per month
ANNUALRate quoted per year

Day Count Conventions

CodeDescription
ACT/360Actual days, 360-day year
ACT/365Actual days, 365-day year
30/36030-day months, 360-day year

Interest Calculation Methods

CodeDescription
FLATInterest on full principal for full term
REDUCING_BALANCEInterest on outstanding balance only
SIMPLESimple interest
COMPOUNDCompound interest
ACTUAL_360Actual/360 day count
ACTUAL_365Actual/365 day count

Repayment Frequencies

CodeDescription
DAILYDaily payments
WEEKLYWeekly payments
BI_WEEKLYEvery two weeks
MONTHLYMonthly payments
QUARTERLYQuarterly payments
SEMI_ANNUALTwice a year
ANNUALLYAnnual payments

Fee Types

CodeDescription
ORIGINATIONOne-time fee for loan origination
PROCESSINGProcessing fee
LATE_PAYMENTPenalty for late payment
EARLY_SETTLEMENTPenalty for early payoff
RESTRUCTURINGFee for loan restructuring
LEGALLegal fees
INSURANCECredit life insurance
VALUATIONCollateral valuation fee
ADMINISTRATIVEAdministrative fee

Fee Calculation Methods

CodeDescription
FIXEDFixed amount
PERCENTAGEPercentage of loan amount
TIEREDTiered based on loan amount

Fee Collection Methods

CodeDescription
DEDUCT_FROM_DISBURSEMENTFee subtracted from disbursement
CAPITALIZE_INTO_LOANFee added to principal
ADD_TO_BALANCEFee tracked separately in fee_balance
UPFRONTFee paid before disbursement

Guarantee Types

CodeDescription
EMPLOYER_GUARANTEEEmployer guarantees repayment
CASH_DEPOSITCash collateral
PROPERTYProperty collateral
VEHICLEVehicle collateral

System Roles

The following roles are defined in the system. Workflow steps (auto_assign_role) and approval levels (required_role, escalate_to_role) must reference one of these roles — arbitrary strings will be rejected by the backend.

RoleDescriptionTypical Use in Workflow
SUPER_ADMINSystem-wide accessEscalation target for critical approvals
ADMINBusiness owner — full tenant controlFinal approval on high-value loans
OPERATIONS_MANAGERSenior staff — approves loans, creates staffManager-level approval, final sign-off
LOAN_OFFICERLoan operations — create/process loansDocument review, offer generation, consent
CREDIT_ANALYSTCredit evaluation and loan approvalCredit check, underwriting steps
FINANCE_OFFICERFinancial operations — disbursements, paymentsDisbursement-related steps
COMPLIANCE_OFFICERCompliance and auditHigh-value compliance approval
COLLECTIONS_OFFICERCollections managementCollections-related workflow steps
CUSTOMER_SERVICESupport — view/update borrower infoCustomer-facing support tasks
AUDITORRead-only accessAudit review (no action capabilities)
READONLYRead-only access to all tenant dataObservation-only tasks

Important: Roles like BRANCH_MANAGER, UNDERWRITER, CREDIT_COMMITTEE, CREDIT_ANALYST_MANAGER, REGIONAL_MANAGER, HEAD_OF_CREDIT, and BOARD_MEMBER are not valid system roles. Use the closest match from the table above (e.g., OPERATIONS_MANAGER instead of BRANCH_MANAGER, CREDIT_ANALYST instead of UNDERWRITER).

5-Pillar Scoring Weights

Weights must sum to 1.0. Default values and recommended adjustments:

PillarDefaultNanoEmployer-BasedTraditional
Repayment Behavior0.350.300.350.40
Debt Capacity0.300.250.300.35
Credit History0.150.200.150.15
Financial Strength0.150.100.150.10
Behavioral0.050.150.050.00

Credit Score Ranges

RangeTierDescription
750–850ExcellentEligible for configured pricing and an approval decision
700–749GoodStandard rates
650–699FairHigher rates, manual review
550–649PoorLikely decline or high rates
300–549Very PoorAuto-decline

Quick Setup Checklist

For each product, complete these steps in order:

  • Create base product — type, amounts, terms, interest, repayment
  • Add fees — origination, processing, late payment, insurance
  • Configure credit risk — pillar weights, DTI limits, auto-decision thresholds
  • Configure approval chain — approval levels by amount threshold
  • Update intake config — KYC/selfie requirements
  • Add required documents — document checklist per stage
  • Configure form fields — which fields to show in the application
  • Configure disbursement — disbursement channel
  • Configure workflow steps — step order, modes, roles, due days
  • Add rework rules — which steps can be returned to, by whom, with which reason codes
  • Configure notifications — borrower/assignee/role notifications per stage event
  • Add rate tiers — optional, for risk-based pricing
  • Set up auto-tagging — create attribute specs to auto-tag borrowers (see AUTO_TAGGING_SETUP_GUIDE.md)
  • Add tag visibility rules — REQUIRE/EXCLUDE rules to control who sees this product
  • Save and publish workflow — verify a new application freezes the intended task list
  • Rehearse failure paths — rejected documents, incomplete KYC, retry, assessment, accepted terms, missing signatures, independent approval and funding confirmation
  • Verify with schema endpoint — GET /api/v1/products/:id/schema
  • Activate product — set is_active: true

Offer preparation and issuance (September 2026)

Entering OFFER_PROPOSAL prepares a DRAFT automatically. Keep this step manual for staff review. The draft uses the latest final approving underwriting assessment (amount, term, term unit, annual percentage rate and conditions). A workflow without underwriting requires an approved saved credit assessment for this application. Missing approval blocks preparation; there is no fallback interest rate or client-supplied score override.

Staff review the draft in Term Proposals, then select Issue offer. Issuance records the actor and assessment evidence, starts the seven-day acceptance period and completes OFFER_PROPOSAL. Configure the next borrower OFFER_ACCEPTANCE step and its notification policy. Draft preparation itself does not notify the borrower or make the draft acceptable. Repeated preparation returns the same draft; use Refresh draft after assessment rework. Changed terms must return through underwriting rather than a separate manual offer form.

For existing applications already at the offer stage, opening Term Proposals prepares a missing draft. If preparation fails, the page shows the reason and a retry action. Apply tenant migration 254 before running this version.

The displayed installment follows the product repayment frequency and the term retains its actual unit, including days for nano loans. Mandatory fees are itemized separately from interest. Repayment dates calculated at preparation are indicative; origination must reconcile the accepted terms with the actual funding schedule and configured fee treatment.

Final approval and signed terms

At APPROVAL, use the application approval review. The amount, interest rate, term and term unit come from the latest accepted offer and are read-only. The agreement must be fully signed before approval; a missing lender or required witness signature keeps approval blocked. To change terms, use the configured return-to-offer workflow, obtain fresh acceptance and signatures, then return for approval.

Final approval enforces the product amount and term limits, the exact product term unit, a nonnegative interest rate with at most six decimal places, the configured approval role/quorum and maker/checker separation. There is no universal minimum term for large amounts, amount-per-month threshold or restriction on round amounts. Configure additional lending policy during assessment, before the offer is accepted.

For products requiring a guarantee, an active, effective, unexpired guarantee covering the accepted amount must already exist. Complete guarantee review before final approval. Final approval does not create a guarantee or apply another interest-rate discount after signing.

The signing session coordinates required participants for one agreement version and document hash. Use electronic signing with explicit consent; borrower and lender signatures are required, with any configured additional participants. Digital certificate signing and wet-signature uploads are not currently implemented signing options. Invitations must reference the current session; replaced sessions require fresh invitations. Origination and payment confirmation remain separate operations after approval.

A generated agreement with its document ready can be reviewed and signed directly in the borrower portal; sending an email invitation is optional. The borrower selects Review and sign agreement, reviews the document and provides electronic consent. Staff then open Term Proposals → Signing and use Sign as lender. The signing checklist refreshes while signatures are pending. Final approval remains blocked until all required participants have signed.

Automatic loan creation after final approval

Completing the application workflow queues loan creation in the same database transaction. No separate workflow step, product toggle or additional API call is required. The worker creates the loan from the approved and signed terms, including its schedule and accounts. It checks workflow completion and signed evidence again before creation. Failures remain queued and retry automatically; the approved application's panel shows progress, the failure reason and an authorized retry action. Repeated requests return the existing loan. The legacy auto_create_loan request flag is deprecated and does not disable this handoff.

Open the created loan to proceed with the disbursement request and its separate funding workflow. Automatic origination does not release funds.

Assigned funding workflow

Loan creation also creates a linked funding workflow. An available loan officer receives Prepare disbursement request in My Tasks, which opens the loan. Use Manage funding to confirm the payout destination and submit the request. Verification is assigned to an operations manager, release to a finance officer distinct from the requester and verifier, and transfer reconciliation to someone other than the releasing officer. An available tenant administrator can cover an unstaffed role while preserving these separations. Missing independent staff blocks setup with an actionable error; do not bypass it by editing task records.

The loan's funding checklist shows the current step and every assignee. The borrower can see the approved loan as Awaiting disbursement. It becomes active only after transfer confirmation and posting succeed; pre-funding schedules are provisional, and unfunded loans are excluded from scheduled payment selection.