+
+
+ {t('ProcessingDeepCoroCtoTitle', { defaultValue: 'DeepCORO-CTO J-CTO assessment' })}
+
+
+ {t('ProcessingDeepCoroCtoDescription', {
+ defaultValue:
+ 'Model-estimated imaging J-CTO score and morphology components by coronary artery.',
+ })}
+
+
+
+
+
+
-
+ {t('ProcessingDeepCoroCtoSelectedArtery', { defaultValue: 'Selected CTO artery' })}
+
+ - {ctoArtery}
+
+
+
-
+ {t('ProcessingDeepCoroCtoScore', { defaultValue: 'Imaging J-CTO score' })}
+
+ -
+ {jctoScore.predictedInteger}
+
+ ({t('ProcessingDeepCoroCtoRaw', { defaultValue: 'raw' })}{' '}
+ {jctoScore.predicted.toFixed(1)})
+
+
+
+
+
-
+ {t('ProcessingDeepCoroCtoDifficulty', { defaultValue: 'Difficulty band' })}
+
+ - {jctoScore.difficulty}
+ -
+ {jctoScore.componentsAboveThreshold}/4{' '}
+ {t('ProcessingDeepCoroCtoComponentsPresent', {
+ defaultValue: 'components above threshold',
+ })}
+
+
+
+
+ {ctoArtery === 'LCx' && (
+
+ {t('ProcessingDeepCoroCtoLcxWarning', {
+ defaultValue:
+ 'Caution: LCx predictions are unreliable because the model was validated on very few LCx CTO cases.',
+ })}
+
+ )}
+
+
+
+ {t('ProcessingDeepCoroCtoComponents', { defaultValue: 'J-CTO morphology components' })}
+
+
+
+
+
+ |
+ {t('ProcessingDeepCoroCtoComponent', { defaultValue: 'Component' })}
+ |
+
+ {t('ProcessingDeepCoroCtoProbability', { defaultValue: 'Probability' })}
+ |
+
+ {t('ProcessingDeepCoroCtoThreshold', { defaultValue: 'Threshold' })}
+ |
+
+ {t('ProcessingDeepCoroCtoState', { defaultValue: 'State' })}
+ |
+
+
+
+ {DEEP_CORO_CTO_COMPONENTS.map(key => {
+ const component = components[key];
+ const [labelKey, label] = componentLabels[key];
+ return (
+
+ |
+ {t(labelKey, { defaultValue: label })}
+ |
+
+ {percentage.format(component.probability)}
+ |
+
+ {percentage.format(component.threshold)}
+ |
+
+ {component.present
+ ? t('ProcessingDeepCoroCtoPresent', { defaultValue: 'Present' })
+ : t('ProcessingDeepCoroCtoAbsent', { defaultValue: 'Not present' })}
+ |
+
+ );
+ })}
+
+
+
+
+
+
+
+ {t('ProcessingDeepCoroCtoPerArtery', { defaultValue: 'Per-artery scores' })}
+
+
+
+
+
+ |
+ {t('ProcessingDeepCoroCtoArtery', { defaultValue: 'Artery' })}
+ |
+
+ {t('ProcessingDeepCoroCtoRawScore', { defaultValue: 'Raw score' })}
+ |
+
+ {t('ProcessingDeepCoroCtoRoundedScore', { defaultValue: 'Rounded score' })}
+ |
+
+
+
+ {DEEP_CORO_CTO_ARTERIES.map(artery => (
+
+ |
+ {artery}
+ {artery === ctoArtery && (
+
+ {t('ProcessingDeepCoroCtoSelected', { defaultValue: 'Selected' })}
+
+ )}
+ |
+
+ {perArtery[artery].jctoScore.toFixed(2)}
+ |
+
+ {perArtery[artery].jctoScoreInteger}
+ |
+
+ ))}
+
+
+
+
+
+
+ {t('ProcessingDeepCoroCtoResearchNote', {
+ defaultValue:
+ 'Research preview only. This imaging score covers four morphology components (0–4) and excludes the classic point for a previously failed attempt. Confirm every finding by operator review.',
+ })}
+
+
+ );
+}
+
+export default DeepCoroCtoResult;
diff --git a/platform/app/src/components/inference/studyProcessing/modelResults/DeepCoroMaceContract.md b/platform/app/src/components/inference/studyProcessing/modelResults/DeepCoroMaceContract.md
index a4af68eb7..8a8defec6 100644
--- a/platform/app/src/components/inference/studyProcessing/modelResults/DeepCoroMaceContract.md
+++ b/platform/app/src/components/inference/studyProcessing/modelResults/DeepCoroMaceContract.md
@@ -1,6 +1,7 @@
-# DeepCORO_MACE result contract
+# DeepCORO-MACE result contract
-The dedicated renderer is selected only for `DeepCORO_MACE` version `1.0.0` and the deployed
+The dedicated renderer is selected for `DeepCORO_MACE` or the deployed display identity
+`DeepCORO-MACE`, version `1.0.0`, and the deployed
payload shape represented by `deepCoroMaceContract.ts`.
The contract requires the one-year horizon, all four primary endpoints, all five exploratory
diff --git a/platform/app/src/components/inference/studyProcessing/modelResults/DeepCoroSyntaxContract.md b/platform/app/src/components/inference/studyProcessing/modelResults/DeepCoroSyntaxContract.md
new file mode 100644
index 000000000..6587acef6
--- /dev/null
+++ b/platform/app/src/components/inference/studyProcessing/modelResults/DeepCoroSyntaxContract.md
@@ -0,0 +1,9 @@
+# DeepCORO-SYNTAX result presentation contract
+
+The dedicated renderer is selected only for `DeepCORO-SYNTAX` version `5.0.0`. It accepts the
+deployed JSON output containing the modified SYNTAX score, left and right territory scores,
+severity probabilities, and intermediate-to-high operating threshold.
+
+Only finite, bounded scores and probabilities with the documented units and categories are
+rendered. Model-authored diagnosis, recommendation markup, and threshold notes are not displayed.
+Malformed or future payloads fall back to the generic renderer.
diff --git a/platform/app/src/components/inference/studyProcessing/modelResults/DeepCoroSyntaxResult.test.tsx b/platform/app/src/components/inference/studyProcessing/modelResults/DeepCoroSyntaxResult.test.tsx
new file mode 100644
index 000000000..204ef5e85
--- /dev/null
+++ b/platform/app/src/components/inference/studyProcessing/modelResults/DeepCoroSyntaxResult.test.tsx
@@ -0,0 +1,42 @@
+import React from 'react';
+import TestRenderer, { act } from 'react-test-renderer';
+import { DeepCoroSyntaxResult } from './DeepCoroSyntaxResult';
+import { deepCoroSyntaxResultFixtures } from './deepCoroSyntaxFixtures';
+
+jest.mock('react-i18next', () => ({
+ useTranslation: () => ({
+ t: (_key: string, options: Record