From 4560d2df1da9f6f2339e2bf141c99a0e97f420a6 Mon Sep 17 00:00:00 2001 From: Karli Date: Wed, 17 Sep 2025 11:17:08 +0300 Subject: [PATCH] feat(MED-161): use shared types --- .../medipostPrivateMessage.service.ts | 8 +- .../medipost/medipostValidate.service.ts | 4 +- lib/types/medipost.ts | 131 +---------------- .../shared/src/types/medipost-analysis.ts | 132 ++++++++++++++++++ 4 files changed, 140 insertions(+), 135 deletions(-) create mode 100644 packages/shared/src/types/medipost-analysis.ts diff --git a/lib/services/medipost/medipostPrivateMessage.service.ts b/lib/services/medipost/medipostPrivateMessage.service.ts index b6216b8..f8477f7 100644 --- a/lib/services/medipost/medipostPrivateMessage.service.ts +++ b/lib/services/medipost/medipostPrivateMessage.service.ts @@ -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'; diff --git a/lib/services/medipost/medipostValidate.service.ts b/lib/services/medipost/medipostValidate.service.ts index f255c46..655673b 100644 --- a/lib/services/medipost/medipostValidate.service.ts +++ b/lib/services/medipost/medipostValidate.service.ts @@ -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'; diff --git a/lib/types/medipost.ts b/lib/types/medipost.ts index 4f7bc0f..b8228fb 100644 --- a/lib/types/medipost.ts +++ b/lib/types/medipost.ts @@ -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 = { - 0: 'NORMAL', - 1: 'WARNING', - 2: 'REQUIRES_ATTENTION', -} as const; diff --git a/packages/shared/src/types/medipost-analysis.ts b/packages/shared/src/types/medipost-analysis.ts new file mode 100644 index 0000000..c50e402 --- /dev/null +++ b/packages/shared/src/types/medipost-analysis.ts @@ -0,0 +1,132 @@ +export const NormStatus: Record = { + 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; + } + }; +};