Why hotels care
Chargebacks are a desk + accounting event, not a Stripe Dashboard hobby. When a guest disputes a stay deposit or folio settlement, the hotel needs:
- The folio / payment marked disputed in the PMS
- Night audit / cash reports that don’t pretend the money is still final
- A path to evidence (folio PDF, reg card, auth log) without leaving HAIP
Today Stripe webhooks handle payment_intent.succeeded|payment_failed|canceled. There is no dispute lifecycle wired into payments/folios.
Current state (code anchors)
apps/api/src/modules/payment/stripe-webhook.controller.ts — PI events only
PaymentService — authorize / capture / refund with atomic claims (Bug 1)
- Folio + A/R + cashier modules exist; disputes are not a first-class payment status today
- PCI rule unchanged: never store raw card data
What we need
- Handle Stripe dispute events (
charge.dispute.created|updated|closed — confirm against current Stripe API docs, don’t invent)
- Map dispute → HAIP payment (+ folio note / status flag) with idempotency on Stripe dispute id
- Staff notification (critical) to property finance/front-office roles
- Operator runbook: what evidence to pull from HAIP for representment
- Tests with signed webhook fixtures; dashboard surfacing (list/badge) can be a follow-up slice
Open questions (GMs / controllers — comment)
Do not invent accounting law. If the KB/docs don’t lock the GL treatment, implement the payment flag + notification first and leave GL posting behind a clearly labeled follow-up.
Acceptance criteria
How to contribute
Perfect for someone who has integrated Stripe Connect/disputes or run hotel finance through chargeback season. Use the Stripe skill/docs; sandbox disputes are fine.
Search keywords: chargeback, Stripe dispute, folio, hotel payments, representment, payment_intent, A/R, night audit
Why hotels care
Chargebacks are a desk + accounting event, not a Stripe Dashboard hobby. When a guest disputes a stay deposit or folio settlement, the hotel needs:
Today Stripe webhooks handle
payment_intent.succeeded|payment_failed|canceled. There is no dispute lifecycle wired into payments/folios.Current state (code anchors)
apps/api/src/modules/payment/stripe-webhook.controller.ts— PI events onlyPaymentService— authorize / capture / refund with atomic claims (Bug 1)What we need
charge.dispute.created|updated|closed— confirm against current Stripe API docs, don’t invent)Open questions (GMs / controllers — comment)
needs_response, or wait for lost dispute?Do not invent accounting law. If the KB/docs don’t lock the GL treatment, implement the payment flag + notification first and leave GL posting behind a clearly labeled follow-up.
Acceptance criteria
docs/integrations/runbook for hotel financeHow to contribute
Perfect for someone who has integrated Stripe Connect/disputes or run hotel finance through chargeback season. Use the Stripe skill/docs; sandbox disputes are fine.
Search keywords: chargeback, Stripe dispute, folio, hotel payments, representment, payment_intent, A/R, night audit