Spaces:
Sleeping
fix(corpus): KI-126 — drop 2 image-only PDFs + cascade docs across 3 repos
Browse filesThe 2 deleted PDFs are scanned-image PDFs that pdfplumber extracts as 0 chars,
so they were never queryable through the RAG pipeline. OCR is explicitly out
of scope. Removing them brings every surface back into agreement:
• royal-sundaram/family-plus__brochure.pdf — Family Plus product is still
covered via royal-sundaram__family-plus__wordings (text-extractable).
• aditya-birla/activ-one__brochure.pdf — Activ One coverage is provided via
aditya-birla__activ-health-individual__wordings (already in Chroma, 120
chunks). The separate aditya-birla__activ-one KB entry was independent
and remains intact.
Cascade across all surfaces (per the no-stale-content prime directive):
• Deleted: 2 PDFs (HF dataset + local symlink target)
• Deleted: 2 kb/policies/__brochure.md files
• Deleted: 2 40-data/policy_facts/__brochure.json files
• Deleted: 2 _hf_dataset_backup/rag/extracted/__brochure.json + 1 _raw.txt
• kb/INDEX.md: rows removed; "Policies (255)" -> "Policies (253)"
• 40-data/corpus_urls.md: activ-one brochure URL row removed
• tools/extract_policy_text.py: stale entry removed
• .gitattributes: LFS rule for activ-one brochure removed
• README.md: 208->224 docs, ~7,400->7,295 chunks, insurer list re-sorted
• rag/README.md: 208 PDFs->224, 203 JSONs->206
• CLAUDE.md: 208 corpus + 19 insurers -> 224 corpus + 20 insurers, added
exclusion note so future sessions don't re-add the image-only brochures
• Dockerfile: DATASET_CACHE_BUST 2026-05-15-ki119-v2 -> 2026-05-15-ki126-v1
so HF Space pulls the cleaned dataset (7,295-chunk Chroma) on rebuild
Also purged: 1 dangling profile chunk (profile_rohit) left over after
KI-117's boot-time cleanup. Chroma policies collection: 7,296 -> 7,295.
Health check after cleanup:
• 7,295 chunks across 206 policies + 18 regulatory docs (20 insurers)
• Embeddings 384-dim L2-normalized, no NaN, no empty docs
• Retrieval smoke 5/5 with cosine 0.71-0.83 on representative queries
• /api/chat end-to-end: NLU + fact-find profile extraction + qa-mode
RAG + citation flow all pass on localhost (turn 1 + turn 2 verified)
• /api/coverage live: 7,295 chunks, 156 policy-names, 20 insurers
• /api/policies/all live: 222 marketplace entries
- .gitattributes +0 -1
- 40-data/corpus_urls.md +0 -1
- 40-data/policy_facts/aditya-birla__activ-one__brochure.json +0 -149
- 40-data/policy_facts/royal-sundaram__family-plus__brochure.json +0 -138
- CLAUDE.md +4 -3
- Dockerfile +1 -1
- README.md +13 -13
- kb/INDEX.md +1 -3
- kb/policies/aditya-birla__activ-one__brochure.md +0 -254
- kb/policies/royal-sundaram__family-plus__brochure.md +0 -254
- rag/README.md +2 -2
- tools/extract_policy_text.py +0 -1
|
@@ -35,7 +35,6 @@ saved_model/**/* filter=lfs diff=lfs merge=lfs -text
|
|
| 35 |
*tfevents* filter=lfs diff=lfs merge=lfs -text
|
| 36 |
rag/corpus/aditya-birla/activ-assure-diamond__wordings.pdf filter=lfs diff=lfs merge=lfs -text
|
| 37 |
rag/corpus/aditya-birla/activ-health-individual__wordings.pdf filter=lfs diff=lfs merge=lfs -text
|
| 38 |
-
rag/corpus/aditya-birla/activ-one__brochure.pdf filter=lfs diff=lfs merge=lfs -text
|
| 39 |
rag/corpus/aditya-birla/activ-secure-cancer-secure__brochure.pdf filter=lfs diff=lfs merge=lfs -text
|
| 40 |
rag/corpus/aditya-birla/activ-secure-personal-accident-cancer-secure__wordings.pdf filter=lfs diff=lfs merge=lfs -text
|
| 41 |
rag/corpus/aditya-birla/group-activ-health__wordings.pdf filter=lfs diff=lfs merge=lfs -text
|
|
|
|
| 35 |
*tfevents* filter=lfs diff=lfs merge=lfs -text
|
| 36 |
rag/corpus/aditya-birla/activ-assure-diamond__wordings.pdf filter=lfs diff=lfs merge=lfs -text
|
| 37 |
rag/corpus/aditya-birla/activ-health-individual__wordings.pdf filter=lfs diff=lfs merge=lfs -text
|
|
|
|
| 38 |
rag/corpus/aditya-birla/activ-secure-cancer-secure__brochure.pdf filter=lfs diff=lfs merge=lfs -text
|
| 39 |
rag/corpus/aditya-birla/activ-secure-personal-accident-cancer-secure__wordings.pdf filter=lfs diff=lfs merge=lfs -text
|
| 40 |
rag/corpus/aditya-birla/group-activ-health__wordings.pdf filter=lfs diff=lfs merge=lfs -text
|
|
@@ -78,7 +78,6 @@
|
|
| 78 |
| new-india | New India Assurance | Universal Health Insurance | wordings | https://www.newindia.co.in/assets/70-docs/know-more/health/universal-health-insurance/Policy%20Clause%20Universal%20Health%20Insurance%20Policy.pdf | govt-sponsored |
|
| 79 |
| aditya-birla | Aditya Birla Health Insurance | Activ Health (individual) | wordings | https://www.adityabirlacapital.com/healthinsurance/assets/pdf/policy-wording-form.pdf | flagship; brand may have rebranded as Activ One |
|
| 80 |
| aditya-birla | Aditya Birla Health Insurance | Group Activ Health | wordings | https://www.adityabirlacapital.com/healthinsurance/assets/pdf/new_updated_pdf/Group-Activ-Health-Policy-wordings.pdf | group, structurally similar |
|
| 81 |
-
| aditya-birla | Aditya Birla Health Insurance | Activ One | brochure | https://www.adityabirlacapital.com/healthinsurance/assets/pdf/active-one/brochure.pdf | newer flagship |
|
| 82 |
| aditya-birla | Aditya Birla Health Insurance | Activ Assure Diamond | wordings | https://www.adityabirlacapital.com/healthinsurance/buy-insurance-online/assets/policy-wording/diamond.pdf | mid-tier |
|
| 83 |
| aditya-birla | Aditya Birla Health Insurance | Activ Secure (Personal Accident / Cancer Secure) | wordings | https://www.adityabirlacapital.com/healthinsurance/assets/pdf/planpdf/Activ-Secure-PW.pdf | specialty |
|
| 84 |
| aditya-birla | Aditya Birla Health Insurance | Activ Secure - Cancer Secure | brochure | https://www.adityabirlacapital.com/healthinsurance/assets/pdf/planpdf/Activ-Secure-Cancer-Secure-Brochure.pdf | cancer-specific |
|
|
|
|
| 78 |
| new-india | New India Assurance | Universal Health Insurance | wordings | https://www.newindia.co.in/assets/70-docs/know-more/health/universal-health-insurance/Policy%20Clause%20Universal%20Health%20Insurance%20Policy.pdf | govt-sponsored |
|
| 79 |
| aditya-birla | Aditya Birla Health Insurance | Activ Health (individual) | wordings | https://www.adityabirlacapital.com/healthinsurance/assets/pdf/policy-wording-form.pdf | flagship; brand may have rebranded as Activ One |
|
| 80 |
| aditya-birla | Aditya Birla Health Insurance | Group Activ Health | wordings | https://www.adityabirlacapital.com/healthinsurance/assets/pdf/new_updated_pdf/Group-Activ-Health-Policy-wordings.pdf | group, structurally similar |
|
|
|
|
| 81 |
| aditya-birla | Aditya Birla Health Insurance | Activ Assure Diamond | wordings | https://www.adityabirlacapital.com/healthinsurance/buy-insurance-online/assets/policy-wording/diamond.pdf | mid-tier |
|
| 82 |
| aditya-birla | Aditya Birla Health Insurance | Activ Secure (Personal Accident / Cancer Secure) | wordings | https://www.adityabirlacapital.com/healthinsurance/assets/pdf/planpdf/Activ-Secure-PW.pdf | specialty |
|
| 83 |
| aditya-birla | Aditya Birla Health Insurance | Activ Secure - Cancer Secure | brochure | https://www.adityabirlacapital.com/healthinsurance/assets/pdf/planpdf/Activ-Secure-Cancer-Secure-Brochure.pdf | cancer-specific |
|
|
@@ -1,149 +0,0 @@
|
|
| 1 |
-
{
|
| 2 |
-
"policy_id": "aditya-birla__activ-one__brochure",
|
| 3 |
-
"policy_name": "Activ One",
|
| 4 |
-
"insurer_slug": "aditya-birla",
|
| 5 |
-
"source_pdf_path": "rag/corpus/aditya-birla/activ-one__brochure.pdf",
|
| 6 |
-
"uin_code": {
|
| 7 |
-
"value": "ADIHLIP24108V012324",
|
| 8 |
-
"unit": null,
|
| 9 |
-
"source_pdf_path": "rag/corpus/aditya-birla/activ-one__brochure.pdf",
|
| 10 |
-
"source_quote": "extracted from PDF policy document by NIM DeepSeek-V4 (D-019); see source PDF for verbatim"
|
| 11 |
-
},
|
| 12 |
-
"min_entry_age": {
|
| 13 |
-
"value": null,
|
| 14 |
-
"unit": "years",
|
| 15 |
-
"source_pdf_path": "rag/corpus/aditya-birla/activ-one__brochure.pdf",
|
| 16 |
-
"source_quote": "not extracted from this PDF (field absent or LLM unable to infer)"
|
| 17 |
-
},
|
| 18 |
-
"max_entry_age": {
|
| 19 |
-
"value": null,
|
| 20 |
-
"unit": "years",
|
| 21 |
-
"source_pdf_path": "rag/corpus/aditya-birla/activ-one__brochure.pdf",
|
| 22 |
-
"source_quote": "not extracted from this PDF (field absent or LLM unable to infer)"
|
| 23 |
-
},
|
| 24 |
-
"max_renewal_age": {
|
| 25 |
-
"value": 999,
|
| 26 |
-
"unit": "years",
|
| 27 |
-
"source_pdf_path": "rag/corpus/aditya-birla/activ-one__brochure.pdf",
|
| 28 |
-
"source_quote": "extracted from PDF policy document by NIM DeepSeek-V4 (D-019); see source PDF for verbatim"
|
| 29 |
-
},
|
| 30 |
-
"min_child_entry_age": {
|
| 31 |
-
"value": null,
|
| 32 |
-
"unit": "days",
|
| 33 |
-
"source_pdf_path": "rag/corpus/aditya-birla/activ-one__brochure.pdf",
|
| 34 |
-
"source_quote": "not extracted from this PDF (field absent or LLM unable to infer)"
|
| 35 |
-
},
|
| 36 |
-
"sum_insured_options": {
|
| 37 |
-
"value": [
|
| 38 |
-
200000,
|
| 39 |
-
300000,
|
| 40 |
-
500000,
|
| 41 |
-
1000000,
|
| 42 |
-
2000000,
|
| 43 |
-
5000000,
|
| 44 |
-
10000000,
|
| 45 |
-
20000000,
|
| 46 |
-
60000000,
|
| 47 |
-
200000000
|
| 48 |
-
],
|
| 49 |
-
"unit": "INR",
|
| 50 |
-
"source_pdf_path": "rag/corpus/aditya-birla/activ-one__brochure.pdf",
|
| 51 |
-
"source_quote": "extracted from PDF policy document by NIM DeepSeek-V4 (D-019); see source PDF for verbatim"
|
| 52 |
-
},
|
| 53 |
-
"grace_period": {
|
| 54 |
-
"value": null,
|
| 55 |
-
"unit": "days",
|
| 56 |
-
"source_pdf_path": "rag/corpus/aditya-birla/activ-one__brochure.pdf",
|
| 57 |
-
"source_quote": "not extracted from this PDF (field absent or LLM unable to infer)"
|
| 58 |
-
},
|
| 59 |
-
"free_look_period": {
|
| 60 |
-
"value": 15,
|
| 61 |
-
"unit": "days",
|
| 62 |
-
"source_pdf_path": "rag/corpus/aditya-birla/activ-one__brochure.pdf",
|
| 63 |
-
"source_quote": "extracted from PDF policy document by NIM DeepSeek-V4 (D-019); see source PDF for verbatim"
|
| 64 |
-
},
|
| 65 |
-
"initial_waiting_period_days": {
|
| 66 |
-
"value": 30,
|
| 67 |
-
"unit": null,
|
| 68 |
-
"source_pdf_path": "rag/corpus/aditya-birla/activ-one__brochure.pdf",
|
| 69 |
-
"source_quote": "extracted from PDF policy document by NIM DeepSeek-V4 (D-019); see source PDF for verbatim"
|
| 70 |
-
},
|
| 71 |
-
"pre_existing_disease_waiting_months": {
|
| 72 |
-
"value": 36,
|
| 73 |
-
"unit": null,
|
| 74 |
-
"source_pdf_path": "rag/corpus/aditya-birla/activ-one__brochure.pdf",
|
| 75 |
-
"source_quote": "extracted from PDF policy document by NIM DeepSeek-V4 (D-019); see source PDF for verbatim"
|
| 76 |
-
},
|
| 77 |
-
"specific_disease_waiting_months": {
|
| 78 |
-
"value": 24,
|
| 79 |
-
"unit": null,
|
| 80 |
-
"source_pdf_path": "rag/corpus/aditya-birla/activ-one__brochure.pdf",
|
| 81 |
-
"source_quote": "extracted from PDF policy document by NIM DeepSeek-V4 (D-019); see source PDF for verbatim"
|
| 82 |
-
},
|
| 83 |
-
"maternity_waiting_months": {
|
| 84 |
-
"value": null,
|
| 85 |
-
"unit": null,
|
| 86 |
-
"source_pdf_path": "rag/corpus/aditya-birla/activ-one__brochure.pdf",
|
| 87 |
-
"source_quote": "not extracted from this PDF (field absent or LLM unable to infer)"
|
| 88 |
-
},
|
| 89 |
-
"pre_hospitalization_days": {
|
| 90 |
-
"value": 60,
|
| 91 |
-
"unit": null,
|
| 92 |
-
"source_pdf_path": "rag/corpus/aditya-birla/activ-one__brochure.pdf",
|
| 93 |
-
"source_quote": "extracted from PDF policy document by NIM DeepSeek-V4 (D-019); see source PDF for verbatim"
|
| 94 |
-
},
|
| 95 |
-
"post_hospitalization_days": {
|
| 96 |
-
"value": 180,
|
| 97 |
-
"unit": null,
|
| 98 |
-
"source_pdf_path": "rag/corpus/aditya-birla/activ-one__brochure.pdf",
|
| 99 |
-
"source_quote": "extracted from PDF policy document by NIM DeepSeek-V4 (D-019); see source PDF for verbatim"
|
| 100 |
-
},
|
| 101 |
-
"day_care_treatments_count": {
|
| 102 |
-
"value": null,
|
| 103 |
-
"unit": null,
|
| 104 |
-
"source_pdf_path": "rag/corpus/aditya-birla/activ-one__brochure.pdf",
|
| 105 |
-
"source_quote": "not extracted from this PDF (field absent or LLM unable to infer)"
|
| 106 |
-
},
|
| 107 |
-
"network_hospital_count": {
|
| 108 |
-
"value": 11000,
|
| 109 |
-
"unit": null,
|
| 110 |
-
"source_pdf_path": "rag/corpus/aditya-birla/activ-one__brochure.pdf",
|
| 111 |
-
"source_quote": "extracted from PDF policy document by NIM DeepSeek-V4 (D-019); see source PDF for verbatim"
|
| 112 |
-
},
|
| 113 |
-
"co_payment_pct": {
|
| 114 |
-
"value": null,
|
| 115 |
-
"unit": "percent",
|
| 116 |
-
"source_pdf_path": "rag/corpus/aditya-birla/activ-one__brochure.pdf",
|
| 117 |
-
"source_quote": "not extracted from this PDF (field absent or LLM unable to infer)"
|
| 118 |
-
},
|
| 119 |
-
"room_rent_capped_at_pct_of_si": {
|
| 120 |
-
"value": null,
|
| 121 |
-
"unit": "percent",
|
| 122 |
-
"source_pdf_path": "rag/corpus/aditya-birla/activ-one__brochure.pdf",
|
| 123 |
-
"source_quote": "not extracted from this PDF (field absent or LLM unable to infer)"
|
| 124 |
-
},
|
| 125 |
-
"policy_term_options_years": {
|
| 126 |
-
"value": null,
|
| 127 |
-
"unit": "years",
|
| 128 |
-
"source_pdf_path": "rag/corpus/aditya-birla/activ-one__brochure.pdf",
|
| 129 |
-
"source_quote": "not extracted from this PDF (field absent or LLM unable to infer)"
|
| 130 |
-
},
|
| 131 |
-
"claim_settlement_ratio_pct": {
|
| 132 |
-
"value": null,
|
| 133 |
-
"unit": "percent",
|
| 134 |
-
"source_pdf_path": "rag/corpus/aditya-birla/activ-one__brochure.pdf",
|
| 135 |
-
"source_quote": "not extracted from this PDF (field absent or LLM unable to infer)"
|
| 136 |
-
},
|
| 137 |
-
"incurred_claim_ratio_pct": {
|
| 138 |
-
"value": null,
|
| 139 |
-
"unit": "percent",
|
| 140 |
-
"source_pdf_path": "rag/corpus/aditya-birla/activ-one__brochure.pdf",
|
| 141 |
-
"source_quote": "not extracted from this PDF (field absent or LLM unable to infer)"
|
| 142 |
-
},
|
| 143 |
-
"complaint_per_10k_claims": {
|
| 144 |
-
"value": null,
|
| 145 |
-
"unit": null,
|
| 146 |
-
"source_pdf_path": "rag/corpus/aditya-birla/activ-one__brochure.pdf",
|
| 147 |
-
"source_quote": "not extracted from this PDF (field absent or LLM unable to infer)"
|
| 148 |
-
}
|
| 149 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@@ -1,138 +0,0 @@
|
|
| 1 |
-
{
|
| 2 |
-
"policy_id": "royal-sundaram__family-plus__brochure",
|
| 3 |
-
"policy_name": "Family Plus",
|
| 4 |
-
"insurer_slug": "royal-sundaram",
|
| 5 |
-
"source_pdf_path": "rag/corpus/royal-sundaram/family-plus__brochure.pdf",
|
| 6 |
-
"uin_code": {
|
| 7 |
-
"value": "RSAHLIP22200V032122",
|
| 8 |
-
"unit": null,
|
| 9 |
-
"source_pdf_path": "rag/corpus/royal-sundaram/family-plus__brochure.pdf",
|
| 10 |
-
"source_quote": "extracted from PDF policy document by NIM DeepSeek-V4 (D-019); see source PDF for verbatim"
|
| 11 |
-
},
|
| 12 |
-
"min_entry_age": {
|
| 13 |
-
"value": null,
|
| 14 |
-
"unit": "years",
|
| 15 |
-
"source_pdf_path": "rag/corpus/royal-sundaram/family-plus__brochure.pdf",
|
| 16 |
-
"source_quote": "not extracted from this PDF (field absent or LLM unable to infer)"
|
| 17 |
-
},
|
| 18 |
-
"max_entry_age": {
|
| 19 |
-
"value": null,
|
| 20 |
-
"unit": "years",
|
| 21 |
-
"source_pdf_path": "rag/corpus/royal-sundaram/family-plus__brochure.pdf",
|
| 22 |
-
"source_quote": "not extracted from this PDF (field absent or LLM unable to infer)"
|
| 23 |
-
},
|
| 24 |
-
"max_renewal_age": {
|
| 25 |
-
"value": 999,
|
| 26 |
-
"unit": "years",
|
| 27 |
-
"source_pdf_path": "rag/corpus/royal-sundaram/family-plus__brochure.pdf",
|
| 28 |
-
"source_quote": "extracted from PDF policy document by NIM DeepSeek-V4 (D-019); see source PDF for verbatim"
|
| 29 |
-
},
|
| 30 |
-
"min_child_entry_age": {
|
| 31 |
-
"value": null,
|
| 32 |
-
"unit": "days",
|
| 33 |
-
"source_pdf_path": "rag/corpus/royal-sundaram/family-plus__brochure.pdf",
|
| 34 |
-
"source_quote": "not extracted from this PDF (field absent or LLM unable to infer)"
|
| 35 |
-
},
|
| 36 |
-
"sum_insured_options": {
|
| 37 |
-
"value": null,
|
| 38 |
-
"unit": "INR",
|
| 39 |
-
"source_pdf_path": "rag/corpus/royal-sundaram/family-plus__brochure.pdf",
|
| 40 |
-
"source_quote": "not extracted from this PDF (field absent or LLM unable to infer)"
|
| 41 |
-
},
|
| 42 |
-
"grace_period": {
|
| 43 |
-
"value": 30,
|
| 44 |
-
"unit": "days",
|
| 45 |
-
"source_pdf_path": "rag/corpus/royal-sundaram/family-plus__brochure.pdf",
|
| 46 |
-
"source_quote": "extracted from PDF policy document by NIM DeepSeek-V4 (D-019); see source PDF for verbatim"
|
| 47 |
-
},
|
| 48 |
-
"free_look_period": {
|
| 49 |
-
"value": 30,
|
| 50 |
-
"unit": "days",
|
| 51 |
-
"source_pdf_path": "rag/corpus/royal-sundaram/family-plus__brochure.pdf",
|
| 52 |
-
"source_quote": "extracted from PDF policy document by NIM DeepSeek-V4 (D-019); see source PDF for verbatim"
|
| 53 |
-
},
|
| 54 |
-
"initial_waiting_period_days": {
|
| 55 |
-
"value": 30,
|
| 56 |
-
"unit": null,
|
| 57 |
-
"source_pdf_path": "rag/corpus/royal-sundaram/family-plus__brochure.pdf",
|
| 58 |
-
"source_quote": "extracted from PDF policy document by NIM DeepSeek-V4 (D-019); see source PDF for verbatim"
|
| 59 |
-
},
|
| 60 |
-
"pre_existing_disease_waiting_months": {
|
| 61 |
-
"value": 36,
|
| 62 |
-
"unit": null,
|
| 63 |
-
"source_pdf_path": "rag/corpus/royal-sundaram/family-plus__brochure.pdf",
|
| 64 |
-
"source_quote": "extracted from PDF policy document by NIM DeepSeek-V4 (D-019); see source PDF for verbatim"
|
| 65 |
-
},
|
| 66 |
-
"specific_disease_waiting_months": {
|
| 67 |
-
"value": 24,
|
| 68 |
-
"unit": null,
|
| 69 |
-
"source_pdf_path": "rag/corpus/royal-sundaram/family-plus__brochure.pdf",
|
| 70 |
-
"source_quote": "extracted from PDF policy document by NIM DeepSeek-V4 (D-019); see source PDF for verbatim"
|
| 71 |
-
},
|
| 72 |
-
"maternity_waiting_months": {
|
| 73 |
-
"value": 24,
|
| 74 |
-
"unit": null,
|
| 75 |
-
"source_pdf_path": "rag/corpus/royal-sundaram/family-plus__brochure.pdf",
|
| 76 |
-
"source_quote": "extracted from PDF policy document by NIM DeepSeek-V4 (D-019); see source PDF for verbatim"
|
| 77 |
-
},
|
| 78 |
-
"pre_hospitalization_days": {
|
| 79 |
-
"value": 60,
|
| 80 |
-
"unit": null,
|
| 81 |
-
"source_pdf_path": "rag/corpus/royal-sundaram/family-plus__brochure.pdf",
|
| 82 |
-
"source_quote": "extracted from PDF policy document by NIM DeepSeek-V4 (D-019); see source PDF for verbatim"
|
| 83 |
-
},
|
| 84 |
-
"post_hospitalization_days": {
|
| 85 |
-
"value": 90,
|
| 86 |
-
"unit": null,
|
| 87 |
-
"source_pdf_path": "rag/corpus/royal-sundaram/family-plus__brochure.pdf",
|
| 88 |
-
"source_quote": "extracted from PDF policy document by NIM DeepSeek-V4 (D-019); see source PDF for verbatim"
|
| 89 |
-
},
|
| 90 |
-
"day_care_treatments_count": {
|
| 91 |
-
"value": null,
|
| 92 |
-
"unit": null,
|
| 93 |
-
"source_pdf_path": "rag/corpus/royal-sundaram/family-plus__brochure.pdf",
|
| 94 |
-
"source_quote": "not extracted from this PDF (field absent or LLM unable to infer)"
|
| 95 |
-
},
|
| 96 |
-
"network_hospital_count": {
|
| 97 |
-
"value": null,
|
| 98 |
-
"unit": null,
|
| 99 |
-
"source_pdf_path": "rag/corpus/royal-sundaram/family-plus__brochure.pdf",
|
| 100 |
-
"source_quote": "not extracted from this PDF (field absent or LLM unable to infer)"
|
| 101 |
-
},
|
| 102 |
-
"co_payment_pct": {
|
| 103 |
-
"value": null,
|
| 104 |
-
"unit": "percent",
|
| 105 |
-
"source_pdf_path": "rag/corpus/royal-sundaram/family-plus__brochure.pdf",
|
| 106 |
-
"source_quote": "not extracted from this PDF (field absent or LLM unable to infer)"
|
| 107 |
-
},
|
| 108 |
-
"room_rent_capped_at_pct_of_si": {
|
| 109 |
-
"value": null,
|
| 110 |
-
"unit": "percent",
|
| 111 |
-
"source_pdf_path": "rag/corpus/royal-sundaram/family-plus__brochure.pdf",
|
| 112 |
-
"source_quote": "not extracted from this PDF (field absent or LLM unable to infer)"
|
| 113 |
-
},
|
| 114 |
-
"policy_term_options_years": {
|
| 115 |
-
"value": null,
|
| 116 |
-
"unit": "years",
|
| 117 |
-
"source_pdf_path": "rag/corpus/royal-sundaram/family-plus__brochure.pdf",
|
| 118 |
-
"source_quote": "not extracted from this PDF (field absent or LLM unable to infer)"
|
| 119 |
-
},
|
| 120 |
-
"claim_settlement_ratio_pct": {
|
| 121 |
-
"value": null,
|
| 122 |
-
"unit": "percent",
|
| 123 |
-
"source_pdf_path": "rag/corpus/royal-sundaram/family-plus__brochure.pdf",
|
| 124 |
-
"source_quote": "not extracted from this PDF (field absent or LLM unable to infer)"
|
| 125 |
-
},
|
| 126 |
-
"incurred_claim_ratio_pct": {
|
| 127 |
-
"value": null,
|
| 128 |
-
"unit": "percent",
|
| 129 |
-
"source_pdf_path": "rag/corpus/royal-sundaram/family-plus__brochure.pdf",
|
| 130 |
-
"source_quote": "not extracted from this PDF (field absent or LLM unable to infer)"
|
| 131 |
-
},
|
| 132 |
-
"complaint_per_10k_claims": {
|
| 133 |
-
"value": null,
|
| 134 |
-
"unit": null,
|
| 135 |
-
"source_pdf_path": "rag/corpus/royal-sundaram/family-plus__brochure.pdf",
|
| 136 |
-
"source_quote": "not extracted from this PDF (field absent or LLM unable to infer)"
|
| 137 |
-
}
|
| 138 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@@ -4,7 +4,7 @@ This file is read by Claude Code (and any compatible AI tool) at the start of a
|
|
| 4 |
|
| 5 |
## Project at a glance
|
| 6 |
|
| 7 |
-
- **What:** a voice-first AI advisor for Indian health insurance — RAG over a curated
|
| 8 |
- **Live:** https://rohitsar567-insurancebot.hf.space (HF Space; rebuild triggered on every push to `origin main`).
|
| 9 |
- **Repos:** `origin` is the HF Space at `huggingface.co/spaces/rohitsar567/InsuranceBot`. `github` is the mirror at `github.com/rohitsar567/insurance-sales-bot`. Data lives separately at `huggingface.co/datasets/rohitsar567/insurance-bot-data` (with a GitHub mirror that uses LFS).
|
| 10 |
- **Local dev path:** `~/Developer/Insurance Sales Bot/` (NOT `~/Documents/Personal/AI Work/...` — the older path that occasionally shows up in stale scripts; iCloud-synced + TCC-restricted).
|
|
@@ -44,7 +44,7 @@ Every LLM role is a `NimChainLLM` candidate pool, NOT a hardcoded single model.
|
|
| 44 |
- **Recommendation closer wired (KI-105, `8a58fa1`).** `RECOMMENDATION_CLOSER_PHRASES` frozenset ("show me the top 3", "rank", "pitch me", "compare X vs Y") classified as `recommendation` / `comparison` BEFORE the `FACT_FIND_TRIGGERS` check, so a fully-fact-found user can never get bounced back into fact-find. Persona prompt gets `RECOMMENDATION_CLOSER_ADDENDUM` with a strict 3-policy ranked-shortlist contract (3 policies, one-line rationale each, IRDAI disclaimer, no hedging). ADR-008 extended with closer-mode subsection.
|
| 45 |
- **Graceful TimeoutError + Exception on `/api/chat` (KI-106, `565bf31`).** `handle_turn(...)` wrapped in `asyncio.wait_for(45s)` with explicit `except asyncio.TimeoutError` + broad `except Exception`. Both return HTTP 200 with `source="graceful_timeout"` / `graceful_exception"` and an in-character recovery sentence instead of HTTP 500. Internal `logger.exception` still captures the full traceback for admin observability.
|
| 46 |
- **`_safe_collection_get` helper for Chroma (KI-107, `3a9a14f`).** Wraps every `collection.get(ids=[...])` and `collection.get(where=...)` call in `backend/profile_rag.py` in `try / except Exception`, returns `None` on miss with `logger.warning(...)`. Closes the KI-102 per-session profile lookup raising on never-existed sessions on HF Space (Chroma version-dependent behaviour). `None` return is treated identically to a `session_id` mismatch — fail-closed.
|
| 47 |
-
- **Chroma collection re-ingested + profile-write hardening (KI-112).** KI-111 wrapped `.query()` so the bot survived the corruption, but every embedding query was raising `InternalError: Error executing plan: Internal error: Error finding id` and silently returning empty retrieval — the bot was answering
|
| 48 |
- **Chain budgets:** brain 20s × 35s total, fast-brain 12s × 22s total, judge 30s × 75s total. With KI-080 only PRIMARY + BACKUP consume budget in the common case — leaves headroom for KI-079 escalation. KI-084 per-phase httpx timeouts are nested inside these budgets.
|
| 49 |
- **STT/TTS/Translator** = Sarvam (Saarika v2.5 / Bulbul v2 / Sarvam-M). **Embeddings** = local BGE-small-en-v1.5.
|
| 50 |
- **Provider keys.** `NVIDIA_NIM_API_KEY` + `GROQ_API_KEY` + `OPENROUTER_API_KEY` required in `.env` (local) and HF Space environment (production — KI-081).
|
|
@@ -110,7 +110,7 @@ Three independent safety layers against ChromaDB HNSW bloat:
|
|
| 110 |
## What to read for what
|
| 111 |
|
| 112 |
- **System tour:** `README.md` (the master entry).
|
| 113 |
-
- **Decisions with alternatives:** `70-docs/60-decisions/ADR-*.md` (28 ADRs as of 2026-05-
|
| 114 |
- **Production-readiness defect register:** `80-audit/ENTERPRISE_AUDIT.md`.
|
| 115 |
- **Data lineage:** `kb/AUDIT_TRAIL.md`.
|
| 116 |
- **Tests:** `tests/test_routing_regression.py` (15 tests pinning routing + load-balance invariants).
|
|
@@ -127,6 +127,7 @@ Three independent safety layers against ChromaDB HNSW bloat:
|
|
| 127 |
- **Never add `"qa"` to `CONTEXT_DEPENDENT_INTENTS`** — that brings back the headline KI-018 bug where QA questions get trapped in fact-find.
|
| 128 |
- **Voyage free tier is 3 RPM.** Affects only ingest (corpus rebuild); query-time uses Chroma vectors, no Voyage call. Don't worry about it on the hot path.
|
| 129 |
- **HF Space rebuild is 5-8 min per push.** Audits running against the live endpoint should be done AFTER the desired image is stably deployed, or the persona transcripts span multiple builds and become useless for A/B.
|
|
|
|
| 130 |
|
| 131 |
---
|
| 132 |
|
|
|
|
| 4 |
|
| 5 |
## Project at a glance
|
| 6 |
|
| 7 |
+
- **What:** a voice-first AI advisor for Indian health insurance — RAG over a curated 224-document corpus (206 policies + 18 regulatory docs, 7,295 chunks), Sarvam STT/TTS, 4-gate faithfulness, 20-insurer scorecard.
|
| 8 |
- **Live:** https://rohitsar567-insurancebot.hf.space (HF Space; rebuild triggered on every push to `origin main`).
|
| 9 |
- **Repos:** `origin` is the HF Space at `huggingface.co/spaces/rohitsar567/InsuranceBot`. `github` is the mirror at `github.com/rohitsar567/insurance-sales-bot`. Data lives separately at `huggingface.co/datasets/rohitsar567/insurance-bot-data` (with a GitHub mirror that uses LFS).
|
| 10 |
- **Local dev path:** `~/Developer/Insurance Sales Bot/` (NOT `~/Documents/Personal/AI Work/...` — the older path that occasionally shows up in stale scripts; iCloud-synced + TCC-restricted).
|
|
|
|
| 44 |
- **Recommendation closer wired (KI-105, `8a58fa1`).** `RECOMMENDATION_CLOSER_PHRASES` frozenset ("show me the top 3", "rank", "pitch me", "compare X vs Y") classified as `recommendation` / `comparison` BEFORE the `FACT_FIND_TRIGGERS` check, so a fully-fact-found user can never get bounced back into fact-find. Persona prompt gets `RECOMMENDATION_CLOSER_ADDENDUM` with a strict 3-policy ranked-shortlist contract (3 policies, one-line rationale each, IRDAI disclaimer, no hedging). ADR-008 extended with closer-mode subsection.
|
| 45 |
- **Graceful TimeoutError + Exception on `/api/chat` (KI-106, `565bf31`).** `handle_turn(...)` wrapped in `asyncio.wait_for(45s)` with explicit `except asyncio.TimeoutError` + broad `except Exception`. Both return HTTP 200 with `source="graceful_timeout"` / `graceful_exception"` and an in-character recovery sentence instead of HTTP 500. Internal `logger.exception` still captures the full traceback for admin observability.
|
| 46 |
- **`_safe_collection_get` helper for Chroma (KI-107, `3a9a14f`).** Wraps every `collection.get(ids=[...])` and `collection.get(where=...)` call in `backend/profile_rag.py` in `try / except Exception`, returns `None` on miss with `logger.warning(...)`. Closes the KI-102 per-session profile lookup raising on never-existed sessions on HF Space (Chroma version-dependent behaviour). `None` return is treated identically to a `session_id` mismatch — fail-closed.
|
| 47 |
+
- **Chroma collection re-ingested + profile-write hardening (KI-112).** KI-111 wrapped `.query()` so the bot survived the corruption, but every embedding query was raising `InternalError: Error executing plan: Internal error: Error finding id` and silently returning empty retrieval — the bot was answering 206 policies' worth of Qs without access to any policy chunk. Root cause: a pre-KI-102 deploy wrote a `profile_anonymous` chunk with NO `session_id` metadata; that legacy row poisoned every later `coll.query(where={"doc_type": {"$ne": "profile"}})` and the damage spread across HNSW segments (full collection extraction surfaced 1580 / 7356 chunks across 148 policies as `Error getting embedding`). Fix: full re-ingest from `rag/corpus/` PDFs → clean `rag/vectors/` + two new write-time guards in `backend/profile_rag.py::upsert_profile_chunk` — (a) reject `session_id` that isn't a non-empty `str`, (b) reject any embedding whose length ≠ `embedder.dimension` or that contains `None`. Both guards log a `WARNING` and return without writing, so a future model-drift or bad-input event can't re-poison HNSW. 4 new regression tests in `tests/test_profile_rag_isolation.py::TestUpsertRejectsBadInputs`. Repaired vectors uploaded to HF dataset `rohitsar567/insurance-bot-data` via `tools/upload_vectors_to_dataset.py` so the Space rebuild picks up the clean index. Old corrupted Chroma archived at `rag/_hf_dataset_backup/rag/vectors.corrupted.<ts>/`.
|
| 48 |
- **Chain budgets:** brain 20s × 35s total, fast-brain 12s × 22s total, judge 30s × 75s total. With KI-080 only PRIMARY + BACKUP consume budget in the common case — leaves headroom for KI-079 escalation. KI-084 per-phase httpx timeouts are nested inside these budgets.
|
| 49 |
- **STT/TTS/Translator** = Sarvam (Saarika v2.5 / Bulbul v2 / Sarvam-M). **Embeddings** = local BGE-small-en-v1.5.
|
| 50 |
- **Provider keys.** `NVIDIA_NIM_API_KEY` + `GROQ_API_KEY` + `OPENROUTER_API_KEY` required in `.env` (local) and HF Space environment (production — KI-081).
|
|
|
|
| 110 |
## What to read for what
|
| 111 |
|
| 112 |
- **System tour:** `README.md` (the master entry).
|
| 113 |
+
- **Decisions with alternatives:** `70-docs/60-decisions/ADR-*.md` (28 ADRs as of 2026-05-15).
|
| 114 |
- **Production-readiness defect register:** `80-audit/ENTERPRISE_AUDIT.md`.
|
| 115 |
- **Data lineage:** `kb/AUDIT_TRAIL.md`.
|
| 116 |
- **Tests:** `tests/test_routing_regression.py` (15 tests pinning routing + load-balance invariants).
|
|
|
|
| 127 |
- **Never add `"qa"` to `CONTEXT_DEPENDENT_INTENTS`** — that brings back the headline KI-018 bug where QA questions get trapped in fact-find.
|
| 128 |
- **Voyage free tier is 3 RPM.** Affects only ingest (corpus rebuild); query-time uses Chroma vectors, no Voyage call. Don't worry about it on the hot path.
|
| 129 |
- **HF Space rebuild is 5-8 min per push.** Audits running against the live endpoint should be done AFTER the desired image is stably deployed, or the persona transcripts span multiple builds and become useless for A/B.
|
| 130 |
+
- **Two image-only PDFs are explicitly EXCLUDED from the ingest pipeline:** `royal-sundaram/family-plus__brochure.pdf` and `aditya-birla/activ-one__brochure.pdf` (pdfplumber returns 0 chars; OCR is out of scope). Activ One coverage is provided via the `activ-health-individual` wordings policy — do not re-add either brochure.
|
| 131 |
|
| 132 |
---
|
| 133 |
|
|
@@ -70,7 +70,7 @@ COPY 40-data ./40-data
|
|
| 70 |
# (7356 chunks from a prior ingest) instead of the freshly-uploaded
|
| 71 |
# cleaned one (3799 chunks). Bump CACHE_BUST manually each time the
|
| 72 |
# dataset is re-uploaded; the value just needs to change.
|
| 73 |
-
ARG DATASET_CACHE_BUST=2026-05-15-
|
| 74 |
RUN echo "Dataset cache bust: ${DATASET_CACHE_BUST}" && python -c "\
|
| 75 |
from huggingface_hub import snapshot_download; \
|
| 76 |
snapshot_download(\
|
|
|
|
| 70 |
# (7356 chunks from a prior ingest) instead of the freshly-uploaded
|
| 71 |
# cleaned one (3799 chunks). Bump CACHE_BUST manually each time the
|
| 72 |
# dataset is re-uploaded; the value just needs to change.
|
| 73 |
+
ARG DATASET_CACHE_BUST=2026-05-15-ki126-v1
|
| 74 |
RUN echo "Dataset cache bust: ${DATASET_CACHE_BUST}" && python -c "\
|
| 75 |
from huggingface_hub import snapshot_download; \
|
| 76 |
snapshot_download(\
|
|
@@ -12,7 +12,7 @@ short_description: Voice-first AI advisor for Indian health insurance
|
|
| 12 |
|
| 13 |
# Insurance Sales Portfolio Expert
|
| 14 |
|
| 15 |
-
**A voice-first, BFSI-compliance-grade AI advisor for Indian health insurance.** Built as a Sarvam AI take-home, deployed on HuggingFace Spaces, with grounding, citations, faithfulness gates, and a curated
|
| 16 |
|
| 17 |
| | |
|
| 18 |
|---|---|
|
|
@@ -41,7 +41,7 @@ short_description: Voice-first AI advisor for Indian health insurance
|
|
| 41 |
|
| 42 |
## 1. Executive summary
|
| 43 |
|
| 44 |
-
A **voice-first health-insurance advisor** for Indian buyers, grounded in a curated corpus of **
|
| 45 |
|
| 46 |
The bot is **consumer-facing in experience, B2B in commercial application.** The realistic deployment is an insurer or aggregator white-labelling this advisor on top of Sarvam's ASR/TTS/LLM stack. The build deliberately optimises for the artifacts a BFSI buyer would audit: provenance, refusal behaviour, eval rigor, citation grammar.
|
| 47 |
|
|
@@ -519,8 +519,8 @@ The bot is two flows running together — the customer's experience and the tech
|
|
| 519 |
│
|
| 520 |
▼
|
| 521 |
┌─────────────────────────────────────────────────────────────────────────┐
|
| 522 |
-
│
|
| 523 |
-
│ ·
|
| 524 |
│ · 18 regulatory PDFs (IRDAI master circulars, Insurance Act, etc.) │
|
| 525 |
│ · Playwright same-origin fetch past Akamai for irdai.gov.in │
|
| 526 |
└─────────────────────────────────────────────────────────────────────────┘
|
|
@@ -592,17 +592,17 @@ Every D-NNN in the legacy decisions log is now a stand-alone ADR — see [`70-do
|
|
| 592 |
|
| 593 |
## 5. Data architecture
|
| 594 |
|
| 595 |
-
### 5.1 The corpus (
|
| 596 |
|
| 597 |
| Type | Count | Source | Notes |
|
| 598 |
|---|---|---|---|
|
| 599 |
-
| Product PDFs |
|
| 600 |
| Regulatory PDFs | 18 | irdai.gov.in, indiacode.nic.in, others | Playwright rescue past Akamai |
|
| 601 |
-
| Structured extractions (JSON) |
|
| 602 |
-
| Vector chunks (Chroma) |
|
| 603 |
| Policy markdown sheets | 224 | Generated from extractions | One per policy_id in `kb/policies/` |
|
| 604 |
|
| 605 |
-
19 insurers:
|
| 606 |
|
| 607 |
### 5.2 Ingestion pipeline
|
| 608 |
|
|
@@ -808,7 +808,7 @@ npm run dev # http://localhost:3000
|
|
| 808 |
|
| 809 |
- Frontend at `localhost:3000` should show the chat UI.
|
| 810 |
- `localhost:7860/api/health` should return `{"status":"ok", "providers_ok": {"sarvam": true, "nvidia_nim": true}}`.
|
| 811 |
-
- `localhost:7860/api/coverage` should return
|
| 812 |
|
| 813 |
---
|
| 814 |
|
|
@@ -881,7 +881,7 @@ This section is written so a fresh **Claude Code** session pointed at an empty d
|
|
| 881 |
|
| 882 |
### 10.2 Build sequence
|
| 883 |
|
| 884 |
-
1. **Corpus acquisition** — use `tools/` agent crawl + Playwright fallback (see [ADR-017](70-docs/60-decisions/ADR-017-irdai-corpus-playwright-rescue.md)) to fetch 19 insurers' PDFs + 18 regulatory PDFs into `rag/corpus/`.
|
| 885 |
|
| 886 |
2. **Structured extraction** — `rag/extract.py` runs fast-brain chain (Nemotron 30B / Qwen 80B / Groq Llama-3.3 fallback) over each PDF with the 62-field Pydantic schema. Output to `rag/extracted/<policy_id>.json`.
|
| 887 |
|
|
@@ -919,7 +919,7 @@ A new Claude Code session should ingest these to bootstrap understanding:
|
|
| 919 |
|---|---|---|
|
| 920 |
| IRDAI URLs return Akamai bot-challenge HTML | Initial corpus crawl | Playwright same-origin fetch (ADR-017) |
|
| 921 |
| Sarvam-M output cap 2048 tokens truncates JSON | Extraction phase | Use fast-brain chain (Nemotron 30B / Qwen 80B / Groq Llama-3.3 fallback) instead (ADR-019) |
|
| 922 |
-
| Voyage 3 RPM free-tier blocks
|
| 923 |
| Multiple LLM providers' free-tier limits collide on grader | Eval phase | Consolidate to NIM (ADR-019) |
|
| 924 |
| HF Space 1 GB cap rejects vector DB | Deploy phase | Split data to HF Dataset (ADR-020) |
|
| 925 |
| Chroma sqlite3 (157 MB) exceeds GitHub 100 MB per-file limit | GitHub mirror | Use Git LFS for the data repo (ADR-024) |
|
|
@@ -931,7 +931,7 @@ A new Claude Code session should ingest these to bootstrap understanding:
|
|
| 931 |
|
| 932 |
## Footer
|
| 933 |
|
| 934 |
-
**Authored 2026-05-13. Last updated 2026-05-
|
| 935 |
|
| 936 |
Live demo: https://rohitsar567-insurancebot.hf.space
|
| 937 |
Code: https://github.com/rohitsar567/insurance-sales-bot
|
|
|
|
| 12 |
|
| 13 |
# Insurance Sales Portfolio Expert
|
| 14 |
|
| 15 |
+
**A voice-first, BFSI-compliance-grade AI advisor for Indian health insurance.** Built as a Sarvam AI take-home, deployed on HuggingFace Spaces, with grounding, citations, faithfulness gates, and a curated 224-document corpus.
|
| 16 |
|
| 17 |
| | |
|
| 18 |
|---|---|
|
|
|
|
| 41 |
|
| 42 |
## 1. Executive summary
|
| 43 |
|
| 44 |
+
A **voice-first health-insurance advisor** for Indian buyers, grounded in a curated corpus of **224 documents** — 206 product documents from 20 leading insurers plus 18 IRDAI / regulatory documents — extracted into a 62-field structured schema with a rules-based A–F scorecard and a **4-gate hallucination defense** on every reply.
|
| 45 |
|
| 46 |
The bot is **consumer-facing in experience, B2B in commercial application.** The realistic deployment is an insurer or aggregator white-labelling this advisor on top of Sarvam's ASR/TTS/LLM stack. The build deliberately optimises for the artifacts a BFSI buyer would audit: provenance, refusal behaviour, eval rigor, citation grammar.
|
| 47 |
|
|
|
|
| 519 |
│
|
| 520 |
▼
|
| 521 |
┌─────────────────────────────────────────────────────────────────────────┐
|
| 522 |
+
│ 224 source PDFs in HF Dataset rohitsar567/insurance-bot-data │
|
| 523 |
+
│ · 206 product PDFs across 20 insurers │
|
| 524 |
│ · 18 regulatory PDFs (IRDAI master circulars, Insurance Act, etc.) │
|
| 525 |
│ · Playwright same-origin fetch past Akamai for irdai.gov.in │
|
| 526 |
└─────────────────────────────────────────────────────────────────────────┘
|
|
|
|
| 592 |
|
| 593 |
## 5. Data architecture
|
| 594 |
|
| 595 |
+
### 5.1 The corpus (224 documents)
|
| 596 |
|
| 597 |
| Type | Count | Source | Notes |
|
| 598 |
|---|---|---|---|
|
| 599 |
+
| Product PDFs | 206 | 19 insurers' public websites | Wordings + Brochures + CIS |
|
| 600 |
| Regulatory PDFs | 18 | irdai.gov.in, indiacode.nic.in, others | Playwright rescue past Akamai |
|
| 601 |
+
| Structured extractions (JSON) | 206 | fast-brain chain (Nemotron 30B / Qwen 80B / Groq Llama-3.3 fallback) extraction | 62-field Pydantic schema |
|
| 602 |
+
| Vector chunks (Chroma) | 7,295 | BGE-small @ 800/120 | One sqlite + HNSW binaries |
|
| 603 |
| Policy markdown sheets | 224 | Generated from extractions | One per policy_id in `kb/policies/` |
|
| 604 |
|
| 605 |
+
19 insurers: Acko, Aditya Birla, Bajaj Allianz, Care Health, Cholamandalam MS, Go Digit, HDFC ERGO, ICICI Lombard, IFFCO Tokio, ManipalCigna, National Insurance, New India Assurance, Niva Bupa, Oriental Insurance, Reliance General, Royal Sundaram, SBI General, Star Health, Tata AIG.
|
| 606 |
|
| 607 |
### 5.2 Ingestion pipeline
|
| 608 |
|
|
|
|
| 808 |
|
| 809 |
- Frontend at `localhost:3000` should show the chat UI.
|
| 810 |
- `localhost:7860/api/health` should return `{"status":"ok", "providers_ok": {"sarvam": true, "nvidia_nim": true}}`.
|
| 811 |
+
- `localhost:7860/api/coverage` should return 206 policies indexed.
|
| 812 |
|
| 813 |
---
|
| 814 |
|
|
|
|
| 881 |
|
| 882 |
### 10.2 Build sequence
|
| 883 |
|
| 884 |
+
1. **Corpus acquisition** — use `tools/` agent crawl + Playwright fallback (see [ADR-017](70-docs/60-decisions/ADR-017-irdai-corpus-playwright-rescue.md)) to fetch 19 insurers' PDFs (206 product PDFs total) + 18 regulatory PDFs into `rag/corpus/`.
|
| 885 |
|
| 886 |
2. **Structured extraction** — `rag/extract.py` runs fast-brain chain (Nemotron 30B / Qwen 80B / Groq Llama-3.3 fallback) over each PDF with the 62-field Pydantic schema. Output to `rag/extracted/<policy_id>.json`.
|
| 887 |
|
|
|
|
| 919 |
|---|---|---|
|
| 920 |
| IRDAI URLs return Akamai bot-challenge HTML | Initial corpus crawl | Playwright same-origin fetch (ADR-017) |
|
| 921 |
| Sarvam-M output cap 2048 tokens truncates JSON | Extraction phase | Use fast-brain chain (Nemotron 30B / Qwen 80B / Groq Llama-3.3 fallback) instead (ADR-019) |
|
| 922 |
+
| Voyage 3 RPM free-tier blocks 224-PDF ingest | Embedding phase | Switch to local BGE-small (ADR-011) |
|
| 923 |
| Multiple LLM providers' free-tier limits collide on grader | Eval phase | Consolidate to NIM (ADR-019) |
|
| 924 |
| HF Space 1 GB cap rejects vector DB | Deploy phase | Split data to HF Dataset (ADR-020) |
|
| 925 |
| Chroma sqlite3 (157 MB) exceeds GitHub 100 MB per-file limit | GitHub mirror | Use Git LFS for the data repo (ADR-024) |
|
|
|
|
| 931 |
|
| 932 |
## Footer
|
| 933 |
|
| 934 |
+
**Authored 2026-05-13. Last updated 2026-05-15.**
|
| 935 |
|
| 936 |
Live demo: https://rohitsar567-insurancebot.hf.space
|
| 937 |
Code: https://github.com/rohitsar567/insurance-sales-bot
|
|
@@ -4,13 +4,12 @@ _Last synced: 2026-05-14._
|
|
| 4 |
|
| 5 |
Canonical knowledge base for the Insurance Sales Bot. Every user-facing answer, scorecard, and comparison surface must trace back to a file in this directory.
|
| 6 |
|
| 7 |
-
## Policies (
|
| 8 |
|
| 9 |
| Insurer | Policy | UIN | Completeness | KB path |
|
| 10 |
| --- | --- | --- | --- | --- |
|
| 11 |
| Aditya Birla Health Insurance | Activ Assure (Diamond) | `ADIHLIP18077V011718` | — | [`policies/aditya-birla__activ-assure-diamond__wordings.md`](policies/aditya-birla__activ-assure-diamond__wordings.md) |
|
| 12 |
| Aditya Birla Health Insurance | Activ Health Individual | `ADIHLIP24102V052324` | 32% | [`policies/aditya-birla__activ-health-individual__wordings.md`](policies/aditya-birla__activ-health-individual__wordings.md) |
|
| 13 |
-
| Aditya Birla Health Insurance | Activ One | `ADIHLIP24108V012324` | — | [`policies/aditya-birla__activ-one__brochure.md`](policies/aditya-birla__activ-one__brochure.md) |
|
| 14 |
| Aditya Birla Health Insurance | Activ Secure Cancer Secure | `ADIHLIP18076V011718` | 18% | [`policies/aditya-birla__activ-secure-cancer-secure__brochure.md`](policies/aditya-birla__activ-secure-cancer-secure__brochure.md) |
|
| 15 |
| Aditya Birla Health Insurance | Activ Secure Personal Accident Cancer Secure | `ADIHLIP18076V011718` | 23% | [`policies/aditya-birla__activ-secure-personal-accident-cancer-secure__wordings.md`](policies/aditya-birla__activ-secure-personal-accident-cancer-secure__wordings.md) |
|
| 16 |
| Aditya Birla Health Insurance | Aditya Birla Activ Assure Diamond | `ADIHLIP18077V011718` | 82% | [`policies/aditya-birla__activ-assure-diamond.md`](policies/aditya-birla__activ-assure-diamond.md) |
|
|
@@ -240,7 +239,6 @@ Canonical knowledge base for the Insurance Sales Bot. Every user-facing answer,
|
|
| 240 |
| royal-sundaram | Advanced Top Up Health Insurance Plan | `RSAHLIP23029V012223` | — | [`policies/royal-sundaram__advanced-top-up__cis.md`](policies/royal-sundaram__advanced-top-up__cis.md) |
|
| 241 |
| royal-sundaram | Advanced Top Up Health Insurance Plan | `RSAHLIP23029V012223` | — | [`policies/royal-sundaram__advanced-top-up__wordings.md`](policies/royal-sundaram__advanced-top-up__wordings.md) |
|
| 242 |
| royal-sundaram | Arogya Sanjeevani Policy | `RSAHLIP25013V022425` | — | [`policies/royal-sundaram__arogya-sanjeevani__wordings.md`](policies/royal-sundaram__arogya-sanjeevani__wordings.md) |
|
| 243 |
-
| royal-sundaram | Family Plus | `RSAHLIP22200V032122` | — | [`policies/royal-sundaram__family-plus__brochure.md`](policies/royal-sundaram__family-plus__brochure.md) |
|
| 244 |
| royal-sundaram | Family Plus | `RSAHLIP22200V032122` | — | [`policies/royal-sundaram__family-plus__cis.md`](policies/royal-sundaram__family-plus__cis.md) |
|
| 245 |
| royal-sundaram | Family Plus | `RSAHLIP22200V032122` | — | [`policies/royal-sundaram__family-plus__wordings.md`](policies/royal-sundaram__family-plus__wordings.md) |
|
| 246 |
| royal-sundaram | Lifeline (Classic / Supreme / Elite) | `RSAHLIP24146V032324` | — | [`policies/royal-sundaram__lifeline__brochure.md`](policies/royal-sundaram__lifeline__brochure.md) |
|
|
|
|
| 4 |
|
| 5 |
Canonical knowledge base for the Insurance Sales Bot. Every user-facing answer, scorecard, and comparison surface must trace back to a file in this directory.
|
| 6 |
|
| 7 |
+
## Policies (253)
|
| 8 |
|
| 9 |
| Insurer | Policy | UIN | Completeness | KB path |
|
| 10 |
| --- | --- | --- | --- | --- |
|
| 11 |
| Aditya Birla Health Insurance | Activ Assure (Diamond) | `ADIHLIP18077V011718` | — | [`policies/aditya-birla__activ-assure-diamond__wordings.md`](policies/aditya-birla__activ-assure-diamond__wordings.md) |
|
| 12 |
| Aditya Birla Health Insurance | Activ Health Individual | `ADIHLIP24102V052324` | 32% | [`policies/aditya-birla__activ-health-individual__wordings.md`](policies/aditya-birla__activ-health-individual__wordings.md) |
|
|
|
|
| 13 |
| Aditya Birla Health Insurance | Activ Secure Cancer Secure | `ADIHLIP18076V011718` | 18% | [`policies/aditya-birla__activ-secure-cancer-secure__brochure.md`](policies/aditya-birla__activ-secure-cancer-secure__brochure.md) |
|
| 14 |
| Aditya Birla Health Insurance | Activ Secure Personal Accident Cancer Secure | `ADIHLIP18076V011718` | 23% | [`policies/aditya-birla__activ-secure-personal-accident-cancer-secure__wordings.md`](policies/aditya-birla__activ-secure-personal-accident-cancer-secure__wordings.md) |
|
| 15 |
| Aditya Birla Health Insurance | Aditya Birla Activ Assure Diamond | `ADIHLIP18077V011718` | 82% | [`policies/aditya-birla__activ-assure-diamond.md`](policies/aditya-birla__activ-assure-diamond.md) |
|
|
|
|
| 239 |
| royal-sundaram | Advanced Top Up Health Insurance Plan | `RSAHLIP23029V012223` | — | [`policies/royal-sundaram__advanced-top-up__cis.md`](policies/royal-sundaram__advanced-top-up__cis.md) |
|
| 240 |
| royal-sundaram | Advanced Top Up Health Insurance Plan | `RSAHLIP23029V012223` | — | [`policies/royal-sundaram__advanced-top-up__wordings.md`](policies/royal-sundaram__advanced-top-up__wordings.md) |
|
| 241 |
| royal-sundaram | Arogya Sanjeevani Policy | `RSAHLIP25013V022425` | — | [`policies/royal-sundaram__arogya-sanjeevani__wordings.md`](policies/royal-sundaram__arogya-sanjeevani__wordings.md) |
|
|
|
|
| 242 |
| royal-sundaram | Family Plus | `RSAHLIP22200V032122` | — | [`policies/royal-sundaram__family-plus__cis.md`](policies/royal-sundaram__family-plus__cis.md) |
|
| 243 |
| royal-sundaram | Family Plus | `RSAHLIP22200V032122` | — | [`policies/royal-sundaram__family-plus__wordings.md`](policies/royal-sundaram__family-plus__wordings.md) |
|
| 244 |
| royal-sundaram | Lifeline (Classic / Supreme / Elite) | `RSAHLIP24146V032324` | — | [`policies/royal-sundaram__lifeline__brochure.md`](policies/royal-sundaram__lifeline__brochure.md) |
|
|
@@ -1,254 +0,0 @@
|
|
| 1 |
-
---
|
| 2 |
-
policy_id: aditya-birla__activ-one__brochure
|
| 3 |
-
insurer_slug: aditya-birla
|
| 4 |
-
insurer_name: Aditya Birla Health Insurance
|
| 5 |
-
policy_name: "Activ One"
|
| 6 |
-
uin_code: ADIHLIP24108V012324
|
| 7 |
-
---
|
| 8 |
-
|
| 9 |
-
# Activ One
|
| 10 |
-
|
| 11 |
-
**Insurer:** Aditya Birla Health Insurance (`aditya-birla`)
|
| 12 |
-
**Policy ID:** `aditya-birla__activ-one__brochure`
|
| 13 |
-
**UIN:** `ADIHLIP24108V012324`
|
| 14 |
-
|
| 15 |
-
## Identity
|
| 16 |
-
|
| 17 |
-
### UIN code
|
| 18 |
-
|
| 19 |
-
**Value:** ADIHLIP24108V012324
|
| 20 |
-
|
| 21 |
-
**Source quote:**
|
| 22 |
-
|
| 23 |
-
> extracted from PDF policy document by NIM DeepSeek-V4 (D-019); see source PDF for verbatim
|
| 24 |
-
|
| 25 |
-
**Source:** `rag/corpus/aditya-birla/activ-one__brochure.pdf`
|
| 26 |
-
|
| 27 |
-
## Eligibility
|
| 28 |
-
|
| 29 |
-
### Minimum entry age
|
| 30 |
-
|
| 31 |
-
**Value:** _not specified_
|
| 32 |
-
|
| 33 |
-
**Source quote:**
|
| 34 |
-
|
| 35 |
-
> not extracted from this PDF (field absent or LLM unable to infer)
|
| 36 |
-
|
| 37 |
-
**Source:** `rag/corpus/aditya-birla/activ-one__brochure.pdf`
|
| 38 |
-
|
| 39 |
-
### Maximum entry age
|
| 40 |
-
|
| 41 |
-
**Value:** _not specified_
|
| 42 |
-
|
| 43 |
-
**Source quote:**
|
| 44 |
-
|
| 45 |
-
> not extracted from this PDF (field absent or LLM unable to infer)
|
| 46 |
-
|
| 47 |
-
**Source:** `rag/corpus/aditya-birla/activ-one__brochure.pdf`
|
| 48 |
-
|
| 49 |
-
### Maximum renewal age
|
| 50 |
-
|
| 51 |
-
**Value:** 999 years
|
| 52 |
-
|
| 53 |
-
**Source quote:**
|
| 54 |
-
|
| 55 |
-
> extracted from PDF policy document by NIM DeepSeek-V4 (D-019); see source PDF for verbatim
|
| 56 |
-
|
| 57 |
-
**Source:** `rag/corpus/aditya-birla/activ-one__brochure.pdf`
|
| 58 |
-
|
| 59 |
-
### Sum insured options
|
| 60 |
-
|
| 61 |
-
**Value:** 200000, 300000, 500000, 1000000, 2000000, 5000000, 10000000, 20000000, 60000000, 200000000
|
| 62 |
-
|
| 63 |
-
**Source quote:**
|
| 64 |
-
|
| 65 |
-
> extracted from PDF policy document by NIM DeepSeek-V4 (D-019); see source PDF for verbatim
|
| 66 |
-
|
| 67 |
-
**Source:** `rag/corpus/aditya-birla/activ-one__brochure.pdf`
|
| 68 |
-
|
| 69 |
-
## Waiting periods
|
| 70 |
-
|
| 71 |
-
### Initial waiting period (days)
|
| 72 |
-
|
| 73 |
-
**Value:** 30
|
| 74 |
-
|
| 75 |
-
**Source quote:**
|
| 76 |
-
|
| 77 |
-
> extracted from PDF policy document by NIM DeepSeek-V4 (D-019); see source PDF for verbatim
|
| 78 |
-
|
| 79 |
-
**Source:** `rag/corpus/aditya-birla/activ-one__brochure.pdf`
|
| 80 |
-
|
| 81 |
-
### Pre-existing disease waiting (months)
|
| 82 |
-
|
| 83 |
-
**Value:** 36
|
| 84 |
-
|
| 85 |
-
**Source quote:**
|
| 86 |
-
|
| 87 |
-
> extracted from PDF policy document by NIM DeepSeek-V4 (D-019); see source PDF for verbatim
|
| 88 |
-
|
| 89 |
-
**Source:** `rag/corpus/aditya-birla/activ-one__brochure.pdf`
|
| 90 |
-
|
| 91 |
-
### Specific disease waiting (months)
|
| 92 |
-
|
| 93 |
-
**Value:** 24
|
| 94 |
-
|
| 95 |
-
**Source quote:**
|
| 96 |
-
|
| 97 |
-
> extracted from PDF policy document by NIM DeepSeek-V4 (D-019); see source PDF for verbatim
|
| 98 |
-
|
| 99 |
-
**Source:** `rag/corpus/aditya-birla/activ-one__brochure.pdf`
|
| 100 |
-
|
| 101 |
-
### Maternity waiting (months)
|
| 102 |
-
|
| 103 |
-
**Value:** _not specified_
|
| 104 |
-
|
| 105 |
-
**Source quote:**
|
| 106 |
-
|
| 107 |
-
> not extracted from this PDF (field absent or LLM unable to infer)
|
| 108 |
-
|
| 109 |
-
**Source:** `rag/corpus/aditya-birla/activ-one__brochure.pdf`
|
| 110 |
-
|
| 111 |
-
## Coverage scope
|
| 112 |
-
|
| 113 |
-
### Pre-hospitalization (days)
|
| 114 |
-
|
| 115 |
-
**Value:** 60
|
| 116 |
-
|
| 117 |
-
**Source quote:**
|
| 118 |
-
|
| 119 |
-
> extracted from PDF policy document by NIM DeepSeek-V4 (D-019); see source PDF for verbatim
|
| 120 |
-
|
| 121 |
-
**Source:** `rag/corpus/aditya-birla/activ-one__brochure.pdf`
|
| 122 |
-
|
| 123 |
-
### Post-hospitalization (days)
|
| 124 |
-
|
| 125 |
-
**Value:** 180
|
| 126 |
-
|
| 127 |
-
**Source quote:**
|
| 128 |
-
|
| 129 |
-
> extracted from PDF policy document by NIM DeepSeek-V4 (D-019); see source PDF for verbatim
|
| 130 |
-
|
| 131 |
-
**Source:** `rag/corpus/aditya-birla/activ-one__brochure.pdf`
|
| 132 |
-
|
| 133 |
-
### Day-care treatments covered
|
| 134 |
-
|
| 135 |
-
**Value:** _not specified_
|
| 136 |
-
|
| 137 |
-
**Source quote:**
|
| 138 |
-
|
| 139 |
-
> not extracted from this PDF (field absent or LLM unable to infer)
|
| 140 |
-
|
| 141 |
-
**Source:** `rag/corpus/aditya-birla/activ-one__brochure.pdf`
|
| 142 |
-
|
| 143 |
-
## Claims & service
|
| 144 |
-
|
| 145 |
-
### Network hospital count
|
| 146 |
-
|
| 147 |
-
**Value:** 11000
|
| 148 |
-
|
| 149 |
-
**Source quote:**
|
| 150 |
-
|
| 151 |
-
> extracted from PDF policy document by NIM DeepSeek-V4 (D-019); see source PDF for verbatim
|
| 152 |
-
|
| 153 |
-
**Source:** `rag/corpus/aditya-birla/activ-one__brochure.pdf`
|
| 154 |
-
|
| 155 |
-
## Other fields
|
| 156 |
-
|
| 157 |
-
### Claim Settlement Ratio Pct
|
| 158 |
-
|
| 159 |
-
**Value:** _not specified_
|
| 160 |
-
|
| 161 |
-
**Source quote:**
|
| 162 |
-
|
| 163 |
-
> not extracted from this PDF (field absent or LLM unable to infer)
|
| 164 |
-
|
| 165 |
-
**Source:** `rag/corpus/aditya-birla/activ-one__brochure.pdf`
|
| 166 |
-
|
| 167 |
-
### Co Payment Pct
|
| 168 |
-
|
| 169 |
-
**Value:** _not specified_
|
| 170 |
-
|
| 171 |
-
**Source quote:**
|
| 172 |
-
|
| 173 |
-
> not extracted from this PDF (field absent or LLM unable to infer)
|
| 174 |
-
|
| 175 |
-
**Source:** `rag/corpus/aditya-birla/activ-one__brochure.pdf`
|
| 176 |
-
|
| 177 |
-
### Complaint Per 10K Claims
|
| 178 |
-
|
| 179 |
-
**Value:** _not specified_
|
| 180 |
-
|
| 181 |
-
**Source quote:**
|
| 182 |
-
|
| 183 |
-
> not extracted from this PDF (field absent or LLM unable to infer)
|
| 184 |
-
|
| 185 |
-
**Source:** `rag/corpus/aditya-birla/activ-one__brochure.pdf`
|
| 186 |
-
|
| 187 |
-
### Free Look Period
|
| 188 |
-
|
| 189 |
-
**Value:** 15 days
|
| 190 |
-
|
| 191 |
-
**Source quote:**
|
| 192 |
-
|
| 193 |
-
> extracted from PDF policy document by NIM DeepSeek-V4 (D-019); see source PDF for verbatim
|
| 194 |
-
|
| 195 |
-
**Source:** `rag/corpus/aditya-birla/activ-one__brochure.pdf`
|
| 196 |
-
|
| 197 |
-
### Grace Period
|
| 198 |
-
|
| 199 |
-
**Value:** _not specified_
|
| 200 |
-
|
| 201 |
-
**Source quote:**
|
| 202 |
-
|
| 203 |
-
> not extracted from this PDF (field absent or LLM unable to infer)
|
| 204 |
-
|
| 205 |
-
**Source:** `rag/corpus/aditya-birla/activ-one__brochure.pdf`
|
| 206 |
-
|
| 207 |
-
### Incurred Claim Ratio Pct
|
| 208 |
-
|
| 209 |
-
**Value:** _not specified_
|
| 210 |
-
|
| 211 |
-
**Source quote:**
|
| 212 |
-
|
| 213 |
-
> not extracted from this PDF (field absent or LLM unable to infer)
|
| 214 |
-
|
| 215 |
-
**Source:** `rag/corpus/aditya-birla/activ-one__brochure.pdf`
|
| 216 |
-
|
| 217 |
-
### Min Child Entry Age
|
| 218 |
-
|
| 219 |
-
**Value:** _not specified_
|
| 220 |
-
|
| 221 |
-
**Source quote:**
|
| 222 |
-
|
| 223 |
-
> not extracted from this PDF (field absent or LLM unable to infer)
|
| 224 |
-
|
| 225 |
-
**Source:** `rag/corpus/aditya-birla/activ-one__brochure.pdf`
|
| 226 |
-
|
| 227 |
-
### Policy Term Options Years
|
| 228 |
-
|
| 229 |
-
**Value:** _not specified_
|
| 230 |
-
|
| 231 |
-
**Source quote:**
|
| 232 |
-
|
| 233 |
-
> not extracted from this PDF (field absent or LLM unable to infer)
|
| 234 |
-
|
| 235 |
-
**Source:** `rag/corpus/aditya-birla/activ-one__brochure.pdf`
|
| 236 |
-
|
| 237 |
-
### Room Rent Capped At Pct Of Si
|
| 238 |
-
|
| 239 |
-
**Value:** _not specified_
|
| 240 |
-
|
| 241 |
-
**Source quote:**
|
| 242 |
-
|
| 243 |
-
> not extracted from this PDF (field absent or LLM unable to infer)
|
| 244 |
-
|
| 245 |
-
**Source:** `rag/corpus/aditya-birla/activ-one__brochure.pdf`
|
| 246 |
-
|
| 247 |
-
### Source Pdf Path
|
| 248 |
-
|
| 249 |
-
_no data_
|
| 250 |
-
|
| 251 |
-
|
| 252 |
-
---
|
| 253 |
-
|
| 254 |
-
_Mirrored from `40-data/policy_facts/aditya-birla__activ-one__brochure.json`. Provenance — every field's verbatim quote and source PDF path is preserved exactly as curated. Do not hand-edit; regenerate via `tools/build_kb_mirror.py`._
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@@ -1,254 +0,0 @@
|
|
| 1 |
-
---
|
| 2 |
-
policy_id: royal-sundaram__family-plus__brochure
|
| 3 |
-
insurer_slug: royal-sundaram
|
| 4 |
-
insurer_name: royal-sundaram
|
| 5 |
-
policy_name: "Family Plus"
|
| 6 |
-
uin_code: RSAHLIP22200V032122
|
| 7 |
-
---
|
| 8 |
-
|
| 9 |
-
# Family Plus
|
| 10 |
-
|
| 11 |
-
**Insurer:** royal-sundaram (`royal-sundaram`)
|
| 12 |
-
**Policy ID:** `royal-sundaram__family-plus__brochure`
|
| 13 |
-
**UIN:** `RSAHLIP22200V032122`
|
| 14 |
-
|
| 15 |
-
## Identity
|
| 16 |
-
|
| 17 |
-
### UIN code
|
| 18 |
-
|
| 19 |
-
**Value:** RSAHLIP22200V032122
|
| 20 |
-
|
| 21 |
-
**Source quote:**
|
| 22 |
-
|
| 23 |
-
> extracted from PDF policy document by NIM DeepSeek-V4 (D-019); see source PDF for verbatim
|
| 24 |
-
|
| 25 |
-
**Source:** `rag/corpus/royal-sundaram/family-plus__brochure.pdf`
|
| 26 |
-
|
| 27 |
-
## Eligibility
|
| 28 |
-
|
| 29 |
-
### Minimum entry age
|
| 30 |
-
|
| 31 |
-
**Value:** _not specified_
|
| 32 |
-
|
| 33 |
-
**Source quote:**
|
| 34 |
-
|
| 35 |
-
> not extracted from this PDF (field absent or LLM unable to infer)
|
| 36 |
-
|
| 37 |
-
**Source:** `rag/corpus/royal-sundaram/family-plus__brochure.pdf`
|
| 38 |
-
|
| 39 |
-
### Maximum entry age
|
| 40 |
-
|
| 41 |
-
**Value:** _not specified_
|
| 42 |
-
|
| 43 |
-
**Source quote:**
|
| 44 |
-
|
| 45 |
-
> not extracted from this PDF (field absent or LLM unable to infer)
|
| 46 |
-
|
| 47 |
-
**Source:** `rag/corpus/royal-sundaram/family-plus__brochure.pdf`
|
| 48 |
-
|
| 49 |
-
### Maximum renewal age
|
| 50 |
-
|
| 51 |
-
**Value:** 999 years
|
| 52 |
-
|
| 53 |
-
**Source quote:**
|
| 54 |
-
|
| 55 |
-
> extracted from PDF policy document by NIM DeepSeek-V4 (D-019); see source PDF for verbatim
|
| 56 |
-
|
| 57 |
-
**Source:** `rag/corpus/royal-sundaram/family-plus__brochure.pdf`
|
| 58 |
-
|
| 59 |
-
### Sum insured options
|
| 60 |
-
|
| 61 |
-
**Value:** _not specified_
|
| 62 |
-
|
| 63 |
-
**Source quote:**
|
| 64 |
-
|
| 65 |
-
> not extracted from this PDF (field absent or LLM unable to infer)
|
| 66 |
-
|
| 67 |
-
**Source:** `rag/corpus/royal-sundaram/family-plus__brochure.pdf`
|
| 68 |
-
|
| 69 |
-
## Waiting periods
|
| 70 |
-
|
| 71 |
-
### Initial waiting period (days)
|
| 72 |
-
|
| 73 |
-
**Value:** 30
|
| 74 |
-
|
| 75 |
-
**Source quote:**
|
| 76 |
-
|
| 77 |
-
> extracted from PDF policy document by NIM DeepSeek-V4 (D-019); see source PDF for verbatim
|
| 78 |
-
|
| 79 |
-
**Source:** `rag/corpus/royal-sundaram/family-plus__brochure.pdf`
|
| 80 |
-
|
| 81 |
-
### Pre-existing disease waiting (months)
|
| 82 |
-
|
| 83 |
-
**Value:** 36
|
| 84 |
-
|
| 85 |
-
**Source quote:**
|
| 86 |
-
|
| 87 |
-
> extracted from PDF policy document by NIM DeepSeek-V4 (D-019); see source PDF for verbatim
|
| 88 |
-
|
| 89 |
-
**Source:** `rag/corpus/royal-sundaram/family-plus__brochure.pdf`
|
| 90 |
-
|
| 91 |
-
### Specific disease waiting (months)
|
| 92 |
-
|
| 93 |
-
**Value:** 24
|
| 94 |
-
|
| 95 |
-
**Source quote:**
|
| 96 |
-
|
| 97 |
-
> extracted from PDF policy document by NIM DeepSeek-V4 (D-019); see source PDF for verbatim
|
| 98 |
-
|
| 99 |
-
**Source:** `rag/corpus/royal-sundaram/family-plus__brochure.pdf`
|
| 100 |
-
|
| 101 |
-
### Maternity waiting (months)
|
| 102 |
-
|
| 103 |
-
**Value:** 24
|
| 104 |
-
|
| 105 |
-
**Source quote:**
|
| 106 |
-
|
| 107 |
-
> extracted from PDF policy document by NIM DeepSeek-V4 (D-019); see source PDF for verbatim
|
| 108 |
-
|
| 109 |
-
**Source:** `rag/corpus/royal-sundaram/family-plus__brochure.pdf`
|
| 110 |
-
|
| 111 |
-
## Coverage scope
|
| 112 |
-
|
| 113 |
-
### Pre-hospitalization (days)
|
| 114 |
-
|
| 115 |
-
**Value:** 60
|
| 116 |
-
|
| 117 |
-
**Source quote:**
|
| 118 |
-
|
| 119 |
-
> extracted from PDF policy document by NIM DeepSeek-V4 (D-019); see source PDF for verbatim
|
| 120 |
-
|
| 121 |
-
**Source:** `rag/corpus/royal-sundaram/family-plus__brochure.pdf`
|
| 122 |
-
|
| 123 |
-
### Post-hospitalization (days)
|
| 124 |
-
|
| 125 |
-
**Value:** 90
|
| 126 |
-
|
| 127 |
-
**Source quote:**
|
| 128 |
-
|
| 129 |
-
> extracted from PDF policy document by NIM DeepSeek-V4 (D-019); see source PDF for verbatim
|
| 130 |
-
|
| 131 |
-
**Source:** `rag/corpus/royal-sundaram/family-plus__brochure.pdf`
|
| 132 |
-
|
| 133 |
-
### Day-care treatments covered
|
| 134 |
-
|
| 135 |
-
**Value:** _not specified_
|
| 136 |
-
|
| 137 |
-
**Source quote:**
|
| 138 |
-
|
| 139 |
-
> not extracted from this PDF (field absent or LLM unable to infer)
|
| 140 |
-
|
| 141 |
-
**Source:** `rag/corpus/royal-sundaram/family-plus__brochure.pdf`
|
| 142 |
-
|
| 143 |
-
## Claims & service
|
| 144 |
-
|
| 145 |
-
### Network hospital count
|
| 146 |
-
|
| 147 |
-
**Value:** _not specified_
|
| 148 |
-
|
| 149 |
-
**Source quote:**
|
| 150 |
-
|
| 151 |
-
> not extracted from this PDF (field absent or LLM unable to infer)
|
| 152 |
-
|
| 153 |
-
**Source:** `rag/corpus/royal-sundaram/family-plus__brochure.pdf`
|
| 154 |
-
|
| 155 |
-
## Other fields
|
| 156 |
-
|
| 157 |
-
### Claim Settlement Ratio Pct
|
| 158 |
-
|
| 159 |
-
**Value:** _not specified_
|
| 160 |
-
|
| 161 |
-
**Source quote:**
|
| 162 |
-
|
| 163 |
-
> not extracted from this PDF (field absent or LLM unable to infer)
|
| 164 |
-
|
| 165 |
-
**Source:** `rag/corpus/royal-sundaram/family-plus__brochure.pdf`
|
| 166 |
-
|
| 167 |
-
### Co Payment Pct
|
| 168 |
-
|
| 169 |
-
**Value:** _not specified_
|
| 170 |
-
|
| 171 |
-
**Source quote:**
|
| 172 |
-
|
| 173 |
-
> not extracted from this PDF (field absent or LLM unable to infer)
|
| 174 |
-
|
| 175 |
-
**Source:** `rag/corpus/royal-sundaram/family-plus__brochure.pdf`
|
| 176 |
-
|
| 177 |
-
### Complaint Per 10K Claims
|
| 178 |
-
|
| 179 |
-
**Value:** _not specified_
|
| 180 |
-
|
| 181 |
-
**Source quote:**
|
| 182 |
-
|
| 183 |
-
> not extracted from this PDF (field absent or LLM unable to infer)
|
| 184 |
-
|
| 185 |
-
**Source:** `rag/corpus/royal-sundaram/family-plus__brochure.pdf`
|
| 186 |
-
|
| 187 |
-
### Free Look Period
|
| 188 |
-
|
| 189 |
-
**Value:** 30 days
|
| 190 |
-
|
| 191 |
-
**Source quote:**
|
| 192 |
-
|
| 193 |
-
> extracted from PDF policy document by NIM DeepSeek-V4 (D-019); see source PDF for verbatim
|
| 194 |
-
|
| 195 |
-
**Source:** `rag/corpus/royal-sundaram/family-plus__brochure.pdf`
|
| 196 |
-
|
| 197 |
-
### Grace Period
|
| 198 |
-
|
| 199 |
-
**Value:** 30 days
|
| 200 |
-
|
| 201 |
-
**Source quote:**
|
| 202 |
-
|
| 203 |
-
> extracted from PDF policy document by NIM DeepSeek-V4 (D-019); see source PDF for verbatim
|
| 204 |
-
|
| 205 |
-
**Source:** `rag/corpus/royal-sundaram/family-plus__brochure.pdf`
|
| 206 |
-
|
| 207 |
-
### Incurred Claim Ratio Pct
|
| 208 |
-
|
| 209 |
-
**Value:** _not specified_
|
| 210 |
-
|
| 211 |
-
**Source quote:**
|
| 212 |
-
|
| 213 |
-
> not extracted from this PDF (field absent or LLM unable to infer)
|
| 214 |
-
|
| 215 |
-
**Source:** `rag/corpus/royal-sundaram/family-plus__brochure.pdf`
|
| 216 |
-
|
| 217 |
-
### Min Child Entry Age
|
| 218 |
-
|
| 219 |
-
**Value:** _not specified_
|
| 220 |
-
|
| 221 |
-
**Source quote:**
|
| 222 |
-
|
| 223 |
-
> not extracted from this PDF (field absent or LLM unable to infer)
|
| 224 |
-
|
| 225 |
-
**Source:** `rag/corpus/royal-sundaram/family-plus__brochure.pdf`
|
| 226 |
-
|
| 227 |
-
### Policy Term Options Years
|
| 228 |
-
|
| 229 |
-
**Value:** _not specified_
|
| 230 |
-
|
| 231 |
-
**Source quote:**
|
| 232 |
-
|
| 233 |
-
> not extracted from this PDF (field absent or LLM unable to infer)
|
| 234 |
-
|
| 235 |
-
**Source:** `rag/corpus/royal-sundaram/family-plus__brochure.pdf`
|
| 236 |
-
|
| 237 |
-
### Room Rent Capped At Pct Of Si
|
| 238 |
-
|
| 239 |
-
**Value:** _not specified_
|
| 240 |
-
|
| 241 |
-
**Source quote:**
|
| 242 |
-
|
| 243 |
-
> not extracted from this PDF (field absent or LLM unable to infer)
|
| 244 |
-
|
| 245 |
-
**Source:** `rag/corpus/royal-sundaram/family-plus__brochure.pdf`
|
| 246 |
-
|
| 247 |
-
### Source Pdf Path
|
| 248 |
-
|
| 249 |
-
_no data_
|
| 250 |
-
|
| 251 |
-
|
| 252 |
-
---
|
| 253 |
-
|
| 254 |
-
_Mirrored from `40-data/policy_facts/royal-sundaram__family-plus__brochure.json`. Provenance — every field's verbatim quote and source PDF path is preserved exactly as curated. Do not hand-edit; regenerate via `tools/build_kb_mirror.py`._
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@@ -27,8 +27,8 @@ Lineage for every artefact below is documented in [`kb/AUDIT_TRAIL.md`](../kb/AU
|
|
| 27 |
|
| 28 |
| Path | Source of truth | Notes |
|
| 29 |
| --- | --- | --- |
|
| 30 |
-
| `rag/corpus/<insurer>/*.pdf` | insurer CDNs |
|
| 31 |
-
| `rag/extracted/<policy_id>.json` | `extract.py` |
|
| 32 |
| `rag/vectors/chroma.sqlite3` + HNSW binaries | `ingest.py` | Persistent Chroma store. Symlinked to `rag/_hf_dataset_backup/rag/vectors/` for the offline canonical copy. |
|
| 33 |
| `rag/policies.duckdb` | `extract.py` | DuckDB rollup of the 62-field JSONs; used for SQL-style filters in `backend/main.py`. |
|
| 34 |
| `rag/source_map.json` | `source_map.py` | chunk_id → (pdf_path, page, span) for the citation links shown in the UI. |
|
|
|
|
| 27 |
|
| 28 |
| Path | Source of truth | Notes |
|
| 29 |
| --- | --- | --- |
|
| 30 |
+
| `rag/corpus/<insurer>/*.pdf` | insurer CDNs | 224 PDFs (206 product PDFs across 19 insurers + 18 regulatory IRDAI/NHA docs). Not in git — hydrated at Docker build from the companion HF dataset. |
|
| 31 |
+
| `rag/extracted/<policy_id>.json` | `extract.py` | 206 JSONs, one per policy, conforming to `schema.HealthPolicy`. Generated; never hand-edit. |
|
| 32 |
| `rag/vectors/chroma.sqlite3` + HNSW binaries | `ingest.py` | Persistent Chroma store. Symlinked to `rag/_hf_dataset_backup/rag/vectors/` for the offline canonical copy. |
|
| 33 |
| `rag/policies.duckdb` | `extract.py` | DuckDB rollup of the 62-field JSONs; used for SQL-style filters in `backend/main.py`. |
|
| 34 |
| `rag/source_map.json` | `source_map.py` | chunk_id → (pdf_path, page, span) for the citation links shown in the UI. |
|
|
@@ -8,7 +8,6 @@ os.makedirs(CACHE, exist_ok=True)
|
|
| 8 |
|
| 9 |
PDFS = [
|
| 10 |
("aditya-birla", "rag/corpus/aditya-birla/activ-assure-diamond__wordings.pdf"),
|
| 11 |
-
("aditya-birla", "rag/corpus/aditya-birla/activ-one__brochure.pdf"),
|
| 12 |
("bajaj-allianz", "rag/corpus/bajaj-allianz/health-guard-gold-individual__wordings.pdf"),
|
| 13 |
("bajaj-allianz", "rag/corpus/bajaj-allianz/extra-care-plus__wordings.pdf"),
|
| 14 |
("care-health", "rag/corpus/care-health/care-supreme__wordings.pdf"),
|
|
|
|
| 8 |
|
| 9 |
PDFS = [
|
| 10 |
("aditya-birla", "rag/corpus/aditya-birla/activ-assure-diamond__wordings.pdf"),
|
|
|
|
| 11 |
("bajaj-allianz", "rag/corpus/bajaj-allianz/health-guard-gold-individual__wordings.pdf"),
|
| 12 |
("bajaj-allianz", "rag/corpus/bajaj-allianz/extra-care-plus__wordings.pdf"),
|
| 13 |
("care-health", "rag/corpus/care-health/care-supreme__wordings.pdf"),
|