feat(MED-131): show package analysis elements in comparison modal

This commit is contained in:
2025-08-04 11:51:38 +03:00
parent d7d089c11d
commit 8c4df731aa
7 changed files with 224 additions and 106 deletions

View 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;
}

View 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;
}[];
}[];
}[];
}[];
};
};
}