rentoo

Exploitation

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.

Tâches récurrentes

Indice de référence des loyers (IRL), chaque trimestre

Vérifier les derniers indices enregistrés :

select zone, year, quarter, value from public.irl_indices order by year desc, quarter desc limit 6;

Zones tendues, à chaque nouveau décret

Barèmes fiscaux, chaque année

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).

La veille automatique (fonction 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 :

  1. SQL Editor : créez dans le coffre project_url (l’adresse du projet) et veille_secret (une longue phrase aléatoire de 20 caractères ou plus, choisie par vous).
  2. Secrets des fonctions : VEILLE_SECRET (la même phrase) et ADMIN_EMAIL (votre adresse). L’envoi d’e-mails doit être configuré.
  3. Déployez la fonction 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.

Sauvegardes, à mettre en place

Rien n’est en place dans le dépôt aujourd’hui.

Surveillance du journal des erreurs (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).

Dépannage

Abonnement Stripe

Symptôme courant : le paiement passe chez Stripe, mais la formule ne s’active pas dans Gladoo.

  1. Dans l’application, écran Mon abonnement : le bouton « J’ai payé, ma formule n’apparaît pas » relit le paiement chez Stripe (action 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.
  2. Si cela ne suffit pas, regardez dans Stripe › Développeurs › Webhooks le code de réponse des derniers envois :
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.

E-mails

Notifications sur le téléphone

Roo indisponible

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.