{"id":"159f3b19-955d-4e80-8062-8b4a76237b6f","shortId":"faQ8tq","kind":"skill","title":"pakistan-payments-stack","tagline":"Design and implement production-grade Pakistani payment integrations (JazzCash, Easypaisa, bank/PSP rails, optional Raast) for SaaS with PKR billing, webhook reliability, and reconciliation.","description":"# Pakistan Payments Stack for SaaS\nYou are a senior full-stack engineer and payments architect focused on Pakistani payment integrations for production SaaS systems.\nYour objective is to design and implement reliable PKR payment flows with strong correctness, reconciliation, and auditability.\n## Authenticity and Verification Rules (Mandatory)\nYou must not assume provider behavior, endpoints, or webhook schemas.\nBefore implementation, require the user to provide (or confirm) for each selected provider:\n1. Official merchant/developer integration docs (versioned if possible).\n2. Environment base URLs (sandbox and production).\n3. Auth/signature method and exact verification steps.\n4. Webhook/event payload examples and retry semantics.\n5. Settlement and payout timing docs.\n6. Merchant contract constraints (supported payment methods, limits, recurring support, refunds).\nIf any of these are missing, respond with:\n`UNSPECIFIED: Missing or unverified dependency`\nDo not fabricate field names, signatures, or API routes.\n## Verified Context (Public, High-Level)\n- **JazzCash Online Payment Gateway** publicly states hosted checkout, multiple methods (cards/mobile account/voucher/direct debit), integration support, and merchant portal for transaction monitoring/reconciliation.\n- **Easypay Integration Guides** publicly expose multiple payment method categories (for example OTC/MA/CC/IB/QR/Till/DD).\n- **SBP PSO/PSP framework** governs payment operators/providers under Pakistan?s payment systems regime.\n- **SBP Raast DFS pages** describe interoperable QR-based P2P and P2M rails and the countrywide standard.\nUse these as landscape context only. Use provider-issued merchant docs for implementation details.\n## When to Use This Skill\nUse this skill when:\n- Building PKR-first SaaS/B2B billing for Pakistan.\n- Adding JazzCash/Easypaisa/bank-PSP rails to an existing product.\n- Implementing payment reliability controls (webhooks, retries, idempotency, reconciliation).\n- Designing auditable billing operations (finance/support-grade reporting).\n## Do Not Use This Skill When\nDo not use this skill when:\n- The task is only global card processing (use Stripe/global gateway skills).\n- No Pakistan market/payment scope exists.\n- The request is purely pricing strategy with no payment infrastructure work.\n- The user asks for legal/tax advice (provide risk flags and recommend local counsel).\n## Architecture Boundary (Required)\nImplement a payment boundary instead of scattering provider logic across UI/routes.\nCore components:\n- `ClientApp` (checkout/billing UI)\n- `BackendAPI` (server routes)\n- `PaymentsService` (provider abstraction)\n- `WebhookIngest` (provider callbacks)\n- `BillingDB` (source of record)\n- `ReconciliationJob` (daily settlement verification)\nHigh-level flow:\n```mermaid\nflowchart LR\n  client[ClientApp] --> api[BackendAPI]\n  api --> svc[PaymentsService]\n  svc --> jazz[JazzCash Adapter]\n  svc --> easy[Easypaisa Adapter]\n  svc --> bank[Bank/PSP Adapter]\n  svc --> raast[Raast/QR Adapter Optional]\n  jazz --> hook[WebhookIngest]\n  easy --> hook\n  bank --> hook\n  raast --> hook\n  hook --> db[BillingDB]\n  db --> recon[ReconciliationJob] ``` \n\nData Model Requirements\nUse smallest currency unit (Rupee) as integer.\n\nMinimum entities:\n- customers\n- subscriptions (if applicable)\n- invoices\n- payments\n- payment_events (immutable event log)\n- refunds / adjustments\n- reconciliation_runs\n- reconciliation_items\npayments must include:\n- tenant_id\n- provider\n- provider_payment_id\n- amount_rupee\n- currency = PKR\n- status (pending|succeeded|failed|refunded|canceled)\n- idempotency_key\n- provider_raw (JSON)\n- created_at, updated_at\nProvider Abstraction Contract (Example)\nexport type ProviderName = \"jazzcash\" | \"easypaisa\" | \"bank-gateway\" | \"raast\";\nexport interface CreatePaymentParams {\n  provider: ProviderName;\n  amountPaisa: number; // PKR in rupee\n  currency: \"PKR\";\n  customerId: string;\n  invoiceId?: string;\n  successUrl: string;\n  failureUrl: string;\n  metadata?: Record<string, string>;\n}\nexport interface CreatePaymentResult {\n  paymentId: string;        // internal id\n  redirectUrl?: string;     // hosted flow\n  deepLinkUrl?: string;     // app flow\n  qrPayload?: string;       // optional\n}\nexport interface PaymentsService {\n  createPayment(params: CreatePaymentParams): Promise<CreatePaymentResult>;\n  verifyAndHandleWebhook(rawBody: string, headers: Record<string, string>): Promise<void>;\n}\nWebhook Handling Rules (Non-Negotiable)\n1. Verify signature from raw body.\n2. Resolve stable provider_payment_id.\n3. Enforce idempotency with DB guard (unique index on provider event id where available).\n4. Update payment/invoice state inside a transaction.\n5. Emit domain event after committed state transition.\n6. Return provider-expected HTTP response quickly; defer heavy work to queue.\nNever mark succeeded from client redirect alone.\nReconciliation and Finance Controls\nRun daily reconciliation per provider:\n- Pull transaction data via provider API/export/portal method.\n- Match by provider_payment_id, amount, and date window.\n- Classify mismatches:\n  - provider success + local pending\n  - local success + provider missing/reversed\n  - amount mismatch\n- Persist run artifacts and unresolved items.\n- Generate per-tenant and per-provider summaries.\nRecurring Billing Caveat\nDo not assume wallet/direct-debit recurring capability is universally available.\nFor subscriptions:\n- Prefer invoice + pay-link workflow unless provider docs and merchant contract explicitly confirm recurring/autopay support.\n- If recurring is supported, implement mandate lifecycle and failure handling per documented provider rules.\nSecurity and Operations Checklist\n- Separate sandbox/live credentials.\n- Rotate keys and store in secure secret manager.\n- Add request correlation IDs.\n- Keep immutable payment event logs.\n- Alert on webhook signature failures and reconciliation deltas.\n- Implement retry policy with bounded exponential backoff.\n- Maintain runbooks for payment support and incident response.\nCompliance Note\nThis skill provides engineering guidance, not legal advice.\nAlways include this line in production recommendations:\n?Validate this implementation with qualified legal/accounting advisors in Pakistan and ensure alignment with current SBP and contractual provider requirements before go-live.?\nOutput Format for User Requests\nFor implementation requests, respond with:\n1. Assumptions explicitly marked as verified/unverified.\n2. Required missing inputs (merchant docs, signatures, webhook schema).\n3. Proposed architecture and schema deltas.\n4. Minimal implementation plan (ordered, testable).\n5. Idempotency + reconciliation strategy.\n6. Go-live checklist and rollback plan.\nIf required provider facts are missing, stop and return:\nUNSPECIFIED: Missing or unverified dependency\n\nRelated Skills\n- @stripe-integration\n- @analytics-tracking\n- @pricing-strategy\n- @senior-fullstack\n\n**Suggested references to keep in your skill docs (for provenance)**\n- JazzCash OPG: `https://www.jazzcash.com.pk/corporate/online-payment-gateway/`\n- Easypay integration guides: `https://easypay.easypaisa.com.pk/easypay-merchant/faces/pg/site/IntegrationGuides.jsf`\n- SBP PSO/PSP: `https://www.sbp.org.pk/PS/PSOSP.htm`\n- SBP Raast P2M/P2P: `https://www.sbp.org.pk/dfs/Raast-P2M.html`\n\n## Limitations\n- Use this skill only when the task clearly matches the scope described above.\n- Do not treat the output as a substitute for environment-specific validation, testing, or expert review.\n- Stop and ask for clarification if required inputs, permissions, safety boundaries, or success criteria are missing.","tags":["pakistan","payments","stack","antigravity","awesome","skills","sickn33","agent-skills","agentic-skills","ai-agent-skills","ai-agents","ai-coding"],"capabilities":["skill","source-sickn33","skill-pakistan-payments-stack","topic-agent-skills","topic-agentic-skills","topic-ai-agent-skills","topic-ai-agents","topic-ai-coding","topic-ai-workflows","topic-antigravity","topic-antigravity-skills","topic-claude-code","topic-claude-code-skills","topic-codex-cli","topic-codex-skills"],"categories":["antigravity-awesome-skills"],"synonyms":[],"warnings":[],"endpointUrl":"https://skills.sh/sickn33/antigravity-awesome-skills/pakistan-payments-stack","protocol":"skill","transport":"skills-sh","auth":{"type":"none","details":{"cli":"npx skills add sickn33/antigravity-awesome-skills","source_repo":"https://github.com/sickn33/antigravity-awesome-skills","install_from":"skills.sh"}},"qualityScore":"0.700","qualityRationale":"deterministic score 0.70 from registry signals: · indexed on github topic:agent-skills · 34616 github stars · SKILL.md body (7,623 chars)","verified":false,"liveness":"unknown","lastLivenessCheck":null,"agentReviews":{"count":0,"score_avg":null,"cost_usd_avg":null,"success_rate":null,"latency_p50_ms":null,"narrative_summary":null,"summary_updated_at":null},"enrichmentModel":"deterministic:skill-github:v1","enrichmentVersion":1,"enrichedAt":"2026-04-23T00:51:22.345Z","embedding":null,"createdAt":"2026-04-18T21:42:10.628Z","updatedAt":"2026-04-23T00:51:22.345Z","lastSeenAt":"2026-04-23T00:51:22.345Z","tsv":"'/corporate/online-payment-gateway/':890 '/dfs/raast-p2m.html':907 '/easypay-merchant/faces/pg/site/integrationguides.jsf':896 '/ps/psosp.htm':901 '1':99,555,809 '2':107,561,815 '3':114,567,824 '4':121,581,830 '5':128,588,836 '6':134,596,840 'abstract':364,480 'account/voucher/direct':184 'across':352 'ad':267 'adapt':393,397,401,405 'add':727 'adjust':446 'advic':332,768 'advisor':782 'alert':736 'align':787 'alon':615 'alway':769 'amount':460,637,651 'amountpaisa':497 'analyt':868 'analytics-track':867 'api':165,385,387 'api/export/portal':630 'app':529 'applic':437 'architect':44 'architectur':340,826 'artifact':655 'ask':329,941 'assum':79,673 'assumpt':810 'audit':70,283 'auth/signature':115 'authent':71 'avail':580,679 'backendapi':359,386 'backoff':750 'bank':399,412,489 'bank-gateway':488 'bank/psp':16,400 'base':109,226 'behavior':81 'bill':24,264,284,669 'billingdb':368,418 'bodi':560 'bound':748 'boundari':341,346,949 'build':259 'callback':367 'cancel':469 'capabl':676 'card':305 'cards/mobile':183 'categori':202 'caveat':670 'checklist':715,844 'checkout':180 'checkout/billing':357 'clarif':943 'classifi':641 'clear':916 'client':383,613 'clientapp':356,384 'commit':593 'complianc':759 'compon':355 'confirm':94,695 'constraint':137 'context':168,239 'contract':136,481,693 'contractu':792 'control':277,619 'core':354 'correct':67 'correl':729 'counsel':339 'countrywid':233 'creat':475 'createpay':537 'createpaymentparam':494,539 'createpaymentresult':518 'credenti':718 'criteria':952 'currenc':427,462,502 'current':789 'custom':434 'customerid':504 'daili':373,621 'data':422,627 'date':639 'db':417,419,571 'debit':185 'deeplinkurl':527 'defer':604 'delta':743,829 'depend':157,861 'describ':222,920 'design':5,58,282 'detail':249 'dfs':220 'doc':103,133,246,690,820,883 'document':709 'domain':590 'easi':395,410 'easypaisa':15,396,487 'easypay':194,891 'easypay.easypaisa.com.pk':895 'easypay.easypaisa.com.pk/easypay-merchant/faces/pg/site/integrationguides.jsf':894 'emit':589 'endpoint':82 'enforc':568 'engin':41,764 'ensur':786 'entiti':433 'environ':108,932 'environment-specif':931 'event':441,443,577,591,734 'exact':118 'exampl':124,204,482 'exist':272,315 'expect':600 'expert':937 'explicit':694,811 'exponenti':749 'export':483,492,516,534 'expos':198 'fabric':160 'fact':851 'fail':467 'failur':706,740 'failureurl':510 'field':161 'financ':618 'finance/support-grade':286 'first':262 'flag':335 'flow':64,379,526,530 'flowchart':381 'focus':45 'format':800 'framework':208 'full':39 'full-stack':38 'fullstack':875 'gateway':176,309,490 'generat':659 'global':304 'go':797,842 'go-liv':796,841 'govern':209 'grade':10 'guard':572 'guid':196,893 'guidanc':765 'handl':550,707 'header':544 'heavi':605 'high':171,377 'high-level':170,376 'hook':408,411,413,415,416 'host':179,525 'http':601 'id':455,459,522,566,578,636,730 'idempot':280,470,569,837 'immut':442,732 'implement':7,60,87,248,274,343,702,744,778,805,832 'incid':757 'includ':453,770 'index':574 'infrastructur':325 'input':818,946 'insid':585 'instead':347 'integ':431 'integr':13,49,102,186,195,866,892 'interfac':493,517,535 'intern':521 'interoper':223 'invoic':438,683 'invoiceid':506 'issu':244 'item':450,658 'jazz':391,407 'jazzcash':14,173,392,486,886 'jazzcash/easypaisa/bank-psp':268 'json':474 'keep':731,879 'key':471,720 'landscap':238 'legal':767 'legal/accounting':781 'legal/tax':331 'level':172,378 'lifecycl':704 'limit':141,908 'line':772 'link':686 'live':798,843 'local':338,645,647 'log':444,735 'logic':351 'lr':382 'maintain':751 'manag':726 'mandat':703 'mandatori':75 'mark':610,812 'market/payment':313 'match':632,917 'merchant':135,189,245,692,819 'merchant/developer':101 'mermaid':380 'metadata':512 'method':116,140,182,201,631 'minim':831 'minimum':432 'mismatch':642,652 'miss':150,154,817,853,858,954 'missing/reversed':650 'model':423 'monitoring/reconciliation':193 'multipl':181,199 'must':77,452 'name':162 'negoti':554 'never':609 'non':553 'non-negoti':552 'note':760 'number':498 'object':55 'offici':100 'onlin':174 'oper':285,714 'operators/providers':211 'opg':887 'option':18,406,533 'order':834 'otc/ma/cc/ib/qr/till/dd':205 'output':799,926 'p2m':229 'p2m/p2p':904 'p2p':227 'page':221 'pakistan':2,29,213,266,312,784 'pakistan-payments-stack':1 'pakistani':11,47 'param':538 'pay':685 'pay-link':684 'payload':123 'payment':3,12,30,43,48,63,139,175,200,210,215,275,324,345,439,440,451,458,565,635,733,754 'payment/invoice':583 'paymentid':519 'paymentsservic':362,389,536 'payout':131 'pend':465,646 'per':623,661,665,708 'per-provid':664 'per-ten':660 'permiss':947 'persist':653 'pkr':23,62,261,463,499,503 'pkr-first':260 'plan':833,847 'polici':746 'portal':190 'possibl':106 'prefer':682 'price':320,871 'pricing-strategi':870 'process':306 'product':9,51,113,273,774 'production-grad':8 'promis':540,548 'propos':825 'proven':885 'provid':80,92,98,243,333,350,363,366,456,457,472,479,495,564,576,599,624,629,634,643,649,666,689,710,763,793,850 'provider-expect':598 'provider-issu':242 'providernam':485,496 'pso/psp':207,898 'public':169,177,197 'pull':625 'pure':319 'qr':225 'qr-base':224 'qrpayload':531 'qualifi':780 'queue':608 'quick':603 'raast':19,219,403,414,491,903 'raast/qr':404 'rail':17,230,269 'raw':473,559 'rawbodi':542 'recommend':337,775 'recon':420 'reconcili':28,68,281,447,449,616,622,742,838 'reconciliationjob':372,421 'record':371,513,545 'recur':142,668,675,699 'recurring/autopay':696 'redirect':614 'redirecturl':523 'refer':877 'refund':144,445,468 'regim':217 'relat':862 'reliabl':26,61,276 'report':287 'request':317,728,803,806 'requir':88,342,424,794,816,849,945 'resolv':562 'respond':151,807 'respons':602,758 'retri':126,279,745 'return':597,856 'review':938 'risk':334 'rollback':846 'rotat':719 'rout':166,361 'rule':74,551,711 'run':448,620,654 'runbook':752 'rupe':429,461,501 'saa':21,33,52 'saas/b2b':263 'safeti':948 'sandbox':111 'sandbox/live':717 'sbp':206,218,790,897,902 'scatter':349 'schema':85,823,828 'scope':314,919 'secret':725 'secur':712,724 'select':97 'semant':127 'senior':37,874 'senior-fullstack':873 'separ':716 'server':360 'settlement':129,374 'signatur':163,557,739,821 'skill':254,257,292,298,310,762,863,882,911 'skill-pakistan-payments-stack' 'smallest':426 'sourc':369 'source-sickn33' 'specif':933 'stabl':563 'stack':4,31,40 'standard':234 'state':178,584,594 'status':464 'step':120 'stop':854,939 'store':722 'strategi':321,839,872 'string':505,507,509,511,514,515,520,524,528,532,543,546,547 'stripe':865 'stripe-integr':864 'stripe/global':308 'strong':66 'subscript':435,681 'substitut':929 'succeed':466,611 'success':644,648,951 'successurl':508 'suggest':876 'summari':667 'support':138,143,187,697,701,755 'svc':388,390,394,398,402 'system':53,216 'task':301,915 'tenant':454,662 'test':935 'testabl':835 'time':132 'topic-agent-skills' 'topic-agentic-skills' 'topic-ai-agent-skills' 'topic-ai-agents' 'topic-ai-coding' 'topic-ai-workflows' 'topic-antigravity' 'topic-antigravity-skills' 'topic-claude-code' 'topic-claude-code-skills' 'topic-codex-cli' 'topic-codex-skills' 'track':869 'transact':192,587,626 'transit':595 'treat':924 'type':484 'ui':358 'ui/routes':353 'uniqu':573 'unit':428 'univers':678 'unless':688 'unresolv':657 'unspecifi':153,857 'unverifi':156,860 'updat':477,582 'url':110 'use':235,241,252,255,290,296,307,425,909 'user':90,328,802 'valid':776,934 'verif':73,119,375 'verifi':167,556 'verified/unverified':814 'verifyandhandlewebhook':541 'version':104 'via':628 'wallet/direct-debit':674 'webhook':25,84,278,549,738,822 'webhook/event':122 'webhookingest':365,409 'window':640 'work':326,606 'workflow':687 'www.jazzcash.com.pk':889 'www.jazzcash.com.pk/corporate/online-payment-gateway/':888 'www.sbp.org.pk':900,906 'www.sbp.org.pk/dfs/raast-p2m.html':905 'www.sbp.org.pk/ps/psosp.htm':899","prices":[{"id":"4028d811-6152-4666-a302-65f6ea537f28","listingId":"159f3b19-955d-4e80-8062-8b4a76237b6f","amountUsd":"0","unit":"free","nativeCurrency":null,"nativeAmount":null,"chain":null,"payTo":null,"paymentMethod":"skill-free","isPrimary":true,"details":{"org":"sickn33","category":"antigravity-awesome-skills","install_from":"skills.sh"},"createdAt":"2026-04-18T21:42:10.628Z"}],"sources":[{"listingId":"159f3b19-955d-4e80-8062-8b4a76237b6f","source":"github","sourceId":"sickn33/antigravity-awesome-skills/pakistan-payments-stack","sourceUrl":"https://github.com/sickn33/antigravity-awesome-skills/tree/main/skills/pakistan-payments-stack","isPrimary":false,"firstSeenAt":"2026-04-18T21:42:10.628Z","lastSeenAt":"2026-04-23T00:51:22.345Z"}],"details":{"listingId":"159f3b19-955d-4e80-8062-8b4a76237b6f","quickStartSnippet":null,"exampleRequest":null,"exampleResponse":null,"schema":null,"openapiUrl":null,"agentsTxtUrl":null,"citations":[],"useCases":[],"bestFor":[],"notFor":[],"kindDetails":{"org":"sickn33","slug":"pakistan-payments-stack","github":{"repo":"sickn33/antigravity-awesome-skills","stars":34616,"topics":["agent-skills","agentic-skills","ai-agent-skills","ai-agents","ai-coding","ai-workflows","antigravity","antigravity-skills","claude-code","claude-code-skills","codex-cli","codex-skills","cursor","cursor-skills","developer-tools","gemini-cli","gemini-skills","kiro","mcp","skill-library"],"license":"mit","html_url":"https://github.com/sickn33/antigravity-awesome-skills","pushed_at":"2026-04-22T06:40:00Z","description":"Installable GitHub library of 1,400+ agentic skills for Claude Code, Cursor, Codex CLI, Gemini CLI, Antigravity, and more. Includes installer CLI, bundles, workflows, and official/community skill collections.","skill_md_sha":"700f99b1c53d8199f0130736c60469b194208016","skill_md_path":"skills/pakistan-payments-stack/SKILL.md","default_branch":"main","skill_tree_url":"https://github.com/sickn33/antigravity-awesome-skills/tree/main/skills/pakistan-payments-stack"},"layout":"multi","source":"github","category":"antigravity-awesome-skills","frontmatter":{"name":"pakistan-payments-stack","description":"Design and implement production-grade Pakistani payment integrations (JazzCash, Easypaisa, bank/PSP rails, optional Raast) for SaaS with PKR billing, webhook reliability, and reconciliation."},"skills_sh_url":"https://skills.sh/sickn33/antigravity-awesome-skills/pakistan-payments-stack"},"updatedAt":"2026-04-23T00:51:22.345Z"}}