Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 4 additions & 4 deletions src/converter/__tests__/fce.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,7 @@ import fce_practitioner_create from './resources/questionnaire_fce/practitioner_
import fce_practitioner_create_structure_map from './resources/questionnaire_fce/practitioner_create_structure_map.json';
import fce_practitioner_edit from './resources/questionnaire_fce/practitioner_edit.json';
import fce_practitioner_role_create from './resources/questionnaire_fce/practitioner_role_create.json';
import fce_printable_header from './resources/questionnaire_fce/printable_header.json';
import fce_printable_elements from './resources/questionnaire_fce/printable_elements.json';
import fce_public_appointment from './resources/questionnaire_fce/public_appointment.json';
import fce_questionnaire_variable from './resources/questionnaire_fce/questionnaire_variable.json';
import fce_review_of_systems from './resources/questionnaire_fce/review_of_systems.json';
Expand Down Expand Up @@ -82,7 +82,7 @@ import fhir_practitioner_create from './resources/questionnaire_fhir/practitione
import fhir_practitioner_create_structure_map from './resources/questionnaire_fhir/practitioner_create_structure_map.json';
import fhir_practitioner_edit from './resources/questionnaire_fhir/practitioner_edit.json';
import fhir_practitioner_role_create from './resources/questionnaire_fhir/practitioner_role_create.json';
import fhir_printable_header from './resources/questionnaire_fhir/printable_header.json';
import fhir_printable_elements from './resources/questionnaire_fhir/printable_elements.json';
import fhir_public_appointment from './resources/questionnaire_fhir/public_appointment.json';
import fhir_questionnaire_variable from './resources/questionnaire_fhir/questionnaire_variable.json';
import fhir_review_of_systems from './resources/questionnaire_fhir/review_of_systems.json';
Expand Down Expand Up @@ -149,7 +149,7 @@ describe('Questionanire and QuestionnaireResponses transformation', () => {
['chart-highlight', fhir_chart_highlight, fce_chart_highlight],
['column-width', fhir_column_width, fce_column_width],
['mapping-inline', fhir_mapping_inline, fce_mapping_inline],
['printable-header', fhir_printable_header, fce_printable_header],
['printable-elements', fhir_printable_elements, fce_printable_elements],
])('Each FHIR Questionnaire should convert to FCE %s', async (_, fhir_questionnaire, fce_questionnaire) => {
expect(toFirstClassExtension(fhir_questionnaire as FHIRQuestionnaire)).toStrictEqual(fce_questionnaire);
});
Expand Down Expand Up @@ -202,7 +202,7 @@ describe('Questionanire and QuestionnaireResponses transformation', () => {
['chart-highlight', fce_chart_highlight, fhir_chart_highlight],
['column-width', fce_column_width, fhir_column_width],
['mapping-inline', fce_mapping_inline, fhir_mapping_inline],
['printable-header', fce_printable_header, fhir_printable_header],
['printable-elements', fce_printable_elements, fhir_printable_elements],
])('Each FCE Questionnaire should convert to FHIR %s', async (_, fce_questionnaire, fhir_questionnaire) => {
expect(sortExtensionsList(fromFirstClassExtension(fce_questionnaire as FCEQuestionnaire))).toStrictEqual(
sortExtensionsList(fhir_questionnaire),
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,104 @@
{
"resourceType": "Questionnaire",
"status": "active",
"meta": {
"profile": ["https://emr-core.beda.software/StructureDefinition/fhir-emr-questionnaire"]
},
"printableCover": [
{
"valueAttachment": {
"contentType": "application/pdf",
"data": "base64-encoded-pdf-data",
"url": "https://example.com/printable-cover.pdf"
}
},
{
"valueExpression": {
"language": "text/fhirpath",
"expression": "%Patient.name.given[0] + ' ' + %Patient.name.family"
}
},
{
"valueString": "Cover Page"
}
],
"printableHeaderFirstPage": [
{
"valueAttachment": {
"contentType": "application/pdf",
"data": "base64-encoded-pdf-data",
"url": "https://example.com/printable-header-first-page.pdf"
}
},
{
"valueExpression": {
"language": "text/fhirpath",
"expression": "%Patient.name.given[0] + ' ' + %Patient.name.family"
}
},
{
"valueString": "First Page"
}
],
"printableHeader": [
{
"valueAttachment": {
"contentType": "application/pdf",
"data": "base64-encoded-pdf-data",
"url": "https://example.com/printable-header.pdf"
}
},
{
"valueExpression": {
"language": "text/fhirpath",
"expression": "%Patient.name.given[0] + ' ' + %Patient.name.family"
}
},
{
"valueString": "Patient Name"
}
],
"printableFooter": [
{
"valueAttachment": {
"contentType": "application/pdf",
"data": "base64-encoded-pdf-data",
"url": "https://example.com/printable-footer.pdf"
}
},
{
"valueExpression": {
"language": "text/fhirpath",
"expression": "%Patient.name.given[0] + ' ' + %Patient.name.family"
}
},
{
"valueString": "Footer"
}
],
"printableFooterLastPage": [
{
"valueAttachment": {
"contentType": "application/pdf",
"data": "base64-encoded-pdf-data",
"url": "https://example.com/printable-footer-last-page.pdf"
}
},
{
"valueExpression": {
"language": "text/fhirpath",
"expression": "%Patient.name.given[0] + ' ' + %Patient.name.family"
}
},
{
"valueString": "Last Page"
}
],
"item": [
{
"linkId": "title",
"type": "string",
"text": "Title"
}
]
}

This file was deleted.

Original file line number Diff line number Diff line change
@@ -0,0 +1,111 @@
{
"resourceType": "Questionnaire",
"status": "active",
"meta": {
"profile": ["https://emr-core.beda.software/StructureDefinition/fhir-emr-questionnaire"]
},
"extension": [
{
"url": "https://emr-core.beda.software/StructureDefinition/printable-cover",
"valueAttachment": {
"contentType": "application/pdf",
"data": "base64-encoded-pdf-data",
"url": "https://example.com/printable-cover.pdf"
}
},
{
"url": "https://emr-core.beda.software/StructureDefinition/printable-cover",
"valueExpression": {
"language": "text/fhirpath",
"expression": "%Patient.name.given[0] + ' ' + %Patient.name.family"
}
},
{
"url": "https://emr-core.beda.software/StructureDefinition/printable-cover",
"valueString": "Cover Page"
},
{
"url": "https://emr-core.beda.software/StructureDefinition/printable-header-first-page",
"valueAttachment": {
"contentType": "application/pdf",
"data": "base64-encoded-pdf-data",
"url": "https://example.com/printable-header-first-page.pdf"
}
},
{
"url": "https://emr-core.beda.software/StructureDefinition/printable-header-first-page",
"valueExpression": {
"language": "text/fhirpath",
"expression": "%Patient.name.given[0] + ' ' + %Patient.name.family"
}
},
{
"url": "https://emr-core.beda.software/StructureDefinition/printable-header-first-page",
"valueString": "First Page"
},
{
"url": "https://emr-core.beda.software/StructureDefinition/printable-header",
"valueAttachment": {
"contentType": "application/pdf",
"data": "base64-encoded-pdf-data",
"url": "https://example.com/printable-header.pdf"
}
},
{
"url": "https://emr-core.beda.software/StructureDefinition/printable-header",
"valueExpression": {
"language": "text/fhirpath",
"expression": "%Patient.name.given[0] + ' ' + %Patient.name.family"
}
},
{
"url": "https://emr-core.beda.software/StructureDefinition/printable-footer",
"valueAttachment": {
"contentType": "application/pdf",
"data": "base64-encoded-pdf-data",
"url": "https://example.com/printable-footer.pdf"
}
},
{
"url": "https://emr-core.beda.software/StructureDefinition/printable-footer",
"valueExpression": {
"language": "text/fhirpath",
"expression": "%Patient.name.given[0] + ' ' + %Patient.name.family"
}
},
{
"url": "https://emr-core.beda.software/StructureDefinition/printable-footer",
"valueString": "Footer"
},
{
"url": "https://emr-core.beda.software/StructureDefinition/printable-footer-last-page",
"valueAttachment": {
"contentType": "application/pdf",
"data": "base64-encoded-pdf-data",
"url": "https://example.com/printable-footer-last-page.pdf"
}
},
{
"url": "https://emr-core.beda.software/StructureDefinition/printable-footer-last-page",
"valueExpression": {
"language": "text/fhirpath",
"expression": "%Patient.name.given[0] + ' ' + %Patient.name.family"
}
},
{
"url": "https://emr-core.beda.software/StructureDefinition/printable-footer-last-page",
"valueString": "Last Page"
},
{
"url": "https://emr-core.beda.software/StructureDefinition/printable-header",
"valueString": "Patient Name"
}
],
"item": [
{
"linkId": "title",
"type": "string",
"text": "Title"
}
]
}

This file was deleted.

66 changes: 57 additions & 9 deletions src/converter/fceToFhir/questionnaire/processExtensions.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,20 @@
import { FCEQuestionnaire } from '../../../fce.types';
import { FCEPrintableElement, FCEQuestionnaire } from '../../../fce.types';
import { Extension as FHIRExtension, Questionnaire as FHIRQuestionnaire } from 'fhir/r4b';

function processPrintableElements(url: string, elements: FCEPrintableElement[]): FHIRExtension[] {
return elements.map((element) => {
if ('valueAttachment' in element) {
return { url, valueAttachment: element.valueAttachment };
}

if ('valueExpression' in element) {
return { url, valueExpression: element.valueExpression };
}

return { url, valueString: (element as { valueString: string }).valueString };
});
}

export function processExtensions(questionnaire: FCEQuestionnaire): FHIRQuestionnaire {
const {
launchContext,
Expand All @@ -11,8 +25,11 @@ export function processExtensions(questionnaire: FCEQuestionnaire): FHIRQuestion
assembleContext,
itemPopulationContext,
variable,
printableCover,
printableHeader,
printableHeaderFirstPage,
printableFooter,
printableFooterLastPage,
...fhirQuestionnaire
} = questionnaire;

Expand Down Expand Up @@ -119,18 +136,49 @@ export function processExtensions(questionnaire: FCEQuestionnaire): FHIRQuestion
);
}

if (printableCover) {
extensions = extensions.concat(
processPrintableElements(
'https://emr-core.beda.software/StructureDefinition/printable-cover',
printableCover,
),
);
}

if (printableHeader) {
extensions.push({
url: 'https://emr-core.beda.software/StructureDefinition/printable-header',
valueAttachment: printableHeader,
});
extensions = extensions.concat(
processPrintableElements(
'https://emr-core.beda.software/StructureDefinition/printable-header',
printableHeader,
),
);
}

if (printableHeaderFirstPage) {
extensions = extensions.concat(
processPrintableElements(
'https://emr-core.beda.software/StructureDefinition/printable-header-first-page',
printableHeaderFirstPage,
),
);
}

if (printableFooter) {
extensions.push({
url: 'https://emr-core.beda.software/StructureDefinition/printable-footer',
valueAttachment: printableFooter,
});
extensions = extensions.concat(
processPrintableElements(
'https://emr-core.beda.software/StructureDefinition/printable-footer',
printableFooter,
),
);
}

if (printableFooterLastPage) {
extensions = extensions.concat(
processPrintableElements(
'https://emr-core.beda.software/StructureDefinition/printable-footer-last-page',
printableFooterLastPage,
),
);
}

if (extensions.length) {
Expand Down
Loading
Loading