sih-br-mcp 0.12.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +101 -0
- package/dist/cache.d.ts +108 -0
- package/dist/cache.d.ts.map +1 -0
- package/dist/cache.js +270 -0
- package/dist/cache.js.map +1 -0
- package/dist/data/brazil-regions.json +68 -0
- package/dist/data/cid-chapters.json +163 -0
- package/dist/data/csap-groups-cid9.json +4281 -0
- package/dist/data/csap-groups.json +262 -0
- package/dist/db/duckdb.d.ts +263 -0
- package/dist/db/duckdb.d.ts.map +1 -0
- package/dist/db/duckdb.js +837 -0
- package/dist/db/duckdb.js.map +1 -0
- package/dist/freshness.d.ts +101 -0
- package/dist/freshness.d.ts.map +1 -0
- package/dist/freshness.js +303 -0
- package/dist/freshness.js.map +1 -0
- package/dist/index.d.ts +7 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +1504 -0
- package/dist/index.js.map +1 -0
- package/dist/provenance.d.ts +217 -0
- package/dist/provenance.d.ts.map +1 -0
- package/dist/provenance.js +534 -0
- package/dist/provenance.js.map +1 -0
- package/dist/utils/age-groups.d.ts +164 -0
- package/dist/utils/age-groups.d.ts.map +1 -0
- package/dist/utils/age-groups.js +112 -0
- package/dist/utils/age-groups.js.map +1 -0
- package/dist/utils/population.d.ts +39 -0
- package/dist/utils/population.d.ts.map +1 -0
- package/dist/utils/population.js +114 -0
- package/dist/utils/population.js.map +1 -0
- package/package.json +64 -0
|
@@ -0,0 +1,262 @@
|
|
|
1
|
+
{
|
|
2
|
+
"metadata": {
|
|
3
|
+
"source": "Portaria MS/SAS nº 221, de 17 de abril de 2008",
|
|
4
|
+
"description": "Lista Brasileira de Internações por Condições Sensíveis à Atenção Primária",
|
|
5
|
+
"classification": "CID-10",
|
|
6
|
+
"total_groups": 19,
|
|
7
|
+
"url": "https://bvsms.saude.gov.br/bvs/saudelegis/sas/2008/prt0221_17_04_2008.html"
|
|
8
|
+
},
|
|
9
|
+
"groups": [
|
|
10
|
+
{
|
|
11
|
+
"id": 1,
|
|
12
|
+
"code": "g01",
|
|
13
|
+
"name_pt": "Doenças preveníveis por imunização e condições sensíveis",
|
|
14
|
+
"name_en": "Vaccine-preventable diseases and sensitive conditions",
|
|
15
|
+
"diagnoses": [
|
|
16
|
+
{ "name": "Coqueluche", "cid10": ["A37"] },
|
|
17
|
+
{ "name": "Difteria", "cid10": ["A36"] },
|
|
18
|
+
{ "name": "Tétano", "cid10": ["A33", "A34", "A35"] },
|
|
19
|
+
{ "name": "Parotidite", "cid10": ["B26"] },
|
|
20
|
+
{ "name": "Rubéola", "cid10": ["B06"] },
|
|
21
|
+
{ "name": "Sarampo", "cid10": ["B05"] },
|
|
22
|
+
{ "name": "Febre Amarela", "cid10": ["A95"] },
|
|
23
|
+
{ "name": "Hepatite B", "cid10": ["B16"] },
|
|
24
|
+
{ "name": "Meningite por Haemophilus", "cid10": ["G00.0"] },
|
|
25
|
+
{ "name": "Meningite Tuberculosa", "cid10": ["A17.0"] },
|
|
26
|
+
{ "name": "Tuberculose miliar", "cid10": ["A19"] },
|
|
27
|
+
{ "name": "Tuberculose Pulmonar", "cid10": ["A15.0", "A15.1", "A15.2", "A15.3", "A16.0", "A16.1", "A16.2", "A15.4", "A15.5", "A15.6", "A15.7", "A15.8", "A15.9", "A16.3", "A16.4", "A16.5", "A16.7", "A16.8", "A16.9", "A17.1", "A17.8", "A17.9"] },
|
|
28
|
+
{ "name": "Outras Tuberculoses", "cid10": ["A18"] },
|
|
29
|
+
{ "name": "Febre reumática", "cid10": ["I00", "I01", "I02"] },
|
|
30
|
+
{ "name": "Sífilis", "cid10": ["A51", "A52", "A53"] },
|
|
31
|
+
{ "name": "Malária", "cid10": ["B50", "B51", "B52", "B53", "B54"] },
|
|
32
|
+
{ "name": "Ascaridíase", "cid10": ["B77"] }
|
|
33
|
+
],
|
|
34
|
+
"cid10_all": ["A33", "A34", "A35", "A36", "A37", "A95", "B05", "B06", "B16", "B26", "G00.0", "A17.0", "A19", "A15", "A16", "A17.1", "A17.8", "A17.9", "A18", "I00", "I01", "I02", "A51", "A52", "A53", "B50", "B51", "B52", "B53", "B54", "B77"]
|
|
35
|
+
},
|
|
36
|
+
{
|
|
37
|
+
"id": 2,
|
|
38
|
+
"code": "g02",
|
|
39
|
+
"name_pt": "Gastroenterites infecciosas e complicações",
|
|
40
|
+
"name_en": "Infectious gastroenteritis and complications",
|
|
41
|
+
"diagnoses": [
|
|
42
|
+
{ "name": "Desidratação", "cid10": ["E86"] },
|
|
43
|
+
{ "name": "Gastroenterites", "cid10": ["A00", "A01", "A02", "A03", "A04", "A05", "A06", "A07", "A08", "A09"] }
|
|
44
|
+
],
|
|
45
|
+
"cid10_all": ["E86", "A00", "A01", "A02", "A03", "A04", "A05", "A06", "A07", "A08", "A09"]
|
|
46
|
+
},
|
|
47
|
+
{
|
|
48
|
+
"id": 3,
|
|
49
|
+
"code": "g03",
|
|
50
|
+
"name_pt": "Anemia",
|
|
51
|
+
"name_en": "Anemia",
|
|
52
|
+
"diagnoses": [
|
|
53
|
+
{ "name": "Anemia por deficiência de ferro", "cid10": ["D50"] }
|
|
54
|
+
],
|
|
55
|
+
"cid10_all": ["D50"]
|
|
56
|
+
},
|
|
57
|
+
{
|
|
58
|
+
"id": 4,
|
|
59
|
+
"code": "g04",
|
|
60
|
+
"name_pt": "Deficiências nutricionais",
|
|
61
|
+
"name_en": "Nutritional deficiencies",
|
|
62
|
+
"diagnoses": [
|
|
63
|
+
{ "name": "Kwashiorkor e outras formas de desnutrição protéico-calórica", "cid10": ["E40", "E41", "E42", "E43", "E44", "E45", "E46"] },
|
|
64
|
+
{ "name": "Outras deficiências nutricionais", "cid10": ["E50", "E51", "E52", "E53", "E54", "E55", "E56", "E58", "E59", "E60", "E61", "E63", "E64"] }
|
|
65
|
+
],
|
|
66
|
+
"cid10_all": ["E40", "E41", "E42", "E43", "E44", "E45", "E46", "E50", "E51", "E52", "E53", "E54", "E55", "E56", "E58", "E59", "E60", "E61", "E63", "E64"]
|
|
67
|
+
},
|
|
68
|
+
{
|
|
69
|
+
"id": 5,
|
|
70
|
+
"code": "g05",
|
|
71
|
+
"name_pt": "Infecções de ouvido, nariz e garganta",
|
|
72
|
+
"name_en": "Ear, nose and throat infections",
|
|
73
|
+
"diagnoses": [
|
|
74
|
+
{ "name": "Otite média supurativa", "cid10": ["H66"] },
|
|
75
|
+
{ "name": "Nasofaringite aguda (resfriado comum)", "cid10": ["J00"] },
|
|
76
|
+
{ "name": "Sinusite aguda", "cid10": ["J01"] },
|
|
77
|
+
{ "name": "Faringite aguda", "cid10": ["J02"] },
|
|
78
|
+
{ "name": "Amigdalite aguda", "cid10": ["J03"] },
|
|
79
|
+
{ "name": "Infecção aguda das vias aéreas superiores", "cid10": ["J06"] },
|
|
80
|
+
{ "name": "Rinite, nasofaringite e faringite crônicas", "cid10": ["J31"] }
|
|
81
|
+
],
|
|
82
|
+
"cid10_all": ["H66", "J00", "J01", "J02", "J03", "J06", "J31"]
|
|
83
|
+
},
|
|
84
|
+
{
|
|
85
|
+
"id": 6,
|
|
86
|
+
"code": "g06",
|
|
87
|
+
"name_pt": "Pneumonias bacterianas",
|
|
88
|
+
"name_en": "Bacterial pneumonia",
|
|
89
|
+
"diagnoses": [
|
|
90
|
+
{ "name": "Pneumonia Pneumocócica", "cid10": ["J13"] },
|
|
91
|
+
{ "name": "Pneumonia por Haemophilus influenzae", "cid10": ["J14"] },
|
|
92
|
+
{ "name": "Pneumonia por Streptococcus", "cid10": ["J15.3", "J15.4"] },
|
|
93
|
+
{ "name": "Pneumonia bacteriana não especificada", "cid10": ["J15.8", "J15.9"] },
|
|
94
|
+
{ "name": "Pneumonia lobar não especificada", "cid10": ["J18.1"] }
|
|
95
|
+
],
|
|
96
|
+
"cid10_all": ["J13", "J14", "J15.3", "J15.4", "J15.8", "J15.9", "J18.1"]
|
|
97
|
+
},
|
|
98
|
+
{
|
|
99
|
+
"id": 7,
|
|
100
|
+
"code": "g07",
|
|
101
|
+
"name_pt": "Asma",
|
|
102
|
+
"name_en": "Asthma",
|
|
103
|
+
"diagnoses": [
|
|
104
|
+
{ "name": "Asma", "cid10": ["J45", "J46"] }
|
|
105
|
+
],
|
|
106
|
+
"cid10_all": ["J45", "J46"]
|
|
107
|
+
},
|
|
108
|
+
{
|
|
109
|
+
"id": 8,
|
|
110
|
+
"code": "g08",
|
|
111
|
+
"name_pt": "Doenças pulmonares",
|
|
112
|
+
"name_en": "Pulmonary diseases",
|
|
113
|
+
"diagnoses": [
|
|
114
|
+
{ "name": "Bronquite aguda", "cid10": ["J20", "J21"] },
|
|
115
|
+
{ "name": "Bronquite não especificada como aguda ou crônica", "cid10": ["J40"] },
|
|
116
|
+
{ "name": "Bronquite crônica simples e mucopurulenta", "cid10": ["J41"] },
|
|
117
|
+
{ "name": "Bronquite crônica não especificada", "cid10": ["J42"] },
|
|
118
|
+
{ "name": "Enfisema", "cid10": ["J43"] },
|
|
119
|
+
{ "name": "Bronquiectasia", "cid10": ["J47"] },
|
|
120
|
+
{ "name": "Outras doenças pulmonares obstrutivas crônicas", "cid10": ["J44"] }
|
|
121
|
+
],
|
|
122
|
+
"cid10_all": ["J20", "J21", "J40", "J41", "J42", "J43", "J44", "J47"]
|
|
123
|
+
},
|
|
124
|
+
{
|
|
125
|
+
"id": 9,
|
|
126
|
+
"code": "g09",
|
|
127
|
+
"name_pt": "Hipertensão",
|
|
128
|
+
"name_en": "Hypertension",
|
|
129
|
+
"diagnoses": [
|
|
130
|
+
{ "name": "Hipertensão essencial", "cid10": ["I10"] },
|
|
131
|
+
{ "name": "Doença cardíaca hipertensiva", "cid10": ["I11"] }
|
|
132
|
+
],
|
|
133
|
+
"cid10_all": ["I10", "I11"]
|
|
134
|
+
},
|
|
135
|
+
{
|
|
136
|
+
"id": 10,
|
|
137
|
+
"code": "g10",
|
|
138
|
+
"name_pt": "Angina",
|
|
139
|
+
"name_en": "Angina",
|
|
140
|
+
"diagnoses": [
|
|
141
|
+
{ "name": "Angina pectoris", "cid10": ["I20"] }
|
|
142
|
+
],
|
|
143
|
+
"cid10_all": ["I20"]
|
|
144
|
+
},
|
|
145
|
+
{
|
|
146
|
+
"id": 11,
|
|
147
|
+
"code": "g11",
|
|
148
|
+
"name_pt": "Insuficiência cardíaca",
|
|
149
|
+
"name_en": "Heart failure",
|
|
150
|
+
"diagnoses": [
|
|
151
|
+
{ "name": "Insuficiência cardíaca", "cid10": ["I50"] },
|
|
152
|
+
{ "name": "Edema agudo de pulmão", "cid10": ["J81"] }
|
|
153
|
+
],
|
|
154
|
+
"cid10_all": ["I50", "J81"]
|
|
155
|
+
},
|
|
156
|
+
{
|
|
157
|
+
"id": 12,
|
|
158
|
+
"code": "g12",
|
|
159
|
+
"name_pt": "Doenças cerebrovasculares",
|
|
160
|
+
"name_en": "Cerebrovascular diseases",
|
|
161
|
+
"diagnoses": [
|
|
162
|
+
{ "name": "Doenças cerebrovasculares", "cid10": ["I63", "I64", "I65", "I66", "I67", "I69", "G45", "G46"] }
|
|
163
|
+
],
|
|
164
|
+
"cid10_all": ["I63", "I64", "I65", "I66", "I67", "I69", "G45", "G46"]
|
|
165
|
+
},
|
|
166
|
+
{
|
|
167
|
+
"id": 13,
|
|
168
|
+
"code": "g13",
|
|
169
|
+
"name_pt": "Diabetes mellitus",
|
|
170
|
+
"name_en": "Diabetes mellitus",
|
|
171
|
+
"diagnoses": [
|
|
172
|
+
{ "name": "Com coma ou cetoacidose", "cid10": ["E10.0", "E10.1", "E11.0", "E11.1", "E12.0", "E12.1", "E13.0", "E13.1", "E14.0", "E14.1"] },
|
|
173
|
+
{ "name": "Com complicações", "cid10": ["E10.2", "E10.3", "E10.4", "E10.5", "E10.6", "E10.7", "E10.8", "E11.2", "E11.3", "E11.4", "E11.5", "E11.6", "E11.7", "E11.8", "E12.2", "E12.3", "E12.4", "E12.5", "E12.6", "E12.7", "E12.8", "E13.2", "E13.3", "E13.4", "E13.5", "E13.6", "E13.7", "E13.8", "E14.2", "E14.3", "E14.4", "E14.5", "E14.6", "E14.7", "E14.8"] },
|
|
174
|
+
{ "name": "Sem complicações específicas", "cid10": ["E10.9", "E11.9", "E12.9", "E13.9", "E14.9"] }
|
|
175
|
+
],
|
|
176
|
+
"cid10_all": ["E10.0", "E10.1", "E10.2", "E10.3", "E10.4", "E10.5", "E10.6", "E10.7", "E10.8", "E10.9", "E11.0", "E11.1", "E11.2", "E11.3", "E11.4", "E11.5", "E11.6", "E11.7", "E11.8", "E11.9", "E12.0", "E12.1", "E12.2", "E12.3", "E12.4", "E12.5", "E12.6", "E12.7", "E12.8", "E12.9", "E13.0", "E13.1", "E13.2", "E13.3", "E13.4", "E13.5", "E13.6", "E13.7", "E13.8", "E13.9", "E14.0", "E14.1", "E14.2", "E14.3", "E14.4", "E14.5", "E14.6", "E14.7", "E14.8", "E14.9"]
|
|
177
|
+
},
|
|
178
|
+
{
|
|
179
|
+
"id": 14,
|
|
180
|
+
"code": "g14",
|
|
181
|
+
"name_pt": "Epilepsias",
|
|
182
|
+
"name_en": "Epilepsy",
|
|
183
|
+
"diagnoses": [
|
|
184
|
+
{ "name": "Epilepsias", "cid10": ["G40", "G41"] }
|
|
185
|
+
],
|
|
186
|
+
"cid10_all": ["G40", "G41"]
|
|
187
|
+
},
|
|
188
|
+
{
|
|
189
|
+
"id": 15,
|
|
190
|
+
"code": "g15",
|
|
191
|
+
"name_pt": "Infecção no rim e trato urinário",
|
|
192
|
+
"name_en": "Kidney and urinary tract infection",
|
|
193
|
+
"diagnoses": [
|
|
194
|
+
{ "name": "Nefrite túbulo-intersticial aguda", "cid10": ["N10"] },
|
|
195
|
+
{ "name": "Nefrite túbulo-intersticial crônica", "cid10": ["N11"] },
|
|
196
|
+
{ "name": "Nefrite túbulo-intersticial não especificada", "cid10": ["N12"] },
|
|
197
|
+
{ "name": "Cistite", "cid10": ["N30"] },
|
|
198
|
+
{ "name": "Uretrite", "cid10": ["N34"] },
|
|
199
|
+
{ "name": "Infecção do trato urinário de localização não especificada", "cid10": ["N39.0"] }
|
|
200
|
+
],
|
|
201
|
+
"cid10_all": ["N10", "N11", "N12", "N30", "N34", "N39.0"]
|
|
202
|
+
},
|
|
203
|
+
{
|
|
204
|
+
"id": 16,
|
|
205
|
+
"code": "g16",
|
|
206
|
+
"name_pt": "Infecção da pele e tecido subcutâneo",
|
|
207
|
+
"name_en": "Skin and subcutaneous tissue infection",
|
|
208
|
+
"diagnoses": [
|
|
209
|
+
{ "name": "Erisipela", "cid10": ["A46"] },
|
|
210
|
+
{ "name": "Impetigo", "cid10": ["L01"] },
|
|
211
|
+
{ "name": "Abscesso cutâneo, furúnculo e carbúnculo", "cid10": ["L02"] },
|
|
212
|
+
{ "name": "Celulite", "cid10": ["L03"] },
|
|
213
|
+
{ "name": "Linfadenite aguda", "cid10": ["L04"] },
|
|
214
|
+
{ "name": "Outras infecções localizadas na pele e tecido subcutâneo", "cid10": ["L08"] }
|
|
215
|
+
],
|
|
216
|
+
"cid10_all": ["A46", "L01", "L02", "L03", "L04", "L08"]
|
|
217
|
+
},
|
|
218
|
+
{
|
|
219
|
+
"id": 17,
|
|
220
|
+
"code": "g17",
|
|
221
|
+
"name_pt": "Doença inflamatória dos órgãos pélvicos femininos",
|
|
222
|
+
"name_en": "Female pelvic inflammatory disease",
|
|
223
|
+
"diagnoses": [
|
|
224
|
+
{ "name": "Salpingite e ooforite", "cid10": ["N70"] },
|
|
225
|
+
{ "name": "Doença inflamatória do útero, exceto o colo", "cid10": ["N71"] },
|
|
226
|
+
{ "name": "Doença inflamatória do colo do útero", "cid10": ["N72"] },
|
|
227
|
+
{ "name": "Outras doenças inflamatórias pélvicas femininas", "cid10": ["N73"] },
|
|
228
|
+
{ "name": "Doenças da glândula de Bartholin", "cid10": ["N75"] },
|
|
229
|
+
{ "name": "Outras afecções inflamatórias da vagina e da vulva", "cid10": ["N76"] }
|
|
230
|
+
],
|
|
231
|
+
"cid10_all": ["N70", "N71", "N72", "N73", "N75", "N76"]
|
|
232
|
+
},
|
|
233
|
+
{
|
|
234
|
+
"id": 18,
|
|
235
|
+
"code": "g18",
|
|
236
|
+
"name_pt": "Úlcera gastrointestinal",
|
|
237
|
+
"name_en": "Gastrointestinal ulcer",
|
|
238
|
+
"diagnoses": [
|
|
239
|
+
{ "name": "Úlcera gástrica", "cid10": ["K25"] },
|
|
240
|
+
{ "name": "Úlcera duodenal", "cid10": ["K26"] },
|
|
241
|
+
{ "name": "Úlcera péptica de localização não especificada", "cid10": ["K27"] },
|
|
242
|
+
{ "name": "Úlcera gastrojejunal", "cid10": ["K28"] },
|
|
243
|
+
{ "name": "Hematêmese", "cid10": ["K92.0"] },
|
|
244
|
+
{ "name": "Melena", "cid10": ["K92.1"] },
|
|
245
|
+
{ "name": "Hemorragia gastrointestinal não especificada", "cid10": ["K92.2"] }
|
|
246
|
+
],
|
|
247
|
+
"cid10_all": ["K25", "K26", "K27", "K28", "K92.0", "K92.1", "K92.2"]
|
|
248
|
+
},
|
|
249
|
+
{
|
|
250
|
+
"id": 19,
|
|
251
|
+
"code": "g19",
|
|
252
|
+
"name_pt": "Doenças relacionadas ao pré-natal e parto",
|
|
253
|
+
"name_en": "Prenatal and childbirth-related diseases",
|
|
254
|
+
"diagnoses": [
|
|
255
|
+
{ "name": "Infecção do trato urinário na gravidez", "cid10": ["O23"] },
|
|
256
|
+
{ "name": "Sífilis congênita", "cid10": ["A50"] },
|
|
257
|
+
{ "name": "Síndrome da rubéola congênita", "cid10": ["P35.0"] }
|
|
258
|
+
],
|
|
259
|
+
"cid10_all": ["O23", "A50", "P35.0"]
|
|
260
|
+
}
|
|
261
|
+
]
|
|
262
|
+
}
|
|
@@ -0,0 +1,263 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Módulo de conexão DuckDB para consulta aos cubos de dados Parquet
|
|
3
|
+
* Suporta múltiplos arquivos Parquet por ano (sih_causas_YYYY.parquet)
|
|
4
|
+
*/
|
|
5
|
+
import { DuckDBConnection } from "@duckdb/node-api";
|
|
6
|
+
/**
|
|
7
|
+
* Determina qual diretório de dados usar.
|
|
8
|
+
* - Padrão: data/ (dados reais)
|
|
9
|
+
* - Teste: data/test/ (somente se SIH_TEST_MODE=1 estiver definido)
|
|
10
|
+
*/
|
|
11
|
+
/**
|
|
12
|
+
* A pasta de cubos CONFIGURADA (SIH_DATA_DIR ou data/ do projeto), exista
|
|
13
|
+
* cubo nela ou não. Quem precisa só do sidecar de proveniência — o frescor
|
|
14
|
+
* num checkout limpo, onde data/*.parquet é gitignored e só o JSON está
|
|
15
|
+
* versionado — lê daqui; quem precisa de Parquet usa getDataDirectory().
|
|
16
|
+
*/
|
|
17
|
+
export declare function configuredDataDirectory(): string;
|
|
18
|
+
export declare function getDataDirectory(): string;
|
|
19
|
+
/**
|
|
20
|
+
* Retorna o padrão glob para um tipo de cubo
|
|
21
|
+
*/
|
|
22
|
+
export declare function getParquetPattern(cube: "causas" | "series" | "icsap"): string;
|
|
23
|
+
/**
|
|
24
|
+
* Lista os anos disponíveis nos dados
|
|
25
|
+
*/
|
|
26
|
+
export declare function getAvailableYears(): number[];
|
|
27
|
+
/**
|
|
28
|
+
* Inicializa conexão com DuckDB
|
|
29
|
+
*/
|
|
30
|
+
export declare function getDatabase(): Promise<DuckDBConnection>;
|
|
31
|
+
/**
|
|
32
|
+
* Fecha conexão com o banco
|
|
33
|
+
*/
|
|
34
|
+
export declare function closeDatabase(): Promise<void>;
|
|
35
|
+
/**
|
|
36
|
+
* Executa query SQL e retorna resultados
|
|
37
|
+
*/
|
|
38
|
+
export declare function query<T = Record<string, unknown>>(sql: string): Promise<T[]>;
|
|
39
|
+
export interface CausasFilters {
|
|
40
|
+
years?: number[];
|
|
41
|
+
months?: number[];
|
|
42
|
+
ufs?: string[];
|
|
43
|
+
municipalityCodes?: string[];
|
|
44
|
+
cidChapters?: number[];
|
|
45
|
+
cidGroups?: string[];
|
|
46
|
+
sex?: string;
|
|
47
|
+
ageMin?: number;
|
|
48
|
+
ageMax?: number;
|
|
49
|
+
races?: string[];
|
|
50
|
+
isCsap?: boolean;
|
|
51
|
+
csapGroups?: string[];
|
|
52
|
+
}
|
|
53
|
+
export interface IcsapFilters {
|
|
54
|
+
years?: number[];
|
|
55
|
+
ufs?: string[];
|
|
56
|
+
municipalityCodes?: string[];
|
|
57
|
+
csapGroups?: string[];
|
|
58
|
+
sex?: string;
|
|
59
|
+
ageMin?: number;
|
|
60
|
+
ageMax?: number;
|
|
61
|
+
races?: string[];
|
|
62
|
+
}
|
|
63
|
+
export interface SeriesFilters {
|
|
64
|
+
yearMonthStart?: string;
|
|
65
|
+
yearMonthEnd?: string;
|
|
66
|
+
ufs?: string[];
|
|
67
|
+
cidChapters?: number[];
|
|
68
|
+
}
|
|
69
|
+
/**
|
|
70
|
+
* Query no cubo de causas com agregação flexível
|
|
71
|
+
*/
|
|
72
|
+
export declare function queryCausas<T = Record<string, unknown>>(options: {
|
|
73
|
+
filters?: CausasFilters;
|
|
74
|
+
groupBy?: string[];
|
|
75
|
+
metrics?: ("n" | "days" | "value" | "deaths")[];
|
|
76
|
+
orderBy?: string;
|
|
77
|
+
limit?: number;
|
|
78
|
+
}): Promise<T[]>;
|
|
79
|
+
/**
|
|
80
|
+
* Query no cubo de ICSAP com agregação flexível
|
|
81
|
+
*/
|
|
82
|
+
export declare function queryIcsap<T = Record<string, unknown>>(options: {
|
|
83
|
+
filters?: IcsapFilters;
|
|
84
|
+
groupBy?: string[];
|
|
85
|
+
metrics?: ("n" | "n_total" | "days" | "value" | "deaths")[];
|
|
86
|
+
orderBy?: string;
|
|
87
|
+
limit?: number;
|
|
88
|
+
universe?: IcsapUniverse;
|
|
89
|
+
}): Promise<T[]>;
|
|
90
|
+
/**
|
|
91
|
+
* SQL de agregação do cubo ICSAP com o denominador CERTO.
|
|
92
|
+
*
|
|
93
|
+
* O cubo tem uma linha por (estrato × grupo CSAP) e, desde o builder 2.5.0,
|
|
94
|
+
* uma linha por estrato SEM ICSAP (csap_group nulo, n = 0); em todas,
|
|
95
|
+
* `n_total` é o total de internações do estrato (year, uf, municipality_code,
|
|
96
|
+
* cid_revision, sex, age, race). Até a 0.8.0 o servidor somava n_total linha
|
|
97
|
+
* a linha: o denominador saía multiplicado pelo número de grupos CSAP de cada
|
|
98
|
+
* estrato e sem os estratos que não tinham ICSAP nenhuma — 2023/RR dava
|
|
99
|
+
* icsap_percentage 3,65 % quando 9.577/48.480 = 19,75 % (defeito desde a
|
|
100
|
+
* primeira versão do cubo; achado em 07/09/2026 ao provar a era antiga e
|
|
101
|
+
* corrigido aqui, no funil, antes do rebuild dos 34 anos). O denominador é
|
|
102
|
+
* n_total somado sobre os estratos DISTINTOS; o numerador ignora as linhas de
|
|
103
|
+
* grupo nulo; o filtro por grupo CSAP só vale para o numerador (a fração é
|
|
104
|
+
* "internações do grupo / todas as internações do estrato").
|
|
105
|
+
*/
|
|
106
|
+
/**
|
|
107
|
+
* Universo do % ICSAP. "csapaih" (padrão, 0.10.0): como o pacote R csapAIH,
|
|
108
|
+
* fora do numerador E do denominador as internações com `exclusion` não nula
|
|
109
|
+
* (procedimento obstétrico, parto, longa permanência — builder >= 2.6.0).
|
|
110
|
+
* "all": todas as internações. Cubo anterior a 2.6.0 não tem a coluna: com
|
|
111
|
+
* union_by_name ela vem nula, o que equivale a "all" naquele ano.
|
|
112
|
+
*/
|
|
113
|
+
export type IcsapUniverse = "csapaih" | "all";
|
|
114
|
+
/**
|
|
115
|
+
* Query no cubo de séries temporais
|
|
116
|
+
*/
|
|
117
|
+
export declare function querySeries<T = Record<string, unknown>>(options: {
|
|
118
|
+
filters?: SeriesFilters;
|
|
119
|
+
groupBy?: string[];
|
|
120
|
+
orderBy?: string;
|
|
121
|
+
}): Promise<T[]>;
|
|
122
|
+
/**
|
|
123
|
+
* Query para ranking de grupos CSAP
|
|
124
|
+
*/
|
|
125
|
+
export declare function rankCsapGroups<T = Record<string, unknown>>(options: {
|
|
126
|
+
filters?: IcsapFilters;
|
|
127
|
+
metric?: "n" | "days" | "value" | "deaths";
|
|
128
|
+
limit?: number;
|
|
129
|
+
universe?: IcsapUniverse;
|
|
130
|
+
}): Promise<T[]>;
|
|
131
|
+
/**
|
|
132
|
+
* Calcula indicadores de ICSAP (percentual)
|
|
133
|
+
*/
|
|
134
|
+
export declare function calculateIcsapIndicators<T = Record<string, unknown>>(options: {
|
|
135
|
+
filters?: IcsapFilters;
|
|
136
|
+
groupBy?: string[];
|
|
137
|
+
universe?: IcsapUniverse;
|
|
138
|
+
}): Promise<T[]>;
|
|
139
|
+
/**
|
|
140
|
+
* Onde os arquivos de população vivem (0.12.0, sih:populacao-no-canal): a
|
|
141
|
+
* pasta configurada (SIH_DATA_DIR ou data/ do projeto; nunca data/test/) tem
|
|
142
|
+
* precedência sempre que tiver pop_uf.parquet — é o caso da fixture do smoke
|
|
143
|
+
* e do golden e de quem gerou a população à mão; sem nada nela e com o cache
|
|
144
|
+
* ligado, o cache local, que `ensurePopulation()` (src/cache.ts) enche a
|
|
145
|
+
* partir do canal sih/cubos/ (pop_uf, pop_uf_agregado, pop_municipios +
|
|
146
|
+
* pop_provenance.json, assinados no bloco `population` do manifesto).
|
|
147
|
+
*/
|
|
148
|
+
export declare function getPopulationDir(): string;
|
|
149
|
+
/** Padrão de arquivo para dados populacionais (pasta de getPopulationDir()). */
|
|
150
|
+
export declare function getPopulationPattern(type: "municipios" | "uf" | "uf_agregado"): string;
|
|
151
|
+
/** Verifica se algum arquivo de população está disponível em getPopulationDir(). */
|
|
152
|
+
export declare function hasPopulationData(): boolean;
|
|
153
|
+
/** Mensagem única para "sem denominador" — aponta o canal, não um script R. */
|
|
154
|
+
export declare const POPULATION_MISSING_MESSAGE: string;
|
|
155
|
+
/**
|
|
156
|
+
* Interface para filtros de população
|
|
157
|
+
*/
|
|
158
|
+
export interface PopulationFilters {
|
|
159
|
+
years?: number[];
|
|
160
|
+
ufs?: string[];
|
|
161
|
+
sex?: string;
|
|
162
|
+
ageMin?: number;
|
|
163
|
+
ageMax?: number;
|
|
164
|
+
}
|
|
165
|
+
/**
|
|
166
|
+
* Query população por UF (dados com idade simples)
|
|
167
|
+
*/
|
|
168
|
+
export declare function queryPopulationUf<T = Record<string, unknown>>(options: {
|
|
169
|
+
filters?: PopulationFilters;
|
|
170
|
+
groupBy?: string[];
|
|
171
|
+
}): Promise<T[]>;
|
|
172
|
+
/**
|
|
173
|
+
* Query população agregada por UF (para anos 1991-1999, com faixa etária)
|
|
174
|
+
*/
|
|
175
|
+
export declare function queryPopulationUfAgregado<T = Record<string, unknown>>(options: {
|
|
176
|
+
years?: number[];
|
|
177
|
+
ufs?: string[];
|
|
178
|
+
sex?: string;
|
|
179
|
+
/** Faixas de AGGREGATED_AGE_GROUPS; sem isto, todas — inclusive a idade ignorada (age_group nulo), que faz parte do total. */
|
|
180
|
+
ageGroups?: string[];
|
|
181
|
+
groupBy?: string[];
|
|
182
|
+
}): Promise<T[]>;
|
|
183
|
+
/** Faixas etárias quinquenais de pop_uf_agregado.parquet (1991–1999), na ordem. */
|
|
184
|
+
export declare const AGGREGATED_AGE_GROUPS: string[];
|
|
185
|
+
/**
|
|
186
|
+
* Faixas de pop_uf_agregado.parquet que cobrem EXATAMENTE [ageMin, ageMax].
|
|
187
|
+
* Devolve null quando o intervalo não cai nos limites das faixas (ex.: 0–14
|
|
188
|
+
* serve, 0–17 não): antes de 2000 só há população por faixa quinquenal, e uma
|
|
189
|
+
* taxa com denominador aproximado seria número errado com cara de certo.
|
|
190
|
+
* Sem filtro de idade devolve undefined (todas as faixas).
|
|
191
|
+
*/
|
|
192
|
+
export declare function aggregatedAgeGroupsFor(ageMin?: number, ageMax?: number): string[] | null | undefined;
|
|
193
|
+
export interface PopulationCoverage {
|
|
194
|
+
/** União dos dois arquivos: o que as ferramentas de taxa aceitam. */
|
|
195
|
+
first_year: number;
|
|
196
|
+
last_year: number;
|
|
197
|
+
/** pop_uf.parquet — idade simples por UF e sexo (projeções IBGE, 2000+). */
|
|
198
|
+
detailed: {
|
|
199
|
+
first_year: number;
|
|
200
|
+
last_year: number;
|
|
201
|
+
source: string;
|
|
202
|
+
age: string;
|
|
203
|
+
} | null;
|
|
204
|
+
/** pop_uf_agregado.parquet — faixa etária quinquenal por UF e sexo (1991–1999). */
|
|
205
|
+
aggregated: {
|
|
206
|
+
first_year: number;
|
|
207
|
+
last_year: number;
|
|
208
|
+
source: string;
|
|
209
|
+
age: string;
|
|
210
|
+
age_groups: string[];
|
|
211
|
+
} | null;
|
|
212
|
+
}
|
|
213
|
+
/**
|
|
214
|
+
* Esquece a cobertura memoizada — chamada depois que ensurePopulation() baixa
|
|
215
|
+
* algum arquivo: uma chamada anterior pode ter memoizado `null` (sem
|
|
216
|
+
* população) antes do download.
|
|
217
|
+
*/
|
|
218
|
+
export declare function resetPopulationCoverageCache(): void;
|
|
219
|
+
/**
|
|
220
|
+
* Cobertura populacional, lida dos próprios arquivos — nunca fixada no código.
|
|
221
|
+
* `first_year`/`last_year` é a união de pop_uf.parquet (idade simples, 2000+;
|
|
222
|
+
* a regra do CONTEXT.md diz que vai até o último ano de cubo FECHADO do SIH,
|
|
223
|
+
* e quem a cumpre é o build-population.R do healthbr-data) e de pop_uf_agregado.parquet
|
|
224
|
+
* (faixa etária, 1991–1999; sih:taxas-1992-1999). Antes de 2000 a taxa por
|
|
225
|
+
* idade só sai nas faixas do arquivo (aggregatedAgeGroupsFor). Devolve null
|
|
226
|
+
* sem nenhum dos dois arquivos.
|
|
227
|
+
*/
|
|
228
|
+
export declare function getPopulationCoverage(): Promise<PopulationCoverage | null>;
|
|
229
|
+
/** Qual arquivo de população serve a um ano (null = nenhum). */
|
|
230
|
+
export declare function populationSourceFor(year: number): Promise<"detailed" | "aggregated" | null>;
|
|
231
|
+
/**
|
|
232
|
+
* Compatibilidade: o intervalo aceito pelas taxas (união dos dois arquivos).
|
|
233
|
+
* Devolve null sem população.
|
|
234
|
+
*/
|
|
235
|
+
export declare function getPopulationYearRange(): Promise<{
|
|
236
|
+
first_year: number;
|
|
237
|
+
last_year: number;
|
|
238
|
+
} | null>;
|
|
239
|
+
/**
|
|
240
|
+
* Obtém população total para um filtro específico.
|
|
241
|
+
* Hierarquia de fontes:
|
|
242
|
+
* 1. pop_uf.parquet (idade simples, anos >= 2000)
|
|
243
|
+
* 2. pop_uf_agregado.parquet (faixa etária, anos 1991-1999)
|
|
244
|
+
* 3. pop_municipios.parquet (fallback, agregando por UF)
|
|
245
|
+
*/
|
|
246
|
+
export declare function getPopulation(options: {
|
|
247
|
+
year: number;
|
|
248
|
+
uf?: string[];
|
|
249
|
+
sex?: string;
|
|
250
|
+
ageMin?: number;
|
|
251
|
+
ageMax?: number;
|
|
252
|
+
}): Promise<number>;
|
|
253
|
+
/**
|
|
254
|
+
* Obtém população por UF para um ano.
|
|
255
|
+
* Usa pop_uf.parquet se disponível, senão agrega pop_municipios.parquet.
|
|
256
|
+
*/
|
|
257
|
+
export declare function getPopulationByUf(options: {
|
|
258
|
+
year: number;
|
|
259
|
+
sex?: string;
|
|
260
|
+
ageMin?: number;
|
|
261
|
+
ageMax?: number;
|
|
262
|
+
}): Promise<Record<string, number>>;
|
|
263
|
+
//# sourceMappingURL=duckdb.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"duckdb.d.ts","sourceRoot":"","sources":["../../src/db/duckdb.ts"],"names":[],"mappings":"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"}
|