feat(MED-161): use shared types

This commit is contained in:
2025-09-17 11:17:08 +03:00
parent 4ac261fd0d
commit 4560d2df1d
4 changed files with 140 additions and 135 deletions

View File

@@ -1,12 +1,14 @@
'use server';
import {
AnalysisOrderStatus,
GetMessageListResponse,
MedipostAction,
MedipostOrderResponse,
ResponseUuringuGrupp,
} from '@/lib/types/medipost';
import { AnalysisOrderStatus } from '@/packages/shared/src/types/medipost-analysis';
import type {
ResponseUuringuGrupp,
MedipostOrderResponse
} from '@/packages/shared/src/types/medipost-analysis';
import { toArray } from '@/lib/utils';
import axios from 'axios';

View File

@@ -1,8 +1,8 @@
'use server';
import {
import type {
IMedipostResponseXMLBase,
} from '@/lib/types/medipost';
} from '@/packages/shared/src/types/medipost-analysis';
import { MedipostValidationError } from './MedipostValidationError';
import { parseXML } from '../util/xml.service';

View File

@@ -1,11 +1,4 @@
export interface IMedipostResponseXMLBase {
'?xml': {
'@_version': string;
'@_encoding': string;
'@_standalone': 'yes' | 'no';
};
ANSWER?: { CODE: number };
}
import type { IMedipostResponseXMLBase } from "@/packages/shared/src/types/medipost-analysis";
export type Message = {
messageId: string;
@@ -143,125 +136,3 @@ export type MedipostPublicMessageResponse = IMedipostResponseXMLBase & {
};
};
};
export type UuringuVastus = {
VastuseVaartus: string; // numeric or text like 'Negatiivne'
VastuseAeg: string;
NormYlem?: {
'#text': number;
'@_kaasaarvatud': string;
}; // 0..1
NormAlum?: {
'#text': number;
'@_kaasaarvatud': string;
};
NormiStaatus: keyof typeof NormStatus;
ProoviJarjenumber: number;
};
export type ResponseUuring = {
UuringuElement: {
UuringIdOID: string;
UuringId: string;
TLyhend: string;
KNimetus: string;
UuringNimi: string;
TellijaUuringId: number;
TeostajaUuringId: string;
UuringOlek: keyof typeof AnalysisOrderStatus;
Mootyhik?: string; // 0..1
Kood: {
HkKood: number;
HkKoodiKordaja: number;
Koefitsient: number;
Hind: number;
};
UuringuVastus?: UuringuVastus | UuringuVastus[]; // 0..n
UuringuKommentaar?: string;
}; // 1..1
UuringuTaitjaAsutuseJnr: number;
};
export type ResponseUuringuGrupp = {
UuringuGruppId: string;
UuringuGruppNimi: string;
Uuring: ResponseUuring | ResponseUuring[]; // 1..n
};
// type for UuringuGrupp is correct, but some of this is generated by an LLM and should be checked if data in use
export type MedipostOrderResponse = IMedipostResponseXMLBase & {
Saadetis: {
Pais: {
Pakett: {
'#text': string;
'@_versioon': string;
};
Saatja: string;
Saaja: string;
Aeg: string;
SaadetisId: string;
Email: string;
};
Vastus?: {
ValisTellimuseId: string;
Asutus: {
'@_tyyp': string; // TEOSTAJA
'@_jarjenumber': string;
AsutuseId: number;
AsutuseNimi: string;
AsutuseKood: string;
AllyksuseNimi?: string;
Telefon: number;
}[]; //@_tyyp = TELLIJA 1..1, @_tyyp = TEOSTAJA 1..n
Personal: {
'@_tyyp': string;
'@_jarjenumber': string;
PersonalOID: string;
PersonalKood: string;
PersonalPerekonnaNimi: string;
PersonalEesNimi: string;
Telefon: number;
};
Patsient: {
IsikukoodiOID: string;
Isikukood: string;
PerekonnaNimi: string;
EesNimi: string;
SynniAeg: string;
SuguOID: string;
Sugu: string;
};
Proov: Array<{
ProovinouIdOID: string;
ProovinouId: string;
MaterjaliTyypOID: string;
MaterjaliTyyp: number;
MaterjaliNimi: string;
Ribakood: string;
Jarjenumber: number;
VotmisAeg: string;
SaabumisAeg: string;
}>;
TellimuseNumber: string;
TellimuseOlek: keyof typeof AnalysisOrderStatus;
UuringuGrupp?: ResponseUuringuGrupp | ResponseUuringuGrupp[];
};
Tellimus?: {
ValisTellimuseId: string;
}
};
};
export const AnalysisOrderStatus = {
1: 'QUEUED',
2: 'ON_HOLD',
3: 'PROCESSING',
4: 'COMPLETED',
5: 'REJECTED',
6: 'CANCELLED',
} as const;
export const NormStatus: Record<number, string> = {
0: 'NORMAL',
1: 'WARNING',
2: 'REQUIRES_ATTENTION',
} as const;

View File

@@ -0,0 +1,132 @@
export const NormStatus: Record<number, string> = {
0: 'NORMAL',
1: 'WARNING',
2: 'REQUIRES_ATTENTION',
} as const;
export const AnalysisOrderStatus = {
1: 'QUEUED',
2: 'ON_HOLD',
3: 'PROCESSING',
4: 'COMPLETED',
5: 'REJECTED',
6: 'CANCELLED',
} as const;
export type UuringuVastus = {
VastuseVaartus: string; // numeric or text like 'Negatiivne'
VastuseAeg: string;
NormYlem?: {
'#text': number;
'@_kaasaarvatud': string;
}; // 0..1
NormAlum?: {
'#text': number;
'@_kaasaarvatud': string;
};
NormiStaatus: keyof typeof NormStatus;
ProoviJarjenumber: number;
};
export type UuringElement = {
UuringIdOID: string;
UuringId: string;
TLyhend: string;
KNimetus: string;
UuringNimi: string;
TellijaUuringId: number;
TeostajaUuringId: string;
UuringOlek: keyof typeof AnalysisOrderStatus;
Mootyhik?: string; // 0..1
Kood: {
HkKood: number;
HkKoodiKordaja: number;
Koefitsient: number;
Hind: number;
};
UuringuVastus?: UuringuVastus | UuringuVastus[]; // 0..n
UuringuKommentaar?: string;
}
export type ResponseUuring = {
UuringuElement: UuringElement;
UuringuTaitjaAsutuseJnr: number;
};
export type ResponseUuringuGrupp = {
UuringuGruppId: string;
UuringuGruppNimi: string;
Uuring: ResponseUuring | ResponseUuring[]; // 1..n
};
export interface IMedipostResponseXMLBase {
'?xml': {
'@_version': string;
'@_encoding': string;
'@_standalone': 'yes' | 'no';
};
ANSWER?: { CODE: number };
}
export type MedipostOrderResponse = IMedipostResponseXMLBase & {
Saadetis: {
Pais: {
Pakett: {
'#text': string;
'@_versioon': string;
};
Saatja: string;
Saaja: string;
Aeg: string;
SaadetisId: string;
Email: string;
};
Vastus?: {
ValisTellimuseId: string;
Asutus: {
'@_tyyp': string; // TEOSTAJA
'@_jarjenumber': string;
AsutuseId: number;
AsutuseNimi: string;
AsutuseKood: string;
AllyksuseNimi?: string;
Telefon: number;
}[]; //@_tyyp = TELLIJA 1..1, @_tyyp = TEOSTAJA 1..n
Personal: {
'@_tyyp': string;
'@_jarjenumber': string;
PersonalOID: string;
PersonalKood: string;
PersonalPerekonnaNimi: string;
PersonalEesNimi: string;
Telefon: number;
};
Patsient: {
IsikukoodiOID: string;
Isikukood: string;
PerekonnaNimi: string;
EesNimi: string;
SynniAeg: string;
SuguOID: string;
Sugu: string;
};
Proov: Array<{
ProovinouIdOID: string;
ProovinouId: string;
MaterjaliTyypOID: string;
MaterjaliTyyp: number;
MaterjaliNimi: string;
Ribakood: string;
Jarjenumber: number;
VotmisAeg: string;
SaabumisAeg: string;
}>;
TellimuseNumber: string;
TellimuseOlek: keyof typeof AnalysisOrderStatus;
UuringuGrupp?: ResponseUuringuGrupp | ResponseUuringuGrupp[];
};
Tellimus?: {
ValisTellimuseId: string;
}
};
};