Ce qu’il faut faire régulièrement pour que Gladoo reste juste, et quoi faire quand quelque chose ne marche pas. Les requêtes SQL se lancent dans Supabase › SQL Editor.
irl_indices (script 024). Gladoo s’en sert pour les révisions de loyer et les alertes réglementaires.ADMIN_EMAIL.supabase/migrations/024_indices_irl.sql. Les valeurs se recopient depuis insee.fr.Vérifier les derniers indices enregistrés :
select zone, year, quarter, value from public.irl_indices order by year desc, quarter desc limit 6;
src/lib/zonesData.ts, généré à partir du fichier officiel « Zonage TLV » de data.gouv.fr. Ne pas le modifier à la main.python3 scripts/zones-data.py <fichier.csv>, enregistrez (commit) et lancez npm run deployer.src/lib/zones.ts, à tenir à jour à la main.Après la loi de finances, ajoutez la nouvelle année dans TAX_RULES (src/lib/tax.ts). Pour une année absente, l’application reprend la dernière connue et l’indique (archives/FISCALITE.md).
veille, script 027)Deux tâches planifiées (pg_cron), créées par le script 027 :
| Tâche | Quand (heure du serveur) | Ce qu’elle fait |
|---|---|---|
rentoo-veille-irl |
du 10 au 28 de janvier, avril, juillet et octobre, à 9 h 05 | Cherche le nouvel indice IRL à l’Insee |
rentoo-veille-zones |
le 1er de chaque mois, à 9 h 15 | Vérifie si le fichier « Zonage TLV » a changé |
Mise en place, une seule fois, avant le script 027 :
project_url (l’adresse du projet) et veille_secret (une longue phrase aléatoire de 20 caractères ou plus, choisie par vous).VEILLE_SECRET (la même phrase) et ADMIN_EMAIL (votre adresse). L’envoi d’e-mails doit être configuré.veille, puis exécutez le script 027.Essai immédiat, puis lecture de la réponse (attendu : 200 et "ok":true) :
select public.veille_call('zones');
select status_code, content from net._http_response order by id desc limit 1;
Les tâches sont visibles dans cron.job, leur historique dans cron.job_run_details :
select jobname, schedule, active from cron.job;
select jobid, status, start_time, return_message from cron.job_run_details order by start_time desc limit 20;
Autre tâche planifiée : rentoo-rappel-assurance (script 044), chaque jour à 8 h 30, rappelle aux locataires leur attestation d’assurance.
Les récapitulatifs par e-mail (mensuel rentoo-recap-mensuel, hebdomadaire rentoo-recap-hebdo) sont facultatifs et se programment à la main (archives/AMELIORATIONS-jusqu-au-12-10-2026.md, sections « Récapitulatif mensuel par e-mail » et « Récapitulatif de la semaine par e-mail »). À vérifier : s’ils sont programmés en production.
Rien n’est en place dans le dépôt aujourd’hui.
archives/INSTALLATION-supabase.md).app_errors)Chaque plantage et chaque enregistrement qui échoue est noté avec l’écran, l’appareil et la version. Aucune alerte n’existe encore : il faut regarder soi-même.
Les 50 dernières erreurs :
select created_at, screen, platform, message, context
from public.app_errors order by created_at desc limit 50;
Les plus fréquentes :
select left(message, 100) as erreur, count(*) as fois, count(distinct user_id) as personnes, max(created_at) as derniere
from public.app_errors group by 1 order by 2 desc limit 20;
Dans context, kind indique l’origine : sync (écriture en ligne), arriere-plan (action secondaire, avec what), window.error, promise, global.
Piste de l’audit : un e-mail quotidien quand de nouvelles erreurs apparaissent, ou un service comme Sentry. Surveiller aussi les journaux des fonctions (Supabase › Edge Functions › Logs).
Symptôme courant : le paiement passe chez Stripe, mais la formule ne s’active pas dans Gladoo.
sync de la fonction billing) et active la formule. Il s’affiche tant qu’aucune formule payée n’est active. Au retour du paiement, cette relecture se fait déjà automatiquement.| Code | Cause | Correction |
|---|---|---|
| 400 | Signature refusée : le secret du webhook ne correspond pas | Recopier le secret de signature du webhook dans STRIPE_WEBHOOK_SECRET |
| 422 | Prix inconnu : l’identifiant de prix Stripe n’est dans aucun secret STRIPE_PRICE_* |
Déclarer les six secrets STRIPE_PRICE_* avec les bons identifiants (mode test ou réel) |
| 503 | BILLING_SECRET différent de celui de la base, ou paiement pas configuré |
Recopier la valeur affichée par le script 018 dans BILLING_SECRET |
| 500 | Erreur pendant l’enregistrement ; Stripe renverra l’événement | Lire les journaux de la fonction billing |
Le même code 503 est renvoyé à Stripe (webhook) et dans l’application (achat, portail, relecture).
Le message renvoyé par la fonction aide aussi : « Paiement momentanément indisponible… » (secret BILLING_SECRET), « Paiement reçu, mais la formule n’est pas reconnue… rien n’est à repayer » (prix), « Le paiement en ligne n’est pas encore configuré » (clés absentes).
Les journaux de la fonction donnent un diagnostic de signature sans jamais écrire le secret. D’après les commentaires du code, Stripe renvoie plus tard les événements refusés.
SMTP_HOST, SMTP_PORT, SMTP_USER, SMTP_PASS (ou RESEND_API_KEY) et MAIL_FROM. Avec Brevo, MAIL_FROM est obligatoire et doit être une adresse vérifiée.RESEND_API_KEY est déclaré, il est utilisé en priorité sur le SMTP.emails.md, puis le secret MAIL_DOMAIN.npx eas-cli@latest credentials). iPhone : EAS crée la clé lors de la compilation.location envoie les notifications seulement si ACCESS_SECRET est déclaré.pg_net, elles partent seulement à l’action suivante dans l’application.| Message | Cause | Correction |
|---|---|---|
| « Le copilote n’est pas encore configuré (clé Anthropic manquante) » | Secret ANTHROPIC_API_KEY absent |
Déclarer le secret |
| « Clé Anthropic refusée » | Clé invalide ou révoquée | Créer une nouvelle clé et remplacer le secret |
| « Le service d’IA est très sollicité » | Service d’IA saturé (429 ou 529) | Réessayer dans une minute |
| « Service d’IA indisponible (…) » | Autre erreur du service | Lire les journaux de la fonction copilot ; vérifier COPILOT_MODEL s’il est déclaré |
| « Activez d’abord le copilote » | Roo pas activé sur ce compte | L’utilisateur active Roo |
| « Crédits Roo épuisés » | Crédits du mois consommés | Attendre le 1er du mois ou changer de formule |
Une photo HEIC n’est pas lue (« Format non pris en charge ») ; un fichier de plus de 10 Mo non plus.