feat(MED-161): allow syncing new analyses for existing groups

This commit is contained in:
2025-09-17 11:16:27 +03:00
parent e5822fd55d
commit 7870b8840a

View File

@@ -3,9 +3,9 @@ import { XMLParser } from 'fast-xml-parser';
import fs from 'fs';
import { createAnalysisGroup, getAnalysisGroups } from '~/lib/services/analysis-group.service';
import { IMedipostPublicMessageDataParsed } from '~/lib/services/medipost/medipost.types';
import { createAnalysis, createNoDataReceivedEntry, createNoNewDataReceivedEntry, createSyncFailEntry, createSyncSuccessEntry } from '~/lib/services/analyses.service';
import { createAnalysis, createNoDataReceivedEntry, createNoNewDataReceivedEntry, createSyncFailEntry, createSyncSuccessEntry, getAnalyses } from '~/lib/services/analyses.service';
import { getLastCheckedDate } from '~/lib/services/sync-entries.service';
import { createAnalysisElement } from '~/lib/services/analysis-element.service';
import { AnalysisElement, createAnalysisElement, getAnalysisElements } from '~/lib/services/analysis-element.service';
import { createCodes } from '~/lib/services/codes.service';
import { getLatestPublicMessageListItem } from '~/lib/services/medipost/medipostPublicMessage.service';
import type { ICode } from '~/lib/types/code';
@@ -82,13 +82,14 @@ export default async function syncAnalysisGroups() {
const codes: ICode[] = [];
for (const analysisGroup of analysisGroups) {
const existingAnalysisGroup = existingAnalysisGroups?.find(({ original_id }) => original_id === analysisGroup.UuringuGruppId);
let groupExistingAnalysisElements: AnalysisElement[] = [];
let analysisGroupId: number;
if (existingAnalysisGroup) {
console.info(`Analysis group '${analysisGroup.UuringuGruppNimi}' already exists`);
continue;
}
// SAVE ANALYSIS GROUP
const analysisGroupId = await createAnalysisGroup({
console.info(`Analysis group '${analysisGroup.UuringuGruppNimi}' already exists, only creating new analysis elements`);
groupExistingAnalysisElements = await getAnalysisElements({ analysisGroupId: existingAnalysisGroup.id });
analysisGroupId = existingAnalysisGroup.id;
} else {
analysisGroupId = await createAnalysisGroup({
id: analysisGroup.UuringuGruppId,
name: analysisGroup.UuringuGruppNimi,
order: analysisGroup.UuringuGruppJarjekord,
@@ -106,18 +107,35 @@ export default async function syncAnalysisGroups() {
analysis_id: null,
})),
);
}
const analysisGroupItems = toArray(analysisGroup.Uuring);
for (const item of analysisGroupItems) {
const analysisElement = item.UuringuElement;
const analysisElement = item.UuringuElement!;
const isExistingAnalysisElement = groupExistingAnalysisElements
.find(({ analysis_id_original }) => analysis_id_original === analysisElement.UuringId);
if (isExistingAnalysisElement) {
console.info(`Analysis element '${analysisElement.UuringNimi}' already exists`);
continue;
}
const insertedAnalysisElementId = await createAnalysisElement({
analysisElement,
analysisElement: analysisElement!,
analysisGroupId,
materialGroups: toArray(item.MaterjalideGrupp),
});
if (Array.isArray(analysisElement.UuringuElement)) {
for (const nestedAnalysisElement of analysisElement.UuringuElement) {
await createAnalysisElement({
analysisElement: nestedAnalysisElement,
analysisGroupId,
materialGroups: toArray(item.MaterjalideGrupp),
});
}
}
if (analysisElement.Kood) {
const analysisElementCodes = toArray(analysisElement.Kood);
codes.push(
@@ -135,7 +153,15 @@ export default async function syncAnalysisGroups() {
const analyses = analysisElement.UuringuElement;
if (analyses?.length) {
const existingAnalyses = await getAnalyses({ originalIds: analyses.map(({ UuringId }) => UuringId) });
for (const analysis of analyses) {
const isExistingAnalysis = existingAnalyses.find(({ analysis_id_original }) => analysis_id_original === analysis.UuringId);
if (isExistingAnalysis) {
console.info(`Analysis '${analysis.UuringNimi}' already exists`);
continue;
}
const insertedAnalysisId = await createAnalysis(analysis, analysisGroupId);
if (analysis.Kood) {