Částka z platební brány uložena ve špatné měně
import { Aside } from ‘@astrojs/starlight/components’;
Symptom
Sekce “Symptom”Zahraniční zákazník (jiná země EU) zaplatí roční členství, ale jeho faktura ukazuje absurdně malou částku ve domácí měně — např. „63 Kč” místo očekávaných ~1 500 Kč. Doklad nesedí s tím, co bylo reálně strženo.
Root cause
Sekce “Root cause”Webhook platební brány bral částku přímo a dělil 100, bez ohledu na měnu:
// ŠPATNĚ — předpokládá domácí měnuconst totalCzk = (invoice.amount_paid || 0) / 100; // 6300 → 63Brána účtuje zahraničního zákazníka v jeho měně (EUR). amount_paid = 6300 znamená €63,00, ne 63 domácích jednotek. Kód uložil 63 jako CZK → faktura „63 Kč”.
Fix
Sekce “Fix”Přečíst měnu z payloadu a fakturovat ve správné měně (nebo přepočítat):
const amount = (invoice.amount_paid || 0) / 100;const currency = String(invoice.currency || 'czk').toUpperCase();// Možnost A: fakturuj ve měně transakce (přidat invoice.currency do schématu)// Možnost B: přepočti přes oficiální kurz centrální banky// const czk = amount / fetchRate(currency); // foreign-per-domesticZvolili jsme A: faktura se vystaví v měně, kterou zákazník reálně zaplatil (EUR → EUR doklad). Vyžaduje currency sloupec ve fakturách a měnově-aware render/PDF.
Jak se tomu vyvarovat v jiných systémech
Sekce “Jak se tomu vyvarovat v jiných systémech”- Detection: grep
amount_paid,amount_total,/ 100ve webhoocích a zkontroluj, jestli se poblíž čtecurrency. Pokud ne → bug. - Anti-pattern: hardcoded měnový sufix („Kč”, „$”) u částky odvozené z platební brány; sloupce
*_czkplněné částkou z EUR transakce. - Lepší přístup: (1) ukládej
currencyu každé platby/faktury; (2) render částky podle uložené měny; (3) test s ne-domácí měnou (zahraniční zákazník) v test módu brány.