<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Terminal-Design on Corebaseit — POS · EMV · Payments · AI · Telecommunications</title><link>https://corebaseit.com/tags/terminal-design/</link><description>Recent content in Terminal-Design on Corebaseit — POS · EMV · Payments · AI · Telecommunications</description><generator>Hugo -- gohugo.io</generator><language>en-us</language><managingEditor>contact@corebaseit.com (Vincent Bevia)</managingEditor><webMaster>contact@corebaseit.com (Vincent Bevia)</webMaster><lastBuildDate>Mon, 25 May 2026 10:00:00 +0200</lastBuildDate><atom:link href="https://corebaseit.com/tags/terminal-design/index.xml" rel="self" type="application/rss+xml"/><item><title>Partial approvals: what terminals and hosts must do when the card pays only part</title><link>https://corebaseit.com/corebaseit_posts/partial_approvals_and_how_terminals/</link><pubDate>Mon, 25 May 2026 10:00:00 +0200</pubDate><author>contact@corebaseit.com (Vincent Bevia)</author><guid>https://corebaseit.com/corebaseit_posts/partial_approvals_and_how_terminals/</guid><description>&lt;p>A €100 checkout receives an authorization approval. The cashier releases the goods. The card only covered €63.42.&lt;/p>
&lt;p>That is a &lt;strong>partial approval&lt;/strong>: the issuer approved less than the requested amount. The transaction is not declined. The sale is also not complete. Many POS and host stacks still behave as if payment were binary — approved means done, declined means stop. Partial approval sits in between and breaks that assumption.&lt;/p>
&lt;table>
&lt;thead>
&lt;tr>
&lt;th style="text-align: right">Requested&lt;/th>
&lt;th style="text-align: right">Approved&lt;/th>
&lt;th style="text-align: right">Remaining&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td style="text-align: right">€100.00&lt;/td>
&lt;td style="text-align: right">€63.42&lt;/td>
&lt;td style="text-align: right">€36.58&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;p>This pattern is common with prepaid and gift cards, debit cards with low available balance, benefit or restricted-balance products, fuel and unattended flows, and any retail environment that supports split tender.&lt;/p>
&lt;p>&lt;strong>Confirmed:&lt;/strong> A partial approval changes the amount that must be carried consistently across the terminal, merchant host, acquirer/processor interface, receipt, clearing, reconciliation, and customer-facing flow [3][4].&lt;/p>
&lt;p>&lt;strong>The architectural point:&lt;/strong> The system must answer not only “approved?” but “approved for how much?”&lt;/p>
&lt;h2 id="beyond-binary-approval">Beyond binary approval
&lt;/h2>&lt;p>A full approval answers: can this card pay the requested amount?&lt;/p>
&lt;p>A partial approval answers: this card can pay &lt;strong>part&lt;/strong> of it. What happens to the unpaid balance?&lt;/p>
&lt;p>A workable model:&lt;/p>
&lt;table>
&lt;thead>
&lt;tr>
&lt;th>Outcome&lt;/th>
&lt;th>Sale status&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td>Approved full amount&lt;/td>
&lt;td>Card tender complete; sale may complete&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>Approved partial amount&lt;/td>
&lt;td>Card tender partial; &lt;strong>sale still open&lt;/strong>&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>Declined&lt;/td>
&lt;td>No usable authorization on that card&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;p>Partial approval is a &lt;strong>state transition&lt;/strong>, not a cosmetic variant of response code 00 or 10.&lt;/p>
&lt;p>Visa’s documented retail flow: the authorization request carries a partial-authorization indicator; the issuer returns a partial amount; the merchant subtracts it from the total and requests another form of payment; if the customer does not complete the sale, the merchant initiates an authorization reversal [3].&lt;/p>
&lt;h2 id="iso-8583-response-code-is-not-enough">ISO 8583: response code is not enough
&lt;/h2>&lt;p>ISO 8583 defines a message framework. Schemes, acquirers, and processors define the field usage. You cannot infer partial-approval behavior from “ISO 8583” in the abstract — you need the acquirer or scheme specification [1][2][6].&lt;/p>
&lt;p>A card-present authorization request typically carries processing code (DE3), requested amount (DE4), STAN (DE11), terminal and merchant IDs (DE41/DE42), currency (DE49), EMV data (DE55) where applicable, and often private or additional fields for capability indicators. The response adds response code (DE39), and frequently additional amounts (DE54).&lt;/p>
&lt;h3 id="advertising-support-on-the-request">Advertising support on the request
&lt;/h3>&lt;p>The request should tell the issuer that the terminal or merchant can handle partial approval. Visa documents a partial authorization indicator in the authorization request [3]. Processor formats vary: Worldpay documents a Terminal Partial Authorization Support Indicator in Field 60 subfield 6 (value &lt;code>P&lt;/code>) for credit partial authorization [6]. FIS describes an additional authorization indicator for requests that may be authorized for less than the requested amount [8].&lt;/p>
&lt;p>Do not advertise partial approval support unless the POS can display it, handle split tender, reverse on cancel, print split receipts, and clear the correct amount.&lt;/p>
&lt;h3 id="reading-the-response-common-patterns">Reading the response: common patterns
&lt;/h3>&lt;table>
&lt;thead>
&lt;tr>
&lt;th>Pattern&lt;/th>
&lt;th>How partial approval appears&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td>DE39 = 10 (1987-style) or 0002 / 0006 (ISO 8583:2023)&lt;/td>
&lt;td>Explicit partial approval by response code [2][6]&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>DE39 = 000, response DE4 &amp;lt; request DE4&lt;/td>
&lt;td>Partial approval by amount comparison (FIS debit-style) [8]&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>DE39 partial code, DE4 = requested, DE54 = approved amount&lt;/td>
&lt;td>Common credit flows; Worldpay uses DE54 amount code 56 [6]&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>DE54 balance / authorized amount fields&lt;/td>
&lt;td>Prepaid, gift, benefit cards&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;p>Worldpay also documents an alternate EMD configuration: partial authorized amount in Field 4 and original requested amount in DE54 amount code 57 [6].&lt;/p>
&lt;p>&lt;strong>Confirmed:&lt;/strong> Do not identify partial approvals from DE39 alone [6][8].&lt;/p>
&lt;p>A host should evaluate response code, requested amount, approved amount, DE54 and private fields, processor configuration, terminal capability, and transaction type together.&lt;/p>
&lt;h2 id="terminal-behavior">Terminal behavior
&lt;/h2>&lt;p>When a partial approval arrives, the terminal should enter a &lt;strong>split-tender pending&lt;/strong> state — not mark the sale complete.&lt;/p>
&lt;p>Display at minimum:&lt;/p>
&lt;ul>
&lt;li>Total purchase amount&lt;/li>
&lt;li>Amount approved on this card&lt;/li>
&lt;li>Remaining amount due&lt;/li>
&lt;/ul>
&lt;p>A generic green &lt;strong>APPROVED&lt;/strong> is dangerous. A cashier may release €100 of goods when only €63.42 was authorized.&lt;/p>
&lt;p>Better:&lt;/p>
&lt;pre tabindex="0">&lt;code>PARTIAL APPROVAL
Approved on card: €63.42
Amount still due: €36.58
&lt;/code>&lt;/pre>&lt;p align="center">
&lt;img src="https://corebaseit.com/diagrams/partial_approval0.png" alt="Partial approval terminal display: requested €100.00, approved €63.42 on card, €36.58 remaining due; authorize, partial approval, pay remaining, sale complete flow" style="max-width: 900px; width: 100%;" />
&lt;/p>
&lt;p>The sale completes only when the remaining balance is paid with another tender or the transaction is cancelled.&lt;/p>
&lt;p>Receipts should show each tender separately (card amount, cash or second card, total paid). Visa’s partial authorization flow includes printing a receipt with each payment amount [3].&lt;/p>
&lt;p>&lt;strong>Vertical rules (confirmed where scheme guidance applies):&lt;/strong>&lt;/p>
&lt;ul>
&lt;li>&lt;strong>Fuel / unattended:&lt;/strong> Dispense only up to the partially approved amount; stop automatically; clear for fuel actually dispensed, which may be less than the approved cap [3][4].&lt;/li>
&lt;li>&lt;strong>Restaurant / tip environments:&lt;/strong> In tip environments, scheme rules may restrict adding gratuity to a partially approved amount. For Visa-specific flows, treat this as a special case and follow the current Visa/acquirer guidance rather than applying normal tip tolerance [4][5].&lt;/li>
&lt;/ul>
&lt;h3 id="if-the-customer-cancels">If the customer cancels
&lt;/h3>&lt;p>Do not abandon the authorization. Send an &lt;strong>authorization reversal&lt;/strong> for the amount actually authorized — not the originally requested amount.&lt;/p>
&lt;table>
&lt;thead>
&lt;tr>
&lt;th style="text-align: right">Requested&lt;/th>
&lt;th style="text-align: right">Approved&lt;/th>
&lt;th>Customer action&lt;/th>
&lt;th style="text-align: right">Correct reversal&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td style="text-align: right">€100.00&lt;/td>
&lt;td style="text-align: right">€63.42&lt;/td>
&lt;td>Cancels&lt;/td>
&lt;td style="text-align: right">€63.42&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;p>CyberSource / Visa Acceptance documentation states that for debit or prepaid partial approvals, the reversal amount must be the amount authorized, not the amount requested [9].&lt;/p>
&lt;p>Preserve matching data for reversals: original STAN (DE11), RRN (DE37), authorization code (DE38), terminal and merchant IDs, and approved amount. Missing or mismatched elements can prevent issuers from matching authorization, reversal, and clearing messages [4].&lt;/p>
&lt;h2 id="host-behavior">Host behavior
&lt;/h2>&lt;h3 id="preserve-three-amounts">Preserve three amounts
&lt;/h3>&lt;p>Do not collapse partial approval into a single “transaction amount” too early.&lt;/p>
&lt;table>
&lt;thead>
&lt;tr>
&lt;th>Field&lt;/th>
&lt;th>Meaning&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td>Requested amount&lt;/td>
&lt;td>Original authorization request (DE4 in request)&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>Approved amount&lt;/td>
&lt;td>Amount the issuer actually authorized&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>Remaining amount&lt;/td>
&lt;td>Balance still due from the customer&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;p>You need all three for UI, receipts, reporting, reconciliation, reversal, and clearing.&lt;/p>
&lt;h3 id="detection-logic-configuration-driven">Detection logic (configuration-driven)
&lt;/h3>&lt;p>Pseudo-flow:&lt;/p>
&lt;ol>
&lt;li>Determine whether the response is an approval (not decline).&lt;/li>
&lt;li>Resolve &lt;strong>approved amount&lt;/strong> from DE54, response DE4, or processor-specific fields per acquirer config.&lt;/li>
&lt;li>Mark &lt;strong>partial&lt;/strong> if response code explicitly indicates partial approval, or &lt;code>approvedAmount &amp;lt; requestedAmount&lt;/code>, or a private indicator says so.&lt;/li>
&lt;li>Full approval → card tender complete.&lt;/li>
&lt;li>Partial approval → mark tender partial, calculate remaining, prompt for another tender or cancel.&lt;/li>
&lt;li>On cancel → reverse approved amount only.&lt;/li>
&lt;/ol>
&lt;p>Treat DE39 = 10 or 0002 as partial when configured — but never ignore amount fields when they disagree with the code.&lt;/p>
&lt;h3 id="clearing">Clearing
&lt;/h3>&lt;p>As a general rule, presentment for that card tender should reflect the authorized amount or the final permitted amount under the applicable scheme, MCC, and processor rules:&lt;/p>
\[
\text{clearing amount} \leq \text{authorized amount}
\]&lt;p>For fuel, clearing may reflect actual dispensed volume below the partial approval cap [3]. Incremental authorization or adjustment flows apply only where the scheme and MCC allow them.&lt;/p>
&lt;h2 id="recommended-transaction-states">Recommended transaction states
&lt;/h2>&lt;p>A explicit state model prevents “approved partial” from being stored as “sale complete”:&lt;/p>
&lt;pre tabindex="0">&lt;code>INITIATED → AUTH_SENT → AUTH_APPROVED_FULL | AUTH_APPROVED_PARTIAL
AUTH_APPROVED_PARTIAL → REMAINING_TENDER_PENDING
REMAINING_TENDER_PENDING → SALE_COMPLETED | SALE_CANCELLED
SALE_CANCELLED → REVERSAL_SENT → REVERSAL_CONFIRMED
SALE_COMPLETED → CLEARING_READY → CLEARING_SENT
&lt;/code>&lt;/pre>&lt;p>&lt;strong>Confirmed:&lt;/strong> &lt;code>AUTH_APPROVED_PARTIAL ≠ SALE_COMPLETED&lt;/code>. The card tender may be approved while the commercial sale remains open.&lt;/p>
&lt;h2 id="sequence-sketches">Sequence sketches
&lt;/h2>&lt;p>&lt;strong>Split tender succeeds:&lt;/strong> Authorize €100 on card → partial approval €63.42 → display €36.58 remaining → customer pays remainder → sale complete → clear card tender for €63.42, record other tender separately.&lt;/p>
&lt;p>&lt;strong>Customer cancels:&lt;/strong> Partial approval €63.42 → customer refuses remainder → reversal for €63.42 → sale cancelled, goods not released.&lt;/p>
&lt;p>&lt;strong>Fuel:&lt;/strong> Preauth €100 → partial approval €35 → pump stops at €35 → clear actual dispensed amount (e.g. €34.78).&lt;/p>
&lt;h2 id="failure-modes-worth-testing">Failure modes worth testing
&lt;/h2>&lt;table>
&lt;thead>
&lt;tr>
&lt;th>Failure&lt;/th>
&lt;th>Consequence&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td>Terminal shows “APPROVED” on partial&lt;/td>
&lt;td>Goods released without full authorization&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>Host treats DE39 = 10 / 0002 as decline&lt;/td>
&lt;td>Valid partial sale lost&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>Host treats partial as full approval&lt;/td>
&lt;td>Merchant believes full amount secured&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>Reversal for requested amount, not approved&lt;/td>
&lt;td>Reversal mismatch; hold may remain&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>Clearing for requested amount&lt;/td>
&lt;td>Exceeds issuer liability&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td>Partial support flagged, terminal cannot split tender&lt;/td>
&lt;td>Integration mismatch; stranded authorizations&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;p>Test partial approval as its own lifecycle: split tender completion, cancel with reversal, timeout, POS crash recovery, clearing file amounts, fuel cap, and restaurant tip restrictions.&lt;/p>
&lt;h2 id="the-message-level-rule">The message-level rule
&lt;/h2>&lt;p>The response code tells you the &lt;strong>authorization outcome&lt;/strong>. The amount fields tell you the &lt;strong>commercial reality&lt;/strong>. You need both.&lt;/p>
&lt;p>Partial approval is simple at the counter — “your card covered part of this; please pay the rest another way.” At the ISO 8583 and host layer it touches UI, split tender, reversals, clearing, settlement, receipts, reconciliation, and dispute exposure.&lt;/p>
&lt;p>Treat partial approval as a &lt;strong>distinct transaction state&lt;/strong>, not a variation of ordinary approval. That one design choice prevents most of the expensive mistakes.&lt;/p>
&lt;h2 id="references">References
&lt;/h2>&lt;ol>
&lt;li>
&lt;p>ISO, &lt;em>ISO 8583-1:2003 — Financial transaction card originated messages — Interchange message specifications — Part 1: Messages, data elements and code values&lt;/em>.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>Accredited Standards Committee X9, &lt;em>ISO 8583:2023 — Annex D Code Listings&lt;/em>, 2024. (Response codes 0002, 0006 — approved for partial amount.)&lt;/p>
&lt;/li>
&lt;li>
&lt;p>Visa Inc., &lt;em>Visa Partial Authorization Service&lt;/em>, Visa Merchant Resource Library, 2017.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>Visa Inc., &lt;em>Authorization and Reversal Processing Requirements for Visa Merchants&lt;/em>, 2024.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>Visa Inc., &lt;em>Best Practices for Authorization and Reversal Processing for Lodging, Car Rental and Cruise Line Merchants&lt;/em>, 2016. (Tip and clearing constraints on partial approvals.)&lt;/p>
&lt;/li>
&lt;li>
&lt;p>Worldpay, &lt;em>Worldpay ISO 8583 Reference Guide&lt;/em>, Version 2.56, February 2025. (Response code 10; Field 60 partial authorization indicator; DE54 amount codes 56/57.)&lt;/p>
&lt;/li>
&lt;li>
&lt;p>Worldpay, &lt;em>Partial Authorisation&lt;/em>, Worldpay Developer Documentation.&lt;/p>
&lt;/li>
&lt;li>
&lt;p>FIS Global, &lt;em>ISO 8583 Host Capture Message Specification — LISO&lt;/em>, Version 1.2, 2022. (Debit partial authorization via DE4 comparison.)&lt;/p>
&lt;/li>
&lt;li>
&lt;p>Visa Acceptance Solutions / CyberSource, &lt;em>Authorization Reversal Processing — Basic Authorization Reversal&lt;/em>. (Reversal amount for partial approvals.)&lt;/p>
&lt;/li>
&lt;/ol>
&lt;h2 id="further-reading">Further reading
&lt;/h2>&lt;ul>
&lt;li>&lt;a class="link" href="https://corebaseit.com/posts/reversals-refunds-chargebacks-payment-lifecycle/" >Reversals, refunds, and chargebacks: decoding the payment lifecycle&lt;/a> — where reversals sit relative to settlement&lt;/li>
&lt;li>&lt;a class="link" href="https://corebaseit.com/posts/what-happens-in-2-3-seconds-of-card-payment/" >What actually happens in the 2–3 seconds of a card payment&lt;/a> — authorization path before partial approval appears&lt;/li>
&lt;li>&lt;a class="link" href="https://corebaseit.com/posts/pos-terminal-types/" >POS terminal types and what each one is built to do&lt;/a> — attended retail terminals where split tender and partial approval surface most often&lt;/li>
&lt;/ul></description></item></channel></rss>