/** * Valtech Donation / Support — tipos. * * Nota legal importante: el dinero recibido por una entidad con fines de lucro * NO es una "donación" deducible de impuestos — es ingreso afecto. Por eso la * UI debe usar lenguaje de "aporte voluntario / apoyo", nunca "donación" en su * sentido jurídico. Ver `docs/` (pendiente) y la vista Support del consumer. */ /** * Métodos de aporte soportados. * - `ads` — el usuario ve publicidad rewarded (opt-in) para apoyar. * - `coffee` — pago único vía proveedor externo (Buy Me a Coffee / Ko-fi). * - `bank` — transferencia bancaria directa (se muestran los datos). */ export type DonationMethod = 'ads' | 'coffee' | 'bank'; /** Proveedor del método "café". El merchant of record es el proveedor. */ export type CoffeeProvider = 'buymeacoffee' | 'kofi' | 'custom'; /** Proveedor de publicidad rewarded. */ export type AdsProvider = 'admob' | 'adsense' | 'custom'; /** * Datos de una cuenta bancaria para transferencia. Pensado para ser * por-país (el modelo factory es 1 producto = 1 dominio, con datos * fiscales/bancarios distintos por mercado). */ export interface BankAccount { /** ISO country code — ej. 'CL', 'AR', 'MX'. */ country: string; /** Nombre del banco. */ bank: string; /** Tipo de cuenta — ej. 'Cuenta Corriente', 'Vista', 'Checking'. */ accountType: string; /** Número de cuenta / IBAN / CBU. */ number: string; /** Identificador fiscal del titular — RUT, CUIT, RFC, etc. */ taxId: string; /** Nombre del titular de la cuenta. */ holder: string; /** Email para enviar comprobante de transferencia. */ email?: string; /** Moneda — ej. 'CLP', 'USD'. */ currency?: string; } /** Config del método "café". */ export interface CoffeeConfig { provider: CoffeeProvider; /** URL pública del perfil (BMC/Ko-fi) o checkout custom. */ url: string; } /** Config del método "ads" (rewarded, opt-in). */ export interface AdsConfig { provider: AdsProvider; /** ID de la unidad de anuncio rewarded. */ rewardedUnitId?: string; } /** * Configuración del feature Donation/Support. * * Cada app del factory declara qué métodos habilita. Una vista heredada * (`val-*` page) renderiza solo los métodos en `methods`. */ export interface ValtechDonationConfig { /** AppID — para tracking de intents (ej. analytics). */ appId?: string; /** Métodos habilitados, en orden de aparición en la UI. */ methods: DonationMethod[]; /** Config del método café — requerido si `methods` incluye `'coffee'`. */ coffee?: CoffeeConfig; /** Cuentas bancarias — requerido si `methods` incluye `'bank'`. */ bank?: { accounts: BankAccount[]; }; /** Config de ads — requerido si `methods` incluye `'ads'`. */ ads?: AdsConfig; } /** * Resultado de un intento de aporte. Devuelto por los métodos del servicio * de forma descriptiva (no se lanzan excepciones para flujos esperables). */ export interface DonationActionResult { method: DonationMethod; /** `true` si la acción se inició correctamente. */ ok: boolean; /** Motivo cuando `ok` es `false` — ej. 'not-configured', 'not-supported'. */ reason?: string; }