/** * emv.ts — Codec QR au standard EMVCo Merchant-Presented Mode (MPM), * le même format que le BR Code brésilien (Pix), l'UPI indien, SGQR, etc. * * Un QR EMV est une suite de blocs TLV (Tag-Length-Value) : * ID (2 chiffres) + Longueur (2 chiffres) + Valeur * * Avantages pour Monegasy : format international, prêt pour un futur rail * interopérable, et porteur de données structurées (montant, devise, * référence) lisibles par n'importe quel lecteur conforme. * * Ce module est volontairement sans dépendance (utilisable côté SDK, web, * mobile et serveur). */ /** Identifiant Monegasy dans le template "Merchant Account Information". */ export declare const MONEGASY_GUID = "com.monegasy"; /** Devise Ariary malgache — ISO 4217 numérique (MGA = 969). */ export declare const CURRENCY_MGA = "969"; /** * CRC-16/CCITT-FALSE (poly 0x1021, init 0xFFFF) — checksum EMV. * Calculé sur toute la chaîne, incluant "6304". */ export declare function crc16ccitt(data: string): string; export interface EmvQrParams { /** Identifiant marchand (merchantId / userId / lien de paiement). */ merchantId: string; /** Nom commercial (≤ 25 car., tronqué). */ merchantName: string; /** Ville (≤ 15 car.). Défaut "Antananarivo". */ merchantCity?: string; /** Montant. Si fourni → QR dynamique (one-time), sinon statique. */ amount?: number; /** Référence / numéro de facture (apparait dans le template 62). */ reference?: string; /** Devise ISO 4217 numérique. Défaut MGA (969). */ currency?: string; /** Code pays ISO 3166-1 alpha-2. Défaut "MG". */ countryCode?: string; /** Merchant Category Code. Défaut "0000". */ mcc?: string; } /** * Construit un QR EMV (BR Code) Monegasy. Le résultat est la chaîne à * encoder dans le QR (ex. "00020101021126..6304XXXX"). */ export declare function buildMonegasyEmvQr(params: EmvQrParams): string; export interface ParsedEmvQr { formatIndicator?: string; poiMethod?: string; /** Templates marchands trouvés (26-51) avec leur GUID + données. */ merchantAccounts: { id: string; guid?: string; merchantId?: string; }[]; mcc?: string; currency?: string; amount?: number; countryCode?: string; merchantName?: string; merchantCity?: string; reference?: string; crc?: string; crcValid: boolean; /** Présent si c'est un QR Monegasy (GUID com.monegasy reconnu). */ monegasy?: { merchantId: string; }; } /** Heuristique rapide : ressemble à un QR EMV ? */ export declare function isEmvQr(s: string): boolean; /** * Parse un QR EMV. Renvoie null si le format n'est pas reconnu. * Valide le CRC et extrait les champs Monegasy si présents. */ export declare function parseEmvQr(raw: string): ParsedEmvQr | null;