[{"data":1,"prerenderedAt":1853},["ShallowReactive",2],{"navigation":3,"external-navigation":214,"external_core:\u002Fcore\u002Fprocessors\u002Familon":443},[4,8,201],{"title":5,"path":6,"stem":7},"Documentation","\u002F","README",{"title":9,"path":10,"stem":11,"children":12},"EOS","\u002Feos","eos\u002FREADME",[13,44,121,181],{"title":14,"collapsed":15,"path":16,"stem":17,"children":18,"page":43},"Adrs",true,"\u002Feos\u002Fadrs","eos\u002Fadrs",[19,23,27,31,35,39],{"title":20,"path":21,"stem":22},"Use Turborepo for the EOS monorepo","\u002Feos\u002Fadrs\u002F0001-use-turborepo-for-eos","eos\u002Fadrs\u002F0001-use-turborepo-for-eos",{"title":24,"path":25,"stem":26},"Use Oxc for linting and formatting","\u002Feos\u002Fadrs\u002F0003-use-oxc-for-linting-and-formatting","eos\u002Fadrs\u002F0003-use-oxc-for-linting-and-formatting",{"title":28,"path":29,"stem":30},"Lint Markdown and validate links in CI","\u002Feos\u002Fadrs\u002F0004-lint-markdown-in-ci","eos\u002Fadrs\u002F0004-lint-markdown-in-ci",{"title":32,"path":33,"stem":34},"Use Lefthook for repository-managed Git hooks","\u002Feos\u002Fadrs\u002F0005-use-lefthook-for-repository-git-hooks","eos\u002Fadrs\u002F0005-use-lefthook-for-repository-git-hooks",{"title":36,"path":37,"stem":38},"Use Commitlint's conventional configuration","\u002Feos\u002Fadrs\u002F0006-use-commitlint-conventional-configuration","eos\u002Fadrs\u002F0006-use-commitlint-conventional-configuration",{"title":40,"path":41,"stem":42},"Use Nx for EOS task execution","\u002Feos\u002Fadrs\u002F0007-use-nx-for-eos","eos\u002Fadrs\u002F0007-use-nx-for-eos",false,{"title":45,"path":46,"stem":47,"children":48},"Harbourmaster","\u002Feos\u002Fharbourmaster","eos\u002Fharbourmaster\u002FREADME",[49,58,71,96],{"title":50,"path":51,"stem":52,"children":53,"page":43},"Decisions","\u002Feos\u002Fharbourmaster\u002Fdecisions","eos\u002Fharbourmaster\u002Fdecisions",[54],{"title":55,"path":56,"stem":57},"AI-50: GitHub auth and fork pull request policy","\u002Feos\u002Fharbourmaster\u002Fdecisions\u002Fai-50-auth-and-fork-policy","eos\u002Fharbourmaster\u002Fdecisions\u002Fai-50-auth-and-fork-policy",{"title":59,"path":60,"stem":61,"children":62,"page":43},"Explanation","\u002Feos\u002Fharbourmaster\u002Fexplanation","eos\u002Fharbourmaster\u002Fexplanation",[63,67],{"title":64,"path":65,"stem":66},"The Harbourmaster review pipeline","\u002Feos\u002Fharbourmaster\u002Fexplanation\u002Freview-pipeline","eos\u002Fharbourmaster\u002Fexplanation\u002Freview-pipeline",{"title":68,"path":69,"stem":70},"The Harbourmaster shared-action trust boundary","\u002Feos\u002Fharbourmaster\u002Fexplanation\u002Fshared-action-trust-boundary","eos\u002Fharbourmaster\u002Fexplanation\u002Fshared-action-trust-boundary",{"title":72,"path":73,"stem":74,"children":75,"page":43},"How To","\u002Feos\u002Fharbourmaster\u002Fhow-to","eos\u002Fharbourmaster\u002Fhow-to",[76,80,84,88,92],{"title":77,"path":78,"stem":79},"How to add Harbourmaster reviews to a repository","\u002Feos\u002Fharbourmaster\u002Fhow-to\u002Fadd-harbourmaster-to-a-repository","eos\u002Fharbourmaster\u002Fhow-to\u002Fadd-harbourmaster-to-a-repository",{"title":81,"path":82,"stem":83},"How to build a pilot dashboard","\u002Feos\u002Fharbourmaster\u002Fhow-to\u002Fbuild-pilot-dashboard","eos\u002Fharbourmaster\u002Fhow-to\u002Fbuild-pilot-dashboard",{"title":85,"path":86,"stem":87},"How to configure model routing","\u002Feos\u002Fharbourmaster\u002Fhow-to\u002Fconfigure-model-routing","eos\u002Fharbourmaster\u002Fhow-to\u002Fconfigure-model-routing",{"title":89,"path":90,"stem":91},"How to request a Harbourmaster review","\u002Feos\u002Fharbourmaster\u002Fhow-to\u002Frequest-a-review","eos\u002Fharbourmaster\u002Fhow-to\u002Frequest-a-review",{"title":93,"path":94,"stem":95},"How to diagnose a Harbourmaster review failure","\u002Feos\u002Fharbourmaster\u002Fhow-to\u002Ftroubleshoot-a-review","eos\u002Fharbourmaster\u002Fhow-to\u002Ftroubleshoot-a-review",{"title":97,"path":98,"stem":99,"children":100,"page":43},"Reference","\u002Feos\u002Fharbourmaster\u002Freference","eos\u002Fharbourmaster\u002Freference",[101,105,109,113,117],{"title":102,"path":103,"stem":104},"Harbourmaster command-line interface","\u002Feos\u002Fharbourmaster\u002Freference\u002Fcli","eos\u002Fharbourmaster\u002Freference\u002Fcli",{"title":106,"path":107,"stem":108},"Harbourmaster configuration","\u002Feos\u002Fharbourmaster\u002Freference\u002Fconfiguration","eos\u002Fharbourmaster\u002Freference\u002Fconfiguration",{"title":110,"path":111,"stem":112},"Harbourmaster GitHub Action","\u002Feos\u002Fharbourmaster\u002Freference\u002Fgithub-action","eos\u002Fharbourmaster\u002Freference\u002Fgithub-action",{"title":114,"path":115,"stem":116},"Harbourmaster review behavior","\u002Feos\u002Fharbourmaster\u002Freference\u002Freview-behavior","eos\u002Fharbourmaster\u002Freference\u002Freview-behavior",{"title":118,"path":119,"stem":120},"Harbourmaster telemetry","\u002Feos\u002Fharbourmaster\u002Freference\u002Ftelemetry","eos\u002Fharbourmaster\u002Freference\u002Ftelemetry",{"title":72,"path":122,"stem":123,"children":124,"page":43},"\u002Feos\u002Fhow-to","eos\u002Fhow-to",[125,129,133,137,141,145,149,153,157,161,165,169,173,177],{"title":126,"path":127,"stem":128},"How to add an external documentation source","\u002Feos\u002Fhow-to\u002Fadd-external-documentation-source","eos\u002Fhow-to\u002Fadd-external-documentation-source",{"title":130,"path":131,"stem":132},"How to connect SDLC integrations","\u002Feos\u002Fhow-to\u002Fconnect-sdlc-integrations","eos\u002Fhow-to\u002Fconnect-sdlc-integrations",{"title":134,"path":135,"stem":136},"How to consume the EOS plugin marketplace","\u002Feos\u002Fhow-to\u002Fconsume-eos-marketplace","eos\u002Fhow-to\u002Fconsume-eos-marketplace",{"title":138,"path":139,"stem":140},"How to create a spike ticket","\u002Feos\u002Fhow-to\u002Fcreate-spike-ticket","eos\u002Fhow-to\u002Fcreate-spike-ticket",{"title":142,"path":143,"stem":144},"How to finalise a repository change","\u002Feos\u002Fhow-to\u002Ffinalise-change","eos\u002Fhow-to\u002Ffinalise-change",{"title":146,"path":147,"stem":148},"How to install the EOS Docs MCP server","\u002Feos\u002Fhow-to\u002Finstall-eos-docs-mcp","eos\u002Fhow-to\u002Finstall-eos-docs-mcp",{"title":150,"path":151,"stem":152},"How to resolve a spike ticket","\u002Feos\u002Fhow-to\u002Fresolve-spike-ticket","eos\u002Fhow-to\u002Fresolve-spike-ticket",{"title":154,"path":155,"stem":156},"How to run Git hook checks","\u002Feos\u002Fhow-to\u002Frun-git-hook-checks","eos\u002Fhow-to\u002Frun-git-hook-checks",{"title":158,"path":159,"stem":160},"How to use the AI-enabled SDLC","\u002Feos\u002Fhow-to\u002Fuse-ai-enabled-sdlc","eos\u002Fhow-to\u002Fuse-ai-enabled-sdlc",{"title":162,"path":163,"stem":164},"Use the Aikido plugin","\u002Feos\u002Fhow-to\u002Fuse-aikido-plugin","eos\u002Fhow-to\u002Fuse-aikido-plugin",{"title":166,"path":167,"stem":168},"How to use Compass","\u002Feos\u002Fhow-to\u002Fuse-compass","eos\u002Fhow-to\u002Fuse-compass",{"title":170,"path":171,"stem":172},"How to use Fallow","\u002Feos\u002Fhow-to\u002Fuse-fallow","eos\u002Fhow-to\u002Fuse-fallow",{"title":174,"path":175,"stem":176},"How to use incremental mutation tests","\u002Feos\u002Fhow-to\u002Fuse-incremental-mutation-tests","eos\u002Fhow-to\u002Fuse-incremental-mutation-tests",{"title":178,"path":179,"stem":180},"How to use Scout","\u002Feos\u002Fhow-to\u002Fuse-scout","eos\u002Fhow-to\u002Fuse-scout",{"title":97,"path":182,"stem":183,"children":184,"page":43},"\u002Feos\u002Freference","eos\u002Freference",[185,189,193,197],{"title":186,"path":187,"stem":188},"Compass CLI","\u002Feos\u002Freference\u002Fcompass-cli","eos\u002Freference\u002Fcompass-cli",{"title":190,"path":191,"stem":192},"EOS marketplace skills","\u002Feos\u002Freference\u002Fmarketplace-skills","eos\u002Freference\u002Fmarketplace-skills",{"title":194,"path":195,"stem":196},"Nx task execution and cache","\u002Feos\u002Freference\u002Fnx-task-execution","eos\u002Freference\u002Fnx-task-execution",{"title":198,"path":199,"stem":200},"Scout CLI","\u002Feos\u002Freference\u002Fscout-cli","eos\u002Freference\u002Fscout-cli",{"title":202,"path":203,"stem":204,"children":205},"Product engineering","\u002Fproduct-engineering","product-engineering\u002FREADME",[206],{"title":14,"collapsed":15,"path":207,"stem":208,"children":209,"page":43},"\u002Fproduct-engineering\u002Fadrs","product-engineering\u002Fadrs",[210],{"title":211,"path":212,"stem":213},"Codify Engineering Standards as Skills","\u002Fproduct-engineering\u002Fadrs\u002F0002-codify-engineering-standards-as-skills","product-engineering\u002Fadrs\u002F0002-codify-engineering-standards-as-skills",[215,268],{"nav":216,"source":265},[217],{"title":218,"path":219,"stem":220,"children":221},"Ember","\u002Fember","ember",[222,225,257,261],{"title":223,"path":219,"stem":224},"StoreFront Documentation","ember\u002Findex",{"title":14,"path":226,"stem":227,"children":228,"page":43},"\u002Fember\u002Fadrs","ember\u002Fadrs",[229,233,237,241,245,249,253],{"title":230,"path":231,"stem":232},"Add Infection as a non-blocking mutation testing tool for Ember","\u002Fember\u002Fadrs\u002F0001-infection-mutation-testing","ember\u002Fadrs\u002F0001-infection-mutation-testing",{"title":234,"path":235,"stem":236},"Process DELETE scheduled changes before CREATE_UPDATE at the same instant","\u002Fember\u002Fadrs\u002F0002-scheduled-change-processing-order","ember\u002Fadrs\u002F0002-scheduled-change-processing-order",{"title":238,"path":239,"stem":240},"Standard rate scheduling is permanent until overridden","\u002Fember\u002Fadrs\u002F0003-standard-rate-scheduling-is-permanent","ember\u002Fadrs\u002F0003-standard-rate-scheduling-is-permanent",{"title":242,"path":243,"stem":244},"Promotions require an existing standard rate","\u002Fember\u002Fadrs\u002F0004-promotions-require-existing-standard-rate","ember\u002Fadrs\u002F0004-promotions-require-existing-standard-rate",{"title":246,"path":247,"stem":248},"UTC datetime contract between Storefront and Hub","\u002Fember\u002Fadrs\u002F0005-utc-datetime-contract-between-storefront-and-hub","ember\u002Fadrs\u002F0005-utc-datetime-contract-between-storefront-and-hub",{"title":250,"path":251,"stem":252},"Elapsed unprocessed scheduled changes do not block rate changes","\u002Fember\u002Fadrs\u002F0006-stale-scheduler-rows-do-not-block-rate-changes","ember\u002Fadrs\u002F0006-stale-scheduler-rows-do-not-block-rate-changes",{"title":254,"path":255,"stem":256},"ADR-0007: Delete ConfigureTenantAuth routing command once OIDC setup migrates to Hub","\u002Fember\u002Fadrs\u002F0007-delete-configure-tenant-auth-routing-command","ember\u002Fadrs\u002F0007-delete-configure-tenant-auth-routing-command",{"title":258,"path":259,"stem":260},"Domain Overview","\u002Fember\u002Fdomain_overview","ember\u002Fdomain_overview",{"title":262,"path":263,"stem":264},"Main Flows","\u002Fember\u002Fkey_flows","ember\u002Fkey_flows",{"collectionName":266,"label":267,"prefix":220},"external_ember","StoreFront (Ember)",{"nav":269,"source":441},[270],{"title":271,"path":272,"stem":273,"children":274},"Core","\u002Fcore","core",[275,278,306,310,332,336,346,363,420,424],{"title":276,"path":272,"stem":277},"Documentation Index","core\u002Findex",{"title":14,"path":279,"stem":280,"children":281,"page":43},"\u002Fcore\u002Fadrs","core\u002Fadrs",[282,286,290,294,298,302],{"title":283,"path":284,"stem":285},"ADR-XXXX: Short, descriptive title","\u002Fcore\u002Fadrs\u002F0000-template","core\u002Fadrs\u002F0000-template",{"title":287,"path":288,"stem":289},"ADR-1: Promotions endpoint","\u002Fcore\u002Fadrs\u002F0001-add-promotions-endpoint","core\u002Fadrs\u002F0001-add-promotions-endpoint",{"title":291,"path":292,"stem":293},"ADR-2: EOM partner report job dispatch","\u002Fcore\u002Fadrs\u002F0002-eom-report-job-dispatch","core\u002Fadrs\u002F0002-eom-report-job-dispatch",{"title":295,"path":296,"stem":297},"ADR-3: Replace PB fee waive flag with a Zero scheme override","\u002Fcore\u002Fadrs\u002F0003-replace-pb-fee-waive-with-zero-scheme","core\u002Fadrs\u002F0003-replace-pb-fee-waive-with-zero-scheme",{"title":299,"path":300,"stem":301},"ADR-4: No processor Digital Top-up capability gate in Reloadable Commercials","\u002Fcore\u002Fadrs\u002F0004-no-processor-top-up-capability-gate","core\u002Fadrs\u002F0004-no-processor-top-up-capability-gate",{"title":303,"path":304,"stem":305},"ADR-5: Sparse polymorphic sale fee override reason stamp","\u002Fcore\u002Fadrs\u002F0005-sale-fee-override-reason-stamp","core\u002Fadrs\u002F0005-sale-fee-override-reason-stamp",{"title":307,"path":308,"stem":309},"Agent Workflow","\u002Fcore\u002Fai-workflow","core\u002Fai-workflow",{"title":311,"path":312,"stem":313,"children":314},"Backend Guide","\u002Fcore\u002Fbackend","core\u002Fbackend\u002Findex",[315,316,320,324,328],{"title":311,"path":312,"stem":313},{"title":317,"path":318,"stem":319},"Backend AI Tooling","\u002Fcore\u002Fbackend\u002Fai-tooling","core\u002Fbackend\u002Fai-tooling",{"title":321,"path":322,"stem":323},"Backend Linting and Formatting","\u002Fcore\u002Fbackend\u002Flinting-and-formatting","core\u002Fbackend\u002Flinting-and-formatting",{"title":325,"path":326,"stem":327},"Backend Setup","\u002Fcore\u002Fbackend\u002Fsetup","core\u002Fbackend\u002Fsetup",{"title":329,"path":330,"stem":331},"Backend Testing","\u002Fcore\u002Fbackend\u002Ftesting","core\u002Fbackend\u002Ftesting",{"title":333,"path":334,"stem":335},"Documentation Health","\u002Fcore\u002Fdoc-health","core\u002Fdoc-health",{"title":337,"path":338,"stem":339,"children":340},"Frontend Guide","\u002Fcore\u002Ffrontend","core\u002Ffrontend\u002Findex",[341,342],{"title":337,"path":338,"stem":339},{"title":343,"path":344,"stem":345},"Frontend Development","\u002Fcore\u002Ffrontend\u002Fdevelopment","core\u002Ffrontend\u002Fdevelopment",{"title":347,"path":348,"stem":349,"children":350,"page":43},"Modules","\u002Fcore\u002Fmodules","core\u002Fmodules",[351,355],{"title":352,"path":353,"stem":354},"Connect API","\u002Fcore\u002Fmodules\u002Fconnect-api","core\u002Fmodules\u002Fconnect-api",{"title":356,"path":357,"stem":358,"children":359,"page":43},"Secure Links","\u002Fcore\u002Fmodules\u002Fsecure-links","core\u002Fmodules\u002Fsecure-links",[360],{"title":356,"path":361,"stem":362},"\u002Fcore\u002Fmodules\u002Fsecure-links\u002Fsecure-links","core\u002Fmodules\u002Fsecure-links\u002Fsecure-links",{"title":364,"path":365,"stem":366,"children":367,"page":43},"Processors","\u002Fcore\u002Fprocessors","core\u002Fprocessors",[368,372,376,380,384,388,392,396,400,404,408,412,416],{"title":369,"path":370,"stem":371},"Amazon Processor and API","\u002Fcore\u002Fprocessors\u002Famazon","core\u002Fprocessors\u002Famazon",{"title":373,"path":374,"stem":375},"Amilon Processor and API","\u002Fcore\u002Fprocessors\u002Familon","core\u002Fprocessors\u002Familon",{"title":377,"path":378,"stem":379},"Cadooz Processor and API","\u002Fcore\u002Fprocessors\u002Fcadooz","core\u002Fprocessors\u002Fcadooz",{"title":381,"path":382,"stem":383},"Choice Digital Processor and API","\u002Fcore\u002Fprocessors\u002Fchoice-digital","core\u002Fprocessors\u002Fchoice-digital",{"title":385,"path":386,"stem":387},"Diggecard processor reference","\u002Fcore\u002Fprocessors\u002Fdiggecard","core\u002Fprocessors\u002Fdiggecard",{"title":389,"path":390,"stem":391},"ePay Processor and API","\u002Fcore\u002Fprocessors\u002Fepay","core\u002Fprocessors\u002Fepay",{"title":393,"path":394,"stem":395},"GoGift v2 Processor and API","\u002Fcore\u002Fprocessors\u002Fgo-gift-v2","core\u002Fprocessors\u002Fgo-gift-v2",{"title":397,"path":398,"stem":399},"InComm Processor and API","\u002Fcore\u002Fprocessors\u002Fincomm","core\u002Fprocessors\u002Fincomm",{"title":401,"path":402,"stem":403},"Ogloba Processor and API","\u002Fcore\u002Fprocessors\u002Fogloba","core\u002Fprocessors\u002Fogloba",{"title":405,"path":406,"stem":407},"SVSECard Processor and API","\u002Fcore\u002Fprocessors\u002Fsvs-ecard","core\u002Fprocessors\u002Fsvs-ecard",{"title":409,"path":410,"stem":411},"Vananam Processor and API","\u002Fcore\u002Fprocessors\u002Fvananam","core\u002Fprocessors\u002Fvananam",{"title":413,"path":414,"stem":415},"Vouchers Depot processor reference","\u002Fcore\u002Fprocessors\u002Fvouchers-depot","core\u002Fprocessors\u002Fvouchers-depot",{"title":417,"path":418,"stem":419},"You Got a Gift Processor and API","\u002Fcore\u002Fprocessors\u002Fyou-got-a-gift","core\u002Fprocessors\u002Fyou-got-a-gift",{"title":421,"path":422,"stem":423},"Development Quickstart","\u002Fcore\u002Fsetup","core\u002Fsetup",{"title":425,"path":426,"stem":427,"children":428,"page":43},"Workflows","\u002Fcore\u002Fworkflows","core\u002Fworkflows",[429,433,437],{"title":430,"path":431,"stem":432},"Hub Endpoint Workflow","\u002Fcore\u002Fworkflows\u002Fhub-endpoints","core\u002Fworkflows\u002Fhub-endpoints",{"title":434,"path":435,"stem":436},"OpenAPI Tooling","\u002Fcore\u002Fworkflows\u002Fopenapi-tooling","core\u002Fworkflows\u002Fopenapi-tooling",{"title":438,"path":439,"stem":440},"Processor Integration Workflow","\u002Fcore\u002Fworkflows\u002Fprocessors","core\u002Fworkflows\u002Fprocessors",{"collectionName":442,"label":271,"prefix":273},"external_core",{"page":444,"surround":1850},{"id":445,"title":373,"body":446,"config":1845,"description":452,"extension":1846,"meta":1847,"navigation":15,"path":374,"seo":1848,"stem":375,"__hash__":1849},"external_core\u002Fcore\u002Fprocessors\u002Familon.md",{"type":447,"value":448,"toc":1832},"minimark",[449,453,458,469,587,591,663,674,687,691,694,785,788,878,899,903,913,987,1020,1031,1035,1144,1157,1161,1164,1282,1285,1289,1295,1465,1482,1491,1495,1643,1646,1650,1712,1716,1726,1735,1739,1828],[450,451,452],"p",{},"This reference describes the active asynchronous Amilon issuer and the deprecated synchronous implementation that can appear in historical data. It covers contract and denomination resolution, request and response mapping, queue states, duplicate risks, audit evidence, operational commands, and support boundaries.",[454,455,457],"h2",{"id":456},"processor-modes-and-scope","Processor modes and scope",[450,459,460,464,465,468],{},[461,462,463],"code",{},"AmilonAsyncProcessor"," is the active queued issuer. The async issuer migration marks it as asynchronous and moves existing Amilon brands from the legacy issuer. ",[461,466,467],{},"AmilonProcessor"," is marked deprecated and is no longer expected to be returned to.",[470,471,472,488],"table",{},[473,474,475],"thead",{},[476,477,478,482,485],"tr",{},[479,480,481],"th",{},"Capability",[479,483,484],{},"Async issuer",[479,486,487],{},"Legacy sync issuer",[489,490,491,505,522,537,551,562,573],"tbody",{},[476,492,493,497,502],{},[494,495,496],"td",{},"Create call",[494,498,499],{},[461,500,501],{},"POST \u002Forders\u002Fcreate\u002F{contractCode}",[494,503,504],{},"Same provider create operation through the legacy API wrapper",[476,506,507,510,515],{},[494,508,509],{},"Voucher retrieval",[494,511,512],{},[461,513,514],{},"GET orders\u002F{processorReference}\u002Fcomplete\u002F",[494,516,517,518,521],{},"No separate complete retrieval; reads ",[461,519,520],{},"Vouchers[0]"," from create response",[476,523,524,527,533],{},[494,525,526],{},"Processor reference",[494,528,529,530],{},"Response ",[461,531,532],{},"ExternalOrderId",[494,534,529,535],{},[461,536,532],{},[476,538,539,542,548],{},[494,540,541],{},"Completion rule",[494,543,544,547],{},[461,545,546],{},"CardCode"," is present",[494,549,550],{},"Create response contains the voucher data expected by the sync implementation",[476,552,553,556,559],{},[494,554,555],{},"Cancellation",[494,557,558],{},"Not implemented",[494,560,561],{},"Not implemented in the inspected legacy class",[476,563,564,567,570],{},[494,565,566],{},"Balance",[494,568,569],{},"Contract-float lookup, not card balance",[494,571,572],{},"No customer-card balance operation in the inspected processors",[476,574,575,578,584],{},[494,576,577],{},"Vault",[494,579,580,583],{},[461,581,582],{},"uses_vault"," is false in the async issuer migration",[494,585,586],{},"Legacy issuer also does not use a vault",[454,588,590],{"id":589},"async-lifecycle","Async lifecycle",[592,593,594,598,605,623,634,656],"ol",{},[595,596,597],"li",{},"A sale supplies a partner, currency, brand, and face value. The API resolves a partner-specific contract when configured and otherwise uses the global contract for that currency.",[595,599,600,601,604],{},"The API normalizes the face value and looks up the brand attribute ",[461,602,603],{},"amilon-product-code-\u003Cnormalized amount>",". Product-code mappings are cached per brand for one hour.",[595,606,607,608,610,611,614,615,618,619,622],{},"The async create payload contains the sale UUID as ",[461,609,532],{}," and one ",[461,612,613],{},"OrderRows"," item with the mapped ",[461,616,617],{},"ProductId"," and ",[461,620,621],{},"Quantity"," 1.",[595,624,625,627,628,630,631,633],{},[461,626,501],{}," returns an Amilon payload. The response object maps ",[461,629,532],{}," as the processor reference. If the first voucher has a ",[461,632,546],{},", the application card is successful immediately; otherwise it is pending.",[595,635,636,637,640,641,644,645,648,649,651,652,655],{},"A pending create is requeued by ",[461,638,639],{},"AsyncProcessRequest","; when an existing-order exception supplies ",[461,642,643],{},"CODE_ORDER_EXISTS",", the job instead schedules ",[461,646,647],{},"AsyncFetchCode",". The retrieval job calls ",[461,650,514],{}," and maps the returned voucher. The complete URL includes an empty client-auth segment and therefore ends with ",[461,653,654],{},"\u002Fcomplete\u002F",".",[595,657,658,659,662],{},"A voucher with a code is stored with its normalized amount, code, and ",[461,660,661],{},"VoucherLink",", and the sale becomes successful. A voucher without a code remains pending and is retried by the retrieval job.",[450,664,665,666,669,670,673],{},"An accepted order and a completed voucher are different provider states. The payload may contain ",[461,667,668],{},"OrderStatus",", but the response mapper uses the presence of ",[461,671,672],{},"Vouchers[0].CardCode"," as the application completion test.",[675,676,677],"blockquote",{},[450,678,679,683,684,686],{},[680,681,682],"span",{},"!WARNING","\nDo not manually create a replacement order while the original ",[461,685,532],{}," is unresolved. A create request can be accepted even when the code is not yet available, and another create request can produce a duplicate provider order or an “order already exists” response.",[454,688,690],{"id":689},"redacted-request-and-response-examples","Redacted request and response examples",[450,692,693],{},"The active create request is JSON. Identifiers and product codes below are synthetic.",[695,696,701],"pre",{"className":697,"code":698,"language":699,"meta":700,"style":700},"language-json shiki shiki-themes github-dark github-light","{\n  \"ExternalOrderId\": \"sale-uuid-example\",\n  \"OrderRows\": [\n    {\n      \"ProductId\": \"product-code-example\",\n      \"Quantity\": 1\n    }\n  ]\n}\n","json","",[461,702,703,711,728,737,743,756,767,773,779],{"__ignoreMap":700},[680,704,707],{"class":705,"line":706},"line",1,[680,708,710],{"class":709},"sQ3_J","{\n",[680,712,714,718,721,725],{"class":705,"line":713},2,[680,715,717],{"class":716},"s0DvM","  \"ExternalOrderId\"",[680,719,720],{"class":709},": ",[680,722,724],{"class":723},"sg6BJ","\"sale-uuid-example\"",[680,726,727],{"class":709},",\n",[680,729,731,734],{"class":705,"line":730},3,[680,732,733],{"class":716},"  \"OrderRows\"",[680,735,736],{"class":709},": [\n",[680,738,740],{"class":705,"line":739},4,[680,741,742],{"class":709},"    {\n",[680,744,746,749,751,754],{"class":705,"line":745},5,[680,747,748],{"class":716},"      \"ProductId\"",[680,750,720],{"class":709},[680,752,753],{"class":723},"\"product-code-example\"",[680,755,727],{"class":709},[680,757,759,762,764],{"class":705,"line":758},6,[680,760,761],{"class":716},"      \"Quantity\"",[680,763,720],{"class":709},[680,765,766],{"class":716},"1\n",[680,768,770],{"class":705,"line":769},7,[680,771,772],{"class":709},"    }\n",[680,774,776],{"class":705,"line":775},8,[680,777,778],{"class":709},"  ]\n",[680,780,782],{"class":705,"line":781},9,[680,783,784],{"class":709},"}\n",[450,786,787],{},"The tests use the following response shape. Voucher code and link values are redacted here:",[695,789,791],{"className":697,"code":790,"language":699,"meta":700,"style":700},"{\n  \"ExternalOrderId\": \"external-order-example\",\n  \"Vouchers\": [\n    {\n      \"Amount\": \"25.00\",\n      \"CardCode\": \"[REDACTED]\",\n      \"VoucherLink\": \"https:\u002F\u002Fprovider.example\u002Fvoucher\u002Fredacted\"\n    }\n  ],\n  \"OrderStatus\": \"Completed\"\n}\n",[461,792,793,797,808,815,819,831,843,853,857,862,873],{"__ignoreMap":700},[680,794,795],{"class":705,"line":706},[680,796,710],{"class":709},[680,798,799,801,803,806],{"class":705,"line":713},[680,800,717],{"class":716},[680,802,720],{"class":709},[680,804,805],{"class":723},"\"external-order-example\"",[680,807,727],{"class":709},[680,809,810,813],{"class":705,"line":730},[680,811,812],{"class":716},"  \"Vouchers\"",[680,814,736],{"class":709},[680,816,817],{"class":705,"line":739},[680,818,742],{"class":709},[680,820,821,824,826,829],{"class":705,"line":745},[680,822,823],{"class":716},"      \"Amount\"",[680,825,720],{"class":709},[680,827,828],{"class":723},"\"25.00\"",[680,830,727],{"class":709},[680,832,833,836,838,841],{"class":705,"line":758},[680,834,835],{"class":716},"      \"CardCode\"",[680,837,720],{"class":709},[680,839,840],{"class":723},"\"[REDACTED]\"",[680,842,727],{"class":709},[680,844,845,848,850],{"class":705,"line":769},[680,846,847],{"class":716},"      \"VoucherLink\"",[680,849,720],{"class":709},[680,851,852],{"class":723},"\"https:\u002F\u002Fprovider.example\u002Fvoucher\u002Fredacted\"\n",[680,854,855],{"class":705,"line":775},[680,856,772],{"class":709},[680,858,859],{"class":705,"line":781},[680,860,861],{"class":709},"  ],\n",[680,863,865,868,870],{"class":705,"line":864},10,[680,866,867],{"class":716},"  \"OrderStatus\"",[680,869,720],{"class":709},[680,871,872],{"class":723},"\"Completed\"\n",[680,874,876],{"class":705,"line":875},11,[680,877,784],{"class":709},[450,879,880,881,884,885,884,888,884,891,894,895,898],{},"The authentication request is form encoded and includes ",[461,882,883],{},"client_id",", ",[461,886,887],{},"client_secret",[461,889,890],{},"username",[461,892,893],{},"password",", and ",[461,896,897],{},"grant_type=password",". Do not copy credentials, voucher codes, PINs, customer details, or live voucher links into documentation or support tickets.",[454,900,902],{"id":901},"response-mapping-and-validation","Response mapping and validation",[450,904,905,908,909,912],{},[461,906,907],{},"AmilonGiftCard::translateApiResponse()"," reads only the first item in ",[461,910,911],{},"Vouchers"," and maps these fields:",[470,914,915,928],{},[473,916,917],{},[476,918,919,922,925],{},[479,920,921],{},"Amilon field",[479,923,924],{},"Application field",[479,926,927],{},"Rule",[489,929,930,944,959,972],{},[476,931,932,936,941],{},[494,933,934],{},[461,935,532],{},[494,937,938],{},[461,939,940],{},"processorReference",[494,942,943],{},"Identifies the provider order and is retained for retrieval",[476,945,946,951,956],{},[494,947,948],{},[461,949,950],{},"Vouchers[0].Amount",[494,952,953],{},[461,954,955],{},"faceValue",[494,957,958],{},"Normalized and cast to a float",[476,960,961,965,969],{},[494,962,963],{},[461,964,672],{},[494,966,967],{},[461,968,461],{},[494,970,971],{},"Presence makes the application card successful",[476,973,974,979,984],{},[494,975,976],{},[461,977,978],{},"Vouchers[0].VoucherLink",[494,980,981],{},[461,982,983],{},"thirdPartyUrl",[494,985,986],{},"Stored as the provider voucher URL",[450,988,989,990,992,993,996,997,1000,1001,1003,1004,884,1007,884,1010,884,1012,1015,1016,1019],{},"The parser requires the ",[461,991,911],{}," array and its first item. Missing structural fields raise ",[461,994,995],{},"AmilonException"," with ",[461,998,999],{},"CODE_REPEAT_REQUEST",", and the async job can retry the request. A valid structure with a missing or empty ",[461,1002,546],{}," produces a pending card instead. The parser does not use ",[461,1005,1006],{},"Pin",[461,1008,1009],{},"ValidityEndDate",[461,1011,668],{},[461,1013,1014],{},"GrossAmount",", or ",[461,1017,1018],{},"NetAmount"," when creating the async application card.",[450,1021,1022,1023,1025,1026,1028,1029,655],{},"The HTTP client decodes JSON responses and rejects a response that cannot be represented as an array. Guzzle failures are wrapped by ",[461,1024,995],{},"; timeout messages receive a gateway-timeout code, the known retry messages receive ",[461,1027,999],{},", and the exact provider “order already exists” message receives ",[461,1030,643],{},[454,1032,1034],{"id":1033},"provider-states-retries-and-duplicate-risk","Provider states, retries, and duplicate risk",[470,1036,1037,1050],{},[473,1038,1039],{},[476,1040,1041,1044,1047],{},[479,1042,1043],{},"Condition",[479,1045,1046],{},"Application handling",[479,1048,1049],{},"Investigation meaning",[489,1051,1052,1069,1086,1103,1114,1133],{},[476,1053,1054,1059,1066],{},[494,1055,1056,1058],{},[461,1057,672],{}," present",[494,1060,1061,1062,1065],{},"Mark ",[461,1063,1064],{},"success"," and complete the sale",[494,1067,1068],{},"Voucher details are available",[476,1070,1071,1077,1083],{},[494,1072,1073,1074,1076],{},"Voucher structure valid but ",[461,1075,546],{}," empty",[494,1078,1061,1079,1082],{},[461,1080,1081],{},"pending","; retrieval can be queued again",[494,1084,1085],{},"Provider order exists, but code is not available in the payload",[476,1087,1088,1094,1100],{},[494,1089,1090,1091,1093],{},"Missing ",[461,1092,911],{}," or malformed payload",[494,1095,1096,1097,1099],{},"Raise repeatable ",[461,1098,995],{},"; audit the response",[494,1101,1102],{},"Check provider payload shape and retry history",[476,1104,1105,1108,1111],{},[494,1106,1107],{},"Timeout or retryable provider message",[494,1109,1110],{},"Async job repeats the request",[494,1112,1113],{},"Determine whether the original create was accepted before retrying",[476,1115,1116,1119,1130],{},[494,1117,1118],{},"Exact “order with Id … already exists!” provider error",[494,1120,1121,1122,1124,1125,1127,1128],{},"Map to ",[461,1123,643],{},"; ",[461,1126,639],{}," schedules ",[461,1129,647],{},[494,1131,1132],{},"Use the original external order ID and retrieve it; do not create a replacement",[476,1134,1135,1138,1141],{},[494,1136,1137],{},"Other create\u002Fretrieve exception",[494,1139,1140],{},"Restore the sale to a retryable state or fail the job according to queue handling",[494,1142,1143],{},"Check exception code, response body, and job history",[450,1145,1146,1148,1149,1151,1152,1124,1154,1156],{},[461,1147,463],{}," does not define a processor-local maximum retry count. ",[461,1150,639],{}," repeats create errors with ",[461,1153,999],{},[461,1155,647],{}," repeats retrieval errors with the same code and requeues pending cards using retrieval delay metadata. Queue configuration and job history are therefore part of the retry investigation.",[454,1158,1160],{"id":1159},"audit-and-reconciliation-fields","Audit and reconciliation fields",[450,1162,1163],{},"Compare safe identifiers and metadata across the sale, processor interaction log, and provider response:",[470,1165,1166,1176],{},[473,1167,1168],{},[476,1169,1170,1173],{},[479,1171,1172],{},"Local or audit field",[479,1174,1175],{},"Amilon value to compare",[489,1177,1178,1188,1196,1212,1223,1236,1249,1261,1274],{},[476,1179,1180,1183],{},[494,1181,1182],{},"Sale UUID",[494,1184,1185,1186],{},"Create ",[461,1187,532],{},[476,1189,1190,1193],{},[494,1191,1192],{},"Partner and currency",[494,1194,1195],{},"Resolved partner\u002Fglobal contract and currency code",[476,1197,1198,1201],{},[494,1199,1200],{},"Contract",[494,1202,1203,1206,1207,1209,1210],{},[461,1204,1205],{},"contractCode"," in ",[461,1208,501],{},"; configuration calls this value a contract ",[461,1211,461],{},[476,1213,1214,1217],{},[494,1215,1216],{},"Face value",[494,1218,1219,1220],{},"Normalized denomination used in the brand-attribute lookup and voucher ",[461,1221,1222],{},"Amount",[476,1224,1225,1228],{},[494,1226,1227],{},"Product mapping",[494,1229,1230,618,1233],{},[461,1231,1232],{},"OrderRows[0].ProductId",[461,1234,1235],{},"amilon-product-code-\u003Camount>",[476,1237,1238,1240],{},[494,1239,621],{},[494,1241,1242,1245,1246],{},[461,1243,1244],{},"OrderRows[0].Quantity",", normally ",[461,1247,1248],{},"1",[476,1250,1251,1253],{},[494,1252,526],{},[494,1254,529,1255,1257,1258],{},[461,1256,532],{},", stored as ",[461,1259,1260],{},"processor_ref",[476,1262,1263,1266],{},[494,1264,1265],{},"Completion",[494,1267,1268,1269,618,1271,1273],{},"Presence of ",[461,1270,672],{},[461,1272,661],{},"; compare presence or a redacted fingerprint, not raw values",[476,1275,1276,1279],{},[494,1277,1278],{},"Time and retry context",[494,1280,1281],{},"Sale timestamps, request\u002Fretrieval attempt history, and exception code",[450,1283,1284],{},"The async processor stores its generated request, provider response, and exception response body in processor interaction audit records. Authentication requests and responses are also initialized against the sale UUID. The unit tests assert one request and one response record for successful create and retrieval paths, and assert that an invalid response body is retained for investigation.",[454,1286,1288],{"id":1287},"settings-and-brand-mappings","Settings and brand mappings",[450,1290,1291,1294],{},[461,1292,1293],{},"config\u002Familon.php"," reads these settings:",[470,1296,1297,1310],{},[473,1298,1299],{},[476,1300,1301,1304,1307],{},[479,1302,1303],{},"Setting",[479,1305,1306],{},"Environment variable",[479,1308,1309],{},"Purpose",[489,1311,1312,1328,1344,1357,1379,1401,1417,1433,1449],{},[476,1313,1314,1317,1322],{},[494,1315,1316],{},"SSO URL",[494,1318,1319],{},[461,1320,1321],{},"AMILON_ENVIRONMENT_SSO_URL",[494,1323,1324,1325],{},"Authentication base URL; token path appends ",[461,1326,1327],{},"\u002Fconnect\u002Ftoken",[476,1329,1330,1333,1338],{},[494,1331,1332],{},"Web API URL",[494,1334,1335],{},[461,1336,1337],{},"AMILON_ENVIRONMENT_WEB_API_URL",[494,1339,1340,1341],{},"API base used with ",[461,1342,1343],{},"\u002Fb2bwebapi\u002F{AMILON_API_VERSION}",[476,1345,1346,1349,1354],{},[494,1347,1348],{},"API version",[494,1350,1351],{},[461,1352,1353],{},"AMILON_API_VERSION",[494,1355,1356],{},"Version segment for the web API base URI",[476,1358,1359,1362,1376],{},[494,1360,1361],{},"Credentials",[494,1363,1364,884,1367,884,1370,884,1373],{},[461,1365,1366],{},"AMILON_CLIENT_ID",[461,1368,1369],{},"AMILON_CLIENT_SECRET",[461,1371,1372],{},"AMILON_USERNAME",[461,1374,1375],{},"AMILON_PASSWORD",[494,1377,1378],{},"OAuth password-grant authentication",[476,1380,1381,1384,1398],{},[494,1382,1383],{},"Global contract codes",[494,1385,1386,884,1389,884,1392,884,1395],{},[461,1387,1388],{},"AMILON_CONTRACT_ID",[461,1390,1391],{},"AMILON_CONTRACT_ID_GBP",[461,1393,1394],{},"AMILON_CONTRACT_ID_CHF",[461,1396,1397],{},"AMILON_CONTRACT_ID_PLN",[494,1399,1400],{},"Contract per configured global currency",[476,1402,1403,1406,1414],{},[494,1404,1405],{},"Partner contract overrides",[494,1407,1408,884,1411],{},[461,1409,1410],{},"AMILON_CONTRACT_ID_EDENRED_ITALY",[461,1412,1413],{},"AMILON_CONTRACT_ID_DIGGECARD_EDENRED_ITALY",[494,1415,1416],{},"EUR contract overrides for configured partner slugs",[476,1418,1419,1422,1430],{},[494,1420,1421],{},"Float monitoring",[494,1423,1424,618,1427],{},[461,1425,1426],{},"AMILON_AVAILABLE_FLOAT_ALERT_ENABLED",[461,1428,1429],{},"AMILON_AVAILABLE_FLOAT_ALERT_LIMIT_*",[494,1431,1432],{},"Enable alerts and set per-currency limits",[476,1434,1435,1438,1446],{},[494,1436,1437],{},"Catalogue culture",[494,1439,1440,884,1443],{},[461,1441,1442],{},"AMILON_BRAND_INFO_CULTURE_IT_IT",[461,1444,1445],{},"AMILON_BRAND_INFO_CULTURE_EN_UK",[494,1447,1448],{},"Culture passed to product and catalogue calls",[476,1450,1451,1454,1462],{},[494,1452,1453],{},"Notification recipients",[494,1455,1456,884,1459],{},[461,1457,1458],{},"FINANCE_EMAIL_ADDRESS",[461,1460,1461],{},"TECHTEAM_EMAIL_ADDRESS",[494,1463,1464],{},"Command notification configuration",[450,1466,1467,1470,1471,1474,1475,1477,1478,618,1480,655],{},[461,1468,1469],{},"AMILON_API_URL"," is present as a legacy ",[461,1472,1473],{},"endpoint"," configuration value and is annotated as unused in ",[461,1476,1293],{},". The active API builds its base URI from ",[461,1479,1337],{},[461,1481,1353],{},[450,1483,1484,1485,1487,1488,1490],{},"Each enabled brand needs ",[461,1486,603],{}," for every sellable fixed denomination. The stored attribute value is sent as ",[461,1489,617],{},". A missing attribute raises a missing-denomination-code exception before the provider order is created. The one-hour product-code cache means a mapping change may require cache expiry or invalidation before it is observed.",[454,1492,1494],{"id":1493},"api-operations-and-operational-tools","API operations and operational tools",[470,1496,1497,1510],{},[473,1498,1499],{},[476,1500,1501,1504,1507],{},[479,1502,1503],{},"Operation",[479,1505,1506],{},"Endpoint or command",[479,1508,1509],{},"Use",[489,1511,1512,1525,1542,1555,1568,1581,1594,1613,1626],{},[476,1513,1514,1517,1522],{},[494,1515,1516],{},"Authenticate",[494,1518,1519],{},[461,1520,1521],{},"POST {SSO_URL}\u002Fconnect\u002Ftoken",[494,1523,1524],{},"Form-encoded password grant; token is cached with a 30-second expiry reduction",[476,1526,1527,1530,1535],{},[494,1528,1529],{},"Create order",[494,1531,1532],{},[461,1533,1534],{},"POST \u002Fb2bwebapi\u002F{version}\u002Forders\u002Fcreate\u002F{contractCode}",[494,1536,1537,1538,618,1540],{},"Create a voucher order with ",[461,1539,532],{},[461,1541,613],{},[476,1543,1544,1547,1552],{},[494,1545,1546],{},"Complete order",[494,1548,1549],{},[461,1550,1551],{},"GET \u002Fb2bwebapi\u002F{version}\u002Forders\u002F{processorReference}\u002Fcomplete\u002F",[494,1553,1554],{},"Retrieve voucher details for an existing order",[476,1556,1557,1560,1565],{},[494,1558,1559],{},"Available products",[494,1561,1562],{},[461,1563,1564],{},"GET \u002Fb2bwebapi\u002F{version}\u002Fcontracts\u002F{contractId}\u002F{culture}\u002Fproducts",[494,1566,1567],{},"Read active contract products and prices",[476,1569,1570,1573,1578],{},[494,1571,1572],{},"Complete catalogue",[494,1574,1575],{},[461,1576,1577],{},"GET \u002Fb2bwebapi\u002F{version}\u002Fcontracts\u002F{contractId}\u002F{culture}\u002Fproducts\u002Fcomplete",[494,1579,1580],{},"Retrieve detailed product and retailer data",[476,1582,1583,1586,1591],{},[494,1584,1585],{},"Contract information",[494,1587,1588],{},[461,1589,1590],{},"GET \u002Fb2bwebapi\u002F{version}\u002Fcontracts\u002F{contractId}",[494,1592,1593],{},"Read contract balance data for float checks",[476,1595,1596,1599,1604],{},[494,1597,1598],{},"Float check",[494,1600,1601],{},[461,1602,1603],{},"php artisan rewardcloud:check-amilon-available-float",[494,1605,1606,1607,618,1610],{},"Email alerts when configured contract float is below its limit; supports ",[461,1608,1609],{},"--no-send",[461,1611,1612],{},"--override-recipient-email",[476,1614,1615,1618,1623],{},[494,1616,1617],{},"Denomination availability",[494,1619,1620],{},[461,1621,1622],{},"php artisan rewardcloud:check-amilon-brand-denominations-availability",[494,1624,1625],{},"Update brand-denomination availability from global contract product prices",[476,1627,1628,1631,1636],{},[494,1629,1630],{},"Brand information export",[494,1632,1633],{},[461,1634,1635],{},"php artisan report:amilon-brands-information-export",[494,1637,1638,1639,618,1641],{},"Export retailer\u002Fproducts information; supports ",[461,1640,1609],{},[461,1642,1612],{},[450,1644,1645],{},"The denomination availability command checks global currency contracts and applies the resulting product prices to matching brands. Partner-specific contracts use the same product codes as the corresponding global contract according to the service comment, so a change still needs to be checked against the affected partner catalogue.",[454,1647,1649],{"id":1648},"investigation-checklist","Investigation checklist",[592,1651,1652,1657,1660,1666,1674,1696,1703,1706,1709],{},[595,1653,1654,1655,655],{},"Record the sale UUID, partner slug, brand slug, currency, normalized face value, sale status, and ",[461,1656,1260],{},[595,1658,1659],{},"Resolve the contract mapping: check the partner override first, then the global currency contract, and confirm that the configured value is a contract code.",[595,1661,1662,1663,1665],{},"Check ",[461,1664,603],{}," and confirm its cached value matches the current provider product code.",[595,1667,1668,1669,884,1671,1673],{},"Compare the audited request’s ",[461,1670,532],{},[461,1672,617],{},", and quantity with the sale and brand mapping.",[595,1675,1676,1677,884,1679,884,1681,884,1683,884,1685,894,1687,1689,1690,1692,1693,1695],{},"Check the create response for ",[461,1678,532],{},[461,1680,911],{},[461,1682,1222],{},[461,1684,546],{},[461,1686,661],{},[461,1688,668],{},"; treat ",[461,1691,546],{}," presence, not ",[461,1694,668],{}," alone, as completion evidence.",[595,1697,1698,1699,1702],{},"If retrieval is pending, call history and job records should show ",[461,1700,1701],{},"orders\u002F{processorReference}\u002Fcomplete\u002F"," attempts and retrieval delay metadata.",[595,1704,1705],{},"If a duplicate error appears, stop replacement orders and search by the original external order ID before scheduling retrieval.",[595,1707,1708],{},"Check authentication audit entries without exposing credentials, then compare provider status, exception code, timestamps, and response body shape.",[595,1710,1711],{},"For float or catalogue issues, run the relevant command in the correct environment and compare the contract, culture, product code, price, and brand-denomination status.",[454,1713,1715],{"id":1714},"limitations-and-support","Limitations and support",[450,1717,1718,1719,1722,1723,1725],{},"The async processor does not implement customer-card cancellation or card-balance lookup. ",[461,1720,1721],{},"retrieveContractBalance()"," and the available-float command report processor contract float, not the remaining value of an issued voucher. The async issuer migration sets ",[461,1724,582],{}," to false.",[450,1727,1728,1729,1731,1732,1734],{},"Escalations should include the sale UUID, external order ID, contract context, product mapping, timestamps, safe audit comparisons, and exception codes. Do not include credentials, raw ",[461,1730,546],{},", PIN values, customer details, or live ",[461,1733,661],{}," values unless the approved support process explicitly requires protected data.",[454,1736,1738],{"id":1737},"related-code","Related code",[1740,1741,1742,1748,1754,1760,1766,1772,1777,1786,1792,1798,1804,1810,1816,1822],"ul",{},[595,1743,1744,1747],{},[461,1745,1746],{},"app\u002FProcessors\u002FAmilon\u002FAmilonAsyncProcessor.php"," — async create, retrieval, status mapping, and audit interaction handling.",[595,1749,1750,1753],{},[461,1751,1752],{},"app\u002FProcessors\u002FAmilon\u002FAmilonApi.php"," — authentication, contract selection, product-code lookup, order, retrieval, catalogue, and float calls.",[595,1755,1756,1759],{},[461,1757,1758],{},"app\u002FProcessors\u002FAmilon\u002FResponseObjects\u002FAmilonGiftCard.php"," — response validation and field mapping.",[595,1761,1762,1765],{},[461,1763,1764],{},"app\u002FProcessors\u002FAmilon\u002FException\u002FAmilonException.php"," — retry, timeout, duplicate-order, and malformed-response classifications.",[595,1767,1768,1771],{},[461,1769,1770],{},"app\u002FProcessors\u002FAmilonProcessor.php"," — deprecated synchronous create-response behavior.",[595,1773,1774,1776],{},[461,1775,1293],{}," — URLs, credentials, contract codes, cultures, and alert configuration.",[595,1778,1779,618,1782,1785],{},[461,1780,1781],{},"app\u002FJobs\u002FAsyncProcessRequest.php",[461,1783,1784],{},"app\u002FJobs\u002FAsyncFetchCode.php"," — pending and retry queue transitions.",[595,1787,1788,1791],{},[461,1789,1790],{},"app\u002FConsole\u002FCommands\u002FCheckAmilonAvailableFloat.php"," — contract-float alert command.",[595,1793,1794,1797],{},[461,1795,1796],{},"app\u002FConsole\u002FCommands\u002FCheckAmilonBrandDenominationsAvailability.php"," — product availability and denomination status command.",[595,1799,1800,1803],{},[461,1801,1802],{},"app\u002FConsole\u002FCommands\u002FGenerateAmilonBrandsInformationExport.php"," — catalogue export command.",[595,1805,1806,1809],{},[461,1807,1808],{},"tests\u002FUnit\u002FProcessors\u002FAmilon\u002FAmilonAsyncProcessorTest.php"," — async mapping, pending\u002Ferror, and audit scenarios.",[595,1811,1812,1815],{},[461,1813,1814],{},"tests\u002FUnit\u002FProcessors\u002FApi\u002FAmilon\u002FAmilonApiTest.php"," — request paths, payload shape, contracts, catalogue, and response mapping examples.",[595,1817,1818,1821],{},[461,1819,1820],{},"database\u002Fmigrations\u002F2021_09_30_161102_rcc_8962_add_amilon_async_processor.php"," — async issuer, support contact, and wiki metadata.",[595,1823,1824,1827],{},[461,1825,1826],{},"database\u002Fmigrations\u002F2021_11_01_133415_r_c_c-9194-move-amilon-brands-over-from-sy.php"," — migration of legacy Amilon brands to async.",[1829,1830,1831],"style",{},"html pre.shiki code .sQ3_J, html code.shiki .sQ3_J{--shiki-dark:#E1E4E8;--shiki-default:#24292E}html pre.shiki code .s0DvM, html code.shiki .s0DvM{--shiki-dark:#79B8FF;--shiki-default:#005CC5}html pre.shiki code .sg6BJ, html code.shiki .sg6BJ{--shiki-dark:#9ECBFF;--shiki-default:#032F62}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}",{"title":700,"searchDepth":730,"depth":730,"links":1833},[1834,1835,1836,1837,1838,1839,1840,1841,1842,1843,1844],{"id":456,"depth":713,"text":457},{"id":589,"depth":713,"text":590},{"id":689,"depth":713,"text":690},{"id":901,"depth":713,"text":902},{"id":1033,"depth":713,"text":1034},{"id":1159,"depth":713,"text":1160},{"id":1287,"depth":713,"text":1288},{"id":1493,"depth":713,"text":1494},{"id":1648,"depth":713,"text":1649},{"id":1714,"depth":713,"text":1715},{"id":1737,"depth":713,"text":1738},{},"md",{},{"title":373,"description":452},"igLNZYsL9dB7-Qgwj4sfLpvZSM_wI4ajKs4KSq8J5yo",[1851,1852],{"title":369,"path":370,"stem":371,"children":-1},{"title":377,"path":378,"stem":379,"children":-1},1789777548871]