ResponsesWarnings Registry

Warnings Registry

The closed registry of conversion warning codes. Every lossy or assumed step in a conversion surfaces as one of these — nothing is dropped silently.

The contract

Converting between formats with different capacities sometimes forces a choice: truncate a name to fit an MT line, default a mandatory timestamp the source never carried, transliterate a character the SWIFT X charset can't hold. transmute's contract is that every such step emits a structured warning — if the warnings[] array carries no lossy entries, nothing was dropped.

{ "code": "TRUNC_NAME", "severity": "lossy",
  "sourceField": "payment.creditor.name", "targetField": ":59:",
  "detail": "name shortened from 52 to 35 characters to fit the MT line budget" }
FieldMeaning
codeA stable identifier from the closed registry below — match on this
severityinfo < warning < lossy < error
sourceField / targetFieldPaths naming what was affected
detailA short explanation — never message content values

Warnings are deterministic (sorted by source field, then code) — identical input yields identical warnings, so you can diff them across runs.

On bare-document responses (Accept: application/xml/text/plain) warnings can't ride in the body; you get an X-Transmute-Warnings count header instead — re-issue with Accept: application/json for the entries. Warnings are not stored server-side.

Severity semantics

SeverityMeaningRecommended handling
infoAn assumption or normalization was made; no data lostLog it
warningSomething didn't verify or is structurally imperfectReview in reconciliation
lossyData present in the source is absent or reduced in the targetReview item — decide whether the loss matters for your flow
errorReserved for strict-mode style failuresFail the item

Setting options.strict: true on convert turns would-be lossy outcomes into failures.

The registry

The registry is closed: codes are only ever added (with release notes), never renamed or silently changed, so switching on them exhaustively is safe.

Lossy by default

CodeEmitted when
CHARSET_TRANSLITCharacters were transliterated to the SWIFT X charset (e.g. üue)
CHARSET_DROPCharacters with no transliteration were replaced or removed
TRUNC_NAMEA party/agent name was cut to fit the MT line budget
TRUNC_ADDRESSAddress components were dropped or cut flattening to MT lines
TRUNC_REMITTANCERemittance text exceeded :70:/:86: capacity
TRUNC_REFERENCEA reference exceeded the target field length
DROP_FIELDA whole source element has no slot in the target format
DROP_AGENTAn agent in the chain cannot be represented in the target
OVERRIDE_SUPPRESSEDA tenant override rule deliberately dropped this field (always paired with OVERRIDE_APPLIED)

Warning by default

CodeEmitted when
AMOUNT_MISMATCHCharges arithmetic or a page balance chain failed verification
ADDRESS_UNSTRUCTUREDA structured address was preferred but only unstructured was available

Info by default

CodeEmitted when
PAGED_OUTPUTOutput was split into N MT pages (2,000-character cap per message)
MISSING_REQUIRED_DEFAULTEDA mandatory target element was defaulted (e.g. camt.053 CreDtTm from an MT940 that carries no timestamp)
CODE_UNMAPPED_PROPRIETARYA code had no table mapping and was carried as proprietary
DATE_YEAR_INFERREDAn :61: entry-date year was inferred from the value date
RETURN_REASON_UNMAPPEDA return/cancellation reason code had no mapping row; carried as proprietary/narrative
CHARGES_DETAIL_UNMAPPEDA charges detail line had no mapping row; carried as narrative/verbatim
OVERRIDE_APPLIEDA tenant override rule changed this field's mapping (detail names the action, never values)
CHARGES_DUPLICATEDA return charge restated in two source fields of equal amount was collapsed to one, not double-counted
ACCOUNT_CCY_SUFFIXAn MT :25: account id carried a trailing currency suffix (a known bank dialect); split into IBAN + account currency

Using warnings in pipelines

  1. Persist the codes (they're metadata, safe to store) alongside your own record of each conversion.
  2. Alert on lossy in flows where completeness matters — payment chains, regulatory reporting.
  3. Don't string-match detail — it's for humans and may be refined; code is the contract.