Skip to content

Commit ee9aeff

Browse files
authored
BFD-4244: Add Part C / D / Dual Coverage mappings (#2774)
1 parent e41edef commit ee9aeff

23 files changed

Lines changed: 1052 additions & 5 deletions

apps/bfd-model/bfd-model-idr/README.md

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -66,6 +66,16 @@ uv run compile_resources.py \
6666
--test
6767
```
6868

69+
Coverage (part C/D):
70+
```sh
71+
uv run compile_resources.py \
72+
-m maps/Coverage-Base.map \
73+
-i sample-data/Coverage-PartC-Sample.json \
74+
-o outputs/Coverage.json \
75+
-r https://bfd.cms.gov/MappingLanguage/Maps/Coverage-Base \
76+
--test
77+
```
78+
6979

7080
Pass along map with -m
7181
pass along the sample file with -i
@@ -92,6 +102,10 @@ SYNTHETIC_BENE_MDCR_ENTLMT.csv
92102
SYNTHETIC_BENE_MDCR_STUS.csv
93103
SYNTHETIC_BENE_TP.csv
94104
SYNTHETIC_BENE_XREF.csv
105+
SYNTHETIC_BENE_CMBND_DUAL_MDCR.csv
106+
SYNTHETIC_BENE_LIS.csv
107+
SYNTHETIC_BENE_MAPD_ENRLMT_RX.csv
108+
SYNTHETIC_BENE_MAPD_ENRLMT.csv
95109

96110
The patient generator creates synthetic beneficiary data with realistic but SYNTHETIC MBIs, coverage information, and historical records. It can generate multiple MBI versions per beneficiary and handles beneficiary cross-references with kill credit switches.
97111

apps/bfd-model/bfd-model-idr/StructureDefinitions/Source/Coverage-Base.json

Lines changed: 219 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -69,9 +69,9 @@
6969
]
7070
},
7171
{
72-
"id": "Coverage-Base.DUAL_STUS_CD",
73-
"path": "Coverage-Base.DUAL_STUS_CD",
74-
"label": "Medicare/Medicaid Dual Status Code",
72+
"id": "Coverage-Base.BENE_DUAL_STUS_CD",
73+
"path": "Coverage-Base.BENE_DUAL_STUS_CD",
74+
"label": "Beneficiary Dual Status Code",
7575
"min": 0,
7676
"max": "1",
7777
"type": [
@@ -188,6 +188,222 @@
188188
"code": "string"
189189
}
190190
]
191+
},
192+
{
193+
"id": "Coverage-Base.BENE_MDCD_ELGBLTY_BGN_DT",
194+
"path": "Coverage-Base.BENE_MDCD_ELGBLTY_BGN_DT",
195+
"label": "Medicaid Eligibility Begin Date",
196+
"min": 0,
197+
"max": "1",
198+
"type": [
199+
{
200+
"code": "string"
201+
}
202+
]
203+
},
204+
{
205+
"id": "Coverage-Base.BENE_MDCD_ELGBLTY_END_DT",
206+
"path": "Coverage-Base.BENE_MDCD_ELGBLTY_END_DT",
207+
"label": "Medicaid Eligibility End Date",
208+
"min": 0,
209+
"max": "1",
210+
"type": [
211+
{
212+
"code": "string"
213+
}
214+
]
215+
},
216+
{
217+
"id": "Coverage-Base.GEO_USPS_STATE_CD",
218+
"path": "Coverage-Base.GEO_USPS_STATE_CD",
219+
"label": "Medicaid State Code",
220+
"min": 0,
221+
"max": "1",
222+
"type": [
223+
{
224+
"code": "string"
225+
}
226+
]
227+
},
228+
{
229+
"id": "Coverage-Base.BENE_ENRLMT_BGN_DT",
230+
"path": "Coverage-Base.BENE_ENRLMT_BGN_DT",
231+
"label": "Beneficiary Enrollment Begin Date",
232+
"min": 0,
233+
"max": "1",
234+
"type": [
235+
{
236+
"code": "string"
237+
}
238+
]
239+
},
240+
{
241+
"id": "Coverage-Base.BENE_ENRLMT_END_DT",
242+
"path": "Coverage-Base.BENE_ENRLMT_END_DT",
243+
"label": "Beneficiary Enrollment End Date",
244+
"min": 0,
245+
"max": "1",
246+
"type": [
247+
{
248+
"code": "string"
249+
}
250+
]
251+
},
252+
{
253+
"id": "Coverage-Base.BENE_CNTRCT_NUM",
254+
"path": "Coverage-Base.BENE_CNTRCT_NUM",
255+
"label": "Beneficiary Contract Number",
256+
"min": 0,
257+
"max": "1",
258+
"type": [
259+
{
260+
"code": "string"
261+
}
262+
]
263+
},
264+
{
265+
"id": "Coverage-Base.BENE_PBP_NUM",
266+
"path": "Coverage-Base.BENE_PBP_NUM",
267+
"label": "Beneficiary PBP Number",
268+
"min": 0,
269+
"max": "1",
270+
"type": [
271+
{
272+
"code": "string"
273+
}
274+
]
275+
},
276+
{
277+
"id": "Coverage-Base.BENE_CVRG_TYPE_CD",
278+
"path": "Coverage-Base.BENE_CVRG_TYPE_CD",
279+
"label": "Beneficiary Coverage Type Code",
280+
"min": 0,
281+
"max": "1",
282+
"type": [
283+
{
284+
"code": "string"
285+
}
286+
]
287+
},
288+
{
289+
"id": "Coverage-Base.CNTRCT_PBP_NAME",
290+
"path": "Coverage-Base.CNTRCT_PBP_NAME",
291+
"label": "Contract PBP Name",
292+
"min": 0,
293+
"max": "1",
294+
"type": [
295+
{
296+
"code": "string"
297+
}
298+
]
299+
},
300+
{
301+
"id": "Coverage-Base.CNTRCT_PLAN_CNTCT_TEL_NUM",
302+
"path": "Coverage-Base.CNTRCT_PLAN_CNTCT_TEL_NUM",
303+
"label": "Contract Plan Contact Telephone Number",
304+
"min": 0,
305+
"max": "1",
306+
"type": [
307+
{
308+
"code": "string"
309+
}
310+
]
311+
},
312+
{
313+
"id": "Coverage-Base.BENE_MAPD_ENRLMT_RX",
314+
"path": "Coverage-Base.BENE_MAPD_ENRLMT_RX",
315+
"label": "Beneficiary MAPD Enrollment RX",
316+
"min": 0,
317+
"max": "1",
318+
"type": [
319+
{
320+
"code": "string"
321+
}
322+
]
323+
},
324+
{
325+
"id": "Coverage-Base.BENE_PDP_ENRLMT_MMBR_ID_NUM",
326+
"path": "Coverage-Base.BENE_PDP_ENRLMT_MMBR_ID_NUM",
327+
"label": "Beneficiary PDP Enrollment Member ID Number",
328+
"min": 0,
329+
"max": "1",
330+
"type": [
331+
{
332+
"code": "string"
333+
}
334+
]
335+
},
336+
{
337+
"id": "Coverage-Base.BENE_PDP_ENRLMT_GRP_NUM",
338+
"path": "Coverage-Base.BENE_PDP_ENRLMT_GRP_NUM",
339+
"label": "Beneficiary PDP Enrollment Group Number",
340+
"min": 0,
341+
"max": "1",
342+
"type": [
343+
{
344+
"code": "string"
345+
}
346+
]
347+
},
348+
{
349+
"id": "Coverage-Base.BENE_PDP_ENRLMT_PRCSR_NUM",
350+
"path": "Coverage-Base.BENE_PDP_ENRLMT_PRCSR_NUM",
351+
"label": "Beneficiary PDP Enrollment Processor Number",
352+
"min": 0,
353+
"max": "1",
354+
"type": [
355+
{
356+
"code": "string"
357+
}
358+
]
359+
},
360+
{
361+
"id": "Coverage-Base.BENE_PDP_ENRLMT_BANK_ID_NUM",
362+
"path": "Coverage-Base.BENE_PDP_ENRLMT_BANK_ID_NUM",
363+
"label": "Beneficiary PDP Enrollment Bank ID Number",
364+
"min": 0,
365+
"max": "1",
366+
"type": [
367+
{
368+
"code": "string"
369+
}
370+
]
371+
},
372+
{
373+
"id": "Coverage-Base.BENE_LIS_EFCTV_CD",
374+
"path": "Coverage-Base.BENE_LIS_EFCTV_CD",
375+
"label": "Beneficiary LIS Effective Code",
376+
"min": 0,
377+
"max": "1",
378+
"type": [
379+
{
380+
"code": "string"
381+
}
382+
]
383+
},
384+
{
385+
"id": "Coverage-Base.BENE_LIS_COPMT_LVL_CD",
386+
"path": "Coverage-Base.BENE_LIS_COPMT_LVL_CD",
387+
"label": "Beneficiary LIS Copayment Level Code",
388+
"min": 0,
389+
"max": "1",
390+
"type": [
391+
{
392+
"code": "string"
393+
}
394+
]
395+
},
396+
{
397+
"id": "Coverage-Base.BENE_LIS_PTD_PRM_PCT",
398+
"path": "Coverage-Base.BENE_LIS_PTD_PRM_PCT",
399+
"label": "Beneficiary LIS Part D Premium Percentage",
400+
"min": 0,
401+
"max": "1",
402+
"type": [
403+
{
404+
"code": "string"
405+
}
406+
]
191407
}
192408
]
193409
}

apps/bfd-model/bfd-model-idr/dictionary-support-files/Coverage.yaml

Lines changed: 124 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -97,3 +97,127 @@
9797
sourceView: V2_MDCR_BENE_MDCR_STUS_CD
9898
sourceColumn: BENE_DSBLD_STUS_ID
9999
nameOverride: Beneficiary Disabled Status Code
100+
- inputPath: Coverage-Base.BENE_DUAL_STUS_CD
101+
appliesTo:
102+
- DUAL
103+
fhirPath: Coverage.extension.where(url='https://bluebutton.cms.gov/fhir/StructureDefinition/BENE-DUAL-STUS-CD').value.code
104+
referenceTable: BENE_DUAL_STUS_CD
105+
sourceView: V2_MDCR_BENE_CMBND_DUAL_MDCR
106+
sourceColumn: BENE_DUAL_STUS_CD
107+
- inputPath: Coverage-Base.BENE_DUAL_TYPE_CD
108+
appliesTo:
109+
- DUAL
110+
fhirPath: Coverage.extension.where(url='https://bluebutton.cms.gov/fhir/StructureDefinition/BENE-DUAL-TYPE-CD').value.code
111+
referenceTable: BENE_DUAL_TYPE_CD
112+
sourceView: V2_MDCR_BENE_CMBND_DUAL_MDCR
113+
sourceColumn: BENE_DUAL_TYPE_CD
114+
- inputPath: Coverage-Base.GEO_USPS_STATE_CD
115+
appliesTo:
116+
- DUAL
117+
fhirPath: Coverage.extension.where(url='https://bluebutton.cms.gov/fhir/StructureDefinition/MEDICAID-STATE-CD').value.code
118+
sourceView: V2_MDCR_BENE_CMBND_DUAL_MDCR
119+
sourceColumn: GEO_USPS_STATE_CD
120+
- inputPath: Coverage-Base.BENE_MDCD_ELGBLTY_BGN_DT
121+
appliesTo:
122+
- DUAL
123+
fhirPath: Coverage.period.start
124+
sourceView: V2_MDCR_BENE_CMBND_DUAL_MDCR
125+
sourceColumn: BENE_MDCD_ELGBLTY_BGN_DT
126+
- inputPath: Coverage-Base.BENE_MDCD_ELGBLTY_END_DT
127+
appliesTo:
128+
- DUAL
129+
fhirPath: Coverage.period.end
130+
sourceView: V2_MDCR_BENE_CMBND_DUAL_MDCR
131+
sourceColumn: BENE_MDCD_ELGBLTY_END_DT
132+
- inputPath: Coverage-Base.BENE_ENRLMT_BGN_DT
133+
appliesTo:
134+
- PartC
135+
- PartD
136+
fhirPath: Coverage.period.start
137+
sourceView: V2_MDCR_BENE_MAPD_ENRLMT
138+
sourceColumn: BENE_ENRLMT_BGN_DT
139+
- inputPath: Coverage-Base.BENE_ENRLMT_END_DT
140+
appliesTo:
141+
- PartC
142+
- PartD
143+
fhirPath: Coverage.period.end
144+
sourceView: V2_MDCR_BENE_MAPD_ENRLMT
145+
sourceColumn: BENE_ENRLMT_END_DT
146+
- inputPath: Coverage-Base.BENE_CNTRCT_NUM
147+
appliesTo:
148+
- PartC
149+
- PartD
150+
fhirPath: Coverage.extension.where(url='https://bluebutton.cms.gov/fhir/StructureDefinition/BENE-CNTRCT-NUM').value
151+
sourceView: V2_MDCR_BENE_MAPD_ENRLMT
152+
sourceColumn: BENE_CNTRCT_NUM
153+
- inputPath: Coverage-Base.BENE_PBP_NUM
154+
appliesTo:
155+
- PartC
156+
- PartD
157+
fhirPath: Coverage.extension.where(url='https://bluebutton.cms.gov/fhir/StructureDefinition/BENE-PBP-NUM').value
158+
sourceView: V2_MDCR_BENE_MAPD_ENRLMT
159+
sourceColumn: BENE_PBP_NUM
160+
- inputPath: Coverage-Base.BENE_CVRG_TYPE_CD
161+
appliesTo:
162+
- PartC
163+
- PartD
164+
fhirPath: Coverage.extension.where(url='https://bluebutton.cms.gov/fhir/StructureDefinition/BENE-CVRG-TYPE-CD').value.code
165+
referenceTable: BENE_CVRG_TYPE_CD
166+
sourceView: V2_MDCR_BENE_MAPD_ENRLMT
167+
sourceColumn: BENE_CVRG_TYPE_CD
168+
- inputPath: Coverage-Base.CNTRCT_PBP_NAME
169+
appliesTo:
170+
- PartC
171+
- PartD
172+
fhirPath: Coverage.contained.where(resourceType='Organization').name
173+
sourceView: V2_MDCR_CNTRCT_PBP_NUM
174+
sourceColumn: CNTRCT_PBP_NAME
175+
- inputPath: Coverage-Base.CNTRCT_PLAN_CNTCT_TEL_NUM
176+
appliesTo:
177+
- PartC
178+
- PartD
179+
fhirPath: Coverage.contained.where(resourceType='Organization').contact.telecom.where(system='phone').value
180+
sourceView: V2_MDCR_CNTRCT_PBP_CNTCT
181+
sourceColumn: CNTRCT_PLAN_CNTCT_TEL_NUM
182+
- inputPath: Coverage-Base.BENE_PDP_ENRLMT_MMBR_ID_NUM
183+
appliesTo:
184+
- PartD
185+
fhirPath: Coverage.class.where(type.coding.code='rxid').value
186+
sourceView: V2_MDCR_BENE_MAPD_ENRLMT_RX
187+
sourceColumn: BENE_PDP_ENRLMT_MMBR_ID_NUM
188+
- inputPath: Coverage-Base.BENE_PDP_ENRLMT_GRP_NUM
189+
appliesTo:
190+
- PartD
191+
fhirPath: Coverage.class.where(type.coding.code='rxgroup').value
192+
sourceView: V2_MDCR_BENE_MAPD_ENRLMT_RX
193+
sourceColumn: BENE_PDP_ENRLMT_GRP_NUM
194+
- inputPath: Coverage-Base.BENE_PDP_ENRLMT_PRCSR_NUM
195+
appliesTo:
196+
- PartD
197+
fhirPath: Coverage.class.where(type.coding.code='rxpcn').value
198+
sourceView: V2_MDCR_BENE_MAPD_ENRLMT_RX
199+
sourceColumn: BENE_PDP_ENRLMT_PRCSR_NUM
200+
- inputPath: Coverage-Base.BENE_PDP_ENRLMT_BANK_ID_NUM
201+
appliesTo:
202+
- PartD
203+
fhirPath: Coverage.class.where(type.coding.code='rxbin').value
204+
sourceView: V2_MDCR_BENE_MAPD_ENRLMT_RX
205+
sourceColumn: BENE_PDP_ENRLMT_BANK_ID_NUM
206+
- inputPath: Coverage-Base.BENE_LIS_EFCTV_CD
207+
appliesTo:
208+
- PartD
209+
fhirPath: Coverage.extension.where(url='https://bluebutton.cms.gov/fhir/StructureDefinition/BENE-LIS-EFCTV-CD').value.code
210+
sourceView: V2_MDCR_BENE_LIS
211+
sourceColumn: BENE_LIS_EFCTV_CD
212+
- inputPath: Coverage-Base.BENE_LIS_COPMT_LVL_CD
213+
appliesTo:
214+
- PartD
215+
fhirPath: Coverage.extension.where(url='https://bluebutton.cms.gov/fhir/StructureDefinition/BENE-LIS-COPMT-LVL-CD').value.code
216+
sourceView: V2_MDCR_BENE_LIS
217+
sourceColumn: BENE_LIS_COPMT_LVL_CD
218+
- inputPath: Coverage-Base.BENE_LIS_PTD_PRM_PCT
219+
appliesTo:
220+
- PartD
221+
fhirPath: Coverage.extension.where(url='https://bluebutton.cms.gov/fhir/StructureDefinition/BENE-LIS-PTD-PRM-PCT').value
222+
sourceView: V2_MDCR_BENE_LIS
223+
sourceColumn: BENE_LIS_PTD_PRM_PCT

0 commit comments

Comments
 (0)