What are different interest calcualtion options in Factech Billing System?
Common terms (used below)
- Bill Date: The date the bill is generated.
- Due Date: Last date to pay without interest.
- Current Amount: This bill’s charges/taxes.
- Previous Due (Arrears): Unpaid from older bills.
- Outstanding/Balance: What’s still unpaid at a point in time.
- Rate: Interest % you set (e.g., 18% p.a.).
- Factor: How time is counted
- By Days: prorated by number of days.
- By Cycle/Month: as full cycle/month (no day-wise split).
- Minimum Amount: If set, interest applies only when balance > this.
1) Interest on Unpaid Amount (from bill date)
What it does: Charges interest on the total unpaid amount (previous balance adjusted for advance) starting from the new bill date.
When to use: You want interest for the whole cycle regardless of the due date.
How it works (short):
Interest = (Unpaid amount) × (Rate) × (time factor).
Example: Bill date 1 Aug; unpaid ₹10,000; rate 18% p.a.; time = 30 days → approx ₹10,000 × 18% × (30/365) ≈ ₹148.
Code paths:
int_on_unpaid_amount,due_on_unpaid_amount
2) Interest after Due Date (credit on bill due date)
What it does: Considers payments before/after due date and charges interest only after the due date on whatever remains unpaid.
When to use: You allow a grace period till due date.
How it works:
- Payments before due reduce principal; no interest for that period.
- From Due Date to payment/next milestone, interest accrues on remaining balance.
Example: Due 15 Aug; balance ₹10,000. Paid ₹6,000 on 10 Aug (before due) → no interest on that part. From 16–31 Aug, interest on ₹4,000 → ₹4,000 × 18% × (16/365) ≈ ₹31.
Code paths:
int_credit_bill_date,int_credit_bill_due_date(variants)
Example: Interest Calculation After Due Date
Scenario
| Item | Value |
|---|---|
| Last Bill Date | 01 Jan 2026 |
| Due Date | 10 Jan 2026 |
| Current Bill Date | 01 Feb 2026 |
| Interest Rate | 18% per annum |
| Last Bill Amount | ₹10,000 |
| Advance | ₹0 |
🧾 Payments Made
| Date | Type | Amount |
|---|---|---|
| 05 Jan 2026 | Payment | ₹2,000 |
| 20 Jan 2026 | Payment | ₹3,000 |
| 28 Jan 2026 | Payment | ₹4,000 |
🔎 Step-by-Step Calculation
1️⃣ Balance on Due Date
Initial Bill: ₹10,000
Payment on 05 Jan (before due date): − ₹2,000
👉 Balance on 10 Jan (Due Date) = ₹8,000
⚠ No interest is applied before due date.
2️⃣ Interest After Due Date
Interest is calculated only after 10 Jan 2026
📍 Period 1
10 Jan → 20 Jan (10 days)
Balance = ₹8,000
Interest =
After payment on 20 Jan:
New Balance = ₹8,000 − ₹3,000 = ₹5,000
📍 Period 2
20 Jan → 28 Jan (8 days)
Balance = ₹5,000
Interest =
After payment on 28 Jan:
New Balance = ₹5,000 − ₹4,000 = ₹1,000
📍 Period 3
28 Jan → 01 Feb (4 days)
Balance = ₹1,000
Interest =
💰 Total Interest Applied
✅ Final Summary for Customer
Total Outstanding at Due Date: ₹8,000
Total Interest Charged: ₹61.15
Closing Balance (before new charges): ₹1,000 + ₹61.15
🧠 Simple Rule (User Explanation)
No interest before due date.
Interest starts from due date.
Interest is calculated daily.
Each payment reduces the balance immediately.
Interest is calculated only on remaining balance.
3) Split Interest: Current vs Previous Due (before/after due date)
What it does: Splits the last bill into Current Amount and Previous Due and applies interest separately, respecting payments before/after due.
When to use: You want precise, fair interest allocation between new charges and arrears.
How it works:
- Track payments before due → first knock off arrears, then current.
- Accrue day-wise interest between transaction points.
Example: Current ₹5,000; Previous Due ₹3,000; Paid ₹2,000 on 12 Aug (before due 15 Aug). The ₹2,000 reduces Previous Due first (to ₹1,000). After due, interest applies on the remaining buckets day-wise.
Code paths:
- From bill date:
int_on_prev_bill_curamt_and_dueamt_from_bill_date- Split principal focus:
int_on_prev_bill_cur_and_due_principal_amount_from_bill_date- Standard split:
int_on_prev_bill_curamt_and_dueamt
4) Interest on Outstanding (Simple)
What it does: Applies interest on the net outstanding for the cycle (can also consider another bill type if configured).
When to use: You want a clean “one number” basis for a cycle (simple, not day-wise).
How it works:
Outstanding (including tax, optionally adding fetched payments) → Interest by cycle/day factor.
Respects Minimum Amount (no interest if outstanding ≤ min).
Example: Outstanding ₹12,000; min ₹500; 1 full month assumed → ₹12,000 × 18% ÷ 12 = ₹180.
Code paths:
int_on_outstanding_simple
5) Interest on Outstanding (During Cycle)
What it does: Similar to (4) but uses the cycle’s actual dates and movements, meant for “within the billing cycle” interest.
When to use: You need interest to reflect in-cycle changes.
How it works: Uses cycle start/end, fetched bills/payments if configured; applies factor/day count accordingly.
Example: Balance fluctuates in Aug; final computed interest reflects partial periods rather than a flat month.
Code paths:
int_on_outstanding_during_cycle
6) Latest Due from Last Bill (Selected Plan)
What it does: Applies interest only on the last bill’s latest due between cycle end and the next bill date.
When to use: You want to target just the most recent due amount for the interim period.
How it works:
Interest = (Last due amount) × (Rate) × (days from cycle end → bill date).
Example: Due ₹3,000; from 31 Aug to 5 Sep (5 days) → ₹3,000 × 18% × (5/365) ≈ ₹7.
Code path:
int_latest_due_from_last_bill
7) Compounded Month-on-Month
What it does: Adds monthly interest to the balance and compounds it each month (until cleared or paid).
When to use: You want stronger deterrence for long non-payment.
How it works:
Each month: Interest = (Current balance) × (Monthly rate). New balance = balance + interest − payments (of that month).
Example: Start ₹10,000, 18% p.a. → 1.5% per month.
- Month 1: ₹150 → balance ₹10,150
- Month 2: interest on ₹10,150, and so on.
Code path:
int_cmpnd_mon_on_mon
8) One-Time Interest if Balance Exceeds Minimum
What it does: Looks at the latest balance; if it’s above the configured Minimum Amount, charges one-time interest for the cycle.
When to use: Light-touch policy—charge once if dues are notable.
How it works:
Interest = (Last balance) × (Rate) × (cycle factor).
Example: Last balance ₹8,000; min ₹500; 1 cycle → interest ≈ ₹120 (at 18% p.a. month basis).
Code path:
int_one_time_exceed_due
9) “Due on Previous + Current Bill” (builder)
What it does: Prepares the principal components (previous vs current, minus advances/own interest line) for interest calculation; used by other methods.
When to use: Internal step; explains why interest sees those amounts.
Example: If advance ₹500 existed, the “amount for interest” is adjusted downward before interest is applied.
Code paths:
due_on_prev_cur_bill,due_on_prev_cur_bill_new
10) “Delay Due on Previous Current Bill” (specialized)
What it does: For special setups: builds amount from prior bill’s unpaid (net of advances/that interest line) up to last due date and tracks matching payments.
When to use: For specific societies/plans needing this exact behavior.
Example: If your society plan expects “carry last bill’s net due until its due date”, this is the one.
Code path:
delay_due_1
Notes on Configuration that affect results
- Factor:
- By Days → proportional to actual days between events.
- By Cycle → full period; doesn’t prorate by days.
- Minimum Amount: If set, balances at/below this won’t attract interest in some modes.
- Debits/Adjustments: Some modes can include debit entries as part of outstanding before applying interest.
- Other Bill Type: Certain modes can fetch another bill type (e.g., maintenance vs some custom bill) to use its due/outstanding for interest.
- Rounding: Internally, amounts may be rounded (e.g., to 2–3 decimals).
Quick picker (which option should I choose?)
- Simple & fair post-due: Interest after Due Date.
- Strict split (current vs arrears): Split Interest: Current vs Previous Due.
- Just charge on cycle’s net amount: Outstanding (Simple).
- Reflect mid-cycle changes: Outstanding (During Cycle).
- Tough policy on long dues: Compounded Month-on-Month.
- Light-touch once per cycle: One-Time if Balance Exceeds Minimum.
- Target only latest due: Latest Due from Last Bill.
Tiny end-to-end example (day-wise mode)
- Rate: 18% p.a.
- Bill: 1 Aug; Due: 15 Aug
- Amounts: Current ₹5,000; Previous Due ₹3,000
- Payments: ₹2,000 on 10 Aug (before due), ₹1,000 on 20 Aug (after due)
- After-Due interest will apply on what’s still unpaid after 15 Aug:
- Before due, ₹2,000 reduces previous due → arrears become ₹1,000.
- On 16 Aug, outstanding = ₹1,000 (arrears) + ₹5,000 (current) = ₹6,000.
- Paid ₹1,000 on 20 Aug → interest window is 16–20 Aug on ₹6,000:
₹6,000 × 18% × (5/365) ≈ ₹15.
