/** * L'état d'un paiement. * * ⚠️ **`indetermine` (0.9.0) n'est PAS `pending`.** `pending` dit « la réponse peut encore * arriver » — par le webhook, ou par le retour du client sur la page de succès. C'est vrai tant * qu'un de ces deux chemins reste ouvert. * * `indetermine` dit « la réponse est **perdue** » : on IGNORE si le client a été débité. Les * confondre fait attendre indéfiniment une réponse qui ne viendra jamais — et une vente en attente * perpétuelle fausse le rapprochement comptable. * * ⚠️ **Valeur ADDITIONNELLE** : aucune n'est retirée. Les consommateurs qui ne la traitent pas se * comportent exactement comme avant. Le passage de `pending` à `indetermine` n'est pas automatique * — il demande un délai et une tentative d'interrogation (cf. `docs/02`, étape 4). */ /** * `conteste` (1.4.0) : un TIERS a repris l'argent. Ni `failed` (le client a bien payé, et * consommé) ni `refunded` (on n'a pas remboursé de son plein gré, et il y a des frais). */ export type PaymentStatus = 'pending' | 'paid' | 'refunded' | 'failed' | 'indetermine' | 'conteste'; /** * Le CANAL — par quel chemin le moyen atteint la banque. Vocabulaire de * `@mostajs/paiement-contrat`. * * Distinct du MOYEN : `tpe` figurait parmi les `PaymentMethodType`, ce qui rendait impossible la * question « ce client a payé par carte au comptoir ou en ligne ? ». Le terminal n'est pas une * façon de payer, c'est une façon de **présenter une carte**. */ export type PaymentChannel = 'en-presence' | 'en-ligne' | 'hors-ligne'; export type PaymentMethodType = 'card' | 'transfer' | 'cash' | 'tpe'; export interface PaymentConfig { /** Default currency code (e.g. 'USD', 'EUR', 'DZD') */ currency: string; /** Fallback currency (used when no currency in request) */ defaultCurrency?: string; /** Stripe secret key (server-side only) */ stripeSecretKey?: string; /** Stripe public key (client-side) */ stripePublicKey?: string; /** Stripe webhook signing secret */ stripeWebhookSecret?: string; /** URL template for successful payment — {orderId} is replaced */ successUrlTemplate: string; /** URL template for cancelled payment — {orderId} is replaced */ cancelUrlTemplate: string; /** Available payment methods */ methods?: PaymentMethodType[]; /** Bank transfer details (for transfer method) */ bankInfo?: { rib: string; bankName: string; holder: string; }; } export interface LineItem { /** Product/service name */ name: string; /** Optional description */ description?: string; /** Unit amount in currency base units (NOT cents — conversion is handled internally) */ unitAmount: number; /** Quantity */ quantity: number; } export interface CheckoutRequest { /** Unique order/reservation identifier */ orderId: string; /** Items to pay for */ lineItems: LineItem[]; /** Override default currency */ currency?: string; /** Override return URL */ returnUrl?: string; /** Additional metadata for Stripe */ metadata?: Record; } export interface CheckoutResult { /** Stripe checkout URL (redirect user here) */ url: string | null; /** Stripe session ID */ sessionId: string; } export interface OrderSummary { /** Display title (e.g. "Reservation #12345") */ title: string; /** Description lines */ lines: { label: string; value: string; }[]; /** Total amount */ amount: number; /** Currency code */ currency: string; } export interface PaymentDTO { id: string; amount: number; currency: string; method: PaymentMethodType; status: PaymentStatus; transactionRef?: string; paidAt?: Date; orderId?: string; /** Nom du dialecte (provider) ayant émis le checkout — v0.6 */ provider?: string; /** Contexte métier propagé au provider et restitué au webhook — v0.6 */ metadata?: Record; } //# sourceMappingURL=index.d.ts.map