feat(MED-161): allow syncing new analyses for existing groups
This commit is contained in:
@@ -3,9 +3,9 @@ import { XMLParser } from 'fast-xml-parser';
|
|||||||
import fs from 'fs';
|
import fs from 'fs';
|
||||||
import { createAnalysisGroup, getAnalysisGroups } from '~/lib/services/analysis-group.service';
|
import { createAnalysisGroup, getAnalysisGroups } from '~/lib/services/analysis-group.service';
|
||||||
import { IMedipostPublicMessageDataParsed } from '~/lib/services/medipost/medipost.types';
|
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 { 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 { createCodes } from '~/lib/services/codes.service';
|
||||||
import { getLatestPublicMessageListItem } from '~/lib/services/medipost/medipostPublicMessage.service';
|
import { getLatestPublicMessageListItem } from '~/lib/services/medipost/medipostPublicMessage.service';
|
||||||
import type { ICode } from '~/lib/types/code';
|
import type { ICode } from '~/lib/types/code';
|
||||||
@@ -82,42 +82,60 @@ export default async function syncAnalysisGroups() {
|
|||||||
const codes: ICode[] = [];
|
const codes: ICode[] = [];
|
||||||
for (const analysisGroup of analysisGroups) {
|
for (const analysisGroup of analysisGroups) {
|
||||||
const existingAnalysisGroup = existingAnalysisGroups?.find(({ original_id }) => original_id === analysisGroup.UuringuGruppId);
|
const existingAnalysisGroup = existingAnalysisGroups?.find(({ original_id }) => original_id === analysisGroup.UuringuGruppId);
|
||||||
|
let groupExistingAnalysisElements: AnalysisElement[] = [];
|
||||||
|
let analysisGroupId: number;
|
||||||
if (existingAnalysisGroup) {
|
if (existingAnalysisGroup) {
|
||||||
console.info(`Analysis group '${analysisGroup.UuringuGruppNimi}' already exists`);
|
console.info(`Analysis group '${analysisGroup.UuringuGruppNimi}' already exists, only creating new analysis elements`);
|
||||||
continue;
|
groupExistingAnalysisElements = await getAnalysisElements({ analysisGroupId: existingAnalysisGroup.id });
|
||||||
|
analysisGroupId = existingAnalysisGroup.id;
|
||||||
|
} else {
|
||||||
|
analysisGroupId = await createAnalysisGroup({
|
||||||
|
id: analysisGroup.UuringuGruppId,
|
||||||
|
name: analysisGroup.UuringuGruppNimi,
|
||||||
|
order: analysisGroup.UuringuGruppJarjekord,
|
||||||
|
});
|
||||||
|
|
||||||
|
const analysisGroupCodes = toArray(analysisGroup.Kood);
|
||||||
|
codes.push(
|
||||||
|
...analysisGroupCodes.map((kood) => ({
|
||||||
|
hk_code: kood.HkKood,
|
||||||
|
hk_code_multiplier: kood.HkKoodiKordaja,
|
||||||
|
coefficient: kood.Koefitsient,
|
||||||
|
price: kood.Hind,
|
||||||
|
analysis_group_id: analysisGroupId,
|
||||||
|
analysis_element_id: null,
|
||||||
|
analysis_id: null,
|
||||||
|
})),
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
// SAVE ANALYSIS GROUP
|
|
||||||
const analysisGroupId = await createAnalysisGroup({
|
|
||||||
id: analysisGroup.UuringuGruppId,
|
|
||||||
name: analysisGroup.UuringuGruppNimi,
|
|
||||||
order: analysisGroup.UuringuGruppJarjekord,
|
|
||||||
});
|
|
||||||
|
|
||||||
const analysisGroupCodes = toArray(analysisGroup.Kood);
|
|
||||||
codes.push(
|
|
||||||
...analysisGroupCodes.map((kood) => ({
|
|
||||||
hk_code: kood.HkKood,
|
|
||||||
hk_code_multiplier: kood.HkKoodiKordaja,
|
|
||||||
coefficient: kood.Koefitsient,
|
|
||||||
price: kood.Hind,
|
|
||||||
analysis_group_id: analysisGroupId,
|
|
||||||
analysis_element_id: null,
|
|
||||||
analysis_id: null,
|
|
||||||
})),
|
|
||||||
);
|
|
||||||
|
|
||||||
const analysisGroupItems = toArray(analysisGroup.Uuring);
|
const analysisGroupItems = toArray(analysisGroup.Uuring);
|
||||||
|
|
||||||
for (const item of analysisGroupItems) {
|
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({
|
const insertedAnalysisElementId = await createAnalysisElement({
|
||||||
analysisElement,
|
analysisElement: analysisElement!,
|
||||||
analysisGroupId,
|
analysisGroupId,
|
||||||
materialGroups: toArray(item.MaterjalideGrupp),
|
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) {
|
if (analysisElement.Kood) {
|
||||||
const analysisElementCodes = toArray(analysisElement.Kood);
|
const analysisElementCodes = toArray(analysisElement.Kood);
|
||||||
codes.push(
|
codes.push(
|
||||||
@@ -135,7 +153,15 @@ export default async function syncAnalysisGroups() {
|
|||||||
|
|
||||||
const analyses = analysisElement.UuringuElement;
|
const analyses = analysisElement.UuringuElement;
|
||||||
if (analyses?.length) {
|
if (analyses?.length) {
|
||||||
|
const existingAnalyses = await getAnalyses({ originalIds: analyses.map(({ UuringId }) => UuringId) });
|
||||||
|
|
||||||
for (const analysis of analyses) {
|
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);
|
const insertedAnalysisId = await createAnalysis(analysis, analysisGroupId);
|
||||||
|
|
||||||
if (analysis.Kood) {
|
if (analysis.Kood) {
|
||||||
|
|||||||
Reference in New Issue
Block a user