L'English Chapel Antananarivo est notre paroisse — l'église anglophone où nous trois allons le dimanche. C'est aussi, discrètement, la chose la plus complète que l'atelier a livrée cette année : un board Odoo 19 qui tient l'administration, un site Vue 3 qui présente la chapelle, un cockpit Nuxt et une API Flask qui planifient les services et consolident les slides, et une application Expo qui met les annonces et les paroles dans la poche de chacun. Cinq surfaces. Une communauté. La même famille les a écrites ; la même famille s'en sert.
Il a fallu écrire une localisation comptable malgache avant de pouvoir livrer le board. Odoo 19 n'avait pas de l10n_mg en base, donc nous en avons écrit un — le PCG, les taxes (TVA, IRSA, retenues à la source, TVA à l'importation), les positions fiscales, un modèle d'exercice fiscal au niveau société, et un post-init hook qui active automatiquement l'ensemble pour toute société dont le pays est Madagascar. l10n_mg_report ajoute les documents statutaires — Bilan, Compte de Résultat, Tableau des Flux de Trésorerie (direct et indirect), Variation des Capitaux Propres — en PDF (QWeb) et en XLSX (via le moteur OCA report_xlsx), avec un cron qui rafraîchit les valeurs en cache. l10n_mg_tax_form livre le Bordereau de Versement de l'Impôt Synthétique (HETRA TAMBATRA), rempli automatiquement depuis le Bilan. La chapelle en avait besoin. Toute autre entité enregistrée à Madagascar en aura besoin aussi.
Les parties intéressantes vivent là où les surfaces se rencontrent. eca_offering enregistre chaque don sur l'une des cinq méthodes de paiement malgaches — Espèces, Virement, Mvola, Airtel Money, Orange Money — et poste une écriture comptable qui débite le compte correspondant (531100 / 512100 / 530002 / 530003 / 530004) et crédite 756100, Libéralités perçues. Les références suivent OFF/YYYY/NNNN depuis une `ir.sequence`. Une fois postée, l'offrande est verrouillée en écriture sauf pour les notes et l'état — annuler produit une contrepartie, pas une suppression discrète. Le trio mobile money, c'est la moitié des habitudes de don du pays qu'une localisation générique aurait manquée.
L'application mobile et le cockpit louange ferment la boucle. Le module annonces expose un contrôleur JSON-RPC en bearer-auth — parce que le `/web/dataset/call_kw` standard d'Odoo 19 est session-only et refuse les API keys d'office — branché sur un utilisateur `ECA Bot` dont le login est `bot@english-chapel-antananarivo.org` et dont la clé API est portée par l'app mobile. L'API Flask louange détient les chants et, pour un service donné, ouvre chaque PowerPoint, copie les slides dans un deck consolidé — layouts, fonds, textes placeholder, tailles de police, alignements — et renvoie une URL au cockpit Nuxt. Le dimanche matin, l'écran diaporama de l'app mobile projette le deck obtenu. Rien n'exige que quelqu'un soit dans la même pièce qu'un ordinateur portable.