172 lines
5.5 KiB
TypeScript
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>`;
|
|
};
|