Skip to content

Commit 152af01

Browse files
authored
BB2-3555: Final adjustments for C4DIC FE POC (#87)
* Upgrade ds library, adjust contract id for part c/d, minor formatting adjustments * Revert ds update * Adjustments to C4DIC POC * Add default data and adjust spacing for vertical alignment * Changes from self-review
1 parent e28c765 commit 152af01

File tree

11 files changed

+72764
-45
lines changed

11 files changed

+72764
-45
lines changed

client/src/components/c4dic.tsx

Lines changed: 10 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ export type CoverageInfo = {
2222
status: string,
2323
medicaidEligibility: string,
2424
referenceYear: string,
25+
entitlementReason: string,
2526
colorPalette: {
2627
foreground: string,
2728
background: string,
@@ -65,6 +66,7 @@ export default function InsuranceCard() {
6566
status: c.active,
6667
medicaidEligibility: c.medicaidEligibility,
6768
referenceYear: c.referenceYear,
69+
entitlementReason: c.entitlementReason,
6870
colorPalette: {
6971
foreground: c.colorPalette.foreground,
7072
background: c.colorPalette.background,
@@ -170,7 +172,7 @@ export default function InsuranceCard() {
170172
{insInfo?.coverages.map(c => {
171173
const startDateDiv = (c.startDate !== null && c.startDate !== "") ?
172174
(
173-
<div>
175+
<div style={{ width: '70px'}}>
174176
<text className="field-label">Start Date</text>
175177
<br/>
176178
<text className="field-value">{c.startDate}</text>
@@ -180,7 +182,7 @@ export default function InsuranceCard() {
180182
case "Part A":
181183
return (
182184
<div className="bb-c-c4dic-coverage-a">
183-
<div>
185+
<div style={{ width: '60px'}}>
184186
<text className="field-label">Coverage</text>
185187
<br/>
186188
<text className="field-value">Hospital<br/>{c.coverageClass}</text>
@@ -189,14 +191,14 @@ export default function InsuranceCard() {
189191
<div>
190192
<text className="field-label">Entitlement Reason</text>
191193
<br/>
192-
<text className="field-value">{c.contractId}</text>
194+
<text className="field-value">{c.entitlementReason}</text>
193195
</div>
194196
</div>
195197
)
196198
case "Part B":
197199
return (
198200
<div className="bb-c-c4dic-coverage-b">
199-
<div>
201+
<div style={{ width: '60px'}}>
200202
<text className="field-label">Coverage</text>
201203
<br/>
202204
<text className="field-value">Medical<br/>{c.coverageClass}</text>
@@ -205,37 +207,25 @@ export default function InsuranceCard() {
205207
</div>
206208
)
207209
case "Part C":
208-
const partCTypeDiv = (c.coverageClass != null) ?
209-
(
210-
<div>
211-
<text className="field-label">Type</text>
212-
<br/>
213-
<text className="field-value">{c.coverageClass}</text>
214-
</div>
215-
) : null
210+
216211
return (
217212
<div className="bb-c-c4dic-coverage-c">
218-
<div>
213+
<div style={{ width: '60px'}}>
219214
<text className="field-label">Coverage</text>
220215
<br/>
221-
<text className="field-value">Advantage<br/>{c.coverageClass}</text>
222-
{partCTypeDiv}
216+
<text className="field-value">{c.coverageClass}</text>
223217
</div>
224218
<div>
225219
<text className="field-label">Plan #</text>
226220
<br/>
227221
<text className="field-value">{c.contractId}</text>
228-
<br/>
229-
<text className="field-label">Organization</text>
230-
<br/>
231-
<text className="field-value">{c.payer}</text>
232222
</div>
233223
</div>
234224
)
235225
case "Part D":
236226
return (
237227
<div className="bb-c-c4dic-coverage-d">
238-
<div>
228+
<div style={{ width: '60px'}}>
239229
<text className="field-label">Coverage</text>
240230
<br/>
241231
<text className="field-value">Rx<br/>{c.coverageClass}</text>

client/src/components/patientData.tsx

Lines changed: 25 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -7,14 +7,20 @@ import React, { useState } from 'react';
77
export default function PatientData() {
88
const [header] = useState('Fetch your Coverage and Medicare Prescription Drug data');
99
const [settingsState] = useState<SettingsType>({
10-
pkce: true,
11-
version: 'v2',
12-
env: 'sandbox'
10+
useDefaultDataButton: false,
1311
});
1412
async function goAuthorize() {
15-
const authUrlResponse = await axios.get(`/api/authorize/authurl`, { params: settingsState });
13+
const authUrlResponse = await axios.get(`/api/authorize/authurl`);
1614
window.location.href = authUrlResponse.data || '/';
1715
}
16+
async function goLoadDefaults() {
17+
const loadDefaultsData = await axios.get(`/api/bluebutton/loadDefaults`);
18+
window.location.href = loadDefaultsData.data || '/';
19+
}
20+
async function goLoadDefaults2() {
21+
const loadDefaultsData = await axios.get(`/api/bluebutton/loadDefaults2`);
22+
window.location.href = loadDefaultsData.data || '/';
23+
}
1824

1925
/* DEVELOPER NOTES:
2026
* Here we are hard coding the users information for the sake of saving time
@@ -34,7 +40,21 @@ export default function PatientData() {
3440
<div>
3541
<h4>{ header }</h4>
3642
</div>
37-
<Button id="auth_btn" variation="primary" onClick={goAuthorize}>Authorize</Button>
43+
<div className='ds-u-margin-top--2'>
44+
<Button id="auth_btn" variation="primary" onClick={goAuthorize}>Authorize</Button>
45+
</div>
46+
{
47+
settingsState.useDefaultDataButton ?
48+
<div>
49+
<div className='ds-u-margin-top--2'>
50+
<Button id="load_defaults_btn" variation="primary" onClick={goLoadDefaults}>Load default data 1</Button>
51+
</div>
52+
<div className='ds-u-margin-top--2'>
53+
<Button id="load_defaults_btn2" variation="primary" onClick={goLoadDefaults2}>Load default data 2</Button>
54+
</div>
55+
</div> :
56+
null
57+
}
3858
</div>
3959
</div>
4060
);

client/src/styles/index.scss

Lines changed: 20 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -205,29 +205,37 @@ input[type=number]::-webkit-input-placeholder {
205205
}
206206

207207
.bb-c-c4dic-coverage-a {
208-
display: grid;
209-
grid-template-columns: 1fr 1fr 2fr;
210-
padding: 10px;
208+
display: flex;
209+
padding: 8px;
210+
align-items: flex-start;
211+
gap: 24px;
212+
align-self: stretch;
211213
}
212214

213215
.bb-c-c4dic-coverage-b {
214-
display: grid;
215-
grid-template-columns: 1fr 1fr 2fr;
216-
padding: 10px;
216+
display: flex;
217+
padding: 8px;
218+
align-items: flex-start;
219+
gap: 24px;
220+
align-self: stretch;
217221
border-top: 0.5px solid
218222
}
219223

220224
.bb-c-c4dic-coverage-c {
221-
display: grid;
222-
grid-template-columns: 1fr 3fr;
223-
padding: 10px;
225+
display: flex;
226+
padding: 8px;
227+
align-items: flex-start;
228+
gap: 24px;
229+
align-self: stretch;
224230
border-top: 0.5px solid
225231
}
226232

227233
.bb-c-c4dic-coverage-d {
228-
display: grid;
229-
grid-template-columns: 1fr 1fr 2fr;
230-
padding: 10px;
234+
display: flex;
235+
padding: 8px;
236+
align-items: flex-start;
237+
gap: 24px;
238+
align-self: stretch;
231239
border-top: 0.5px solid
232240
}
233241

client/src/types/settings.ts

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,3 @@
11
export type SettingsType = {
2-
env: 'sandbox' | 'local' | 'production',
3-
version: 'v1' | 'v2',
4-
pkce: boolean,
2+
useDefaultDataButton: boolean,
53
}

server/app.py

Lines changed: 26 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -14,8 +14,7 @@
1414

1515
C4DIC_LOGO_EXT = "http://hl7.org/fhir/us/insurance-card/StructureDefinition/C4DIC-Logo-extension"
1616
C4DIC_ADDL_CARD_INFO_EXT = "http://hl7.org/fhir/us/insurance-card/StructureDefinition/C4DIC-AdditionalCardInformation-extension"
17-
CMS_VAR_PTC_CNTRCT_ID_01 = "https://bluebutton.cms.gov/resources/variables/ptc_cntrct_id_01"
18-
CMS_VAR_PTD_CNTRCT_ID_01 = "https://bluebutton.cms.gov/resources/variables/ptdcntrct01"
17+
CMS_VAR_CREC = "https://bluebutton.cms.gov/resources/variables/crec"
1918
CMS_VAR_REF_YR="https://bluebutton.cms.gov/resources/variables/rfrnc_yr"
2019

2120
BENE_DENIED_ACCESS = "access_denied"
@@ -168,6 +167,29 @@ def get_patient_eob():
168167
else:
169168
return {}
170169

170+
171+
@app.route('/api/bluebutton/loadDefaults', methods=['GET'])
172+
def load_default_data():
173+
logged_in_user['dicPatientData'] = load_data_file("Dataset 1", "c4dicPatient")
174+
logged_in_user['dicCoverageData'] = load_data_file("Dataset 1", "c4dicCoverage")
175+
logged_in_user['eobData'] = load_data_file("Dataset 1", "eobData")
176+
return get_fe_redirect_url()
177+
178+
179+
@app.route('/api/bluebutton/loadDefaults2', methods=['GET'])
180+
def load_default_data2():
181+
logged_in_user['dicPatientData'] = load_data_file("Dataset 2", "c4dicPatient")
182+
logged_in_user['dicCoverageData'] = load_data_file("Dataset 2", "c4dicCoverage")
183+
logged_in_user['eobData'] = load_data_file("Dataset 2", "eobData")
184+
return get_fe_redirect_url()
185+
186+
187+
def load_data_file(dataset_name, resource_file_name):
188+
response_file = open("./default_datasets/{}/{}.json".format(dataset_name, resource_file_name), 'r')
189+
resource = json.load(response_file)
190+
response_file.close()
191+
return resource
192+
171193
@app.route('/api/data/insurance', methods=['GET'])
172194
def get_patient_insurance():
173195
"""
@@ -178,7 +200,6 @@ def get_patient_insurance():
178200
* Coverage (fetched from the BB2 server and cached in logged_in_user), and
179201
* sent back to FE to render a CMS insurance 'card'
180202
"""
181-
182203
print_setting()
183204

184205
## C4DIC patient and coverage where to extract PII and coverage plans & eligibilities
@@ -265,13 +286,13 @@ def get_patient_insurance():
265286
c_contract_id = "" ## Part A and Part B does not have contract number
266287
if c_coverageClass == "Part C":
267288
c_contract_id = lookup_1_and_get("$.resource.class[?(@.type.coding[0].code=='plan')]", "value", c)
268-
# c_contract_id = lookup_1_and_get(f"$.resource.extension[?(@.url=='{CMS_VAR_PTC_CNTRCT_ID_01}')]", "valueCoding", c).get('code')
269289
if c_coverageClass == "Part D":
270290
c_contract_id = lookup_1_and_get("$.resource.class[?(@.type.coding[0].code=='plan')]", "value", c)
271-
# c_contract_id = lookup_1_and_get(f"$.resource.extension[?(@.url=='{CMS_VAR_PTD_CNTRCT_ID_01}')]", "valueCoding", c).get('code')
272291
coverage['contractId'] = c_contract_id
273292
c_reference_year = lookup_1_and_get(f"$.resource.extension[?(@.url=='{CMS_VAR_REF_YR}')]", "valueDate", c)
274293
coverage['referenceYear'] = c_reference_year
294+
c_entitlement_reason = lookup_1_and_get(f"$.resource.extension[?(@.url=='{CMS_VAR_CREC}')]", "valueCoding", c).get('display')
295+
coverage['entitlementReason'] = c_entitlement_reason
275296
# color palettes extension
276297
c_color_palette_ext = lookup_by_path(f"$.resource.extension[?(@.url=='{C4DIC_COLOR_PALETTE_EXT}')]", c)
277298
if c_color_palette_ext[0]:

0 commit comments

Comments
 (0)