[{"data":1,"prerenderedAt":1750},["ShallowReactive",2],{"navigation":3,"external-navigation":214,"external_core:\u002Fcore\u002Fprocessors\u002Fdiggecard":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":1747},{"id":445,"title":385,"body":446,"config":1742,"description":452,"extension":1743,"meta":1744,"navigation":15,"path":386,"seo":1745,"stem":387,"__hash__":1746},"external_core\u002Fcore\u002Fprocessors\u002Fdiggecard.md",{"type":447,"value":448,"toc":1723},"minimark",[449,453,458,466,571,575,654,658,688,693,696,814,822,826,829,922,930,934,944,1053,1060,1064,1067,1150,1156,1160,1185,1191,1195,1201,1258,1261,1265,1268,1323,1326,1425,1428,1432,1452,1455,1463,1482,1486,1493,1579,1582,1586,1647,1651,1654,1658,1719],[450,451,452],"p",{},"This guide describes the implemented Diggecard issuance and account-balance integration, including brand mapping, response validation, audit evidence, and operational risks. Examples show request and response shapes with credentials, URLs, identifiers, and card data redacted.",[454,455,457],"h2",{"id":456},"processing-model","Processing model",[450,459,460,461,465],{},"Diggecard is a synchronous processor with a non-vault issuer record. The processor creates one digital gift card through the ",[462,463,464],"code",{},"giftcard"," endpoint and maps either a claim URL or card number and PIN from the response.",[467,468,469,482],"table",{},[470,471,472],"thead",{},[473,474,475,479],"tr",{},[476,477,478],"th",{},"Property",[476,480,481],{},"Implemented behaviour",[483,484,485,496,504,512,522,532,555,563],"tbody",{},[473,486,487,491],{},[488,489,490],"td",{},"Issuer",[488,492,493],{},[462,494,495],{},"Diggecard",[473,497,498,501],{},[488,499,500],{},"Asynchronous processing",[488,502,503],{},"Disabled in the issuer migration",[473,505,506,509],{},[488,507,508],{},"Processor types",[488,510,511],{},"SKU per denomination for fixed brands and SKU per product for open-value brands",[473,513,514,517],{},[488,515,516],{},"Issuance endpoint",[488,518,519],{},[462,520,521],{},"POST {DIGGECARD_ENDPOINT}giftcard",[473,523,524,527],{},[488,525,526],{},"Balance endpoint",[488,528,529],{},[462,530,531],{},"GET {DIGGECARD_ENDPOINT}account_balance",[473,533,534,537],{},[488,535,536],{},"Accepted success state",[488,538,539,540,543,544,547,548,551,552],{},"HTTP ",[462,541,542],{},"200"," and ",[462,545,546],{},"giftCard.status"," of ",[462,549,550],{},"active"," or ",[462,553,554],{},"ACTIVE",[473,556,557,560],{},[488,558,559],{},"Delivery mapping",[488,561,562],{},"Claim URL when both card number and PIN are empty; otherwise card number, PIN, and claim URL",[473,564,565,568],{},[488,566,567],{},"Cancellation, reissue, and top-up",[488,569,570],{},"Not implemented by this processor's request builder and response parser",[454,572,574],{"id":573},"issuance-lifecycle","Issuance lifecycle",[576,577,578,582,593,602,608,614,629,647],"ol",{},[579,580,581],"li",{},"The synchronous processor receives the brand, partner, face value, currency, and internal sale record.",[579,583,584,585,588,589,592],{},"For a fixed-denomination brand, it looks up ",[462,586,587],{},"diggecard-sku-{amount}",". For an open-value brand, it looks up ",[462,590,591],{},"diggecard-sku",".",[579,594,595,596,543,599,592],{},"The sale UUID becomes both ",[462,597,598],{},"auditNumber",[462,600,601],{},"purchaseOrderNumber",[579,603,604,605,607],{},"The processor posts the request to the ",[462,606,464],{}," endpoint using Basic authentication and a JSON body.",[579,609,610,611,613],{},"The raw response is written to the processor interaction audit. A non-",[462,612,542],{}," response is treated as an external processor failure.",[579,615,616,617,620,621,624,625,551,627,592],{},"The JSON response must contain a ",[462,618,619],{},"giftCard"," object whose ",[462,622,623],{},"status"," is ",[462,626,550],{},[462,628,554],{},[579,630,631,632,635,636,639,640,543,643,646],{},"If ",[462,633,634],{},"cardExpiry"," is absent, the application generates an expiry using the brand's ",[462,637,638],{},"expiry-months"," attribute. If both ",[462,641,642],{},"cardNumber",[462,644,645],{},"cardPin"," are empty, the claim URL is used for delivery; otherwise a non-empty card number is required for code delivery.",[579,648,649,650,653],{},"The resulting card uses ",[462,651,652],{},"transactionId"," as the processor reference. The audit record is completed only after response parsing and card creation succeed.",[454,655,657],{"id":656},"http-contract","HTTP contract",[450,659,660,661,664,665,667,668,671,672,675,676,679,680,683,684,687],{},"The endpoint is ",[462,662,663],{},"DIGGECARD_ENDPOINT"," with ",[462,666,464],{}," appended. The client sends ",[462,669,670],{},"Accept: application\u002Fjson",", ",[462,673,674],{},"Content-Type: application\u002Fjson",", and an ",[462,677,678],{},"Authorization"," header of the form ",[462,681,682],{},"Basic \u003Cbase64-redacted-credentials>",". The request timeout is ",[462,685,686],{},"20"," seconds.",[689,690,692],"h3",{"id":691},"gift-card-request","Gift-card request",[450,694,695],{},"The request body contains the internal sale UUID in both transaction fields:",[697,698,703],"pre",{"className":699,"code":700,"language":701,"meta":702,"style":702},"language-json shiki shiki-themes github-dark github-light","{\n  \"auditNumber\": \"\u003Csale-uuid>\",\n  \"purchaseOrderNumber\": \"\u003Csale-uuid>\",\n  \"vendorCode\": \"\u003Credacted-brand-code>\",\n  \"cardAmount\": \"\u003Cface-value>\",\n  \"currency\": \"GBP\",\n  \"delivery\": {\n    \"deliveryType\": \"api\"\n  }\n}\n","json","",[462,704,705,714,731,743,756,769,782,791,802,808],{"__ignoreMap":702},[706,707,710],"span",{"class":708,"line":709},"line",1,[706,711,713],{"class":712},"sQ3_J","{\n",[706,715,717,721,724,728],{"class":708,"line":716},2,[706,718,720],{"class":719},"s0DvM","  \"auditNumber\"",[706,722,723],{"class":712},": ",[706,725,727],{"class":726},"sg6BJ","\"\u003Csale-uuid>\"",[706,729,730],{"class":712},",\n",[706,732,734,737,739,741],{"class":708,"line":733},3,[706,735,736],{"class":719},"  \"purchaseOrderNumber\"",[706,738,723],{"class":712},[706,740,727],{"class":726},[706,742,730],{"class":712},[706,744,746,749,751,754],{"class":708,"line":745},4,[706,747,748],{"class":719},"  \"vendorCode\"",[706,750,723],{"class":712},[706,752,753],{"class":726},"\"\u003Credacted-brand-code>\"",[706,755,730],{"class":712},[706,757,759,762,764,767],{"class":708,"line":758},5,[706,760,761],{"class":719},"  \"cardAmount\"",[706,763,723],{"class":712},[706,765,766],{"class":726},"\"\u003Cface-value>\"",[706,768,730],{"class":712},[706,770,772,775,777,780],{"class":708,"line":771},6,[706,773,774],{"class":719},"  \"currency\"",[706,776,723],{"class":712},[706,778,779],{"class":726},"\"GBP\"",[706,781,730],{"class":712},[706,783,785,788],{"class":708,"line":784},7,[706,786,787],{"class":719},"  \"delivery\"",[706,789,790],{"class":712},": {\n",[706,792,794,797,799],{"class":708,"line":793},8,[706,795,796],{"class":719},"    \"deliveryType\"",[706,798,723],{"class":712},[706,800,801],{"class":726},"\"api\"\n",[706,803,805],{"class":708,"line":804},9,[706,806,807],{"class":712},"  }\n",[706,809,811],{"class":708,"line":810},10,[706,812,813],{"class":712},"}\n",[450,815,816,817,543,819,821],{},"The repository does not document a provider idempotency key separate from these transaction fields. ",[462,818,598],{},[462,820,601],{}," are correlation values generated from the sale UUID, not proof that a repeated request is safe.",[689,823,825],{"id":824},"gift-card-response","Gift-card response",[450,827,828],{},"A URL-delivery response in the tests has empty card number and PIN values. A code-delivery response has a card number, PIN, and claim URL. Both use the following relevant shape:",[697,830,832],{"className":699,"code":831,"language":701,"meta":702,"style":702},"{\n  \"transactionId\": \"\u003Cprovider-transaction-id>\",\n  \"giftCard\": {\n    \"status\": \"ACTIVE\",\n    \"cardNumber\": \"\u003Credacted-or-empty>\",\n    \"cardPin\": \"\u003Credacted-or-empty>\",\n    \"claimUrl\": \"\u003Credacted-claim-url>\",\n    \"cardExpiry\": \"\u003Cprovider-expiry-or-null>\"\n  }\n}\n",[462,833,834,838,850,857,869,881,892,904,914,918],{"__ignoreMap":702},[706,835,836],{"class":708,"line":709},[706,837,713],{"class":712},[706,839,840,843,845,848],{"class":708,"line":716},[706,841,842],{"class":719},"  \"transactionId\"",[706,844,723],{"class":712},[706,846,847],{"class":726},"\"\u003Cprovider-transaction-id>\"",[706,849,730],{"class":712},[706,851,852,855],{"class":708,"line":733},[706,853,854],{"class":719},"  \"giftCard\"",[706,856,790],{"class":712},[706,858,859,862,864,867],{"class":708,"line":745},[706,860,861],{"class":719},"    \"status\"",[706,863,723],{"class":712},[706,865,866],{"class":726},"\"ACTIVE\"",[706,868,730],{"class":712},[706,870,871,874,876,879],{"class":708,"line":758},[706,872,873],{"class":719},"    \"cardNumber\"",[706,875,723],{"class":712},[706,877,878],{"class":726},"\"\u003Credacted-or-empty>\"",[706,880,730],{"class":712},[706,882,883,886,888,890],{"class":708,"line":771},[706,884,885],{"class":719},"    \"cardPin\"",[706,887,723],{"class":712},[706,889,878],{"class":726},[706,891,730],{"class":712},[706,893,894,897,899,902],{"class":708,"line":784},[706,895,896],{"class":719},"    \"claimUrl\"",[706,898,723],{"class":712},[706,900,901],{"class":726},"\"\u003Credacted-claim-url>\"",[706,903,730],{"class":712},[706,905,906,909,911],{"class":708,"line":793},[706,907,908],{"class":719},"    \"cardExpiry\"",[706,910,723],{"class":712},[706,912,913],{"class":726},"\"\u003Cprovider-expiry-or-null>\"\n",[706,915,916],{"class":708,"line":804},[706,917,807],{"class":712},[706,919,920],{"class":708,"line":810},[706,921,813],{"class":712},[450,923,924,925,671,927,929],{},"Do not copy ",[462,926,642],{},[462,928,645],{},", claim URLs, or complete provider responses into tickets or chat. The examples are structural and are not reusable card data.",[454,931,933],{"id":932},"response-mapping-and-validation","Response mapping and validation",[450,935,936,937,939,940,551,942,592],{},"The parser first requires a JSON object. For a create request it then validates ",[462,938,546],{}," as a required string with value ",[462,941,550],{},[462,943,554],{},[467,945,946,959],{},[470,947,948],{},[473,949,950,953,956],{},[476,951,952],{},"Response path",[476,954,955],{},"Rule or fallback",[476,957,958],{},"Internal card field",[483,960,961,975,991,1004,1016,1037],{},[473,962,963,967,970],{},[488,964,965],{},[462,966,652],{},[488,968,969],{},"Converted to a string",[488,971,972],{},[462,973,974],{},"processor_reference",[473,976,977,981,988],{},[488,978,979],{},[462,980,546],{},[488,982,983,984,551,986],{},"Required; must be ",[462,985,550],{},[462,987,554],{},[488,989,990],{},"Determines whether parsing may continue",[473,992,993,998,1001],{},[488,994,995],{},[462,996,997],{},"giftCard.cardExpiry",[488,999,1000],{},"Used when present",[488,1002,1003],{},"Expiration date",[473,1005,1006,1011,1014],{},[488,1007,1008,1009],{},"Missing ",[462,1010,997],{},[488,1012,1013],{},"Generated from the brand expiry-months attribute",[488,1015,1003],{},[473,1017,1018,1027,1030],{},[488,1019,1020,1021,543,1024],{},"Empty ",[462,1022,1023],{},"giftCard.cardNumber",[462,1025,1026],{},"giftCard.cardPin",[488,1028,1029],{},"Treated as URL delivery",[488,1031,1032,1033,1036],{},"Empty code and PIN; ",[462,1034,1035],{},"claimUrl"," becomes the URL",[473,1038,1039,1042,1047],{},[488,1040,1041],{},"Non-empty card data",[488,1043,1044,1046],{},[462,1045,642],{}," must be non-empty",[488,1048,1049,1050,1052],{},"Code, PIN, and ",[462,1051,1035],{}," are mapped",[450,1054,1055,1056,1059],{},"An invalid JSON body, missing or inactive status, or an empty card number in a response that is not the URL-only shape produces an external processor error. The parser does not define meanings for provider statuses other than the two accepted active spellings. For example, the feature test uses ",[462,1057,1058],{},"PROCESSING"," as a failure case; it must not be treated as a completed sale.",[454,1061,1063],{"id":1062},"provider-states-and-error-handling","Provider states and error handling",[450,1065,1066],{},"The application distinguishes the following observable states:",[467,1068,1069,1079],{},[470,1070,1071],{},[473,1072,1073,1076],{},[476,1074,1075],{},"Observable state",[476,1077,1078],{},"Application behaviour",[483,1080,1081,1091,1101,1111,1126,1134,1142],{},[473,1082,1083,1088],{},[488,1084,539,1085,1087],{},[462,1086,542],{}," with active gift card",[488,1089,1090],{},"Parse and complete the card",[473,1092,1093,1098],{},[488,1094,539,1095,1097],{},[462,1096,542],{}," with another status",[488,1099,1100],{},"Reject with the message that the gift card was not active",[473,1102,1103,1108],{},[488,1104,1105,1106],{},"HTTP non-",[462,1107,542],{},[488,1109,1110],{},"Log the response and raise an external processor error",[473,1112,1113,1123],{},[488,1114,539,1115,1118,1119,1122],{},[462,1116,1117],{},"400"," with an ",[462,1120,1121],{},"errors"," array",[488,1124,1125],{},"Preserve the response in the audit and expose a generic external error to the API caller",[473,1127,1128,1131],{},[488,1129,1130],{},"Connection, timeout, or request exception",[488,1132,1133],{},"Convert to an external processor error after logging available details",[473,1135,1136,1139],{},[488,1137,1138],{},"Missing vendor code",[488,1140,1141],{},"Fail before sending because brand mapping is incomplete",[473,1143,1144,1147],{},[488,1145,1146],{},"Missing partner credentials",[488,1148,1149],{},"Fail while generating the Basic authorization header",[450,1151,1152,1153,1155],{},"Provider error-code semantics are not enumerated in the implementation. The ",[462,1154,1121],{}," payload and HTTP status are evidence, not a documented state machine.",[454,1157,1159],{"id":1158},"retry-and-duplicate-risks","Retry and duplicate risks",[450,1161,1162,1165,1166,1169,1170,1173,1174,1177,1178,1180,1181,543,1183,592],{},[462,1163,1164],{},"SyncProcessorCommon"," defaults ",[462,1167,1168],{},"maxAttempts"," to ",[462,1171,1172],{},"1",", and ",[462,1175,1176],{},"DiggecardProcessor"," does not override it. Issuance therefore has no automatic retry in this integration. A timeout or connection failure after the provider receives the ",[462,1179,464],{}," request leaves the outcome unknown; submitting the same sale again can create a second card unless the provider confirms idempotency or reconciles the original ",[462,1182,598],{},[462,1184,601],{},[450,1186,1187,1188,1190],{},"Do not retry an uncertain issuance blindly. First compare the audit request and response, search for a provider ",[462,1189,652],{},", and escalate the sale UUID and timestamps to the internal processor owner or Diggecard account team. A non-active response is not evidence that no card was created; it only means this parser did not complete the sale.",[454,1192,1194],{"id":1193},"authentication-settings-and-brand-mappings","Authentication, settings, and brand mappings",[450,1196,1197,1200],{},[462,1198,1199],{},"config\u002Fdiggecard.php"," defines these environment-backed values:",[467,1202,1203,1213],{},[470,1204,1205],{},[473,1206,1207,1210],{},[476,1208,1209],{},"Configuration area",[476,1211,1212],{},"Values",[483,1214,1215,1230,1238],{},[473,1216,1217,1220],{},[488,1218,1219],{},"Global account",[488,1221,1222,671,1225,1173,1228],{},[462,1223,1224],{},"DIGGECARD_USERNAME",[462,1226,1227],{},"DIGGECARD_PASSWORD",[462,1229,663],{},[473,1231,1232,1235],{},[488,1233,1234],{},"Balance alerts",[488,1236,1237],{},"Enable flag, GBP and EUR thresholds, and recipient setting",[473,1239,1240,1243],{},[488,1241,1242],{},"Partner accounts",[488,1244,1245,671,1248,1173,1251,1254,1255],{},[462,1246,1247],{},"reward-gateway",[462,1249,1250],{},"giftcloud",[462,1252,1253],{},"epay-youchoose",", each with username, password, and ",[462,1256,1257],{},"useOwnAccount",[450,1259,1260],{},"For reward-relationship partners, the processor uses the global account unless the partner configuration explicitly selects its own account. Otherwise it uses the configured partner credentials when both are present. The balance operation falls back to the global account. Credentials must remain in environment configuration and must be redacted from operational evidence.",[689,1262,1264],{"id":1263},"brand-attributes","Brand attributes",[450,1266,1267],{},"The vendor-code lookup is database-backed:",[467,1269,1270,1283],{},[470,1271,1272],{},[473,1273,1274,1277,1280],{},[476,1275,1276],{},"Brand mode",[476,1278,1279],{},"Attribute read",[476,1281,1282],{},"Required setup",[483,1284,1285,1297,1309],{},[473,1286,1287,1290,1294],{},[488,1288,1289],{},"Fixed denominations",[488,1291,1292],{},[462,1293,587],{},[488,1295,1296],{},"One vendor code for each supported amount",[473,1298,1299,1302,1306],{},[488,1300,1301],{},"Open value",[488,1303,1304],{},[462,1305,591],{},[488,1307,1308],{},"One product vendor code plus the brand's open-value limits",[473,1310,1311,1314,1318],{},[488,1312,1313],{},"Expiry fallback",[488,1315,1316],{},[462,1317,638],{},[488,1319,1320,1321],{},"Used only when Diggecard omits ",[462,1322,634],{},[450,1324,1325],{},"The migrations provide these onboarding facts:",[1327,1328,1329,1338,1341,1344,1384,1406,1413],"ul",{},[579,1330,1331,1332,1169,1335,592],{},"River Island was moved to Diggecard as open value with limits of ",[462,1333,1334],{},"2",[462,1336,1337],{},"250",[579,1339,1340],{},"The Body Shop, TK Maxx, Arsenal, River Island, HomeSense, National Trust, and Eurostar were configured as open-value examples with limits recorded in the onboarding migration.",[579,1342,1343],{},"ASK Italian, Waterstones, Zizzi, Hobbycraft, Jojo Maman Bébé, and Virgin Wines were configured as fixed-denomination examples.",[579,1345,1346,1347,671,1350,671,1353,671,1356,671,1358,671,1361,671,1364,671,1367,671,1370,671,1373,671,1375,671,1377,1173,1380,1383],{},"IKEA UK was configured as URL-only with fixed GBP denominations of ",[462,1348,1349],{},"5",[462,1351,1352],{},"10",[462,1354,1355],{},"15",[462,1357,686],{},[462,1359,1360],{},"25",[462,1362,1363],{},"50",[462,1365,1366],{},"75",[462,1368,1369],{},"100",[462,1371,1372],{},"150",[462,1374,542],{},[462,1376,1337],{},[462,1378,1379],{},"500",[462,1381,1382],{},"1000"," in the onboarding migration.",[579,1385,1386,1387,543,1389,1391,1392,671,1394,671,1396,671,1398,671,1400,671,1402,1173,1404,592],{},"Mango was configured as URL-only with fixed denominations of ",[462,1388,1360],{},[462,1390,1363],{}," GBP. Its historical vendor-code migration records denomination codes for ",[462,1393,686],{},[462,1395,1360],{},[462,1397,1363],{},[462,1399,1366],{},[462,1401,1369],{},[462,1403,1372],{},[462,1405,542],{},[579,1407,1408,1409,1412],{},"A later migration moved vendor codes into brand attributes. The current processor reads those attributes rather than a ",[462,1410,1411],{},"diggecard.brands"," configuration block.",[579,1414,1415,1416,1419,1420,1422,1423,592],{},"The November 2025 migration removed ",[462,1417,1418],{},"returnsUrl"," attributes. The current parser uses the returned ",[462,1421,1035],{}," for the URL-only response shape and does not read ",[462,1424,1418],{},[450,1426,1427],{},"The onboarding migrations are historical records, not a guarantee that every listed brand is currently active. Verify the live brand row, issuer, delivery method, denomination, and attribute before issuing.",[454,1429,1431],{"id":1430},"account-balance-operation-and-command","Account-balance operation and command",[450,1433,1434,1437,1438,1441,1442,1445,1446,1448,1449,592],{},[462,1435,1436],{},"DiggecardProcessor::getAvailableCreditLimit()"," sends a credentialed ",[462,1439,1440],{},"GET"," request to ",[462,1443,1444],{},"account_balance",". It requires HTTP ",[462,1447,542],{}," and returns the raw response body. The implementation does not validate the shape in this method; the scheduled command decodes the body and reads ",[462,1450,1451],{},"accountBalances",[450,1453,1454],{},"The command is:",[697,1456,1461],{"className":1457,"code":1459,"language":1460,"meta":702},[1458],"language-text","rewardcloud:check-available-diggecard-credit-limit\n","text",[462,1462,1459],{"__ignoreMap":702},[450,1464,1465,1466,1469,1470,1473,1474,1477,1478,1481],{},"It exits with failure without calling Diggecard when ",[462,1467,1468],{},"DIGGECARD_LOW_CREDIT_ALERT_ENABLED"," is false. With alerts enabled, it records a ",[462,1471,1472],{},"FileExportCommand",", reads each returned account balance, applies the configured GBP or EUR threshold, and sends the low-balance alert only in production or sandbox unless ",[462,1475,1476],{},"--override-recipient-email"," is supplied. ",[462,1479,1480],{},"--no-send"," generates the report path without sending email. The command has no option to change the provider account or threshold.",[454,1483,1485],{"id":1484},"audit-comparison-fields","Audit comparison fields",[450,1487,1488,1489,1492],{},"The processor writes the request and response to ",[462,1490,1491],{},"ProcessorInteractionAuditLog"," and also maintains the normal processor audit record. Compare the following values without exposing secrets or card data:",[467,1494,1495,1505],{},[470,1496,1497],{},[473,1498,1499,1502],{},[476,1500,1501],{},"Evidence",[476,1503,1504],{},"Fields to compare",[483,1506,1507,1515,1537,1549,1557,1568],{},[473,1508,1509,1512],{},[488,1510,1511],{},"Internal sale",[488,1513,1514],{},"Sale UUID, partner, brand, face value, currency, delivery method, and request timestamp",[473,1516,1517,1519],{},[488,1518,692],{},[488,1520,1521,671,1523,671,1525,671,1528,671,1531,1173,1534],{},[462,1522,598],{},[462,1524,601],{},[462,1526,1527],{},"vendorCode",[462,1529,1530],{},"cardAmount",[462,1532,1533],{},"currency",[462,1535,1536],{},"delivery.deliveryType",[473,1538,1539,1541],{},[488,1540,825],{},[488,1542,1543,1544,671,1546,1548],{},"HTTP status, ",[462,1545,652],{},[462,1547,546],{},", expiry presence, and whether the URL-only or code shape was returned",[473,1550,1551,1554],{},[488,1552,1553],{},"Completed card",[488,1555,1556],{},"Processor reference, delivery URL presence, expiry, and completion state",[473,1558,1559,1562],{},[488,1560,1561],{},"Error path",[488,1563,1564,1565,1567],{},"HTTP status\u002Freason, provider ",[462,1566,1121],{}," or error description, exception log message, and attempt number",[473,1569,1570,1573],{},[488,1571,1572],{},"Balance check",[488,1574,1575,1576,1578],{},"Command run, account-balance currency and amount, threshold, environment, recipient mode, and ",[462,1577,1480],{}," state",[450,1580,1581],{},"The audit model encrypts stored content and supports redaction when a redactor is attached. Support extracts should still be manually checked before sharing; encryption is not a reason to publish live voucher or card values.",[454,1583,1585],{"id":1584},"investigation-checklist","Investigation checklist",[576,1587,1588,1591,1599,1602,1605,1608,1615,1624,1632,1638,1644],{},[579,1589,1590],{},"Confirm the sale UUID, partner slug, brand slug, face value, currency, and requested delivery method.",[579,1592,1593,1594,551,1596,1598],{},"Confirm whether the brand is fixed or open value and check the exact ",[462,1595,587],{},[462,1597,591],{}," attribute.",[579,1600,1601],{},"Confirm the issuer is Diggecard and that the requested delivery method is enabled for the brand and partner.",[579,1603,1604],{},"Check partner financial relationship and the effective credential source: global account or partner account.",[579,1606,1607],{},"Compare the redacted request fields, especially both transaction fields, vendor code, amount, and currency.",[579,1609,1610,1611,551,1613,592],{},"Check the HTTP status and response body shape. An active status must be exactly ",[462,1612,550],{},[462,1614,554],{},[579,1616,1617,1618,1620,1621,1623],{},"If the response is URL-only, verify that both card number and PIN are empty and that ",[462,1619,1035],{}," is present. If it is code delivery, verify that ",[462,1622,642],{}," is non-empty.",[579,1625,1626,1627,1629,1630,1598],{},"Check whether ",[462,1628,634],{}," was returned or generated from the brand ",[462,1631,638],{},[579,1633,1634,1635,1637],{},"For an uncertain timeout, search the audit for ",[462,1636,652],{}," and do not issue a replacement until the original outcome is reconciled.",[579,1639,1640,1641,1643],{},"For a balance alert, check the command log, ",[462,1642,1451],{},", currency threshold, environment, and recipient override; do not include credentials or balances in an external ticket unless required and approved.",[579,1645,1646],{},"Escalate with the sale UUID, provider transaction reference if known, vendor code, UTC timestamps, HTTP status, and redacted audit excerpts.",[454,1648,1650],{"id":1649},"limitations-and-support-contacts","Limitations and support contacts",[450,1652,1653],{},"The repository implements synchronous issuance and a balance check, but it does not provide a Diggecard status\u002Freconciliation endpoint, cancellation flow, retry-safe idempotency mechanism, or named provider support contact. The parser does not document provider lifecycle states beyond an accepted active status. Escalate unresolved issuance and balance issues through the internal processor owner or Diggecard account team using the evidence in the checklist.",[454,1655,1657],{"id":1656},"related-code","Related code",[1327,1659,1660,1666,1672,1678,1683,1689,1695,1701,1707,1713],{},[579,1661,1662,1665],{},[462,1663,1664],{},"app\u002FProcessors\u002FDiggecardProcessor.php"," — issuance, response parsing, authentication selection, expiry fallback, and balance request.",[579,1667,1668,1671],{},[462,1669,1670],{},"app\u002FExceptions\u002FDiggecard\u002FDiggecardException.php"," — Diggecard external error type.",[579,1673,1674,1677],{},[462,1675,1676],{},"app\u002FProcessors\u002FSyncProcessorCommon.php"," — synchronous request lifecycle, audit completion, and default attempt count.",[579,1679,1680,1682],{},[462,1681,1199],{}," — global, partner, and balance-alert settings.",[579,1684,1685,1688],{},[462,1686,1687],{},"app\u002FConsole\u002FCommands\u002FCheckAvailableDiggecardCreditLimit.php"," — account-balance command and alert handling.",[579,1690,1691,1694],{},[462,1692,1693],{},"app\u002FProcessorInteractionAuditLog.php"," — encrypted processor request and response audit records.",[579,1696,1697,1700],{},[462,1698,1699],{},"database\u002Fmigrations\u002F2023_05_09_093426_qrf-733_move_diggecard_vendor_codes_into_brand_attributes.php"," — migration of vendor codes into brand attributes.",[579,1702,1703,1706],{},[462,1704,1705],{},"database\u002Fmigrations\u002F2023_05_09_110643_qrf-733_update_diggecard_processor_type.php"," — fixed and open processor types.",[579,1708,1709,1712],{},[462,1710,1711],{},"database\u002Fmigrations\u002F2025_11_19_132500_rcc_16844_remove_diggecard_returnsUrl_attributes.php"," — removal of obsolete URL attributes.",[579,1714,1715,1718],{},[462,1716,1717],{},"tests\u002FFeature\u002FProcessors\u002FDiggecardProcessorTest.php"," — URL and code delivery, audit, error, and status validation cases.",[1720,1721,1722],"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":702,"searchDepth":733,"depth":733,"links":1724},[1725,1726,1727,1731,1732,1733,1734,1737,1738,1739,1740,1741],{"id":456,"depth":716,"text":457},{"id":573,"depth":716,"text":574},{"id":656,"depth":716,"text":657,"children":1728},[1729,1730],{"id":691,"depth":733,"text":692},{"id":824,"depth":733,"text":825},{"id":932,"depth":716,"text":933},{"id":1062,"depth":716,"text":1063},{"id":1158,"depth":716,"text":1159},{"id":1193,"depth":716,"text":1194,"children":1735},[1736],{"id":1263,"depth":733,"text":1264},{"id":1430,"depth":716,"text":1431},{"id":1484,"depth":716,"text":1485},{"id":1584,"depth":716,"text":1585},{"id":1649,"depth":716,"text":1650},{"id":1656,"depth":716,"text":1657},{},"md",{},{"title":385,"description":452},"0gj7uUItWZVMVlF17LyKUsdgL8E3Jb_A3UewERGR2Fs",[1748,1749],{"title":381,"path":382,"stem":383,"children":-1},{"title":389,"path":390,"stem":391,"children":-1},1789777548979]