+ {/* Sibling candidates get the "vill du matcha i stället?" copy: the
+ generic body's "en annan transaktion eller en befintlig
+ verifikation" hedge reads as noise once the twin is known. The
+ ignore hint renders only when the action itself does (callers
+ without onIgnored, e.g. the manual booking form and the bulk
+ dialog, must not have copy pointing at a button that is not
+ there). */}
+
+ {isSiblingCandidate ? t('dialog_duplicate_body_sibling') : t('dialog_duplicate_body')}
+ {canIgnore && <> {t('dialog_duplicate_ignore_hint')}>}
+
@@ -240,6 +299,16 @@ export default function DuplicateBookingDialog({
+ {/* Sibling candidates only: when the row is a duplicate
+ import of the already-booked twin, ignoring it is the
+ correct resolution (matching would double-count the bank
+ side, booking would double-count the ledger side). */}
+ {canIgnore && (
+
+ )}