feat(MED-131): show package analysis elements in comparison modal
This commit is contained in:
60
lib/services/analysis-element.service.ts
Normal file
60
lib/services/analysis-element.service.ts
Normal file
@@ -0,0 +1,60 @@
|
||||
import { getSupabaseServerClient } from '@kit/supabase/server-client';
|
||||
import { Json, Tables } from '@kit/supabase/database';
|
||||
import { getSupabaseServerAdminClient } from '@kit/supabase/server-admin-client';
|
||||
import type { IMaterialGroup, IUuringElement } from './medipost.types';
|
||||
|
||||
export type AnalysisElement = Tables<{ schema: 'medreport' }, 'analysis_elements'> & {
|
||||
analysis_groups: Tables<{ schema: 'medreport' }, 'analysis_groups'>;
|
||||
};
|
||||
|
||||
export async function getAnalysisElements({
|
||||
originalIds,
|
||||
}: {
|
||||
originalIds: string[]
|
||||
}) {
|
||||
const { data: analysisElements } = await getSupabaseServerClient()
|
||||
.schema('medreport')
|
||||
.from('analysis_elements')
|
||||
.select(`*, analysis_groups(*)`)
|
||||
.in('analysis_id_original', [...new Set(originalIds)])
|
||||
.order('order', { ascending: true });
|
||||
|
||||
return analysisElements ?? [];
|
||||
}
|
||||
|
||||
export async function createAnalysisElement({
|
||||
analysisElement,
|
||||
analysisGroupId,
|
||||
materialGroups,
|
||||
}: {
|
||||
analysisElement: IUuringElement;
|
||||
analysisGroupId: number;
|
||||
materialGroups: IMaterialGroup[];
|
||||
}) {
|
||||
const { data: insertedAnalysisElement, error } = await getSupabaseServerAdminClient()
|
||||
.schema('medreport')
|
||||
.from('analysis_elements')
|
||||
.upsert(
|
||||
{
|
||||
analysis_id_oid: analysisElement.UuringIdOID,
|
||||
analysis_id_original: analysisElement.UuringId,
|
||||
tehik_short_loinc: analysisElement.TLyhend,
|
||||
tehik_loinc_name: analysisElement.KNimetus,
|
||||
analysis_name_lab: analysisElement.UuringNimi,
|
||||
order: analysisElement.Jarjekord,
|
||||
parent_analysis_group_id: analysisGroupId,
|
||||
material_groups: materialGroups as unknown as Json[],
|
||||
},
|
||||
{ onConflict: 'analysis_id_original', ignoreDuplicates: false },
|
||||
)
|
||||
.select('id');
|
||||
|
||||
const id = insertedAnalysisElement?.[0]?.id;
|
||||
if (error || !id) {
|
||||
throw new Error(
|
||||
`Failed to insert analysis element (id: ${analysisElement.UuringId}), error: ${error?.message}`,
|
||||
);
|
||||
}
|
||||
|
||||
return id;
|
||||
}
|
||||
85
lib/services/medipost.types.ts
Normal file
85
lib/services/medipost.types.ts
Normal file
@@ -0,0 +1,85 @@
|
||||
export interface IUuringElement {
|
||||
UuringIdOID: string;
|
||||
UuringId: string;
|
||||
TLyhend: string;
|
||||
KNimetus: string;
|
||||
UuringNimi: string;
|
||||
Jarjekord: number;
|
||||
Kood: {
|
||||
HkKood: string;
|
||||
HkKoodiKordaja: number;
|
||||
Koefitsient: number;
|
||||
Hind: number;
|
||||
}[];
|
||||
UuringuElement: {
|
||||
UuringIdOID: string;
|
||||
UuringId: string;
|
||||
TLyhend: string;
|
||||
KNimetus: string;
|
||||
UuringNimi: string;
|
||||
Jarjekord: number;
|
||||
Kood: {
|
||||
HkKood: string;
|
||||
HkKoodiKordaja: number;
|
||||
Koefitsient: number;
|
||||
Hind: number;
|
||||
}[];
|
||||
}[];
|
||||
}
|
||||
|
||||
export interface IMaterialGroup {
|
||||
id: string;
|
||||
name: string;
|
||||
order: number;
|
||||
}
|
||||
|
||||
export interface IMedipostPublicMessageDataParsed {
|
||||
ANSWER: {
|
||||
CODE: number;
|
||||
MESSAGE: string;
|
||||
};
|
||||
Saadetis: {
|
||||
Teenused: {
|
||||
Teostaja: {
|
||||
UuringuGrupp: {
|
||||
UuringuGruppId: string;
|
||||
UuringuGruppNimi: string;
|
||||
UuringuGruppJarjekord: number;
|
||||
Kood: {
|
||||
HkKood: string;
|
||||
HkKoodiKordaja: number;
|
||||
Koefitsient: number;
|
||||
Hind: number;
|
||||
}[];
|
||||
Uuring: {
|
||||
UuringId: string;
|
||||
UuringNimi: string;
|
||||
UuringJarjekord: number;
|
||||
UuringuElement: {
|
||||
UuringIdOID: string;
|
||||
UuringId: string;
|
||||
TLyhend: string;
|
||||
KNimetus: string;
|
||||
UuringNimi: string;
|
||||
Jarjekord: number;
|
||||
Kood: {
|
||||
HkKood: string;
|
||||
HkKoodiKordaja: number;
|
||||
Koefitsient: number;
|
||||
Hind: number;
|
||||
}[];
|
||||
UuringuElement: IUuringElement;
|
||||
}[];
|
||||
MaterjalideGrupp: IMaterialGroup[];
|
||||
Kood: {
|
||||
HkKood: string;
|
||||
HkKoodiKordaja: number;
|
||||
Koefitsient: number;
|
||||
Hind: number;
|
||||
}[];
|
||||
}[];
|
||||
}[];
|
||||
}[];
|
||||
};
|
||||
};
|
||||
}
|
||||
Reference in New Issue
Block a user