Files
medreport_mrb2b/lib/templates/medipost-order.ts

172 lines
5.5 KiB
TypeScript

import { format } from 'date-fns';
import { Tables } from '@/packages/supabase/src/database.types';
import { DATE_FORMAT, DATE_TIME_FORMAT } from '@/lib/constants';
import PersonalCode from '../utils';
const isProd = process.env.NODE_ENV === 'production';
export const getPais = (
sender: string,
recipient: string,
orderId: number,
packageName = "OL",
) => {
if (isProd) {
// return correct data
}
return `<Pais>
<Pakett versioon="20">${packageName}</Pakett>
<Saatja>${sender}</Saatja>
<Saaja>${recipient}</Saaja>
<Aeg>${format(new Date(), DATE_TIME_FORMAT)}</Aeg>
<SaadetisId>${orderId}</SaadetisId>
<Email>info@medreport.ee</Email>
</Pais>`;
};
export const getClientInstitution = ({ index }: { index?: number } = {}) => {
return `<Asutus tyyp="TELLIJA" ${index ? ` jarjenumber="${index}"` : ''}>
<AsutuseId>16381793</AsutuseId>
<AsutuseNimi>MedReport OÜ</AsutuseNimi>
<AsutuseKood>MRP</AsutuseKood>
<Telefon>+37258871517</Telefon>
</Asutus>`;
};
export const getProviderInstitution = ({ index }: { index?: number } = {}) => {
return `<Asutus tyyp="TEOSTAJA" ${index ? ` jarjenumber="${index}"` : ''}>
<AsutuseId>11107913</AsutuseId>
<AsutuseNimi>Synlab Eesti OÜ</AsutuseNimi>
<AsutuseKood>HTI</AsutuseKood>
<AllyksuseNimi>Synlab HTI Tallinn</AllyksuseNimi>
<Telefon>+37217123</Telefon>
</Asutus>`;
};
export const getClientPerson = () => {
return `<Personal tyyp="TELLIJA" jarjenumber="1">
<PersonalOID>1.3.6.1.4.1.28284.6.2.4.9</PersonalOID>
<PersonalKood>D07907</PersonalKood>
<PersonalPerekonnaNimi>Eduard</PersonalPerekonnaNimi>
<PersonalEesNimi>Tsvetkov</PersonalEesNimi>
<Telefon>+37258131202</Telefon>
</Personal>`;
};
export const getOrderEnteredPerson = () => {
return `<Personal tyyp="SISESTAJA" jarjenumber="2">
<PersonalOID>1.3.6.1.4.1.28284.6.2.4.9</PersonalOID>
<PersonalKood>D07907</PersonalKood>
<PersonalPerekonnaNimi>Eduard</PersonalPerekonnaNimi>
<PersonalEesNimi>Tsvetkov</PersonalEesNimi>
<Telefon>+37258131202</Telefon>
</Personal>`;
};
export const getPatient = ({
idCode,
lastName,
firstName,
}: {
idCode: string,
lastName: string,
firstName: string,
}) => {
const { dob, gender } = PersonalCode.parsePersonalCode(idCode);
return `<Patsient>
<IsikukoodiOID>1.3.6.1.4.1.28284.6.2.2.1</IsikukoodiOID>
<Isikukood>${idCode}</Isikukood>
<PerekonnaNimi>${lastName}</PerekonnaNimi>
<EesNimi>${firstName}</EesNimi>
<SynniAeg>${format(dob, DATE_FORMAT)}</SynniAeg>
<SuguOID>1.3.6.1.4.1.28284.6.2.3.16.2</SuguOID>
<Sugu>${gender.value === 'M' ? 'M' : 'N'}</Sugu>
</Patsient>`;
};
export const getConfidentiality = () => {
if (isProd) {
// return correct data
}
return `<Konfidentsiaalsus>
<PatsiendileOID>2.16.840.1.113883.5.25</PatsiendileOID>
<Patsiendile>N</Patsiendile>
<ArstileOID>1.3.6.1.4.1.28284.6.2.2.39.1</ArstileOID>
<Arstile>N</Arstile>
<EsindajaleOID>1.3.6.1.4.1.28284.6.2.2.37.1</EsindajaleOID>
<Esindajale>N</Esindajale>
</Konfidentsiaalsus>`;
};
// export const getOrderEnteredByPerson = () => {
// if (isProd) {
// // return correct data
// }
// return `
// <Personal tyyp="SISESTAJA" jarjenumber="1">
// <PersonalOID>1.3.6.1.4.1.28284.6.2.4.9</PersonalOID>
// <PersonalKood>D07907</PersonalKood>
// <PersonalPerekonnaNimi>Eduard</PersonalPerekonnaNimi>
// <PersonalEesNimi>Tsvetkov</PersonalEesNimi>
// <Telefon>+37258131202</Telefon>
// </Personal>`;
// };
export const getSpecimen = (
materialTypeOid: string,
materialGroupId: string,
materialName: string,
order: number,
sampleContainerOid?: string,
sampleContainerId?: string,
) =>
`
<Proov>
${sampleContainerOid ? `<ProovinouIdOID>${sampleContainerOid}</ProovinouIdOID>` : null}
${sampleContainerId ? `<ProovinouId>${sampleContainerId}</ProovinouId>` : null}
<MaterjaliTyypOID>${materialTypeOid}</MaterjaliTyypOID>
<MaterjaliTyyp>${materialGroupId}</MaterjaliTyyp>
<MaterjaliNimi>${materialName}</MaterjaliNimi>
<Jarjenumber>${order}</Jarjenumber>
</Proov>`;
export const getAnalysisElement = (
analysisIdOid: string,
analysisIdOriginal: string,
tehikShortLoinc: string,
tehikLoincName: string,
analysisElementId: number,
analysisNameLab?: string | null,
) => {
return `<UuringuElement>
<UuringIdOID>${analysisIdOid}</UuringIdOID>
<UuringId>${analysisIdOriginal}</UuringId>
<TLyhend>${tehikShortLoinc}</TLyhend>
<KNimetus>${tehikLoincName}</KNimetus>
<UuringNimi>${analysisNameLab ?? tehikLoincName}</UuringNimi>
<TellijaUuringId>${analysisElementId}</TellijaUuringId>
</UuringuElement>`;
};
export const getAnalysisGroup = (
analysisGroupOriginalId: string,
analysisGroupName: string,
uuringElementInputs: {
analysisElement: Tables<{ schema: 'medreport' }, 'analysis_elements'>,
specimenOrderNr: number,
}[],
) => {
const uuringElements = uuringElementInputs.map(({ analysisElement, specimenOrderNr }) =>
`<Uuring>
${getAnalysisElement(analysisElement.analysis_id_oid, analysisElement.analysis_id_original, analysisElement.tehik_short_loinc, analysisElement.tehik_loinc_name, analysisElement.id, analysisElement.analysis_name_lab)}
<ProoviJarjenumber>${specimenOrderNr}</ProoviJarjenumber>
</Uuring>`
).join('');
return `<UuringuGrupp>
<UuringuGruppId>${analysisGroupOriginalId}</UuringuGruppId>
<UuringuGruppNimi>${analysisGroupName}</UuringuGruppNimi>
${uuringElements}
</UuringuGrupp>`;
};