Spaces:
Sleeping
Sleeping
| # Scorecard Knowledge Graph | |
| How the scorecard responds to (a) the policy's own attributes and (b) the buyer's profile inputs. Every entry is sourced from the rules baked into `backend/scorecard.py` β this doc is the human-readable spec, not free-form opinion. | |
| --- | |
| ## Part A β Policy attribute β sub-score delta | |
| Each row: "if the policy has this value, the listed sub-score moves by this delta." Sub-scores are 0β100. The overall AβF grade is the weighted average (see Part B for weight tuning). | |
| ### Coverage Breadth (base 60, weight 22%) | |
| | Attribute | Value condition | Sub-score delta | Source rule | | |
| |---|---|---|---| | |
| | `ayush_coverage` | true | +8 | "AYUSH covered" | | |
| | `ayush_coverage` | false | β5 | "no AYUSH" | | |
| | `day_care_treatments_count` | β₯400 | +10 | "{N} day-care procedures" | | |
| | `day_care_treatments_count` | 200β399 | +6 | | | |
| | `day_care_treatments_count` | <100 | β5 | "only {N} day-care procedures" | | |
| | `maternity_coverage` | true | +6 | "maternity covered" | | |
| | `newborn_coverage` | true | +4 | "newborn covered" | | |
| | `organ_donor_expenses` | true | +4 | | | |
| | `ambulance_cover` | true | +3 | | | |
| | `domiciliary_treatment` | true | +4 | | | |
| | `preventive_health_checkup` | true | +3 | "free health checkups" | | |
| | `pre_hospitalization_days` | β₯60 | +4 | | | |
| | `post_hospitalization_days` | β₯90 | +4 | | | |
| ### Cost Predictability (base 75, weight 20%) | |
| | Attribute | Value condition | Sub-score delta | | |
| |---|---|---| | |
| | `copayment_pct` | 0 | +0 (baseline) | | |
| | `copayment_pct` | 10 | β5 | | |
| | `copayment_pct` | β₯20 | β12 | | |
| | `room_rent_capping` | "No limit" / "Single Private A/C Room" | +6 | | |
| | `room_rent_capping` | capped (any % or amount) | β5 to β10 | | |
| | `deductible_amount` | 0 | +0 | | |
| | `deductible_amount` | β₯100000 | β8 | | |
| | `sub_limits` | absent | +5 | | |
| | `icu_charges_capping` | none | +3 | | |
| ### Waiting-Period Friction (base 70, weight 18%) | |
| | Attribute | Value condition | Sub-score delta | | |
| |---|---|---| | |
| | `initial_waiting_period_days` | β€30 | +0 (industry standard) | | |
| | `initial_waiting_period_days` | >30 | β3 | | |
| | `pre_existing_disease_waiting_months` | β€24 | +10 | | |
| | `pre_existing_disease_waiting_months` | 36 | +0 (industry standard, IRDAI cap) | | |
| | `pre_existing_disease_waiting_months` | β₯48 | β15 (non-conformant) | | |
| | `maternity_waiting_months` | β€24 | +5 | | |
| | `maternity_waiting_months` | β₯36 | β5 | | |
| | `specific_disease_waiting_months` | β€24 | +3 | | |
| ### Claim Experience (base 65, weight 20%) β uses insurer-level data | |
| | Attribute | Value condition | Sub-score delta | | |
| |---|---|---| | |
| | `cashless_treatment_supported` | true | +5 | | |
| | `network_hospital_count` | β₯10,000 | +10 | | |
| | `network_hospital_count` | 5,000β9,999 | +5 | | |
| | `network_hospital_count` | <2,000 | β5 | | |
| | `claim_settlement_ratio` (IRDAI) | β₯95% | +12 | | |
| | `claim_settlement_ratio` | 90β95% | +6 | | |
| | `claim_settlement_ratio` | <85% | β10 | | |
| | `complaints_per_10k_policies` | <5 | +4 | | |
| | `complaints_per_10k_policies` | >20 | β8 | | |
| | `tat_cashless_authorization_hours` | β€2 | +4 | | |
| | `tat_cashless_authorization_hours` | β₯24 | β4 | | |
| ### Renewal Protection (base 50, weight 12%) | |
| > Renewal Protection now = `max_entry_age` only. Lifelong renewability is the IRDAI universal norm for every health-indemnity product (mandated since 2020), so it is constant across the market and is **not scored** β `max_renewal_age` was removed entirely as a scored field. | |
| | Attribute | Value condition | Sub-score delta | | |
| |---|---|---| | |
| | `max_entry_age` | β₯65 | +25 | | |
| | `max_entry_age` | β₯55 | +12 | | |
| | `max_entry_age` | β₯50 | +0 | | |
| | `max_entry_age` | <50 | β20 | | |
| | (lifelong renewability) | IRDAI-universal | not scored β shown for transparency only | | |
| ### Bonus & Loyalty (base 60, weight 8%) | |
| | Attribute | Value condition | Sub-score delta | | |
| |---|---|---| | |
| | `no_claim_bonus_pct` | β₯50 | +8 | | |
| | `no_claim_bonus_pct` | 25β49 | +4 | | |
| | `restoration_benefit` | present | +6 | | |
| | `preventive_health_checkup` | free annually | +3 | | |
| | `wellness_program_present` | true | +2 | | |
| --- | |
| ## Part B β User input β weight redistribution | |
| Same 6 sub-scores, but the WEIGHTS shift based on what we know about the buyer. Every collected signal moves at least one weight β if a field doesn't appear here, we wasted attention collecting it. | |
| Each delta is applied to the base weights then **renormalised to sum 1.0** with a 5% per-criterion floor. | |
| ### Age | |
| | Age band | Weight deltas | | |
| |---|---| | |
| | <30 | Waiting-Period Friction +0.04, Claim Experience +0.02, Renewal Protection β0.04, Bonus & Loyalty β0.02 | | |
| | 30β49 | (no shift) | | |
| | β₯50 | Renewal Protection +0.06, Claim Experience +0.02, Bonus & Loyalty β0.04, Waiting-Period Friction β0.04 | | |
| ### Dependents | |
| | Dependent | Weight deltas | | |
| |---|---| | |
| | kids / children | Coverage Breadth +0.03, Bonus & Loyalty +0.01, Cost Predictability β0.02, Renewal Protection β0.02 | | |
| | spouse | Coverage Breadth +0.02, Waiting-Period Friction +0.02, Bonus & Loyalty β0.02, Renewal Protection β0.02 | | |
| | parents | Coverage Breadth +0.04, Claim Experience +0.04, Bonus & Loyalty β0.04, Cost Predictability β0.04 | | |
| | parents with PED or age β₯65 | + extra: Renewal Protection +0.04, Waiting-Period Friction +0.02, Bonus & Loyalty β0.04, Cost Predictability β0.02 | | |
| ### Existing cover | |
| | Condition | Weight deltas | | |
| |---|---| | |
| | Has existing cover >0 (super-top-up buyer) | Cost Predictability β0.03, Claim Experience +0.03 | | |
| | No existing cover (first-time buyer) | Cost Predictability +0.03, Coverage Breadth +0.02, Bonus & Loyalty β0.03, Waiting-Period Friction β0.02 | | |
| ### Primary goal | |
| | Goal | Weight deltas | | |
| |---|---| | |
| | Tax planning | Cost Predictability +0.02, Bonus & Loyalty β0.02 | | |
| | Upgrade existing cover | Coverage Breadth +0.03, Renewal Protection +0.02, Bonus & Loyalty β0.05 | | |
| | Compare specific policies | Flatten weights (5% pull to uniform β user already knows what matters) | | |
| ### Health conditions | |
| | Condition | Weight deltas | | |
| |---|---| | |
| | Diabetes / BP / hyper / thyroid / heart / cancer / asthma | Waiting-Period Friction +0.06, Claim Experience +0.03, Bonus & Loyalty β0.04, Cost Predictability β0.03, Renewal Protection β0.02 | | |
| ### Budget band | |
| | Band | Weight deltas | | |
| |---|---| | |
| | under_15k or 15k_30k | Cost Predictability +0.04, Bonus & Loyalty β0.02, Waiting-Period Friction β0.02 | | |
| | 60k+ | Coverage Breadth +0.02, Claim Experience +0.02, Cost Predictability β0.04 | | |
| ### Income band | |
| | Band | Weight deltas | | |
| |---|---| | |
| | under_5L | Cost Predictability +0.03, Bonus & Loyalty β0.03 | | |
| | 10Lβ25L / 25L+ | Coverage Breadth +0.02, Claim Experience +0.02, Cost Predictability β0.04 | | |
| ### Location tier | |
| | Tier | Weight deltas | | |
| |---|---| | |
| | tier2 / tier3 | Claim Experience +0.04, Coverage Breadth β0.02, Bonus & Loyalty β0.02 | | |
| | metro | Coverage Breadth +0.02, Claim Experience β0.02 | | |
| --- | |
| ## Worked example | |
| A 55-year-old with diabetic parents in tier-2 city, βΉ30k budget, βΉ5L existing cover, primary goal "upgrade": | |
| - Age 55 β +0.06 Renewal, +0.02 Claim, β0.04 Bonus, β0.04 Waiting | |
| - Dependents include parents (PED, age 70) β +0.04 Coverage, +0.04 Claim, β0.04 Bonus, β0.04 Cost; +0.04 Renewal, +0.02 Waiting, β0.04 Bonus, β0.02 Cost | |
| - Existing cover >0 β β0.03 Cost, +0.03 Claim | |
| - Goal "upgrade" β +0.03 Coverage, +0.02 Renewal, β0.05 Bonus | |
| - Conditions diabetes (via parents) β +0.06 Waiting, +0.03 Claim, β0.04 Bonus, β0.03 Cost, β0.02 Renewal | |
| - Tier-2 β +0.04 Claim, β0.02 Coverage, β0.02 Bonus | |
| Result (post-renormalise + floor): | |
| - Claim Experience: 20% β 31% (the dominant criterion β getting paid matters most) | |
| - Coverage Breadth: 22% β 25% | |
| - Waiting-Period Friction: 18% β 20% | |
| - Renewal Protection: 12% β 16% | |
| - Bonus & Loyalty: 8% β 5% (floor) | |
| - Cost Predictability: 20% β 5% (floor) | |
| The buyer's profile is correctly read as: "I'm older, my parents are sick, I'm in a smaller city, I already have basic cover. What I actually need is INSURER QUALITY (will they pay?) and RENEWAL CONTINUITY (can I keep this when I'm 70?)." | |
| --- | |
| ## Maintenance contract | |
| Whenever a rule in `backend/scorecard.py` changes (new condition, different threshold, different delta), the matching row in this document must be updated in the same commit. Drift between code and this doc breaks the transparency promise the scorecard makes to the buyer. | |