38 lines
1.1 KiB
TypeScript
38 lines
1.1 KiB
TypeScript
|
|
import { BadRequestException } from '@nestjs/common';
|
||
|
|
import { normalizeTeeth } from './treatment.utils';
|
||
|
|
|
||
|
|
export type LabCaseProsthesisLink = {
|
||
|
|
treatmentDetailId: string;
|
||
|
|
detail: { id: string; treatmentType: string; teeth: unknown };
|
||
|
|
};
|
||
|
|
|
||
|
|
export type LabCaseToothProsthesisRow = {
|
||
|
|
treatmentDetailId: string;
|
||
|
|
tooth: string;
|
||
|
|
prosthesisTypeCode: string;
|
||
|
|
};
|
||
|
|
|
||
|
|
export function assertCompleteToothProsthesisMap(labCase: {
|
||
|
|
details: LabCaseProsthesisLink[];
|
||
|
|
toothProsthesis: LabCaseToothProsthesisRow[];
|
||
|
|
}) {
|
||
|
|
const prosthesisByKey = new Set(
|
||
|
|
labCase.toothProsthesis.map((tp) => `${tp.treatmentDetailId}:${tp.tooth}`),
|
||
|
|
);
|
||
|
|
|
||
|
|
for (const link of labCase.details) {
|
||
|
|
if (link.detail.treatmentType !== 'prosthesis') {
|
||
|
|
continue;
|
||
|
|
}
|
||
|
|
const teeth = normalizeTeeth(link.detail.teeth);
|
||
|
|
for (const tooth of teeth) {
|
||
|
|
const key = `${link.treatmentDetailId}:${tooth}`;
|
||
|
|
if (!prosthesisByKey.has(key)) {
|
||
|
|
throw new BadRequestException(
|
||
|
|
`Each tooth must have a prosthesis type before sending (missing tooth ${tooth})`,
|
||
|
|
);
|
||
|
|
}
|
||
|
|
}
|
||
|
|
}
|
||
|
|
}
|