'use server'; import type { IMedipostResponseXMLBase } from '@/packages/shared/src/types/medipost-analysis'; import type { AnalysisOrder } from '~/lib/types/order'; import { parseXML } from '../util/xml.service'; import { MedipostValidationError } from './MedipostValidationError'; import { getAccountAdmin } from '../account.service'; export async function validateMedipostResponse( response: string, { canHaveEmptyCode = false }: { canHaveEmptyCode?: boolean } = {}, ) { const parsed: IMedipostResponseXMLBase = await parseXML(response); const code = parsed.ANSWER?.CODE; if (canHaveEmptyCode) { if (code && code !== 0) { console.error('Bad response', response); throw new MedipostValidationError(response); } return; } if (typeof code !== 'number' || (code !== 0 && !canHaveEmptyCode)) { console.error('Bad response', response); throw new MedipostValidationError(response); } } export async function validateOrderPerson({ analysisOrder, patientPersonalCode, }: { analysisOrder: AnalysisOrder; patientPersonalCode: string; }) { const orderPerson = await getAccountAdmin({ primaryOwnerUserId: analysisOrder.user_id, }); if (orderPerson.personal_code !== patientPersonalCode) { throw new Error( `Order person personal code does not match Medipost message Patsient.Isikukood=${patientPersonalCode}, orderPerson.personal_code=${orderPerson.personal_code}`, ); } }