What Values Does ATMCassetteStatusCode Support — and When Should You Filter Them?

The Question

“Can you show me all of the possible values for ATMCassetteStatusCode and when it is appropriate to use them? Should any filtering of dropdown values occur? When and why? Can you give me a truth table that both my developers and QA will understand?”

That is a question the average developer would spend an afternoon answering by digging through XSD files and spec PDFs. Watch what happens when the AI has a live connection to the repository.


Step 1 — The MCP Server Returns Every Value With Its Definition

The AI queries the Beneficial Strategies ISO 20022 MCP Server live, navigating the data dictionary directly to the ATMCassetteStatusCode code set. No searching, no guessing — the server returns the complete authoritative list in one call.

The spec defines it as: “Status of a cassette in an ATM.” Here are all 10 values, exactly as registered:

Code ISO Definition
Ok The cash unit is in a good state.
Full The cash unit is full.
High The cash unit is high — it has reached or exceeded the threshold defined for this cassette.
Low The cash unit is low — it has reached or is below the threshold defined for this cassette.
Empty The cash unit is empty.
Inoperative The cash unit is inoperative.
Missing The cash unit is missing.
NotAvailable The values of this cash unit are not available.
NoReference There are no reference values available for this cash unit.
Manipulated The device has been inserted when the device was not in an exchange state.

The server also returns a second code set: ATMCassetteStatus1Code. This is the restricted profile of the base set — it carries the same 10 values but is used in specific versioned ATM messages (the cain message family). The base ATMCassetteStatusCode is the authoritative source of truth for definitions; the 1Code variant is the wire-format type used in message elements.


Step 2 — A Clarifying Question

Before producing the truth table, the AI asks:

“Should the truth table focus on: (a) which status values are valid inputs for each cassette type when reporting status to the acquirer, or (b) which status values should trigger alerts or automated responses in your ATM management system — or both?”

Answer: Both. Developers need to know what to send; QA needs to know what to test.


Step 3 — Context: The Six Cassette Types

The MCP server also returns ATMCassetteTypeCode — the six types of cassette an ATM may contain. This is the key to filtering, because the meaning of a status code changes entirely depending on what the cassette does:

Type Role Fill concern Drain concern
Out Dispenses notes to customers Low/Empty → ATM goes out of service
In Accepts deposits from customers Full → ATM can’t accept more
Recycling Accepts deposits, then re-dispenses them Both (fills from deposits, drains from dispenses) Both
Replenishment Staging cassette — holds extra notes before loading into Out Low/Empty → no backup stock
Reject Collects notes rejected during dispense (unreadable, wrong denom) Full → rejected notes have nowhere to go
Retract Collects notes presented but not taken by customer within timeout Full → retracted notes have nowhere to go

All 10 status values are syntactically valid for all 6 cassette types — the ISO spec does not restrict which codes may appear for a given type. But the operational interpretation — and therefore the alert severity and any UI filtering — depends entirely on the cassette type.


Step 4 — The Truth Table

Part A — Operational Meaning by Cassette Type

This is the reference table for developers implementing status-handling logic. Read each cell as: “What does this status mean when reported for this cassette type?”

Status Out (Dispense) In (Deposit) Recycling Replenishment Reject Retract
Ok Normal — notes available, below thresholds Normal — space available Normal — balanced Normal — stock available Normal — space available Normal — space available
Full Freshly loaded — note for informational log Cannot accept more deposits — service needed Deposit side full — dispense to drain Maximum staging stock Cannot collect more rejects — service needed Cannot collect more retractions — service needed
High Unusually well-stocked (rare; may indicate misconfiguration) Approaching full — service soon Approaching deposit-full OR dispense-high Approaching max stock Approaching full — service soon Approaching full — service soon
Low Approaching empty — replenishment needed soon Nearly empty — normal after recent service Low on dispense stock OR low on deposit space Low — replenish staging stock Nearly empty — normal after recent service Nearly empty — normal after recent service
Empty No notes left — ATM cannot dispense Empty — normal after recent service Completely balanced or unloaded No backup stock Empty — recently serviced Empty — recently serviced
Inoperative Hardware fault — ATM cannot dispense from this cassette Hardware fault — cannot accept deposits Hardware fault Hardware fault Hardware fault — rejected notes cannot be collected Hardware fault — retracted notes cannot be collected
Missing Cassette not loaded — ATM cannot dispense Cassette not present — deposits impossible Cassette not present Cassette not present Cassette not present — rejected notes fall loose Cassette not present — retracted notes fall loose
NotAvailable Sensors not reporting fill level — assume degraded Sensors not reporting — assume degraded Sensors not reporting Sensors not reporting Sensors not reporting Sensors not reporting
NoReference Thresholds not configured — Low/High impossible to evaluate Thresholds not configured Thresholds not configured Thresholds not configured Thresholds not configured Thresholds not configured
Manipulated Security event — inserted outside exchange state Security event Security event Security event Security event Security event

Part B — Alert Severity and Service Impact

This is the table QA should use to verify alert routing. Each cell shows: alert severity / take ATM out of dispense service?

Status Out In Recycling Replenishment Reject Retract
Ok — / No — / No — / No — / No — / No — / No
Full Info / No 🟡 Warn / No 🟡 Warn / No Info / No 🔴 Critical / No 🔴 Critical / No
High 🟡 Warn / No 🟡 Warn / No 🟡 Warn / No 🟡 Warn / No 🟡 Warn / No 🟡 Warn / No
Low 🟡 Warn / No Info / No 🟡 Warn / No 🟡 Warn / No Info / No Info / No
Empty 🔴 Critical / Yes Info / No 🔴 Critical / Yes 🔴 Critical / No¹ Info / No Info / No
Inoperative 🔴 Critical / Yes 🔴 Critical / Yes 🔴 Critical / Yes 🔴 Critical / No¹ 🔴 Critical / Yes² 🔴 Critical / Yes²
Missing 🔴 Critical / Yes 🔴 Critical / Yes 🔴 Critical / Yes 🔴 Critical / No¹ 🔴 Critical / Yes² 🔴 Critical / Yes²
NotAvailable 🟡 Warn / No 🟡 Warn / No 🟡 Warn / No 🟡 Warn / No 🟡 Warn / No 🟡 Warn / No
NoReference 🟡 Warn / No 🟡 Warn / No 🟡 Warn / No 🟡 Warn / No 🟡 Warn / No 🟡 Warn / No
Manipulated 🚨 Security / Yes 🚨 Security / Yes 🚨 Security / Yes 🚨 Security / Yes 🚨 Security / Yes 🚨 Security / Yes

¹ A Replenishment cassette being Empty/Inoperative/Missing does not prevent the ATM from dispensing now — but it removes the buffer for the next replenishment cycle. Raise a maintenance alert, not an out-of-service event.

² If Reject or Retract is Inoperative/Missing, the ATM cannot safely route problematic notes — treat this as an out-of-service condition to avoid loose notes in the mechanism.


Part C — UI Dropdown Filtering Rules

When building a cassette management screen that allows operators to manually set or override a cassette status, apply these filtering rules:

Rule Rationale
Never expose Manipulated as a selectable option Manipulated is set by the ATM hardware security module when a physical tamper event is detected. It cannot be a valid manual entry — if it appears in a dropdown, a malicious operator could clear it by selecting Ok. Treat it as read-only.
Hide High/Low/Full/Empty when NoReference is active If no thresholds are configured for the cassette, threshold-relative statuses (High, Low) have no defined meaning and should not be offered. Full and Empty remain valid (they are absolute, not threshold-relative).
Offer Full and Empty for Reject/Retract cassettes; suppress Low Low on a Reject or Retract cassette means “recently serviced” — it is a natural post-maintenance state and not a meaningful operator selection. Auto-set it after a service confirmation instead.
NoReference is a configuration status, not an operator selection It indicates a missing system configuration. Expose it as read-only alongside a link to the threshold configuration screen.
All 10 values are valid in the protocol The filter rules above are UX guidance, not protocol restrictions. The wire format accepts any of the 10 values for any cassette type.

QA Test Checklist

Derived directly from the truth tables above. Cover these scenarios in your ATM management integration tests:

Status transitions — Out cassette:
  [ ] Ok → Low:         alert raised at warn severity; ATM stays in service
  [ ] Low → Empty:      alert escalated to critical; ATM taken out of dispense service
  [ ] Any → Manipulated: security alert raised; ATM taken out of service immediately; not clearable via UI
  [ ] Any → Inoperative: critical alert; ATM out of service
  [ ] Any → Missing:    critical alert; ATM out of service
  [ ] Full → Ok:        informational log; no alert

Status transitions — In cassette (deposit):
  [ ] Ok → High:        warn alert; ATM stays in service for deposits
  [ ] High → Full:      critical alert; deposits suspended
  [ ] Full → Low:       info (post-service); ATM accepts deposits again
  [ ] Any → Manipulated: security alert; ATM fully suspended

Status transitions — Reject / Retract cassette:
  [ ] Ok → Full:        critical alert; ATM out of dispense service (no safe path for rejected notes)
  [ ] Missing:          critical alert; ATM out of dispense service
  [ ] Post-service Empty: no alert; confirm ATM returns to service

NoReference guard:
  [ ] High/Low statuses received when NoReference active: log warning; do not escalate as threshold breach
  [ ] NoReference cleared (thresholds configured): resume threshold-relative alerting

Manipulated (security path):
  [ ] Manipulated status received: security team notified; cassette locked out
  [ ] Manipulated not selectable via management UI dropdown
  [ ] Manipulated not clearable by standard operator role (requires security role)

What Just Happened?

The Beneficial Strategies ISO 20022 MCP Server returned the complete ATMCassetteStatusCode definition — all 10 values, with authoritative ISO definitions — in a single call. It also returned ATMCassetteTypeCode (the 6 cassette types), which is what makes a meaningful truth table possible: the same status code means something entirely different depending on what the cassette does.

Your developers have a reference table. Your QA team has a test checklist. Your UI filtering rules are in writing. None of it was guessed from training data — every code value and definition came live from the published ISO specification.

See what other questions the MCP server can answer for your payment engineering team.