@vidal-community/vidal-web-components
Version:
Vidal Web Components
244 lines • 13.9 kB
JavaScript
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