rohitsar567 commited on
Commit
f9adc25
·
1 Parent(s): 9519893

fix(corpus): KI-126 — drop 2 image-only PDFs + cascade docs across 3 repos

Browse files

The 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 CHANGED
@@ -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
40-data/corpus_urls.md CHANGED
@@ -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 |
40-data/policy_facts/aditya-birla__activ-one__brochure.json DELETED
@@ -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
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
40-data/policy_facts/royal-sundaram__family-plus__brochure.json DELETED
@@ -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
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
CLAUDE.md CHANGED
@@ -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 208-document corpus, Sarvam STT/TTS, 4-gate faithfulness, 19-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,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 208 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,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-14).
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
 
Dockerfile CHANGED
@@ -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-ki119-v2
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(\
README.md CHANGED
@@ -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 208-document corpus.
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 **208 documents** — 190 product documents from 19 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,8 +519,8 @@ The bot is two flows running together — the customer's experience and the tech
519
 
520
 
521
  ┌─────────────────────────────────────────────────────────────────────────┐
522
- 208 source PDFs in HF Dataset rohitsar567/insurance-bot-data │
523
- │ · 190 product PDFs across 19 insurers │
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 (208 documents)
596
 
597
  | Type | Count | Source | Notes |
598
  |---|---|---|---|
599
- | Product PDFs | 190 | 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) | 203 | fast-brain chain (Nemotron 30B / Qwen 80B / Groq Llama-3.3 fallback) extraction | 62-field Pydantic schema |
602
- | Vector chunks (Chroma) | ~7,400 | 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: Star Health, HDFC ERGO, Niva Bupa, Care Health, ICICI Lombard, Bajaj Allianz, New India Assurance, Aditya Birla, Tata AIG, ManipalCigna, SBI General, Acko, IFFCO Tokio, Cholamandalam MS, Go Digit, Reliance General, Royal Sundaram, Oriental Insurance, National Insurance.
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 255 policies indexed.
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 208-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,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-14.**
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
kb/INDEX.md CHANGED
@@ -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 (255)
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) |
kb/policies/aditya-birla__activ-one__brochure.md DELETED
@@ -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`._
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
kb/policies/royal-sundaram__family-plus__brochure.md DELETED
@@ -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`._
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
rag/README.md CHANGED
@@ -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 | 208 PDFs across 19 insurers + IRDAI. Not in git — hydrated at Docker build from the companion HF dataset. |
31
- | `rag/extracted/<policy_id>.json` | `extract.py` | 203 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. |
 
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. |
tools/extract_policy_text.py CHANGED
@@ -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"),