UNPKG

@vidal-community/vidal-web-components

Version:

Vidal Web Components

244 lines 13.9 kB
import { EquivalentDrugWithDose } from '../model/equivalentDrugWithDose'; import { EquivalentDrug } from '../model/equivalent-drug'; import { Unit } from '../model/unit'; import { useDosesCombinationsService } from './doses-combinations-service'; import { assert } from '@open-wc/testing'; import { Dose } from '../model/dose'; import { PrescriptionLine } from '../model/prescription-line'; import { Drug } from '../model/drug'; import { MultiComposableDrugData } from '../model/multi-composable-drug-data'; import { ActivePrinciple } from '../model/active-principle'; suite('doses-combinations-service', () => { test('input dose is zero', () => { const inputDose = 0; const equivalentDrugUnit = new Unit('unitUri', 'cp'); const equivalentDrug = new EquivalentDrug('vidalUri', 'equivalentDrug', [ equivalentDrugUnit, ]); const equivalentDrugWithDose = new EquivalentDrugWithDose(equivalentDrug, inputDose); const equivalentDrugCombinations = []; useDosesCombinationsService().generateDoseCombinations(inputDose, [equivalentDrugWithDose], equivalentDrugCombinations); assert.deepEqual(equivalentDrugCombinations, [{}]); }); test('input dose is not Zero', () => { const inputDose = 120; const equivalentDrugUnit = new Unit('unitUri', 'mg'); const equivalentDrug1 = new EquivalentDrug('vidal://ucd/1', 'test Drug 30 mg cpr', [equivalentDrugUnit]); const equivalentDrug2 = new EquivalentDrug('vidal://ucd/2', 'test Drug 20 mg cpr', [equivalentDrugUnit]); const equivalentDrugWithDose = [ new EquivalentDrugWithDose(equivalentDrug1, 30), new EquivalentDrugWithDose(equivalentDrug2, 20), ]; const equivalentDrugCombinations = []; useDosesCombinationsService().generateDoseCombinations(inputDose, equivalentDrugWithDose, equivalentDrugCombinations); const expectedEquivalentDrugCombinations = [ { 'vidal://ucd/1': new EquivalentDrugWithDose(equivalentDrug1, 4) }, { 'vidal://ucd/1': new EquivalentDrugWithDose(equivalentDrug1, 2), 'vidal://ucd/2': new EquivalentDrugWithDose(equivalentDrug2, 3), }, { 'vidal://ucd/1': new EquivalentDrugWithDose(equivalentDrug1, 0), 'vidal://ucd/2': new EquivalentDrugWithDose(equivalentDrug2, 6), }, ]; assert.deepEqual(equivalentDrugCombinations, expectedEquivalentDrugCombinations); }); test('input dose for a divisible drug', () => { const inputDose = 1.5; const cortancyl = new EquivalentDrug('vidal://ucd/3513', 'CORTANCYL 20MG CPR', [], 2); const prednisone = new EquivalentDrug('vidal://ucd/9185', 'PREDNISONE EG 20MG CPR', [], 2); const equivalentDrugsWithDose = [ new EquivalentDrugWithDose(cortancyl, 0.5), new EquivalentDrugWithDose(prednisone, 0.5), ]; const equivalentDrugCombinations = []; useDosesCombinationsService().generateDoseCombinations(inputDose, equivalentDrugsWithDose, equivalentDrugCombinations); assert.sameDeepMembers(equivalentDrugCombinations, [ { 'vidal://ucd/3513': new EquivalentDrugWithDose(cortancyl, 1.5) }, { 'vidal://ucd/3513': new EquivalentDrugWithDose(cortancyl, 1), 'vidal://ucd/9185': new EquivalentDrugWithDose(prednisone, 0.5), }, { 'vidal://ucd/3513': new EquivalentDrugWithDose(cortancyl, 0.5), 'vidal://ucd/9185': new EquivalentDrugWithDose(prednisone, 1), }, { 'vidal://ucd/3513': new EquivalentDrugWithDose(cortancyl, 0), 'vidal://ucd/9185': new EquivalentDrugWithDose(prednisone, 1.5), }, ]); }); test('find all multi composable combinations', () => { const coRenitecPrescriptionLine = new PrescriptionLine(new Drug('vidal://ucd/3076', 'CO-RENITEC 20MG/12,5MG CPR')); coRenitecPrescriptionLine.multiComposableDrugData = new MultiComposableDrugData([], '/product/1263/molecules'); const activePrinciple4059 = new ActivePrinciple(4059, 57, 20); const activePrinciple1798 = new ActivePrinciple(1798, 57, 12.5); coRenitecPrescriptionLine.multiComposableDrugData.activePrinciples = [ activePrinciple4059, activePrinciple1798, ]; coRenitecPrescriptionLine.multiComposableDrugData.ucdvDispensingUnit = new Unit('vidal://unit/129', 'cp'); coRenitecPrescriptionLine.dispensingUnit = new Unit('vidal://unit/129', 'cp'); coRenitecPrescriptionLine.dose = 1; coRenitecPrescriptionLine.unit = new Unit('vidal://unit/129', 'cp'); const equivalentDrugOfActivePrinciple4059 = new EquivalentDrug('vidal://ucd/9382', 'ENALAPRIL ZEN 5MG CPR', []); const equivalentDrugOfActivePrinciple1798 = new EquivalentDrug('vidal://ucd/39681', 'HYDROCHLOROT.ARW 25MG CPR', []); equivalentDrugOfActivePrinciple4059.multiComposableDrugData = new MultiComposableDrugData([], ''); equivalentDrugOfActivePrinciple4059.multiComposableDrugData.activePrinciples = [new ActivePrinciple(4059, 57, 5)]; equivalentDrugOfActivePrinciple1798.multiComposableDrugData = new MultiComposableDrugData([], ''); equivalentDrugOfActivePrinciple1798.multiComposableDrugData.activePrinciples = [new ActivePrinciple(1798, 57, 25)]; const monoComposedEquivalentDrug = [ equivalentDrugOfActivePrinciple1798, equivalentDrugOfActivePrinciple4059, ]; const result = useDosesCombinationsService().buildCombinationsForMultiComposables(coRenitecPrescriptionLine, monoComposedEquivalentDrug); assert.sameDeepMembers(result, [ { 'vidal://ucd/9382': new EquivalentDrugWithDose(equivalentDrugOfActivePrinciple4059, 4), 'vidal://ucd/39681': new EquivalentDrugWithDose(equivalentDrugOfActivePrinciple1798, 0.5), }, ]); }); test('should not find multi composable combinations if incompatible with divisibility', () => { const coRenitecPrescriptionLine = new PrescriptionLine(new Drug('vidal://ucd/3076', 'CO-RENITEC 20MG/12,5MG CPR')); coRenitecPrescriptionLine.multiComposableDrugData = new MultiComposableDrugData([], '/product/1263/molecules'); const activePrinciple4059 = new ActivePrinciple(4059, 57, 20); const activePrinciple1798 = new ActivePrinciple(1798, 57, 12.5); coRenitecPrescriptionLine.multiComposableDrugData.activePrinciples = [ activePrinciple4059, activePrinciple1798, ]; coRenitecPrescriptionLine.dispensingUnit = new Unit('vidal://unit/129', 'cp'); coRenitecPrescriptionLine.multiComposableDrugData.ucdvDispensingUnit = new Unit('vidal://unit/129', 'cp'); coRenitecPrescriptionLine.dose = 1.5; coRenitecPrescriptionLine.unit = new Unit('vidal://unit/129', 'cp'); const equivalentDrugOfActivePrinciple4059 = new EquivalentDrug('vidal://ucd/9382', 'ENALAPRIL ZEN 5MG CPR', []); const equivalentDrugOfActivePrinciple1798 = new EquivalentDrug('vidal://ucd/39681', 'HYDROCHLOROT.ARW 25MG CPR', []); equivalentDrugOfActivePrinciple4059.multiComposableDrugData = new MultiComposableDrugData([], ''); equivalentDrugOfActivePrinciple4059.multiComposableDrugData.activePrinciples = [new ActivePrinciple(4059, 57, 5)]; equivalentDrugOfActivePrinciple1798.multiComposableDrugData = new MultiComposableDrugData([], ''); equivalentDrugOfActivePrinciple1798.multiComposableDrugData.activePrinciples = [new ActivePrinciple(1798, 57, 25)]; equivalentDrugOfActivePrinciple1798.divisibility = 1; const monoComposedEquivalentDrug = [ equivalentDrugOfActivePrinciple1798, equivalentDrugOfActivePrinciple4059, ]; const result = useDosesCombinationsService().buildCombinationsForMultiComposables(coRenitecPrescriptionLine, monoComposedEquivalentDrug); assert.sameDeepMembers(result, []); }); suite('find common denominator', () => { test('equal to 1', () => { const commonDenominatorResult = useDosesCombinationsService().findCommonDenominator([ '0.5/0.5', '0.5/0.5', ]); assert.equal(commonDenominatorResult, 1); }); test('equal to 3', () => { const commonDenominatorResult = useDosesCombinationsService().findCommonDenominator(['1/1.5', '1/3']); assert.equal(commonDenominatorResult, 3); }); test('equal to 21', () => { const commonDenominatorResult = useDosesCombinationsService().findCommonDenominator(['1/0.7', '1/3']); assert.equal(commonDenominatorResult, 21); }); }); test('build all combinations for multi composables', () => { const combinationsForMultiComposable = []; const activePrinciplesAndEquivalents = []; const equivalentOfActivePrincipleA = new EquivalentDrug('vidal://ucd/A', 'ofActivePrincipleA', []); const equivalentOfActivePrincipleA1 = new EquivalentDrug('vidal://ucd/A1', 'ofActivePrincipleA1', []); const equivalentOfActivePrincipleB = new EquivalentDrug('vidal://ucd/B', 'ofActivePrincipleB', []); const equivalentOfActivePrincipleB1 = new EquivalentDrug('vidal://ucd/B1', 'ofActivePrincipleB1', []); const equivalentOfActivePrincipleC = new EquivalentDrug('vidal://ucd/C', 'ofActivePrincipleC', []); const equivalentOfActivePrincipleC1 = new EquivalentDrug('vidal://ucd/C1', 'ofActivePrincipleC1', []); equivalentOfActivePrincipleA.dose = [ new Dose(1, new Unit('vidal://unit/129', 'cp')), ]; equivalentOfActivePrincipleA1.dose = [ new Dose(1, new Unit('vidal://unit/129', 'cp')), ]; equivalentOfActivePrincipleB.dose = [ new Dose(1, new Unit('vidal://unit/129', 'cp')), ]; equivalentOfActivePrincipleB1.dose = [ new Dose(1, new Unit('vidal://unit/129', 'cp')), ]; equivalentOfActivePrincipleC.dose = [ new Dose(1, new Unit('vidal://unit/129', 'cp')), ]; equivalentOfActivePrincipleC1.dose = [ new Dose(1, new Unit('vidal://unit/129', 'cp')), ]; activePrinciplesAndEquivalents.push([ equivalentOfActivePrincipleA, equivalentOfActivePrincipleA1, ]); activePrinciplesAndEquivalents.push([ equivalentOfActivePrincipleC, equivalentOfActivePrincipleC1, ]); activePrinciplesAndEquivalents.push([ equivalentOfActivePrincipleB, equivalentOfActivePrincipleB1, ]); useDosesCombinationsService().generateCombinationsForMultiComposable(combinationsForMultiComposable, activePrinciplesAndEquivalents); assert.sameDeepMembers(combinationsForMultiComposable, [ { 'vidal://ucd/A': new EquivalentDrugWithDose(equivalentOfActivePrincipleA, 1), 'vidal://ucd/C': new EquivalentDrugWithDose(equivalentOfActivePrincipleC, 1), 'vidal://ucd/B': new EquivalentDrugWithDose(equivalentOfActivePrincipleB, 1), }, { 'vidal://ucd/A': new EquivalentDrugWithDose(equivalentOfActivePrincipleA, 1), 'vidal://ucd/C': new EquivalentDrugWithDose(equivalentOfActivePrincipleC, 1), 'vidal://ucd/B1': new EquivalentDrugWithDose(equivalentOfActivePrincipleB1, 1), }, { 'vidal://ucd/A': new EquivalentDrugWithDose(equivalentOfActivePrincipleA, 1), 'vidal://ucd/C1': new EquivalentDrugWithDose(equivalentOfActivePrincipleC1, 1), 'vidal://ucd/B': new EquivalentDrugWithDose(equivalentOfActivePrincipleB, 1), }, { 'vidal://ucd/A': new EquivalentDrugWithDose(equivalentOfActivePrincipleA, 1), 'vidal://ucd/C1': new EquivalentDrugWithDose(equivalentOfActivePrincipleC1, 1), 'vidal://ucd/B1': new EquivalentDrugWithDose(equivalentOfActivePrincipleB1, 1), }, { 'vidal://ucd/A1': new EquivalentDrugWithDose(equivalentOfActivePrincipleA1, 1), 'vidal://ucd/C': new EquivalentDrugWithDose(equivalentOfActivePrincipleC, 1), 'vidal://ucd/B': new EquivalentDrugWithDose(equivalentOfActivePrincipleB, 1), }, { 'vidal://ucd/A1': new EquivalentDrugWithDose(equivalentOfActivePrincipleA1, 1), 'vidal://ucd/C': new EquivalentDrugWithDose(equivalentOfActivePrincipleC, 1), 'vidal://ucd/B1': new EquivalentDrugWithDose(equivalentOfActivePrincipleB1, 1), }, { 'vidal://ucd/A1': new EquivalentDrugWithDose(equivalentOfActivePrincipleA1, 1), 'vidal://ucd/C1': new EquivalentDrugWithDose(equivalentOfActivePrincipleC1, 1), 'vidal://ucd/B': new EquivalentDrugWithDose(equivalentOfActivePrincipleB, 1), }, { 'vidal://ucd/A1': new EquivalentDrugWithDose(equivalentOfActivePrincipleA1, 1), 'vidal://ucd/C1': new EquivalentDrugWithDose(equivalentOfActivePrincipleC1, 1), 'vidal://ucd/B1': new EquivalentDrugWithDose(equivalentOfActivePrincipleB1, 1), }, ]); }); }); //# sourceMappingURL=doses-combinations-service_test.js.map