From da6acd8756ce674a9aa8760605ae621e20a8a0ac Mon Sep 17 00:00:00 2001 From: Danel Kungla Date: Wed, 10 Sep 2025 12:21:43 +0300 Subject: [PATCH 1/4] change design for analysis-package button --- app/select-package/page.tsx | 2 +- .../components/select-analysis-package.tsx | 56 ++++++++++++++----- packages/shared/tsconfig.json | 5 +- 3 files changed, 46 insertions(+), 17 deletions(-) diff --git a/app/select-package/page.tsx b/app/select-package/page.tsx index 69bb098..532794f 100644 --- a/app/select-package/page.tsx +++ b/app/select-package/page.tsx @@ -1,4 +1,5 @@ import Link from 'next/link'; +import { redirect } from 'next/navigation'; import { CaretRightIcon } from '@radix-ui/react-icons'; import { Scale } from 'lucide-react'; @@ -14,7 +15,6 @@ import { withI18n } from '~/lib/i18n/with-i18n'; import ComparePackagesModal from '../home/(user)/_components/compare-packages-modal'; import { loadAnalysisPackages } from '../home/(user)/_lib/server/load-analysis-packages'; -import { redirect } from 'next/navigation'; export const generateMetadata = async () => { const { t } = await createI18nServerInstance(); diff --git a/packages/shared/src/components/select-analysis-package.tsx b/packages/shared/src/components/select-analysis-package.tsx index d686c1a..f46d2bc 100644 --- a/packages/shared/src/components/select-analysis-package.tsx +++ b/packages/shared/src/components/select-analysis-package.tsx @@ -6,11 +6,9 @@ import Image from 'next/image'; import { useRouter } from 'next/navigation'; import type { AdminProductVariant, StoreProduct } from '@medusajs/types'; -import { Button } from '@medusajs/ui'; import { useTranslation } from 'react-i18next'; -import { handleAddToCart } from '../../../../lib/services/medusaCart.service'; -import { toast } from '@kit/ui/sonner'; +import { Button } from '@kit/ui/button'; import { Card, CardContent, @@ -18,12 +16,20 @@ import { CardFooter, CardHeader, } from '@kit/ui/card'; +import { toast } from '@kit/ui/sonner'; +import { Spinner } from '@kit/ui/spinner'; import { Trans } from '@kit/ui/trans'; -import { ButtonTooltip } from './ui/button-tooltip'; -import { PackageHeader } from './package-header'; -import { pathsConfig } from '../config'; -export type AnalysisPackageWithVariant = Pick & { +import { handleAddToCart } from '~/lib/services/medusaCart.service'; + +import { pathsConfig } from '../config'; +import { PackageHeader } from './package-header'; +import { ButtonTooltip } from './ui/button-tooltip'; + +export type AnalysisPackageWithVariant = Pick< + StoreProduct, + 'title' | 'description' | 'subtitle' | 'metadata' +> & { variantId: string; nrOfAnalyses: number; price: number; @@ -38,7 +44,7 @@ export default function SelectAnalysisPackage({ countryCode, }: { analysisPackage: AnalysisPackageWithVariant; - countryCode: string, + countryCode: string; }) { const router = useRouter(); const { @@ -47,8 +53,15 @@ export default function SelectAnalysisPackage({ } = useTranslation(); const [isAddingToCart, setIsAddingToCart] = useState(false); - - const { nrOfAnalyses, variantId, title, subtitle = '', description = '', price } = analysisPackage; + + const { + nrOfAnalyses, + variantId, + title, + subtitle = '', + description = '', + price, + } = analysisPackage; const handleSelect = async () => { setIsAddingToCart(true); @@ -58,10 +71,16 @@ export default function SelectAnalysisPackage({ countryCode, }); setIsAddingToCart(false); - toast.success(); + toast.success( + , + ); router.push(pathsConfig.app.cart); } catch (e) { - toast.error(); + toast.error( + , + ); setIsAddingToCart(false); console.error(e); } @@ -87,7 +106,7 @@ export default function SelectAnalysisPackage({ {subtitle} - diff --git a/packages/shared/tsconfig.json b/packages/shared/tsconfig.json index c4697e9..f4e91a9 100644 --- a/packages/shared/tsconfig.json +++ b/packages/shared/tsconfig.json @@ -1,7 +1,10 @@ { "extends": "@kit/tsconfig/base.json", "compilerOptions": { - "tsBuildInfoFile": "node_modules/.cache/tsbuildinfo.json" + "tsBuildInfoFile": "node_modules/.cache/tsbuildinfo.json", + "paths": { + "~/lib/*": ["../../lib/*"] + } }, "include": ["*.ts", "src"], "exclude": ["node_modules"] From 0e7e0b0ed66eec852c277c085460fbd952d6e050 Mon Sep 17 00:00:00 2001 From: Helena Date: Wed, 10 Sep 2025 12:37:39 +0300 Subject: [PATCH 2/4] fix translation --- public/locales/et/common.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/public/locales/et/common.json b/public/locales/et/common.json index 485c009..96f3572 100644 --- a/public/locales/et/common.json +++ b/public/locales/et/common.json @@ -46,7 +46,7 @@ "skip": "Jäta vahele", "signedInAs": "Sisselogitud kasutajana", "pageOfPages": "Leht {{page}} / {{total}}", - "noData": "Andmeid puudub", + "noData": "Andmed puuduvad", "pageNotFoundHeading": "Ups! :|", "errorPageHeading": "Ups! :|", "notifications": "Teavitused", From 99e62b91a59a247fa8afde78dd5a66e1404abacd Mon Sep 17 00:00:00 2001 From: Helena <37183360+helenarebane@users.noreply.github.com> Date: Wed, 10 Sep 2025 16:54:12 +0300 Subject: [PATCH 3/4] use analysis order id as valis tellimuse id (#92) * use order analysis id as valis tellimuse id * send analysis order id in xml --- app/api/job/handler/sync-analysis-results.ts | 11 ++++++----- app/api/job/test-medipost-responses/route.ts | 2 +- app/api/order/medipost-test-response/route.ts | 2 +- .../order/[orderId]/confirmed/page.tsx | 2 +- .../(user)/(dashboard)/order/[orderId]/page.tsx | 2 +- lib/services/medipost.service.ts | 17 +++++++++++------ lib/services/medipostTest.service.ts | 2 +- lib/services/medipostXML.service.ts | 2 +- lib/services/order.service.ts | 10 +++++----- lib/templates/medipost-order.ts | 3 +-- .../medusa-storefront/src/lib/data/orders.ts | 1 - .../medusa-storefront/src/lib/data/products.ts | 1 - 12 files changed, 29 insertions(+), 26 deletions(-) diff --git a/app/api/job/handler/sync-analysis-results.ts b/app/api/job/handler/sync-analysis-results.ts index c5a2323..e666916 100644 --- a/app/api/job/handler/sync-analysis-results.ts +++ b/app/api/job/handler/sync-analysis-results.ts @@ -6,11 +6,12 @@ type ProcessedMessage = { hasPartialAnalysisResponse: boolean; hasFullAnalysisResponse: boolean; medusaOrderId: string | undefined; + analysisOrderId: number | undefined; }; type GroupedResults = { - processed: Pick[]; - waitingForResults: Pick[]; + processed: Pick[]; + waitingForResults: Pick[]; }; export default async function syncAnalysisResults() { @@ -37,14 +38,14 @@ export default async function syncAnalysisResults() { } const groupedResults = processedMessages.reduce((acc, result) => { - if (result.medusaOrderId) { + if (result.analysisOrderId) { if (result.hasAnalysisResponse) { if (!acc.processed) { acc.processed = []; } acc.processed.push({ messageId: result.messageId, - medusaOrderId: result.medusaOrderId, + analysisOrderId: result.analysisOrderId, }); } else { if (!acc.waitingForResults) { @@ -52,7 +53,7 @@ export default async function syncAnalysisResults() { } acc.waitingForResults.push({ messageId: result.messageId, - medusaOrderId: result.medusaOrderId, + analysisOrderId: result.analysisOrderId, }); } } diff --git a/app/api/job/test-medipost-responses/route.ts b/app/api/job/test-medipost-responses/route.ts index c745b98..7c2944d 100644 --- a/app/api/job/test-medipost-responses/route.ts +++ b/app/api/job/test-medipost-responses/route.ts @@ -37,7 +37,7 @@ export async function POST(request: NextRequest) { }, orderedAnalysisElementsIds: idsToSend.map(({ analysisElementId }) => analysisElementId).filter(Boolean) as number[], orderedAnalysesIds: idsToSend.map(({ analysisId }) => analysisId).filter(Boolean) as number[], - orderId: medusaOrderId, + orderId: medreportOrder.id, orderCreatedAt: new Date(medreportOrder.created_at), }); diff --git a/app/api/order/medipost-test-response/route.ts b/app/api/order/medipost-test-response/route.ts index 9ce8c41..262c1f0 100644 --- a/app/api/order/medipost-test-response/route.ts +++ b/app/api/order/medipost-test-response/route.ts @@ -29,7 +29,7 @@ export async function POST(request: Request) { }, orderedAnalysisElementsIds: orderedAnalysisElementsIds.map(({ analysisElementId }) => analysisElementId).filter(Boolean) as number[], orderedAnalysesIds: orderedAnalysisElementsIds.map(({ analysisId }) => analysisId).filter(Boolean) as number[], - orderId: medusaOrderId, + orderId: analysisOrder.id, orderCreatedAt: new Date(analysisOrder.created_at), }); diff --git a/app/home/(user)/(dashboard)/order/[orderId]/confirmed/page.tsx b/app/home/(user)/(dashboard)/order/[orderId]/confirmed/page.tsx index d72c530..9c3f42f 100644 --- a/app/home/(user)/(dashboard)/order/[orderId]/confirmed/page.tsx +++ b/app/home/(user)/(dashboard)/order/[orderId]/confirmed/page.tsx @@ -27,7 +27,7 @@ async function OrderConfirmedPage(props: { }) { const params = await props.params; - const order = await getAnalysisOrder({ orderId: Number(params.orderId) }).catch(() => null); + const order = await getAnalysisOrder({ analysisOrderId: Number(params.orderId) }).catch(() => null); if (!order) { redirect(pathsConfig.app.myOrders); } diff --git a/app/home/(user)/(dashboard)/order/[orderId]/page.tsx b/app/home/(user)/(dashboard)/order/[orderId]/page.tsx index c84fb99..8bc90d7 100644 --- a/app/home/(user)/(dashboard)/order/[orderId]/page.tsx +++ b/app/home/(user)/(dashboard)/order/[orderId]/page.tsx @@ -27,7 +27,7 @@ async function OrderConfirmedPage(props: { }) { const params = await props.params; - const order = await getAnalysisOrder({ orderId: Number(params.orderId) }).catch(() => null); + const order = await getAnalysisOrder({ analysisOrderId: Number(params.orderId) }).catch(() => null); if (!order) { redirect(pathsConfig.app.myOrders); } diff --git a/lib/services/medipost.service.ts b/lib/services/medipost.service.ts index a096083..6fb4302 100644 --- a/lib/services/medipost.service.ts +++ b/lib/services/medipost.service.ts @@ -194,12 +194,13 @@ export async function readPrivateMessageResponse({ excludedMessageIds, }: { excludedMessageIds: string[]; -}): Promise<{ messageId: string | null; hasAnalysisResponse: boolean; hasPartialAnalysisResponse: boolean; hasFullAnalysisResponse: boolean; medusaOrderId: string | undefined }> { +}): Promise<{ messageId: string | null; hasAnalysisResponse: boolean; hasPartialAnalysisResponse: boolean; hasFullAnalysisResponse: boolean; medusaOrderId: string | undefined; analysisOrderId: number | undefined }> { let messageId: string | null = null; let hasAnalysisResponse = false; let hasPartialAnalysisResponse = false; let hasFullAnalysisResponse = false; let medusaOrderId: string | undefined = undefined; + let analysisOrderId: number | undefined = undefined; try { const privateMessage = await getLatestPrivateMessageListItem({ excludedMessageIds }); @@ -212,6 +213,7 @@ export async function readPrivateMessageResponse({ hasPartialAnalysisResponse: false, hasFullAnalysisResponse: false, medusaOrderId: undefined, + analysisOrderId: undefined }; } @@ -220,16 +222,15 @@ export async function readPrivateMessageResponse({ ); const messageResponse = privateMessageContent?.Saadetis?.Vastus; - medusaOrderId = privateMessageContent?.Saadetis?.Tellimus?.ValisTellimuseId || messageResponse?.ValisTellimuseId; + analysisOrderId = Number(privateMessageContent?.Saadetis?.Tellimus?.ValisTellimuseId || messageResponse?.ValisTellimuseId); - const hasInvalidOrderId = !medusaOrderId || !medusaOrderId.toString().startsWith('order_'); + const hasInvalidOrderId = isNaN(analysisOrderId) if (hasInvalidOrderId || !messageResponse) { await createMedipostActionLog({ action: 'sync_analysis_results_from_medipost', xml: privateMessageXml, hasAnalysisResults: false, - medusaOrderId: hasInvalidOrderId ? undefined : medusaOrderId, }); return { messageId, @@ -237,9 +238,13 @@ export async function readPrivateMessageResponse({ hasPartialAnalysisResponse: false, hasFullAnalysisResponse: false, medusaOrderId: hasInvalidOrderId ? undefined : medusaOrderId, + analysisOrderId: hasInvalidOrderId ? undefined : analysisOrderId }; } + const analysisOrder = await getAnalysisOrder({ analysisOrderId: analysisOrderId }) + medusaOrderId = analysisOrder.medusa_order_id; + let order: Tables<{ schema: 'medreport' }, 'analysis_orders'>; try { order = await getAnalysisOrder({ medusaOrderId }); @@ -264,7 +269,7 @@ export async function readPrivateMessageResponse({ console.warn(`Failed to process private message id=${messageId}, message=${(e as Error).message}`); } - return { messageId, hasAnalysisResponse, hasPartialAnalysisResponse, hasFullAnalysisResponse, medusaOrderId }; + return { messageId, hasAnalysisResponse, hasPartialAnalysisResponse, hasFullAnalysisResponse, medusaOrderId, analysisOrderId }; } async function saveAnalysisGroup( @@ -616,7 +621,7 @@ export async function sendOrderToMedipost({ lastName: account.last_name ?? '', phone: account.phone ?? '', }, - orderId: medusaOrderId, + orderId: medreportOrder.id, orderCreatedAt: new Date(medreportOrder.created_at), comment: '', }); diff --git a/lib/services/medipostTest.service.ts b/lib/services/medipostTest.service.ts index 4459d0c..4b1d1ca 100644 --- a/lib/services/medipostTest.service.ts +++ b/lib/services/medipostTest.service.ts @@ -68,7 +68,7 @@ export async function composeOrderTestResponseXML({ }; orderedAnalysisElementsIds: number[]; orderedAnalysesIds: number[]; - orderId: string; + orderId: number; orderCreatedAt: Date; }) { const analysisElements = await getAnalysisElementsAdmin({ ids: orderedAnalysisElementsIds }); diff --git a/lib/services/medipostXML.service.ts b/lib/services/medipostXML.service.ts index 2cac69b..2b457d5 100644 --- a/lib/services/medipostXML.service.ts +++ b/lib/services/medipostXML.service.ts @@ -45,7 +45,7 @@ export async function composeOrderXML({ lastName: string; phone: string; }; - orderId: string; + orderId: number; orderCreatedAt: Date; comment?: string; }) { diff --git a/lib/services/order.service.ts b/lib/services/order.service.ts index f1eae85..eced8f9 100644 --- a/lib/services/order.service.ts +++ b/lib/services/order.service.ts @@ -82,10 +82,10 @@ export async function updateAnalysisOrderStatus({ export async function getAnalysisOrder({ medusaOrderId, - orderId, + analysisOrderId, }: { medusaOrderId?: string; - orderId?: number; + analysisOrderId?: number; }) { const query = getSupabaseServerAdminClient() .schema('medreport') @@ -93,15 +93,15 @@ export async function getAnalysisOrder({ .select('*') if (medusaOrderId) { query.eq('medusa_order_id', medusaOrderId); - } else if (orderId) { - query.eq('id', orderId); + } else if (analysisOrderId) { + query.eq('id', analysisOrderId); } else { throw new Error('Either medusaOrderId or orderId must be provided'); } const { data: order, error } = await query.single(); if (error) { - throw new Error(`Failed to get order by medusaOrderId=${medusaOrderId} or orderId=${orderId}, message=${error.message}, data=${JSON.stringify(order)}`); + throw new Error(`Failed to get order by medusaOrderId=${medusaOrderId} or analysisOrderId=${analysisOrderId}, message=${error.message}, data=${JSON.stringify(order)}`); } return order; } diff --git a/lib/templates/medipost-order.ts b/lib/templates/medipost-order.ts index e226774..f6da882 100644 --- a/lib/templates/medipost-order.ts +++ b/lib/templates/medipost-order.ts @@ -8,8 +8,7 @@ const isProd = process.env.NODE_ENV === 'production'; export const getPais = ( sender: string, recipient: string, - createdAt: Date, - orderId: string, + orderId: number, packageName = "OL", ) => { if (isProd) { diff --git a/packages/features/medusa-storefront/src/lib/data/orders.ts b/packages/features/medusa-storefront/src/lib/data/orders.ts index c20931f..cf0231c 100644 --- a/packages/features/medusa-storefront/src/lib/data/orders.ts +++ b/packages/features/medusa-storefront/src/lib/data/orders.ts @@ -54,7 +54,6 @@ export const listOrders = async ( }, headers, next, - cache: "force-cache", }) .then(({ orders }) => orders) .catch((err) => medusaError(err)) diff --git a/packages/features/medusa-storefront/src/lib/data/products.ts b/packages/features/medusa-storefront/src/lib/data/products.ts index 4b1e250..b65efe9 100644 --- a/packages/features/medusa-storefront/src/lib/data/products.ts +++ b/packages/features/medusa-storefront/src/lib/data/products.ts @@ -73,7 +73,6 @@ export const listProducts = async ({ }, headers, next, - cache: "force-cache", } ) .then(({ products, count }) => { From 74c176912bd15f27b8503be5756370cc625573b2 Mon Sep 17 00:00:00 2001 From: Karli Date: Fri, 12 Sep 2025 12:46:46 +0300 Subject: [PATCH 4/4] fix sending multiple analysis elements for same material group with different data --- lib/services/medipostXML.service.ts | 99 ++++++++++++++--------------- lib/templates/medipost-order.ts | 23 ++++--- 2 files changed, 61 insertions(+), 61 deletions(-) diff --git a/lib/services/medipostXML.service.ts b/lib/services/medipostXML.service.ts index 2b457d5..77e00eb 100644 --- a/lib/services/medipostXML.service.ts +++ b/lib/services/medipostXML.service.ts @@ -76,42 +76,34 @@ export async function composeOrderXML({ // Collect all materials from all analysis groups for (const currentGroup of analysisGroups) { - let relatedAnalysisElement = analysisElements?.find( - (element) => element.analysis_groups.id === currentGroup.id, - ); - const relatedAnalyses = analyses?.filter((analysis) => { - return analysis.analysis_elements.analysis_groups.id === currentGroup.id; - }); + let relatedAnalysisElements = analysisElements?.filter(({ analysis_groups }) => analysis_groups.id === currentGroup.id); - if (!relatedAnalysisElement) { - relatedAnalysisElement = relatedAnalyses?.find( - (relatedAnalysis) => - relatedAnalysis.analysis_elements.analysis_groups.id === - currentGroup.id, - )?.analysis_elements; + if (!relatedAnalysisElements || relatedAnalysisElements.length === 0) { + relatedAnalysisElements = analyses + .filter(({ analysis_elements }) => analysis_elements.analysis_groups.id === currentGroup.id) + .flatMap(({ analysis_elements }) => analysis_elements); } - if (!relatedAnalysisElement || !relatedAnalysisElement.material_groups) { + if (!relatedAnalysisElements || relatedAnalysisElements.length === 0) { throw new Error( - `Failed to find related analysis element for group ${currentGroup.name} (id: ${currentGroup.id})`, + `Failed to find related analysis elements for group ${currentGroup.name} (id: ${currentGroup.id})`, ); } - for (const group of relatedAnalysisElement?.material_groups as MaterjalideGrupp[]) { - const materials = toArray(group.Materjal); - for (const material of materials) { - const { MaterjaliNimi, MaterjaliTyyp, MaterjaliTyypOID, Konteiner } = material; - const containers = toArray(Konteiner); - - for (const container of containers) { - // Use MaterialTyyp as the key for deduplication - const materialKey = MaterjaliTyyp; - - if (!uniqueMaterials.has(materialKey)) { - uniqueMaterials.set(materialKey, { - MaterjaliTyypOID, - MaterjaliTyyp, - MaterjaliNimi, + for (const analysisElement of relatedAnalysisElements) { + for (const { Materjal } of analysisElement.material_groups as MaterjalideGrupp[]) { + for (const material of toArray(Materjal)) { + const { MaterjaliTyyp } = material; + + for (const container of toArray(material.Konteiner)) { + if (uniqueMaterials.has(MaterjaliTyyp)) { + continue; + } + + uniqueMaterials.set(MaterjaliTyyp, { + MaterjaliTyypOID: material.MaterjaliTyypOID, + MaterjaliTyyp: material.MaterjaliTyyp, + MaterjaliNimi: material.MaterjaliNimi, ProovinouKoodOID: container.ProovinouKoodOID, ProovinouKood: container.ProovinouKood, order: specimenOrder++, @@ -137,47 +129,48 @@ export async function composeOrderXML({ // Generate analysis section with correct specimen references const analysisSection = []; for (const currentGroup of analysisGroups) { - let relatedAnalysisElement = analysisElements?.find( + let relatedAnalysisElements = analysisElements?.filter( (element) => element.analysis_groups.id === currentGroup.id, ); - const relatedAnalyses = analyses?.filter((analysis) => { - return analysis.analysis_elements.analysis_groups.id === currentGroup.id; - }); - if (!relatedAnalysisElement) { - relatedAnalysisElement = relatedAnalyses?.find( - (relatedAnalysis) => - relatedAnalysis.analysis_elements.analysis_groups.id === - currentGroup.id, - )?.analysis_elements; + if (!relatedAnalysisElements) { + relatedAnalysisElements = analyses + .filter(({ analysis_elements }) => analysis_elements.analysis_groups.id === currentGroup.id) + .flatMap(({ analysis_elements }) => analysis_elements); } - if (!relatedAnalysisElement || !relatedAnalysisElement.material_groups) { + if (!relatedAnalysisElements || relatedAnalysisElements.length === 0) { throw new Error( `Failed to find related analysis element for group ${currentGroup.name} (id: ${currentGroup.id})`, ); } - // Find the specimen order number for this analysis group - let specimenOrderNumber = 1; - for (const group of relatedAnalysisElement?.material_groups as MaterjalideGrupp[]) { - const materials = toArray(group.Materjal); - for (const material of materials) { - const materialKey = material.MaterjaliTyyp; - const uniqueMaterial = uniqueMaterials.get(materialKey); - if (uniqueMaterial) { - specimenOrderNumber = uniqueMaterial.order; - break; // Use the first material's order number + // Find the specimen order numbers for analysis elements + const uuringElementInputs: { + analysisElement: Tables<{ schema: 'medreport' }, 'analysis_elements'>, + specimenOrderNr: number, + }[] = []; + for (const analysisElement of relatedAnalysisElements) { + for (const group of analysisElement.material_groups as MaterjalideGrupp[]) { + const materials = toArray(group.Materjal); + for (const material of materials) { + const uniqueMaterial = uniqueMaterials.get(material.MaterjaliTyyp); + if (!uniqueMaterial) { + continue; + } + uuringElementInputs.push({ + analysisElement, + specimenOrderNr: uniqueMaterial.order, + }); + break; } } - if (specimenOrderNumber > 1) break; // Found a specimen, use it } const groupXml = getAnalysisGroup( currentGroup.original_id, currentGroup.name, - specimenOrderNumber, - relatedAnalysisElement, + uuringElementInputs, ); analysisSection.push(groupXml); } diff --git a/lib/templates/medipost-order.ts b/lib/templates/medipost-order.ts index f6da882..9ca1f55 100644 --- a/lib/templates/medipost-order.ts +++ b/lib/templates/medipost-order.ts @@ -151,14 +151,21 @@ export const getAnalysisElement = ( export const getAnalysisGroup = ( analysisGroupOriginalId: string, analysisGroupName: string, - specimenOrderNr: number, - analysisElement: Tables<{ schema: 'medreport' }, 'analysis_elements'>, -) => - ` - ${analysisGroupOriginalId} - ${analysisGroupName} - + uuringElementInputs: { + analysisElement: Tables<{ schema: 'medreport' }, 'analysis_elements'>, + specimenOrderNr: number, + }[], +) => { + const uuringElements = uuringElementInputs.map(({ analysisElement, specimenOrderNr }) => + ` ${getAnalysisElement(analysisElement.analysis_id_oid, analysisElement.analysis_id_original, analysisElement.tehik_short_loinc, analysisElement.tehik_loinc_name, analysisElement.id, analysisElement.analysis_name_lab)} ${specimenOrderNr} - + ` + ).join(''); + + return ` + ${analysisGroupOriginalId} + ${analysisGroupName} + ${uuringElements} `; +};