Decode diagnostics

When @boarteam/fix finds a problem it returns it as data — a stable code, a severity, and where in the message it applies. It never throws. These are the codes you are most likely to see, and what usually causes them.

Framing

The message envelope — BeginString, BodyLength, CheckSum — did not line up.

CodeWhat it meansUsual cause
parse/checksum-mismatchThe CheckSum field does not match the bytes.Usually a message that was edited, or one copied with pipes after being framed with SOH — the two forms have different checksums.
parse/body-length-mismatchBodyLength disagrees with the framed body.Truncated capture, or a hand-written message where the length was not recomputed.
parse/begin-string-mismatchBeginString names a different version than the dictionary in use.Decoding a FIX 4.2 message against the FIX 4.4 dictionary, or vice versa.
parse/missing-checksumNo CheckSum field was found.The message was cut short, or the separator was not what the decoder expected.
parse/missing-body-lengthNo BodyLength field was found.Same as above — most often a wrong separator.
parse/missing-msgtypeNo MsgType (35) field was found.Not a FIX message, or only a fragment of one.

Datatypes

A value did not lex as the type its field declares. The message still decodes; the raw string is kept.

CodeWhat it meansUsual cause
parse/invalid-floatA float-family field held something that is not a number.An empty value, a placeholder like N/A, or a locale-formatted number with a comma.
parse/invalid-intAn int-family field held something that is not a whole number.Same causes as above.
validate/invalid-valueA value did not match its datatype's format.Most often a timestamp in ISO format instead of the FIX YYYYMMDD-HH:MM:SS[.sss] form.

Dictionary rules

The message parsed, but it does not obey the dictionary for its MsgType.

CodeWhat it meansUsual cause
validate/value-not-in-enumAn enumerated field held a value the dictionary does not define.A venue extension, or a value that exists in a different FIX version.
validate/required-field-missingA field marked required for this message is absent.A partially-built message, or one built against a different version.
validate/required-group-missingA required repeating group has no entries.Group members supplied at the wrong nesting level are silently dropped when encoding — this is how that shows up.
validate/conditional-requiredA field required by a condition is absent.Setting PossDupFlag=Y without OrigSendingTime is the classic case.
validate/unknown-msgtypeThe MsgType is not in the dictionary.A venue-specific message, or the wrong dialect.

Severity

Issues carry one of three severities. error means the message is wrong in a way that matters; warning means it is suspect but usable; info is a note. A message can be framed: true and still carry errors — framing only means the envelope was found, not that it checked out, so “framed” is never the same as “valid”.