@@ -4,47 +4,37 @@ import React, { useEffect, useState } from 'react';
44// From C4DIC Patient extract:
55// 1. identifier mbi, e.g. 1S00EU7JH47
66// 2. name, e.g. Johnie C
7- // 3. gender, e.g. male
8- // 4. dob, e.g. 1990-08-14
97// From C4DIC Coverage extract:
108// 1. coverage class: by Coverage resource 'class': "Part A"
119// 2. status: active or not active
1210// 3. period, start date: e.g. 2014-02-06
13- // 4. relationship to insured: e.g. self
14- // 5. payor: CMS
15- // 6. contract number: e.g. Part D , Part C: ptc_cntrct_id_01...12
16- // 7. reference year: e.g. Part A: 2025, Part B: 2025, etc.
17- // 8. other info such as: DIB, ESRD etc. can be added as needed
11+ // 4. payor: CMS
12+ // 5. contract number: e.g. Part D , Part C: ptc_cntrct_id_01...12
13+ // 6. reference year: e.g. Part A: 2025, Part B: 2025, etc.
14+ // 7. other info such as: DIB, ESRD etc. can be added as needed
1815
1916export type CoverageInfo = {
20- clazz : string ,
17+ coverageClass : string ,
2118 contractId : string ,
2219 startDate : string ,
2320 endDate : string ,
2421 payer : string ,
22+ payerId : string ,
2523 status : string ,
26- relationship : string , // self, spouse etc.
24+ medicaidEligibility : string ,
2725 referenceYear : string ,
28- cardImage : {
29- description : string ,
30- label : string ,
31- image : {
32- type : string ,
33- data : string
34- }
35- } ,
36- colorPallette : {
26+ colorPalette : {
3727 foreground : string ,
3828 background : string ,
3929 highlight : string
4030 } ,
41- c4dicSupportingImageSrc : string
31+ logo : string ,
32+ addlCardInfo : string ,
33+ contacts : string [ ]
4234}
4335
4436export type InsuranceInfo = {
4537 name : string ,
46- gender : string ,
47- dob : string ,
4838 identifier : string , // mbi
4939 coverages : CoverageInfo [ ] // e.g. Part A, Part B, Part C, Part D
5040}
@@ -68,36 +58,29 @@ export default function InsuranceCard() {
6858 if ( insuranceData . insData ) {
6959 const coveragesList : CoverageInfo [ ] = insuranceData . insData ?. coverages . map ( ( c : any ) => {
7060 return {
71- clazz : c . clazz ,
61+ coverageClass : c . coverageClass ,
7262 payer : c . payer ,
63+ payerId : c . payerId ,
7364 contractId : c . contractId ,
7465 startDate : c . startDate ,
7566 endDate : c . endDate ,
7667 status : c . active ,
77- relationship : c . relationship ,
68+ medicaidEligibility : c . medicaidEligibility ,
7869 referenceYear : c . referenceYear ,
79- cardImage : {
80- description : c . cardImage . description ,
81- label : c . cardImage . label ,
82- image : {
83- type : c . cardImage . image . type ,
84- data : c . cardImage . image . data
85- }
86- } ,
87- colorPallette : {
88- foreground : c . colorPallette . foreground ,
89- background : c . colorPallette . background ,
90- highlight : c . colorPallette . highlight
70+ colorPalette : {
71+ foreground : c . colorPalette . foreground ,
72+ background : c . colorPalette . background ,
73+ highlight : c . colorPalette . highlight
9174 } ,
92- c4dicSupportingImageSrc : `data:image/png;base64,${ c . cardImage . image . data } `
75+ logo : c . logo ,
76+ addlCardInfo : c . addlCardInfo ,
77+ contacts : c . contacts
9378 }
9479 } ) ;
9580
9681 setInsInfo (
9782 {
9883 name : insuranceData . insData . name ,
99- gender : insuranceData . insData . gender ,
100- dob : insuranceData . insData . dob ,
10184 identifier : insuranceData . insData . identifier ,
10285 coverages : coveragesList
10386 }
@@ -136,52 +119,155 @@ export default function InsuranceCard() {
136119 </ div >
137120 ) ;
138121 } else {
122+ var backgroundColor = insInfo ?. coverages [ 0 ] ?. colorPalette . background
123+ var highlightColor = insInfo ?. coverages [ 0 ] ?. colorPalette . highlight
124+ var textColor = insInfo ?. coverages [ 0 ] ?. colorPalette . foreground
125+ const primaryStyle = {
126+ backgroundColor : backgroundColor ,
127+ color : textColor
128+ }
129+ const highlightStyle = {
130+ backgroundColor : highlightColor ,
131+ color : textColor
132+ }
139133 return (
140- < div className = "content-wrapper" >
141- < div className = "ins-c4dic-card" >
142- < div className = "pii-sec bb-c-c4dic-card-pii-area" >
143- < pre className = "ins-fld-text" > Full Name: { insInfo ?. name || "" } Gender: { insInfo ?. gender || "" } DOB: { insInfo ?. dob || "" } </ pre >
144- < pre className = "ins-fld-text" > MBI: { insInfo ?. identifier || "" } </ pre >
134+ < div className = "ins-c4dic-card" style = { primaryStyle } >
135+ < div className = "bb-c-c4dic-card-header" >
136+ < img src = { insInfo ?. coverages [ 0 ] ?. logo } alt = "C4DIC Logo" height = "48px" />
137+ < h3 > { insInfo ?. coverages [ 0 ] ?. payer } </ h3 >
138+ </ div >
139+ < div className = "pii-sec bb-c-c4dic-card-pii-area" >
140+ < div className = "ins-fld-text patient-name" >
141+ < div >
142+ < text className = "field-label" > NAME</ text >
143+ < br />
144+ < text className = "field-value" > { insInfo ?. name || "" } </ text >
145+ </ div >
145146 </ div >
147+ < div className = "ins-fld-text patient-info" >
148+ < div >
149+ < text className = "field-label" > MEDICARE NUMBER</ text >
150+ < br />
151+ < text className = "field-value" > { insInfo ?. identifier || "" } </ text >
152+ </ div >
153+ < div >
154+ < text className = "field-label" > PAYER ID</ text >
155+ < br />
156+ < text className = "field-value" > { insInfo ?. coverages [ 0 ] ?. payerId || "" } </ text >
157+ </ div >
158+ < div >
159+ < text className = "field-label" > MEDICAID ELIGIBILITY</ text >
160+ < br />
161+ < text className = "field-value" > { insInfo ?. coverages [ 0 ] ?. medicaidEligibility || "TBD" } </ text >
162+ </ div >
163+ </ div >
164+ </ div >
146165
147- < div className = "coverage-sec bb-c-c4dic-card-coverages-area" >
148- { insInfo ?. coverages . map ( c => {
149- const coverageColorStyle = {
150- backgroundColor : c ?. colorPallette ?. highlight ,
151- color : c ?. colorPallette ?. foreground ,
152- } ;
153-
154- return (
155- < div >
156- < pre className = "ins-fld-text" style = { coverageColorStyle } >
157- Coverage Type: { c . clazz }
158- </ pre >
159- < pre className = "ins-fld-text" >
160- Payer: { c . payer }
161- </ pre >
162- < pre className = "ins-fld-text" style = { coverageColorStyle } >
163- Contract Number: { c . contractId }
164- </ pre >
165- < pre className = "ins-fld-text" >
166- Start Date: { c . startDate }
167- </ pre >
168- < pre className = "ins-fld-text" style = { coverageColorStyle } >
169- End Date: { c . endDate }
170- </ pre >
171- < pre className = "ins-fld-text" >
172- Status: { c . status }
173- </ pre >
174- < pre className = "ins-fld-text" style = { coverageColorStyle } >
175- Relationship to insured: { c . relationship || "" }
176- </ pre >
177- < pre className = "ins-fld-text" >
178- Reference Year: { c . referenceYear }
179- </ pre >
180- < img className = "bb-c-card-img" src = { c . c4dicSupportingImageSrc } alt = "cardImage" > </ img >
181- </ div >
182- )
183- } ) }
166+ < div className = "coverage-sec bb-c-c4dic-card-coverages-area" >
167+ < hr />
168+ < h6 > Benefits</ h6 >
169+ { insInfo ?. coverages . map ( c => {
170+ switch ( c . coverageClass ) {
171+ case "Part A" :
172+ return (
173+ < div className = "bb-c-c4dic-coverage" >
174+ < div >
175+ < text className = "field-label" > COVERAGE</ text >
176+ < br />
177+ < text className = "field-value" > { c . coverageClass } </ text >
178+ </ div >
179+ < div >
180+ < text className = "field-label" > START DATE</ text >
181+ < br />
182+ < text className = "field-value" > { c . startDate } ??? ?, ????</ text >
183+ </ div >
184+ < div >
185+ < text className = "field-label" > ENTITLEMENT REASON</ text >
186+ < br />
187+ < text className = "field-value" > { c . contractId } </ text >
188+ </ div >
189+ </ div >
190+ )
191+ case "Part B" :
192+ return (
193+ < div className = "bb-c-c4dic-coverage" style = { highlightStyle } >
194+ < div >
195+ < text className = "field-label" > COVERAGE</ text >
196+ < br />
197+ < text className = "field-value" > { c . coverageClass } </ text >
198+ </ div >
199+ < div >
200+ < text className = "field-label" > START DATE</ text >
201+ < br />
202+ < text className = "field-value" > { c . startDate } ??? ?, ????</ text >
203+ </ div >
204+ </ div >
205+ )
206+ case "Part C" :
207+ return (
208+ < div className = "bb-c-c4dic-coverage" >
209+ < div >
210+ < text className = "field-label" > COVERAGE</ text >
211+ < br />
212+ < text className = "field-value" > { c . coverageClass } </ text >
213+ < br />
214+ < text className = "field-label" > TYPE</ text >
215+ < br />
216+ < text className = "field-value" > { c . coverageClass } </ text >
217+ </ div >
218+ < div >
219+ < text className = "field-label" > PLAN #</ text >
220+ < br />
221+ < text className = "field-value" > { c . contractId } </ text >
222+ < br />
223+ < text className = "field-label" > ORGANIZATION</ text >
224+ < br />
225+ < text className = "field-value" > { c . payer } </ text >
226+ </ div >
227+ </ div >
228+ )
229+ case "Part D" :
230+ return (
231+ < div className = "bb-c-c4dic-coverage" style = { highlightStyle } >
232+ < div >
233+ < text className = "field-label" > COVERAGE</ text >
234+ < br />
235+ < text className = "field-value" > { c . coverageClass } </ text >
236+ </ div >
237+ < div >
238+ < text className = "field-label" > START DATE</ text >
239+ < br />
240+ < text className = "field-value" > { c . startDate } ??? ?, ????</ text >
241+ < br />
242+ < text className = "field-label" > PLAN #</ text >
243+ < br />
244+ < text className = "field-value" > { c . contractId } </ text >
245+ </ div >
246+ < div >
247+ < text className = "field-label" > COST SHARE</ text >
248+ < br />
249+ < text className = "field-value" > { c . contractId } </ text >
250+ </ div >
251+ </ div >
252+ )
253+ }
254+ } ) }
255+ </ div >
256+ < div className = "bb-c-c4dic-card-org-contact" >
257+ < hr />
258+ < h6 > Contact</ h6 >
259+
260+ < text className = "field-label" > CUSTOMER SERVICE</ text >
261+ < br />
262+ < div className = "contact-list" >
263+ { insInfo ?. coverages [ 0 ] ?. contacts . map ( contact => {
264+ return < text className = "field-value" > { contact } </ text >
265+ } ) }
184266 </ div >
267+ < br />
268+ </ div >
269+ < div className = "bb-c-c4dic-card-additional-card-info" >
270+ < text > { insInfo ?. coverages [ 0 ] ?. addlCardInfo } </ text >
185271 </ div >
186272 </ div >
187273 ) ;
0 commit comments