├── .npmrc
├── src
├── routes
│ ├── +layout.ts
│ ├── +layout.svelte
│ └── +page.svelte
├── lib
│ ├── config.ts
│ ├── app.d.ts
│ ├── utils
│ │ ├── types.ts
│ │ ├── util.ts
│ │ └── shlClient.ts
│ └── components
│ │ ├── resource-templates
│ │ ├── Organization.svelte
│ │ ├── Consent.svelte
│ │ ├── Immunization.svelte
│ │ ├── Encounter.svelte
│ │ ├── Location.svelte
│ │ ├── Dosage.svelte
│ │ ├── Procedure.svelte
│ │ ├── AllergyIntolerance.svelte
│ │ ├── Practitioner.svelte
│ │ ├── Medication.svelte
│ │ ├── Condition.svelte
│ │ ├── Goal.svelte
│ │ ├── MedicationStatement.svelte
│ │ ├── MedicationRequest.svelte
│ │ ├── DiagnosticReport.svelte
│ │ ├── Observation.svelte
│ │ ├── OccupationalData.svelte
│ │ ├── Patient.svelte
│ │ └── AdvanceDirective.svelte
│ │ └── viewer
│ │ ├── Demo.svelte
│ │ └── IPSContent.svelte
├── env.d.ts
└── app.html
├── classic
├── favicon.ico
├── templates
│ ├── Text.html
│ ├── Composition.html
│ ├── Patient.html
│ ├── Immunizations.html
│ ├── Allergies.html
│ ├── Problems.html
│ ├── Checks.html
│ ├── AdvanceDirectives.html
│ ├── Observations.html
│ └── Medications.html
├── assets
│ ├── css
│ │ └── custom.css
│ ├── html
│ │ ├── footer.html
│ │ └── header.html
│ └── js
│ │ └── test.js
└── ips_main.html
├── static
├── favicon.ico
├── favicon.png
├── img
│ ├── menu.png
│ └── ips-logo.png
└── color guide.html
├── fix-popper.sh
├── default.env.development
├── .prettierignore
├── .env
├── default.env
├── .prettierrc
├── karma.conf.js
├── test
└── test.js
├── vite.config.ts
├── .gitignore
├── tsconfig.json
├── svelte.config.js
├── package.json
├── app.js
├── README.md
├── LICENSE
└── samples
├── connectathon_archive
├── TW_Li-Hui_Lee_01-modified.json
└── HK_IPS_Sample1.json
└── connectathon_samples
├── TW_Li-Hui_Lee_01-modified.json
└── HK_IPS_Sample1.json
/.npmrc:
--------------------------------------------------------------------------------
1 | engine-strict=true
2 |
--------------------------------------------------------------------------------
/src/routes/+layout.ts:
--------------------------------------------------------------------------------
1 | export const prerender = false;
2 | export const ssr = false;
3 |
--------------------------------------------------------------------------------
/classic/favicon.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/jddamore/IPSviewer/main/classic/favicon.ico
--------------------------------------------------------------------------------
/static/favicon.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/jddamore/IPSviewer/main/static/favicon.ico
--------------------------------------------------------------------------------
/static/favicon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/jddamore/IPSviewer/main/static/favicon.png
--------------------------------------------------------------------------------
/static/img/menu.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/jddamore/IPSviewer/main/static/img/menu.png
--------------------------------------------------------------------------------
/static/img/ips-logo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/jddamore/IPSviewer/main/static/img/ips-logo.png
--------------------------------------------------------------------------------
/fix-popper.sh:
--------------------------------------------------------------------------------
1 | #!/bin/sh
2 | sed -i '/2\.11\.6/a \ \ "type": "module",' node_modules/@popperjs/core/package.json
3 |
--------------------------------------------------------------------------------
/default.env.development:
--------------------------------------------------------------------------------
1 | # If overrides to .env values are needed for development
2 |
3 | # vite dev server port
4 | # DEV_SERVER_PORT=
5 |
--------------------------------------------------------------------------------
/src/lib/config.ts:
--------------------------------------------------------------------------------
1 | // import {PUBLIC_BASE_URL} from '$env/static/public';
2 | export const SHOW_VIEWER_DEMO = import.meta.env.VITE_SHOW_VIEWER_DEMO;
3 |
--------------------------------------------------------------------------------
/.prettierignore:
--------------------------------------------------------------------------------
1 | .DS_Store
2 | node_modules
3 | /build
4 | /.svelte-kit
5 | /package
6 | .env
7 | .env.*
8 | !.env.example
9 |
10 | # Ignore files for PNPM, NPM and YARN
11 | pnpm-lock.yaml
12 | package-lock.json
13 | yarn.lock
14 |
--------------------------------------------------------------------------------
/.env:
--------------------------------------------------------------------------------
1 | # Default environment file; copy to .env and modify as necessary
2 |
3 | # Debug option for non-prod deployments using /build output
4 | # (Works best in Chrome)
5 | # DEBUG=1
6 |
7 | # Adds demo tab to IPS viewer
8 | VITE_SHOW_VIEWER_DEMO=1
9 |
--------------------------------------------------------------------------------
/default.env:
--------------------------------------------------------------------------------
1 | # Default environment file; copy to .env and modify as necessary
2 |
3 | # Debug option for non-prod deployments using /build output
4 | # (Works best in Chrome)
5 | # DEBUG=1
6 |
7 | # Adds demo tab to IPS viewer
8 | VITE_SHOW_VIEWER_DEMO=1
9 |
--------------------------------------------------------------------------------
/src/env.d.ts:
--------------------------------------------------------------------------------
1 | ///
11 | Summary Date: {{date}}
12 |
13 |
11 | Birth Date: {{birthDate}}
12 |
13 | Name: {{name[0].given}}, {{name[0].family}}
14 |
| Section | 17 |Entries | 18 |Narrative | 19 | 20 | {{each(options.data)}} 21 |
|---|---|---|
| {{@this.display}} | 23 |{{@this.entries}} | 24 |{{@this.narrative}} | 25 |
| Contact Information | ||
|---|---|---|
| {telecom.system ?? ""} | 20 |{telecom.use ?? ""} | 21 |{telecom.value ?? ""} | 22 | {/each} 23 |
| Dosage | ||||
|---|---|---|---|---|
| Route | 21 |Qty | 22 |Unit | 23 |Freq. Qty | 24 |Freq. Period | 25 |
| {dosage.route?.coding?.[0].display ?? ''} | 30 |{dosage.doseAndRate?.[0].doseQuantity?.value ?? ''} | 31 |{dosage.doseAndRate?.[0].doseQuantity?.unit ?? ''} | 32 |{dosage.timing?.repeat?.count ?? ''} | 33 |34 | {#if dosage.timing?.repeat?.period && dosage.timing?.repeat?.periodUnit} 35 | {dosage.timing?.repeat?.period}{dosage.timing?.repeat?.periodUnit} 36 | {/if} 37 | | 38 |
| Use | 41 |Address | 42 |
|---|---|
| {address.use ?? ""} | 48 |
49 | {#if address.line}
50 | {#each address.line as line}
51 | {line} 52 | {/each} 53 | {/if} 54 | {address.city ?? "[Unknown City]"}{ 55 | address.state 56 | ? `, ${address.state}` 57 | : '' 58 | }{address.country 59 | ? `, ${address.country}` 60 | : ''} 61 | {address.postalCode ?? ""} 62 | |
63 |
| Composition | ||||
|---|---|---|---|---|
| Ingredient | 45 |Strength Numerator Qty | 46 |Unit | 47 |Strength Denominator Qty | 48 |Strength Denominator Unit | 49 |
| {ingredient.itemCodeableConcept?.coding?.[0].display} | 55 |{ingredient.strength?.numerator?.value} | 56 |{ingredient.strength?.numerator?.unit} | 57 |{ingredient.strength?.denominator?.value} | 58 |{ingredient.strength?.denominator?.unit} | 59 |
| Name | 12 |Date | 13 |Value | 14 |Category | 15 |
|---|---|---|---|
| 21 | {{if(options.observations[@index].code && options.observations[@index].code.coding)}} 22 | {{@this.code.coding[0].display}} 23 | ({{@this.code.coding[0].code}}) 24 | {{/if}} 25 | {{if(options.observations[@index].code.text)}} 26 | [Uncoded text shown]: {{@this.code.text}} 27 | {{/if}} 28 | | 29 |30 | {{if(options.observations[@index].effectiveDateTime)}} 31 | {{@this.effectiveDateTime}} 32 | {{/if}} 33 | | 34 |35 | {{if(options.observations[@index].valueCodeableConcept)}} 36 | {{@this.valueCodeableConcept.coding[0].display}} 37 | {{/if}} 38 | {{if(options.observations[@index].valueQuantity)}} 39 | {{@this.valueQuantity.value}} 40 | {{@this.valueQuantity.unit}} 41 | {{/if}} 42 | {{if(options.observations[@index].valueString)}} 43 | {{@this.valueString}} 44 | {{/if}} 45 | | 46 | {{if(options.observations[@index].category && options.observations[@index].category[0] && options.observations[@index].category[0].coding && options.observations[@index].category[0].coding[0])}} 47 |48 | {{@this.category[0].coding[0].code}} 49 | | 50 | {{/if}} 51 |
| Result(s) |
|---|
| {result.display} | 90 |
| Result(s) |
|---|
| Composition | ||||
|---|---|---|---|---|
| Ingredient | 52 |Strength Numerator Qty | 53 |Unit | 54 |Strength Denominator Qty | 55 |Strength Denominator Unit | 56 |
| {{@this.itemCodeableConcept.coding[0].display}} | 60 |{{@this.strength.numerator.value}} | 61 |{{@this.strength.numerator.unit}} | 62 |{{@this.strength.denominator.value}} | 63 |{{@this.strength.denominator.unit}} | 64 |
| Dosage | ||||
|---|---|---|---|---|
| Route | 74 |Qty | 75 |Unit | 76 |Freq. Qty | 77 |Freq. Period | 78 |
| {{@this.statement.dosage[0].route.coding[0].display}} | 82 |{{@this.statement.dosage[0].doseAndRate[0].doseQuantity.value}} | 83 |{{@this.statement.dosage[0].doseAndRate[0].doseQuantity.unit}} | 84 | {{if(options.medications[@index].statement.dosage[0].timing && options.medications[@index].statement.dosage[0].timing.repeat)}} 85 |{{@this.statement.dosage[0].timing.repeat.count}} | 86 |{{@this.statement.dosage[0].timing.repeat.periodUnit}} | 87 | {{/if}} 88 |
| Contact Information | ||
|---|---|---|
| {telecom.system ?? ""} | 56 |{telecom.use ?? ""} | 57 |{telecom.value ?? ""} | 58 |
| Use | 67 |Address | 68 |
|---|---|
| {address.use ?? ""} | 74 |
75 | {#if address.line}
76 | {#each address.line as line}
77 | {line} 78 | {/each} 79 | {/if} 80 | {address.city ?? "[Unknown City]"}{ 81 | address.state 82 | ? `, ${address.state}` 83 | : '' 84 | }{address.country 85 | ? `, ${address.country}` 86 | : ''} 87 | {address.postalCode ?? ""} 88 | |
89 |
| Contact Information | ||
|---|---|---|
| {telecom.system ?? ""} | 123 |{telecom.use ?? ""} | 124 |{telecom.value ?? ""} | 125 |
| Use | 134 |Address | 135 |
|---|---|
| {contact.address.use ?? ""} | 140 |
141 | {#if contact.address.line}
142 | {#each contact.address.line as line}
143 | {line} 144 | {/each} 145 | {/if} 146 | {contact.address.city ?? "[Unknown City]"}{ 147 | contact.address.state 148 | ? `, ${contact.address.state}` 149 | : '' 150 | }{contact.address.country 151 | ? `, ${contact.address.country}` 152 | : ''} 153 | {contact.address.postalCode ?? ""} 154 | |
155 |
This is for test data only. Please do not submit PHI.
177 || Section | 211 |Entries | 212 |Narrative | 213 | 214 | {#each checksResult.data as result} 215 |
|---|---|---|
| {result.display} | 217 |{result.entries} | 218 |{result.narrative} | 219 |
Generated Narrative
identifier: id: URN:UVCI:01:TW:10807843F94AEE0EE5093FBC254BD813#B
status: final
type: Immunization summary report
date: May 14, 2021, 6:30:00 AM
author: See above (Organization/Inline-Organization-hos-example)
title: TWDCC-Vaccination Status 臺灣COVID疫苗接種數位證明
| - | Mode | Party |
| * | official | See above (Organization/Inline-Organization-CDC-example) |
Vaccine marketing authorizati on holder or Vaccine manufacturer: AstraZeneca AB
Vaccine medicinal product: Vaxzevria
status: completed
vaccineCode: covid-19 vaccines
patient: Patient/pat-example-tw-1
occurrence: 2021-05-14
location: Location/loc-example-tw-1
lotNumber: CTMAV509
performer: Practitioner/pra-example-tw-1
| - | TargetDisease | DoseNumber[x] | SeriesDoses[x] |
| * | COVID-19 | 1 | 2 |
Generated Narrative
identifier: id: 310942728
name: 王大明(OFFICIAL)
gender: male
birthDate: 1990-01-01
Generated Narrative
name: Centers for Disease Control, Ministry of Health and Welfare 衛生福利部疾病管制署
address: TW
Generated Narrative
status: completed
vaccineCode: covid-19 vaccines
patient: See above (Patient/Inline-Patient-example)
occurrence: 2021-05-14
location: See above (Location/Inline-Location-example)
manufacturer: See above (Organization/Inline-Organization-VaccineManufacturer-example)
lotNumber: CTMAV509
| - | Actor |
| * | See above (Practitioner/Inline-Practitioner-example) |
| - | TargetDisease | DoseNumber[x] | SeriesDoses[x] |
| * | COVID-19 | 1 | 2 |
Generated Narrative
address: TW
Generated Narrative
identifier: id: 401180014
name: National Taiwan University Hospital 國立臺灣大學醫學院附設醫院
Generated Narrative
identifier: id: ORG-100001699
name: AstraZeneca AB
Generated Narrative
identifier: id: 20021
name: LULU WANG
Generated Narrative
name: Taiwan Ministry of Health and Welfare 衛生福利部
address: TW
Generated Narrative
identifier: id: URN:UVCI:01:TW:10807843F94AEE0EE5093FBC254BD813#B
status: final
type: Immunization summary report
date: May 14, 2021, 6:30:00 AM
author: See above (Organization/Inline-Organization-hos-example)
title: TWDCC-Vaccination Status 臺灣COVID疫苗接種數位證明
| - | Mode | Party |
| * | official | See above (Organization/Inline-Organization-CDC-example) |
Vaccine marketing authorizati on holder or Vaccine manufacturer: AstraZeneca AB
Vaccine medicinal product: Vaxzevria
status: completed
vaccineCode: covid-19 vaccines
patient: Patient/pat-example-tw-1
occurrence: 2021-05-14
location: Location/loc-example-tw-1
lotNumber: CTMAV509
performer: Practitioner/pra-example-tw-1
| - | TargetDisease | DoseNumber[x] | SeriesDoses[x] |
| * | COVID-19 | 1 | 2 |
Generated Narrative
identifier: id: 310942728
name: 王大明(OFFICIAL)
gender: male
birthDate: 1990-01-01
Generated Narrative
name: Centers for Disease Control, Ministry of Health and Welfare 衛生福利部疾病管制署
address: TW
Generated Narrative
status: completed
vaccineCode: covid-19 vaccines
patient: See above (Patient/Inline-Patient-example)
occurrence: 2021-05-14
location: See above (Location/Inline-Location-example)
manufacturer: See above (Organization/Inline-Organization-VaccineManufacturer-example)
lotNumber: CTMAV509
| - | Actor |
| * | See above (Practitioner/Inline-Practitioner-example) |
| - | TargetDisease | DoseNumber[x] | SeriesDoses[x] |
| * | COVID-19 | 1 | 2 |
Generated Narrative
address: TW
Generated Narrative
identifier: id: 401180014
name: National Taiwan University Hospital 國立臺灣大學醫學院附設醫院
Generated Narrative
identifier: id: ORG-100001699
name: AstraZeneca AB
Generated Narrative
identifier: id: 20021
name: LULU WANG
Generated Narrative
name: Taiwan Ministry of Health and Welfare 衛生福利部
address: TW