<p>A class representing a sale item in the current transaction.</p>
<table>
<thead>
<tr>
<th>Param</th>
<th>Type</th>
<th>Default</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>id</td>
<td><code>string</code></td>
<td></td>
<td>Unique ID number for this item (UPC code, inventory number, etc). Used to deduplicate and merge line items on the receipt. Unique items (like shipping labels) should be a unique/random ID.</td>
</tr>
<tr>
<td>label</td>
<td><code>string</code></td>
<td></td>
<td>One-line item information.</td>
</tr>
<tr>
<td>text</td>
<td><code>string</code></td>
<td></td>
<td>Extra multi-line item information.</td>
</tr>
<tr>
<td>priceEach</td>
<td><code>number</code></td>
<td></td>
<td>Sale price per unit.</td>
</tr>
<tr>
<td>quantity</td>
<td><code>number</code></td>
<td></td>
<td>Number of units.</td>
</tr>
<tr>
<td>cost</td>
<td><code>number</code></td>
<td></td>
<td>Cost per unit. Used for automatic expense tracking.</td>
</tr>
<tr>
<td>taxrate</td>
<td><code>number</code></td>
<td><code>0.0</code></td>
<td>Examples: 0 (for 0%), 0.05 (for 5%), etc</td>
</tr>
<tr>
<td>taxableAmount</td>
<td><code>string</code></td>
<td></td>
<td>The part of the sale price that's taxable. "" for default (all), "markup" for only taxing profit.</td>
</tr>
</tbody>
</table>
<p><aname="pos.ReceiptPayment"></a></p>
<h3id="posreceiptpayment">pos.ReceiptPayment</h3>
<p><strong>Kind</strong>: static class of <ahref="#pos"><code>pos</code></a><br/>
<strong>Properties</strong></p>
<table>
<thead>
<tr>
<th>Name</th>
<th>Type</th>
<th>Description</th>
</tr>
</thead>
<tbody>
<tr>
<td>label</td>
<td><code>string</code></td>
<td>(readonly) The human-readable string of the payment type.</td>
</tr>
<tr>
<td>id</td>
<td><code>string</code></td>
<td>Automatically-generated unique ID for this payment.</td>
</tr>
<tr>
<td>toJSON()</td>
<td><code>function</code></td>
<td>Get the payment as an object suitable for JSON encoding.</td>
</tr>
<tr>
<td>fromJSON(json)</td>
<td><code>static_function</code></td>
<td>Returns a ReceiptPayment created from the object returned by <code>payment.toJSON()</code>.</td>
</span><spanid="__span-0-4"><aid="__codelineno-0-4"name="__codelineno-0-4"href="#__codelineno-0-4"></a><spanclass="w"></span><spanclass="c1">// This will run after PostalPoint launches</span>
</span><spanid="__span-0-5"><aid="__codelineno-0-5"name="__codelineno-0-5"href="#__codelineno-0-5"></a><spanclass="w"></span><spanclass="c1">// and before any payments are processed.</span>
</span><spanid="__span-0-6"><aid="__codelineno-0-6"name="__codelineno-0-6"href="#__codelineno-0-6"></a><spanclass="w"></span><spanclass="c1">// In some situations it might run multiple times in a session.</span>
</span><spanid="__span-0-9"><aid="__codelineno-0-9"name="__codelineno-0-9"href="#__codelineno-0-9"></a><spanclass="w"></span><spanclass="c1">// Charge a credit card using a card reader device.</span>
</span><spanid="__span-0-10"><aid="__codelineno-0-10"name="__codelineno-0-10"href="#__codelineno-0-10"></a><spanclass="w"></span><spanclass="c1">// amount is in pennies (or the equivalent base unit in the local currency).</span>
</span><spanid="__span-0-12"><aid="__codelineno-0-12"name="__codelineno-0-12"href="#__codelineno-0-12"></a><spanclass="w"></span><spanclass="c1">// Add a payment to the receipt with the total amount paid, card details, etc.</span>
</span><spanid="__span-0-16"><aid="__codelineno-0-16"name="__codelineno-0-16"href="#__codelineno-0-16"></a><spanclass="w"></span><spanclass="s2">"card"</span><spanclass="p">,</span><spanclass="w"></span><spanclass="c1">// Payment type. Accepted values are card, ach, crypto, cash,</span>
</span><spanid="__span-0-17"><aid="__codelineno-0-17"name="__codelineno-0-17"href="#__codelineno-0-17"></a><spanclass="w"></span><spanclass="c1">// check, account, and free. Other types will be displayed as-is.</span>
</span><spanid="__span-0-18"><aid="__codelineno-0-18"name="__codelineno-0-18"href="#__codelineno-0-18"></a><spanclass="w"></span><spanclass="s2">"Demo Card\nCardholder Name, etc\nMore info for receipt"</span><spanclass="w"></span><spanclass="c1">// Additional text for receipt</span>
</span><spanid="__span-0-23"><aid="__codelineno-0-23"name="__codelineno-0-23"href="#__codelineno-0-23"></a><spanclass="w"></span><spanclass="c1">// Must return boolean false if the payment failed.</span>
</span><spanid="__span-0-24"><aid="__codelineno-0-24"name="__codelineno-0-24"href="#__codelineno-0-24"></a><spanclass="w"></span><spanclass="c1">// Otherwise it will be assumed it succeeded.</span>
</span><spanid="__span-0-25"><aid="__codelineno-0-25"name="__codelineno-0-25"href="#__codelineno-0-25"></a><spanclass="w"></span><spanclass="c1">// If an error is encountered, handle it and return false.</span>
</span><spanid="__span-0-26"><aid="__codelineno-0-26"name="__codelineno-0-26"href="#__codelineno-0-26"></a><spanclass="w"></span><spanclass="c1">// It's recommended to display a short "payment failed" error</span>
</span><spanid="__span-0-27"><aid="__codelineno-0-27"name="__codelineno-0-27"href="#__codelineno-0-27"></a><spanclass="w"></span><spanclass="c1">// message via global.apis.alert, and outputting more details</span>
</span><spanid="__span-0-28"><aid="__codelineno-0-28"name="__codelineno-0-28"href="#__codelineno-0-28"></a><spanclass="w"></span><spanclass="c1">// via global.apis.pos.addOnscreenPaymentLog.</span>
</span><spanid="__span-0-30"><aid="__codelineno-0-30"name="__codelineno-0-30"href="#__codelineno-0-30"></a><spanclass="w"></span><spanclass="c1">// If capture is false, perform an authorization but don't capture,</span>
</span><spanid="__span-0-31"><aid="__codelineno-0-31"name="__codelineno-0-31"href="#__codelineno-0-31"></a><spanclass="w"></span><spanclass="c1">// and return a value you can use to identify the authorization later</span>
</span><spanid="__span-0-32"><aid="__codelineno-0-32"name="__codelineno-0-32"href="#__codelineno-0-32"></a><spanclass="w"></span><spanclass="c1">// and complete it. The value will be passed back to finishPayment, below.</span>
</span><spanid="__span-0-33"><aid="__codelineno-0-33"name="__codelineno-0-33"href="#__codelineno-0-33"></a><spanclass="w"></span><spanclass="c1">// This is used mainly for the self-serve kiosk mode, in case the label fails</span>
</span><spanid="__span-0-34"><aid="__codelineno-0-34"name="__codelineno-0-34"href="#__codelineno-0-34"></a><spanclass="w"></span><spanclass="c1">// to be purchased/generated by the carrier.</span>
</span><spanid="__span-0-37"><aid="__codelineno-0-37"name="__codelineno-0-37"href="#__codelineno-0-37"></a><spanclass="w"></span><spanclass="c1">// The user has requested the card transaction be canceled before it completes.</span>
</span><spanid="__span-0-38"><aid="__codelineno-0-38"name="__codelineno-0-38"href="#__codelineno-0-38"></a><spanclass="w"></span><spanclass="c1">// Reset the terminal to its resting state, clear its screen, etc.</span>
</span><spanid="__span-0-41"><aid="__codelineno-0-41"name="__codelineno-0-41"href="#__codelineno-0-41"></a><spanclass="w"></span><spanclass="c1">// Finish a payment that was authorized but not captured</span>
</span><spanid="__span-0-42"><aid="__codelineno-0-42"name="__codelineno-0-42"href="#__codelineno-0-42"></a><spanclass="w"></span><spanclass="c1">// because checkout() was called with capture = false.</span>
</span><spanid="__span-0-43"><aid="__codelineno-0-43"name="__codelineno-0-43"href="#__codelineno-0-43"></a><spanclass="w"></span><spanclass="c1">// If payment was already captured and added</span>
</span><spanid="__span-0-44"><aid="__codelineno-0-44"name="__codelineno-0-44"href="#__codelineno-0-44"></a><spanclass="w"></span><spanclass="c1">// to the receipt, just return true.</span>
</span><spanid="__span-0-49"><aid="__codelineno-0-49"name="__codelineno-0-49"href="#__codelineno-0-49"></a><spanclass="w"></span><spanclass="s2">"Demo Card\nCardholder Name, etc\nMore info for receipt"</span>
</span><spanid="__span-0-54"><aid="__codelineno-0-54"name="__codelineno-0-54"href="#__codelineno-0-54"></a><spanclass="w"></span><spanclass="c1">// Show transaction data on the card reader display.</span>
</span><spanid="__span-0-55"><aid="__codelineno-0-55"name="__codelineno-0-55"href="#__codelineno-0-55"></a><spanclass="w"></span><spanclass="c1">// This function is called when the "cart" or total changes.</span>
</span><spanid="__span-0-56"><aid="__codelineno-0-56"name="__codelineno-0-56"href="#__codelineno-0-56"></a><spanclass="w"></span><spanclass="c1">// `receipt` is a receipt object, see docs for details.</span>
</span><spanid="__span-0-59"><aid="__codelineno-0-59"name="__codelineno-0-59"href="#__codelineno-0-59"></a><spanclass="w"></span><spanclass="c1">// Same as checkout() except using a payment method already on file.</span>
</span><spanid="__span-0-60"><aid="__codelineno-0-60"name="__codelineno-0-60"href="#__codelineno-0-60"></a><spanclass="w"></span><spanclass="c1">// customerID and paymentMethodID are provided by getSavedPaymentMethods below.</span>
</span><spanid="__span-0-62"><aid="__codelineno-0-62"name="__codelineno-0-62"href="#__codelineno-0-62"></a><spanclass="w"></span><spanclass="c1">// Must return true upon success.</span>
</span><spanid="__span-0-63"><aid="__codelineno-0-63"name="__codelineno-0-63"href="#__codelineno-0-63"></a><spanclass="w"></span><spanclass="c1">// If the payment is not successful, and you didn't throw an Error to show the user,</span>
</span><spanid="__span-0-64"><aid="__codelineno-0-64"name="__codelineno-0-64"href="#__codelineno-0-64"></a><spanclass="w"></span><spanclass="c1">// then `return false` instead and it'll appear that the user's action to start the payment did nothing.</span>
</span><spanid="__span-0-69"><aid="__codelineno-0-69"name="__codelineno-0-69"href="#__codelineno-0-69"></a><spanclass="w"></span><spanclass="c1">// Use the card reader to capture an in-person card and save it for offline use.</span>
</span><spanid="__span-0-70"><aid="__codelineno-0-70"name="__codelineno-0-70"href="#__codelineno-0-70"></a><spanclass="w"></span><spanclass="c1">// Provided details are the customer's info, which might be empty strings except for the customerUUID.</span>
</span><spanid="__span-0-71"><aid="__codelineno-0-71"name="__codelineno-0-71"href="#__codelineno-0-71"></a><spanclass="w"></span><spanclass="c1">// Saved card details must be tied to the customerUUID, as that's how saved cards are looked up.</span>
</span><spanid="__span-0-73"><aid="__codelineno-0-73"name="__codelineno-0-73"href="#__codelineno-0-73"></a><spanclass="w"></span><spanclass="c1">// statusCallback(string, boolean) updates the progress message on the cashier's screen.</span>
</span><spanid="__span-0-74"><aid="__codelineno-0-74"name="__codelineno-0-74"href="#__codelineno-0-74"></a><spanclass="w"></span><spanclass="c1">// If the boolean is true, the progress message is replaced with a confirmation message.</span>
</span><spanid="__span-0-77"><aid="__codelineno-0-77"name="__codelineno-0-77"href="#__codelineno-0-77"></a><spanclass="w"></span><spanclass="k">return</span><spanclass="w"></span><spanclass="kc">true</span><spanclass="p">;</span><spanclass="w"></span><spanclass="c1">// Card saved to customer</span>
</span><spanid="__span-0-78"><aid="__codelineno-0-78"name="__codelineno-0-78"href="#__codelineno-0-78"></a><spanclass="w"></span><spanclass="c1">// If an error occurred, you can throw it and the error</span>
</span><spanid="__span-0-79"><aid="__codelineno-0-79"name="__codelineno-0-79"href="#__codelineno-0-79"></a><spanclass="w"></span><spanclass="c1">// message will be displayed to the cashier.</span>
</span><spanid="__span-0-80"><aid="__codelineno-0-80"name="__codelineno-0-80"href="#__codelineno-0-80"></a><spanclass="w"></span><spanclass="c1">// Alternatively, return boolean false and display the error</span>
</span><spanid="__span-0-81"><aid="__codelineno-0-81"name="__codelineno-0-81"href="#__codelineno-0-81"></a><spanclass="w"></span><spanclass="c1">// yourself with global.apis.alert(message, title) or something.</span>
</span><spanid="__span-0-84"><aid="__codelineno-0-84"name="__codelineno-0-84"href="#__codelineno-0-84"></a><spanclass="w"></span><spanclass="c1">// Cancel the process running in saveCardForOfflineUse() at the user/cashier's request.</span>
</span><spanid="__span-0-87"><aid="__codelineno-0-87"name="__codelineno-0-87"href="#__codelineno-0-87"></a><spanclass="w"></span><spanclass="c1">// Return all saved payment methods tied to the provided customer UUID.</span>
</span><spanid="__span-0-89"><aid="__codelineno-0-89"name="__codelineno-0-89"href="#__codelineno-0-89"></a><spanclass="w"></span><spanclass="nx">customer</span><spanclass="o">:</span><spanclass="w"></span><spanclass="s2">"<internal string referencing the customer>"</span><spanclass="p">,</span><spanclass="w"></span><spanclass="c1">// Passed to checkoutSavedMethod as customerID</span>
</span><spanid="__span-0-91"><aid="__codelineno-0-91"name="__codelineno-0-91"href="#__codelineno-0-91"></a><spanclass="w"></span><spanclass="nx">id</span><spanclass="o">:</span><spanclass="w"></span><spanclass="s2">"<card/payment method identifier>"</span><spanclass="p">,</span><spanclass="w"></span><spanclass="c1">// Passed to checkoutSavedMethod as paymentMethodID</span>
</span><spanid="__span-0-92"><aid="__codelineno-0-92"name="__codelineno-0-92"href="#__codelineno-0-92"></a><spanclass="w"></span><spanclass="nx">type</span><spanclass="o">:</span><spanclass="w"></span><spanclass="s2">"card"</span><spanclass="p">,</span><spanclass="w"></span><spanclass="c1">// Payment type. Accepted values are card, ach, crypto, cash, check, account, and free.</span>
</span><spanid="__span-0-93"><aid="__codelineno-0-93"name="__codelineno-0-93"href="#__codelineno-0-93"></a><spanclass="w"></span><spanclass="nx">label</span><spanclass="o">:</span><spanclass="w"></span><spanclass="s2">"Visa debit x1234 (exp. 12/29)"</span><spanclass="p">,</span><spanclass="w"></span><spanclass="c1">// Label for payment method</span>
</span><spanid="__span-0-94"><aid="__codelineno-0-94"name="__codelineno-0-94"href="#__codelineno-0-94"></a><spanclass="w"></span><spanclass="nx">label_short</span><spanclass="o">:</span><spanclass="w"></span><spanclass="s2">"Visa debit x1234"</span><spanclass="w"></span><spanclass="c1">// Abbreviated label for payment method</span>
</span><spanid="__span-0-98"><aid="__codelineno-0-98"name="__codelineno-0-98"href="#__codelineno-0-98"></a><spanclass="w"></span><spanclass="c1">// Delete the payment method identified by paymentMethodID</span>
</span><spanid="__span-0-99"><aid="__codelineno-0-99"name="__codelineno-0-99"href="#__codelineno-0-99"></a><spanclass="w"></span><spanclass="c1">// and tied to the PostalPoint customerUUID and the card processor customerID.</span>
</span><spanid="__span-0-100"><aid="__codelineno-0-100"name="__codelineno-0-100"href="#__codelineno-0-100"></a><spanclass="w"></span><spanclass="c1">// If unable to delete, throw an error and the error message</span>
</span><spanid="__span-0-101"><aid="__codelineno-0-101"name="__codelineno-0-101"href="#__codelineno-0-101"></a><spanclass="w"></span><spanclass="c1">// will be displayed to the cashier.</span>
</span><spanid="__span-1-4"><aid="__codelineno-1-4"name="__codelineno-1-4"href="#__codelineno-1-4"></a><spanclass="w"></span><spanclass="c1">// This is run after PostalPoint starts,</span>
</span><spanid="__span-1-5"><aid="__codelineno-1-5"name="__codelineno-1-5"href="#__codelineno-1-5"></a><spanclass="w"></span><spanclass="c1">// and before any other crypto functions are called.</span>
</span><spanid="__span-1-8"><aid="__codelineno-1-8"name="__codelineno-1-8"href="#__codelineno-1-8"></a><spanclass="w"></span><spanclass="c1">// Run the checkout process.</span>
</span><spanid="__span-1-9"><aid="__codelineno-1-9"name="__codelineno-1-9"href="#__codelineno-1-9"></a><spanclass="w"></span><spanclass="c1">// amount is the amount of fiat currency to collect,</span>
</span><spanid="__span-1-10"><aid="__codelineno-1-10"name="__codelineno-1-10"href="#__codelineno-1-10"></a><spanclass="w"></span><spanclass="c1">// in pennies (or the local equivalent).</span>
</span><spanid="__span-1-12"><aid="__codelineno-1-12"name="__codelineno-1-12"href="#__codelineno-1-12"></a><spanclass="w"></span><spanclass="c1">// If an error is encountered during processing,</span>
</span><spanid="__span-1-13"><aid="__codelineno-1-13"name="__codelineno-1-13"href="#__codelineno-1-13"></a><spanclass="w"></span><spanclass="c1">// display an error message in a dialog and return boolean false.</span>
</span><spanid="__span-1-14"><aid="__codelineno-1-14"name="__codelineno-1-14"href="#__codelineno-1-14"></a><spanclass="w"></span><spanclass="c1">// If this function returns anything except false or undefined,</span>
</span><spanid="__span-1-15"><aid="__codelineno-1-15"name="__codelineno-1-15"href="#__codelineno-1-15"></a><spanclass="w"></span><spanclass="c1">// and doesn't throw an error,</span>
</span><spanid="__span-1-16"><aid="__codelineno-1-16"name="__codelineno-1-16"href="#__codelineno-1-16"></a><spanclass="w"></span><spanclass="c1">// it is assumed the payment was successful.</span>
</span><spanid="__span-1-18"><aid="__codelineno-1-18"name="__codelineno-1-18"href="#__codelineno-1-18"></a><spanclass="w"></span><spanclass="c1">// Adds a line of text visible to the cashier</span>
</span><spanid="__span-1-21"><aid="__codelineno-1-21"name="__codelineno-1-21"href="#__codelineno-1-21"></a><spanclass="w"></span><spanclass="c1">// Display a web page (i.e. with a payment QR code)</span>
</span><spanid="__span-1-22"><aid="__codelineno-1-22"name="__codelineno-1-22"href="#__codelineno-1-22"></a><spanclass="w"></span><spanclass="c1">// to the customer on the customer-facing display.</span>
</span><spanid="__span-1-26"><aid="__codelineno-1-26"name="__codelineno-1-26"href="#__codelineno-1-26"></a><spanclass="w"></span><spanclass="c1">// Poll the status of the crypto transaction</span>
</span><spanid="__span-1-37"><aid="__codelineno-1-37"name="__codelineno-1-37"href="#__codelineno-1-37"></a><spanclass="w"></span><spanclass="s2">"Bitcoin\n0.00001234 BTC"</span><spanclass="w"></span><spanclass="c1">// Additional text for receipt</span>
</span><spanid="__span-1-44"><aid="__codelineno-1-44"name="__codelineno-1-44"href="#__codelineno-1-44"></a><spanclass="w"></span><spanclass="c1">// The user requested to cancel the payment.</span>
</span><spanid="__span-1-45"><aid="__codelineno-1-45"name="__codelineno-1-45"href="#__codelineno-1-45"></a><spanclass="w"></span><spanclass="c1">// Reset things accordingly.</span>
</span><spanid="__span-1-49"><aid="__codelineno-1-49"name="__codelineno-1-49"href="#__codelineno-1-49"></a><spanclass="w"></span><spanclass="c1">// Is this plugin properly setup</span>
</span><spanid="__span-1-50"><aid="__codelineno-1-50"name="__codelineno-1-50"href="#__codelineno-1-50"></a><spanclass="w"></span><spanclass="c1">// and able to process payments?</span>
</span><spanid="__span-1-51"><aid="__codelineno-1-51"name="__codelineno-1-51"href="#__codelineno-1-51"></a><spanclass="w"></span><spanclass="c1">// If not, return false.</span>
</span><spanid="__span-1-52"><aid="__codelineno-1-52"name="__codelineno-1-52"href="#__codelineno-1-52"></a><spanclass="w"></span><spanclass="c1">// This determines if the crypto payment method button will be shown.</span>
<scriptid="__config"type="application/json">{"annotate":null,"base":"../..","features":["content.code.copy"],"search":"../../assets/javascripts/workers/search.2c215733.min.js","tags":null,"translations":{"clipboard.copied":"Copied to clipboard","clipboard.copy":"Copy to clipboard","search.result.more.one":"1 more on this page","search.result.more.other":"# more on this page","search.result.none":"No matching documents","search.result.one":"1 matching document","search.result.other":"# matching documents","search.result.placeholder":"Type to start searching","search.result.term.missing":"Missing","select.version":"Select version"},"version":{"provider":"mike"}}</script>