48 lines
1.5 KiB
TypeScript
48 lines
1.5 KiB
TypeScript
import { HttpStatus } from '@nestjs/common';
|
|
import { AppException, ErrorCode } from '../../common/errors';
|
|
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 AppException(ErrorCode.TREATMENT_TOOTH_PROSTHESIS_INCOMPLETE, HttpStatus.BAD_REQUEST);
|
|
}
|
|
}
|
|
if (teeth.length === 0) {
|
|
const hasArchJob = labCase.toothProsthesis.some(
|
|
(tp) =>
|
|
tp.treatmentDetailId === link.treatmentDetailId &&
|
|
(tp.tooth === 'UA' || tp.tooth === 'LA') &&
|
|
Boolean(tp.prosthesisTypeCode),
|
|
);
|
|
if (!hasArchJob) {
|
|
throw new AppException(ErrorCode.TREATMENT_TOOTH_PROSTHESIS_INCOMPLETE, HttpStatus.BAD_REQUEST);
|
|
}
|
|
}
|
|
}
|
|
}
|