fume-fhir-converter
Version:
FHIR-Utilized Mapping Engine - Community
44 lines (39 loc) • 1.93 kB
text/typescript
/**
* © Copyright Outburn Ltd. 2022-2023 All Rights Reserved
* Project name: FUME
*/
/* eslint-disable */
import { getSnapshot } from '../parser/getSnapshot';
import { replaceColonsWithBrackets } from '../stringFunctions';
import { getMandatoriesOfElement } from './getMandatoriesOfElement';
import { returnPathWithoutX } from '../parser/returnPathWithoutX'
import { initCapOnce } from '../stringFunctions';
import { getFhirPackageIndex } from '../conformance';
import { getLogger } from '../logger';
import config from '../../config';
const dev = process.env.NODE_ENV === 'dev';
export const getMandatoriesOfStructure = async (structId: string): Promise<any> => {
if (dev) console.log({ func: getMandatoriesOfStructure, structId });
const snapshot = await getSnapshot(structId, config.getFhirVersion(), getFhirPackageIndex(), getLogger());
const rootMandatories = snapshot.snapshot.element.filter(item => item.min > 0 && item.id.split('.').length === 2);
const res = {};
for (const item of rootMandatories) {
const typeCount = item.type.length;
const isPoly = item.id.endsWith('[x]');
const idSuffixRaw = item.id.substring(item.id.indexOf(snapshot.type) + snapshot.type.length + 1);
const idSuffix = isPoly && typeCount === 1 ? returnPathWithoutX(idSuffixRaw) + initCapOnce(item.type[0].code) : idSuffixRaw;
if (dev) console.log({ itemId: item.id, idSuffix });
// if id suffix ends with [x] and there's a single type - fix the id accordingly
const val = await getMandatoriesOfElement(structId, idSuffix);
if (val) {
if (item.base.max > '1' || item.base.max === '*' || item.max > '1' || item.max === '*') {
res[idSuffix] = [val];
} else {
res[idSuffix] = val;
}
}
}
if (Object.keys(res).length > 0) {
return Object.assign({}, ...Object.entries(res).map(([key, value]) => ({ [replaceColonsWithBrackets(key)]: value })));
}
};