pulse-code 1.0.1__py3-none-any.whl

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.
Files changed (82) hide show
  1. pulse/__init__.py +1 -0
  2. pulse/__main__.py +4 -0
  3. pulse/catalog.py +102 -0
  4. pulse/cli.py +984 -0
  5. pulse/data/catalog.json +1599 -0
  6. pulse/data/queries_index.json +328 -0
  7. pulse/data/variable_labels.json +1338 -0
  8. pulse/llm_builder.py +732 -0
  9. pulse/matcher.py +180 -0
  10. pulse/queries/aids-cases-by-year-1981-1999-req.xml +178 -0
  11. pulse/queries/births-by-year-1995-2002-req.xml +226 -0
  12. pulse/queries/births-by-year-2003-2006-req.xml +306 -0
  13. pulse/queries/births-by-year-2007-2024-req.xml +334 -0
  14. pulse/queries/cancer-incidence-by-site-by-year-1999-2022-req.xml +174 -0
  15. pulse/queries/cancer-mortality-by-site-by-year-2018-2023-req.xml +166 -0
  16. pulse/queries/covid-deaths-by-race-2020-2023-req.xml +529 -0
  17. pulse/queries/drug-deaths-by-month-1999-2020-req.xml +436 -0
  18. pulse/queries/drug-deaths-by-month-2018-2024-req.xml +544 -0
  19. pulse/queries/drug-deaths-by-year-1999-2020-req.xml +436 -0
  20. pulse/queries/drug-deaths-by-year-2018-2024-req.xml +536 -0
  21. pulse/queries/fentanyl-deaths-by-month-1999-2020-req.xml +430 -0
  22. pulse/queries/fentanyl-deaths-by-month-2018-2024-req.xml +530 -0
  23. pulse/queries/fetal-deaths-by-cause-by-year-2014-2024-req.xml +530 -0
  24. pulse/queries/fetal-deaths-by-year-2005-2024-req.xml +322 -0
  25. pulse/queries/heart-vs-cancer-by-sex-2018-2023-req.xml +532 -0
  26. pulse/queries/heat-wave-days-by-county-req.xml +154 -0
  27. pulse/queries/infant-mortality-2018-2023-req.xml +531 -0
  28. pulse/queries/infant-mortality-by-cause-by-year-2007-2023-req.xml +290 -0
  29. pulse/queries/maternal-mortality-by-year-1999-2020-req.xml +351 -0
  30. pulse/queries/maternal-mortality-by-year-2018-2024-req.xml +413 -0
  31. pulse/queries/mortality-by-race-sex-2018-2023-req.xml +490 -0
  32. pulse/queries/mortality-by-year-cause-1979-1998-req.xml +222 -0
  33. pulse/queries/mortality-by-year-cause-1999-2020-req.xml +434 -0
  34. pulse/queries/mortality-by-year-cause-2021-2024-req.xml +529 -0
  35. pulse/queries/opioid-overdose-deaths-2018-2024-req.xml +544 -0
  36. pulse/queries/pm25-by-year-2003-2011-req.xml +194 -0
  37. pulse/queries/provisional-births-by-month-2023-req.xml +854 -0
  38. pulse/queries/racial-mortality-gap-2018-2023-req.xml +531 -0
  39. pulse/queries/std-cases-by-disease-by-year-1984-2014-req.xml +178 -0
  40. pulse/queries/suicide-by-sex-1999-2020-req.xml +411 -0
  41. pulse/queries/suicide-by-sex-2021-2024-req.xml +551 -0
  42. pulse/queries/tb-cases-by-year-1993-2023-req.xml +206 -0
  43. pulse/queries/tick-borne-diseases-by-year-2016-2023-req.xml +125 -0
  44. pulse/queries/underlying-cause-mortality-by-year-1999-2020-req.xml +350 -0
  45. pulse/queries/unintentional-injuries-by-age-2018-2023-req.xml +531 -0
  46. pulse/templates/D10-base.xml +226 -0
  47. pulse/templates/D104-base.xml +142 -0
  48. pulse/templates/D117-base.xml +110 -0
  49. pulse/templates/D128-base.xml +182 -0
  50. pulse/templates/D140-base.xml +318 -0
  51. pulse/templates/D141-base.xml +454 -0
  52. pulse/templates/D149-base.xml +878 -0
  53. pulse/templates/D157-base.xml +490 -0
  54. pulse/templates/D158-base.xml +406 -0
  55. pulse/templates/D159-base.xml +774 -0
  56. pulse/templates/D16-base.xml +266 -0
  57. pulse/templates/D176-base.xml +526 -0
  58. pulse/templates/D178-base.xml +158 -0
  59. pulse/templates/D18-base.xml +262 -0
  60. pulse/templates/D192-base.xml +854 -0
  61. pulse/templates/D204-base.xml +142 -0
  62. pulse/templates/D23-base.xml +258 -0
  63. pulse/templates/D27-base.xml +342 -0
  64. pulse/templates/D31-base.xml +262 -0
  65. pulse/templates/D60-base.xml +274 -0
  66. pulse/templates/D61-base.xml +250 -0
  67. pulse/templates/D66-base.xml +378 -0
  68. pulse/templates/D69-base.xml +278 -0
  69. pulse/templates/D73-base.xml +182 -0
  70. pulse/templates/D74-base.xml +254 -0
  71. pulse/templates/D76-base.xml +350 -0
  72. pulse/templates/D77-base.xml +434 -0
  73. pulse/templates/D8-base.xml +314 -0
  74. pulse/templates/D80-base.xml +174 -0
  75. pulse/templates/D81-base.xml +178 -0
  76. pulse/wonder_client.py +161 -0
  77. pulse_code-1.0.1.dist-info/METADATA +249 -0
  78. pulse_code-1.0.1.dist-info/RECORD +82 -0
  79. pulse_code-1.0.1.dist-info/WHEEL +5 -0
  80. pulse_code-1.0.1.dist-info/entry_points.txt +2 -0
  81. pulse_code-1.0.1.dist-info/licenses/LICENSE +121 -0
  82. pulse_code-1.0.1.dist-info/top_level.txt +1 -0
pulse/matcher.py ADDED
@@ -0,0 +1,180 @@
1
+ """Fuzzy keyword matching for finding the best CDC WONDER dataset or query."""
2
+
3
+ from __future__ import annotations
4
+
5
+ import re
6
+ from dataclasses import dataclass
7
+
8
+ from pulse.catalog import BundledQuery, Catalog, Dataset
9
+
10
+ # Synonym groups — any word in a group matches any other word in that group
11
+ _SYNONYMS: list[set[str]] = [
12
+ {"opioid", "opioids", "opiate", "opiates"},
13
+ {"fentanyl", "synthetic opioid", "synthetic narcotic"},
14
+ {"heroin"},
15
+ {"drug", "drugs", "narcotic", "narcotics", "overdose"},
16
+ {"cocaine", "coke"},
17
+ {"meth", "methamphetamine", "amphetamine", "stimulant", "psychostimulant"},
18
+ {
19
+ "death",
20
+ "deaths",
21
+ "mortality",
22
+ "die",
23
+ "dying",
24
+ "fatal",
25
+ "fatality",
26
+ "fatalities",
27
+ "kill",
28
+ },
29
+ {"birth", "births", "natality", "born", "fertility", "fertilit"},
30
+ {"infant", "neonatal", "neonate", "baby", "babies", "newborn", "SIDS"},
31
+ {"maternal", "mother", "pregnancy", "pregnant", "childbirth", "obstetric"},
32
+ {"suicide", "suicidal", "self-harm", "self harm"},
33
+ {"cancer", "tumor", "neoplasm", "oncology"},
34
+ {"heart", "cardiac", "cardiovascular", "coronary"},
35
+ {"race", "racial", "ethnicity", "ethnic", "disparity", "disparities", "equity"},
36
+ {"vaccine", "vaccination", "immunization", "vaers", "adverse event"},
37
+ {"covid", "COVID", "COVID-19", "coronavirus", "pandemic"},
38
+ {"tick", "lyme", "lyme disease", "rocky mountain", "anaplasmosis", "ehrlichiosis"},
39
+ {
40
+ "environment",
41
+ "environmental",
42
+ "climate",
43
+ "temperature",
44
+ "heat",
45
+ "air quality",
46
+ "pollution",
47
+ "PM2.5",
48
+ "precipitation",
49
+ "rain",
50
+ },
51
+ {
52
+ "cancer",
53
+ "tumor",
54
+ "neoplasm",
55
+ "oncology",
56
+ "malignant",
57
+ "carcinoma",
58
+ "leukemia",
59
+ "lymphoma",
60
+ "breast cancer",
61
+ "lung cancer",
62
+ "colorectal",
63
+ "prostate",
64
+ },
65
+ {
66
+ "STD",
67
+ "STI",
68
+ "chlamydia",
69
+ "gonorrhea",
70
+ "syphilis",
71
+ "sexually transmitted",
72
+ "sexual health",
73
+ },
74
+ {"tuberculosis", "TB", "OTIS", "MDR-TB", "drug-resistant TB"},
75
+ {"fetal death", "stillbirth", "fetal", "stillborn"},
76
+ {"AIDS", "HIV", "epidemic"},
77
+ {"population", "census", "demographics", "projections", "estimates", "denominator"},
78
+ {"sex", "gender", "male", "female"},
79
+ {"state", "states", "county", "counties", "geographic", "geography", "region"},
80
+ {"year", "annual", "yearly", "trend", "trends"},
81
+ {"month", "monthly", "seasonal"},
82
+ {"age", "ages", "age group", "elderly", "children", "young"},
83
+ {"provisional", "recent", "latest", "current"},
84
+ {"historical", "history", "long-term"},
85
+ ]
86
+
87
+ # Build reverse lookup: word -> synonym set index
88
+ _WORD_TO_GROUP: dict[str, int] = {}
89
+ for _i, _group in enumerate(_SYNONYMS):
90
+ for _word in _group:
91
+ _WORD_TO_GROUP[_word.lower()] = _i
92
+
93
+
94
+ def _tokenize(text: str) -> set[str]:
95
+ """Extract tokens and expand synonyms into group IDs."""
96
+ raw_tokens = set(re.findall(r"[a-zA-Z0-9.]+", text.lower()))
97
+ expanded: set[str] = set(raw_tokens)
98
+ for token in raw_tokens:
99
+ idx = _WORD_TO_GROUP.get(token)
100
+ if idx is not None:
101
+ expanded.add(f"__group_{idx}__")
102
+ return expanded
103
+
104
+
105
+ def _score(prompt_tokens: set[str], item_tokens: set[str]) -> float:
106
+ """Jaccard-like overlap score, weighted by token count."""
107
+ if not item_tokens:
108
+ return 0.0
109
+ intersection = prompt_tokens & item_tokens
110
+ union = prompt_tokens | item_tokens
111
+ return len(intersection) / len(union)
112
+
113
+
114
+ @dataclass
115
+ class DatasetMatch:
116
+ dataset: Dataset
117
+ score: float
118
+ reason: str
119
+
120
+
121
+ @dataclass
122
+ class QueryMatch:
123
+ query: BundledQuery
124
+ score: float
125
+
126
+
127
+ def _year_coverage_bonus(prompt: str, ds: "Dataset") -> float:
128
+ """Boost score if the dataset's year range covers years mentioned in the prompt."""
129
+ import re as _re
130
+
131
+ years = [int(y) for y in _re.findall(r"\b(19\d{2}|20\d{2})\b", prompt)]
132
+ if not years:
133
+ return 0.0
134
+ year_end = ds.year_end or 2026
135
+ covered = sum(1 for y in years if ds.year_start <= y <= year_end)
136
+ return 0.15 * covered / len(years)
137
+
138
+
139
+ def match_datasets(prompt: str, catalog: Catalog, top_n: int = 5) -> list[DatasetMatch]:
140
+ """Return top-N datasets matching the prompt, scored by keyword overlap."""
141
+ prompt_tokens = _tokenize(prompt)
142
+ results: list[DatasetMatch] = []
143
+
144
+ for ds in catalog.datasets():
145
+ item_tokens = _tokenize(
146
+ " ".join([ds.title, ds.topic, ds.subject, ds.year_range_label] + ds.tags)
147
+ )
148
+ score = _score(prompt_tokens, item_tokens) + _year_coverage_bonus(prompt, ds)
149
+ reason = _build_reason(prompt_tokens, item_tokens, ds)
150
+ results.append(DatasetMatch(dataset=ds, score=score, reason=reason))
151
+
152
+ results.sort(key=lambda x: x.score, reverse=True)
153
+ return results[:top_n]
154
+
155
+
156
+ def match_queries(prompt: str, catalog: Catalog, top_n: int = 5) -> list[QueryMatch]:
157
+ """Return top-N bundled queries matching the prompt."""
158
+ prompt_tokens = _tokenize(prompt)
159
+ results: list[QueryMatch] = []
160
+
161
+ for q in catalog.queries():
162
+ item_tokens = _tokenize(
163
+ " ".join(
164
+ [q.description, q.topic, q.year_range, q.dataset_id]
165
+ + q.tags
166
+ + q.groupings
167
+ )
168
+ )
169
+ score = _score(prompt_tokens, item_tokens)
170
+ results.append(QueryMatch(query=q, score=score))
171
+
172
+ results.sort(key=lambda x: x.score, reverse=True)
173
+ return results[:top_n]
174
+
175
+
176
+ def _build_reason(prompt_tokens: set[str], item_tokens: set[str], ds: Dataset) -> str:
177
+ matched = [t for t in ds.tags if _tokenize(t) & prompt_tokens]
178
+ if matched:
179
+ return f"Matched: {', '.join(matched[:4])}"
180
+ return f"{ds.year_range_label} | {ds.topic}"
@@ -0,0 +1,178 @@
1
+ <?xml version="1.0" encoding="UTF-8"?><request-parameters>
2
+ <parameter>
3
+ <name>B_1</name>
4
+ <value>D12.V17-level1</value>
5
+ </parameter>
6
+ <parameter>
7
+ <name>B_2</name>
8
+ <value>*None*</value>
9
+ </parameter>
10
+ <parameter>
11
+ <name>B_3</name>
12
+ <value>*None*</value>
13
+ </parameter>
14
+ <parameter>
15
+ <name>B_4</name>
16
+ <value>*None*</value>
17
+ </parameter>
18
+ <parameter>
19
+ <name>B_5</name>
20
+ <value>*None*</value>
21
+ </parameter>
22
+ <parameter>
23
+ <name>F_D12.V14</name>
24
+ <value>*All*</value>
25
+ </parameter>
26
+ <parameter>
27
+ <name>F_D12.V17</name>
28
+ <value>*All*</value>
29
+ </parameter>
30
+ <parameter>
31
+ <name>I_D12.V14</name>
32
+ <value></value>
33
+ </parameter>
34
+ <parameter>
35
+ <name>I_D12.V17</name>
36
+ <value></value>
37
+ </parameter>
38
+ <parameter>
39
+ <name>M_1</name>
40
+ <value>D12.M1</value>
41
+ </parameter>
42
+ <parameter>
43
+ <name>O_export-format</name>
44
+ <value>xls</value>
45
+ </parameter>
46
+ <parameter>
47
+ <name>O_precision</name>
48
+ <value>0</value>
49
+ </parameter>
50
+ <parameter>
51
+ <name>O_timeout</name>
52
+ <value>600</value>
53
+ </parameter>
54
+ <parameter>
55
+ <name>O_javascript</name>
56
+ <value>on</value>
57
+ </parameter>
58
+ <parameter>
59
+ <name>O_title</name>
60
+ <value></value>
61
+ </parameter>
62
+ <parameter>
63
+ <name>O_oc-sect1-request</name>
64
+ <value>close</value>
65
+ </parameter>
66
+ <parameter>
67
+ <name>O_V14_fmode</name>
68
+ <value>freg</value>
69
+ </parameter>
70
+ <parameter>
71
+ <name>O_V17_fmode</name>
72
+ <value>freg</value>
73
+ </parameter>
74
+ <parameter>
75
+ <name>O_change_action-Send-Export Results</name>
76
+ <value>Export Results</value>
77
+ </parameter>
78
+ <parameter>
79
+ <name>O_show_totals</name>
80
+ <value>true</value>
81
+ </parameter>
82
+ <parameter>
83
+ <name>O_show_zeros</name>
84
+ <value>true</value>
85
+ </parameter>
86
+ <parameter>
87
+ <name>O_show_suppressed</name>
88
+ <value>true</value>
89
+ </parameter>
90
+ <parameter>
91
+ <name>V_D12.V1</name>
92
+ <value>*All*</value>
93
+ </parameter>
94
+ <parameter>
95
+ <name>V_D12.V2</name>
96
+ <value>*All*</value>
97
+ </parameter>
98
+ <parameter>
99
+ <name>V_D12.V3</name>
100
+ <value>*All*</value>
101
+ </parameter>
102
+ <parameter>
103
+ <name>V_D12.V4</name>
104
+ <value>*All*</value>
105
+ </parameter>
106
+ <parameter>
107
+ <name>V_D12.V5</name>
108
+ <value>*All*</value>
109
+ </parameter>
110
+ <parameter>
111
+ <name>V_D12.V6</name>
112
+ <value>*All*</value>
113
+ </parameter>
114
+ <parameter>
115
+ <name>V_D12.V7</name>
116
+ <value>*All*</value>
117
+ </parameter>
118
+ <parameter>
119
+ <name>V_D12.V8</name>
120
+ <value>*All*</value>
121
+ </parameter>
122
+ <parameter>
123
+ <name>V_D12.V9</name>
124
+ <value>*All*</value>
125
+ </parameter>
126
+ <parameter>
127
+ <name>V_D12.V10</name>
128
+ <value>*All*</value>
129
+ </parameter>
130
+ <parameter>
131
+ <name>V_D12.V11</name>
132
+ <value>*All*</value>
133
+ </parameter>
134
+ <parameter>
135
+ <name>V_D12.V12</name>
136
+ <value>*All*</value>
137
+ </parameter>
138
+ <parameter>
139
+ <name>V_D12.V13</name>
140
+ <value>*All*</value>
141
+ </parameter>
142
+ <parameter>
143
+ <name>V_D12.V14</name>
144
+ <value></value>
145
+ </parameter>
146
+ <parameter>
147
+ <name>V_D12.V17</name>
148
+ <value></value>
149
+ </parameter>
150
+ <parameter>
151
+ <name>action-Send</name>
152
+ <value>Send</value>
153
+ </parameter>
154
+ <parameter>
155
+ <name>dataset_code</name>
156
+ <value>D12</value>
157
+ </parameter>
158
+ <parameter>
159
+ <name>dataset_label</name>
160
+ <value>AIDS Public Use (Vintage 1999)</value>
161
+ </parameter>
162
+ <parameter>
163
+ <name>dataset_vintage</name>
164
+ <value></value>
165
+ </parameter>
166
+ <parameter>
167
+ <name>finder-stage-D12.V14</name>
168
+ <value>codeset</value>
169
+ </parameter>
170
+ <parameter>
171
+ <name>finder-stage-D12.V17</name>
172
+ <value>codeset</value>
173
+ </parameter>
174
+ <parameter>
175
+ <name>stage</name>
176
+ <value>request</value>
177
+ </parameter>
178
+ </request-parameters>
@@ -0,0 +1,226 @@
1
+ <?xml version="1.0" encoding="UTF-8"?><request-parameters>
2
+ <parameter>
3
+ <name>B_1</name>
4
+ <value>D10.V20</value>
5
+ </parameter>
6
+ <parameter>
7
+ <name>B_2</name>
8
+ <value>*None*</value>
9
+ </parameter>
10
+ <parameter>
11
+ <name>B_3</name>
12
+ <value>*None*</value>
13
+ </parameter>
14
+ <parameter>
15
+ <name>B_4</name>
16
+ <value>*None*</value>
17
+ </parameter>
18
+ <parameter>
19
+ <name>B_5</name>
20
+ <value>*None*</value>
21
+ </parameter>
22
+ <parameter>
23
+ <name>F_D10.V21</name>
24
+ <value>*All*</value>
25
+ </parameter>
26
+ <parameter>
27
+ <name>F_D10.V22</name>
28
+ <value>*All*</value>
29
+ </parameter>
30
+ <parameter>
31
+ <name>F_D10.V37</name>
32
+ <value>*All*</value>
33
+ </parameter>
34
+ <parameter>
35
+ <name>I_D10.V21</name>
36
+ <value></value>
37
+ </parameter>
38
+ <parameter>
39
+ <name>I_D10.V22</name>
40
+ <value></value>
41
+ </parameter>
42
+ <parameter>
43
+ <name>I_D10.V37</name>
44
+ <value></value>
45
+ </parameter>
46
+ <parameter>
47
+ <name>M_1</name>
48
+ <value>D10.M1</value>
49
+ </parameter>
50
+ <parameter>
51
+ <name>O_export-format</name>
52
+ <value>xls</value>
53
+ </parameter>
54
+ <parameter>
55
+ <name>O_timeout</name>
56
+ <value>600</value>
57
+ </parameter>
58
+ <parameter>
59
+ <name>O_javascript</name>
60
+ <value>on</value>
61
+ </parameter>
62
+ <parameter>
63
+ <name>O_title</name>
64
+ <value></value>
65
+ </parameter>
66
+ <parameter>
67
+ <name>O_location</name>
68
+ <value>D10.V21</value>
69
+ </parameter>
70
+ <parameter>
71
+ <name>O_V21_fmode</name>
72
+ <value>freg</value>
73
+ </parameter>
74
+ <parameter>
75
+ <name>O_V22_fmode</name>
76
+ <value>freg</value>
77
+ </parameter>
78
+ <parameter>
79
+ <name>O_V37_fmode</name>
80
+ <value>freg</value>
81
+ </parameter>
82
+ <parameter>
83
+ <name>O_change_action-Send-Export Results</name>
84
+ <value>Export Results</value>
85
+ </parameter>
86
+ <parameter>
87
+ <name>O_show_totals</name>
88
+ <value>true</value>
89
+ </parameter>
90
+ <parameter>
91
+ <name>O_show_zeros</name>
92
+ <value>true</value>
93
+ </parameter>
94
+ <parameter>
95
+ <name>O_show_suppressed</name>
96
+ <value>true</value>
97
+ </parameter>
98
+ <parameter>
99
+ <name>O_precision</name>
100
+ <value>0</value>
101
+ </parameter>
102
+ <parameter>
103
+ <name>V_D10.V4</name>
104
+ <value>*All*</value>
105
+ </parameter>
106
+ <parameter>
107
+ <name>V_D10.V2</name>
108
+ <value>*All*</value>
109
+ </parameter>
110
+ <parameter>
111
+ <name>V_D10.V1</name>
112
+ <value>*All*</value>
113
+ </parameter>
114
+ <parameter>
115
+ <name>V_D10.V5</name>
116
+ <value>*All*</value>
117
+ </parameter>
118
+ <parameter>
119
+ <name>V_D10.V20</name>
120
+ <value>*All*</value>
121
+ </parameter>
122
+ <parameter>
123
+ <name>V_D10.V3</name>
124
+ <value>*All*</value>
125
+ </parameter>
126
+ <parameter>
127
+ <name>V_D10.V6</name>
128
+ <value>*All*</value>
129
+ </parameter>
130
+ <parameter>
131
+ <name>V_D10.V7</name>
132
+ <value>*All*</value>
133
+ </parameter>
134
+ <parameter>
135
+ <name>V_D10.V8</name>
136
+ <value>*All*</value>
137
+ </parameter>
138
+ <parameter>
139
+ <name>V_D10.V9</name>
140
+ <value>*All*</value>
141
+ </parameter>
142
+ <parameter>
143
+ <name>V_D10.V11</name>
144
+ <value>*All*</value>
145
+ </parameter>
146
+ <parameter>
147
+ <name>V_D10.V12</name>
148
+ <value>*All*</value>
149
+ </parameter>
150
+ <parameter>
151
+ <name>V_D10.V16</name>
152
+ <value>*All*</value>
153
+ </parameter>
154
+ <parameter>
155
+ <name>V_D10.V14</name>
156
+ <value>*All*</value>
157
+ </parameter>
158
+ <parameter>
159
+ <name>V_D10.V18</name>
160
+ <value>*All*</value>
161
+ </parameter>
162
+ <parameter>
163
+ <name>V_D10.V15</name>
164
+ <value>*All*</value>
165
+ </parameter>
166
+ <parameter>
167
+ <name>V_D10.V19</name>
168
+ <value>*All*</value>
169
+ </parameter>
170
+ <parameter>
171
+ <name>V_D10.V13</name>
172
+ <value>*All*</value>
173
+ </parameter>
174
+ <parameter>
175
+ <name>V_D10.V17</name>
176
+ <value>*All*</value>
177
+ </parameter>
178
+ <parameter>
179
+ <name>V_D10.V10</name>
180
+ <value>*All*</value>
181
+ </parameter>
182
+ <parameter>
183
+ <name>V_D10.V21</name>
184
+ <value></value>
185
+ </parameter>
186
+ <parameter>
187
+ <name>V_D10.V22</name>
188
+ <value></value>
189
+ </parameter>
190
+ <parameter>
191
+ <name>V_D10.V37</name>
192
+ <value></value>
193
+ </parameter>
194
+ <parameter>
195
+ <name>action-Send</name>
196
+ <value>Send</value>
197
+ </parameter>
198
+ <parameter>
199
+ <name>dataset_code</name>
200
+ <value>D10</value>
201
+ </parameter>
202
+ <parameter>
203
+ <name>dataset_label</name>
204
+ <value>Natality, 1995-2002 Request Form</value>
205
+ </parameter>
206
+ <parameter>
207
+ <name>dataset_vintage</name>
208
+ <value></value>
209
+ </parameter>
210
+ <parameter>
211
+ <name>finder-stage-D10.V21</name>
212
+ <value>codeset</value>
213
+ </parameter>
214
+ <parameter>
215
+ <name>finder-stage-D10.V22</name>
216
+ <value>codeset</value>
217
+ </parameter>
218
+ <parameter>
219
+ <name>finder-stage-D10.V37</name>
220
+ <value>codeset</value>
221
+ </parameter>
222
+ <parameter>
223
+ <name>stage</name>
224
+ <value>request</value>
225
+ </parameter>
226
+ </request-parameters>