Architecture technique, modules fonctionnels, base de données, API, workflows, services externes et guide d'utilisation du back-office d'administration SOS Animal.
Le back-office supporte 6 niveaux de permissions, du Superadmin au Distributeur :
| Rôle | Niveau | Portée | Droits clés |
|---|---|---|---|
| SUPERADMIN | 5 | Mondial | Accès total, override, création de tous les comptes |
| RC HQ | 3 | Mondial | Vue tous pays, gestion distributeurs, analytics globales, informé des promos |
| RC LEGAL | 3 | Mondial | Validation juridique des soumissions, cadres légaux |
| COUNTRY ADMIN | 2 | 1 pays | Valide les promos (étape 2), gère directeurs régionaux, vue pays uniquement |
| DIR. RÉGIONAL | 2 | 1 région | Valide les promos (étape 1), gère distributeurs de sa zone |
| COUNTRY EDITOR | 1 | 1 pays | Crée du contenu, soumet pour validation |
| DISTRIBUTEUR | 0 | 1 magasin | Crée des promos (soumises à validation), gère son profil |
Chaque étape est tracée dans promo_approvals (audit trail). Le rejet est possible à tout niveau avec motif obligatoire.
SQLite serverless — 40 tables réparties en 11 domaines :
| Domaine | Tables | Détail |
|---|---|---|
| Admin | 7 | admin_users, submissions, submission_comments, submission_files, published_content, admin_audit_log, vet_import_jobs |
| Analytics | 3 | user_sessions (1 500), symptom_events, analytics_daily |
| Notifications | 3 | push_subscriptions (20), notifications, ai_health_alerts (12) |
| Distributeurs | 7 | distributors (44), distributor_promotions (14), promo_documents, promo_approvals, country_directors (10), legal_frameworks, admin_notifications |
| Gestion | 3 | regional_directors (25), vets (21 827), events (13) |
| Dispatch | 2 | dispatches, dispatch_vets |
| Lois | 8 | lois_codes, lois_titres, lois_chapitres, lois_articles, lois_articles_historique, lois_liens, lois_textes_consolides, lois_fts (FTS5) |
| SOS Parents | 9 | parents_users, parents_ado_profiles, parents_relationships, parents_pars_scores, parents_exercise_completions, parents_journal_entries, parents_messages, parents_badges, parents_challenge_completions |
| SOS Droit | 1+ | diagnoses_rupture + 6 modules juridiques |
| Adoption | 3 | animals (97), shelters (80), breeders (26) |
| Races | 1 | breed_profiles (30 fiches : 20 chiens + 10 chats) |
| Profil Animal | 2 | pet_profiles, pet_health_records |
Cloudflare Workers (ES Module), routage dans worker.js. Modules : admin-routes.js, distributor-routes.mjs, notifications-routes.mjs, analytics-routes.mjs.
| Méthode | Endpoint | Description |
|---|---|---|
| POST | /api/admin/auth/login | Connexion admin (PBKDF2-SHA256) |
| GET | /api/admin/auth/me | Utilisateur courant |
| POST | /api/admin/bootstrap | Premier compte superadmin |
| CRUD | /api/admin/users | Gestion des comptes admin |
| Méthode | Endpoint | Description |
|---|---|---|
| GET | /api/distributors/nearby?lat=&lng=&radius=50 | Promos à proximité (public, Haversine) |
| POST | /api/distributors/register | Inscription distributeur (self-service) |
| CRUD | /api/distributors/admin/distributors | Gestion distributeurs (filtrage pays) |
| CRUD | /api/distributors/admin/distributors/:id/promotions | Promos par distributeur |
| POST | /api/distributors/admin/promotions/:id/regional-approve | Validation dir. régional → COUNTRY_REVIEW |
| POST | /api/distributors/admin/promotions/:id/approve | Validation dir. pays → ACTIVE |
| POST | /api/distributors/admin/promotions/:id/reject | Rejet (tout niveau, motif) |
| GET | /api/distributors/admin/stats?country=FR | KPIs distributeurs par pays |
| Méthode | Endpoint | Description |
|---|---|---|
| POST | /api/track | Log session utilisateur (public, consent RGPD) |
| GET | /api/admin/analytics/overview?days=30 | KPIs globaux (sessions, espèces, urgences, modules) |
| GET | /api/admin/analytics/trends?days=90&country=FR | Courbe temporelle filtrable |
| GET | /api/admin/analytics/breeds?species=dog | Top races × pathologies |
| GET | /api/admin/analytics/countries | Répartition mondiale |
| GET | /api/admin/analytics/symptoms | Symptômes émergents + tendances % |
| Méthode | Endpoint | Description |
|---|---|---|
| POST | /api/notifications/subscribe | Enregistrer device token (public) |
| GET | /api/notifications/active?country=FR | Alertes actives (public) |
| POST | /api/notifications/admin/send | Envoyer notification push |
| POST | /api/notifications/admin/ai-scan | Déclencher scan IA santé |
| GET | /api/notifications/admin/ai-alerts | Alertes IA non examinées |
| Méthode | Endpoint | Description |
|---|---|---|
| GET/POST | /api/admin/events | Salons & Foires (CRUD) |
| POST | /api/admin/events/:id/push | Push + QR code pour événement |
| POST | /api/admin/import/parse-preview | Preview import multi-format |
| POST | /api/admin/import/run | Exécuter import |
| CRUD | /api/admin/country-directors | Directeurs pays |
| CRUD | /api/admin/regional-directors | Directeurs régionaux |
| GET | /api/admin/vets/list?country=&page= | Liste vétérinaires paginée |
| Service | Usage | Clé env |
|---|---|---|
| Claude AI (Anthropic) | Veille santé quotidienne — scan WOAH/ANSES/DGAL/EFSA → ai_health_alerts | ANTHROPIC_API_KEY |
| GPT-4o Vision (OpenAI) | Analyse photos : peau, selles, yeux, plaies + extraction vocale Twilio | OPENAI_API_KEY |
| Resend | Emails : SLA escalade, invitations distributeurs, rappels 48h, alertes IA | RESEND_API_KEY |
| Twilio | SVI vocal 09 39 24 26 16 (chien/chat → description → GPT → deep link SMS) | TWILIO_ACCOUNT_SID + AUTH_TOKEN |
| Nominatim (OSM) | Géocodage auto des adresses distributeurs, rayon Haversine 50km | Gratuit |
| QR Server API | Génération QR codes de réduction pour salons & foires | Gratuit (api.qrserver.com) |
Schedule : 0 9 * * * (tous les jours à 9h UTC)
| # | Handler | Description |
|---|---|---|
| 1 | handleDailyHealthScan | Claude scanne WOAH/ANSES/DGAL → ai_health_alerts + email superadmins |
| 2 | handlePromoWorkflowReminders | Promos PENDING > 48h → email dir. pays + admin_notifications |
| 3 | handleAdminSLA | Soumissions : T-24h legal, T+12h HQ, T+24h superadmin (escalade) |
| 4 | handleScheduled | Follow-up J+10 dispatch vets — "Comment va votre animal ?" |
| 5 | handleSuiviCron | Daily check-in, weekly vet report (lundi), J+30 final + désactivation |
Données collectées : espèce, race, âge, module, symptômes, urgence, device, pays, temps passé.
12 alertes réelles injectées : DNC 113 foyers, IAHP 60+ foyers, PSA Catalogne, fièvre aphteuse DE/HU/SK...
Ciblage : target_species + target_breeds + target_modules + target_age_min/max + radius_km.
| Application | Bundle ID | Contenu |
|---|---|---|
| App Diagnostic | com.sosanimal.app | 22 modules chien/chat (300 000+ parcours), alertes bandeau, promos carousel, onboarding géoloc/notifs, adoption, races, nutrition, carnet, communauté, solidarité, services/carte, profil QR, UGC, recherche |
| App Admin | com.sosanimal.admin | Back-office complet, 6 groupes nav, dashboard exécutif, analytics 4 graphiques, import 8 formats, salons QR |
| App Agricole | — | 5 modules élevage : Bovins (31 symptômes, 7 maladies régl.), Équins, Volailles, Porcins, Ovins |
| Service | Usage |
|---|---|
| Cloudflare Workers | API REST + 5 cron jobs |
| Cloudflare Pages | Site statique (admin + diagnostic + agricole) |
| Cloudflare D1 | SQLite serverless — 40 tables |
| Cloudflare R2 | Stockage fichiers (soumissions, uploads) |
| Capacitor iOS | 2 apps natives (WebView) |
| GitHub | mrkleinemmanuel24-hub/SOS-TOUTOU |
14 promotions réalistes avec ciblage intelligent race × module × âge :
| Pays | Distributeur | Promo | Ciblage | Statut |
|---|---|---|---|---|
| FR | Truffaut | Bouledogue Digestif -25% | 🐶 Bouledogue FR · Digestif · >2 ans | ACTIVE |
| FR | Truffaut | Maine Coon Kitten 2+1 | 🐱 Maine Coon · <4 ans | ACTIVE |
| FR | Animalis | Dermacomfort Medium NEW | 🐶 Dermatologie · >1 an | ACTIVE |
| FR | Jardiland | Cavalier Cardio -20% | 🐶 Cavalier KC · Cardiologie · >3 ans | PENDING |
| FR | MaxiZoo | Urinary Care Chat -15% | 🐱 Urologie · >2 ans | PENDING |
| DE | Fressnapf München | Dackel Gelenk -30% | 🐶 Dackel · Locomoteur · >3 ans | ACTIVE |
| DE | Futterhaus Berlin | Bulldogge Respiratory NEW | 🐶 Fr. Bulldogge · Respiratoire | COUNTRY_REVIEW |
| GB | Pets at Home London | 3 for 2 Breed Range | 🐶 Multi-races (Lab, Cocker, GSD, FB) | ACTIVE |
| GB | Pets at Home Manchester | Senior Joints -25% | 🐶 Locomoteur · >7 ans | PENDING |
| ES | Kiwoko Madrid | Galgo Sport -20% | 🐶 Galgo · Locomoteur/Digestif | ACTIVE |
| ES | Tiendanimal Barcelona | Sterilised 37 NEW | 🐱 Digestif/Urologie · >1 an | COUNTRY_REVIEW |
| IT | Arcaplanet Milano | Pastore Tedesco -20% | 🐶 Pastore · Locomoteur/Digestif | ACTIVE |
| IT | Isola dei Tesori Roma | Persiano Occhi NEW | 🐱 Persiano · Ophtalmo/Dermato | PENDING |
| Date | Événement | Lieu | Type | QR Réduction | Statut |
|---|---|---|---|---|---|
| 3-4 jan | Salon du Chiot | Port-Marly FR | Salon | -15% Starter Kit | PAST |
| 7-8 fév | Salon du Chiot | Antibes FR | Salon | -10% toute gamme | PAST |
| 28 fév-1 mar | Salon du Chiot | Évreux FR | Salon | -20% 1er achat | PAST |
| 5-8 mar | Crufts 2026 | Birmingham GB | Exposition | Free sample pack | PAST |
| 13-15 mar | Paris Animal Show | Porte de Versailles FR | Salon | -25% sur le stand | ACTIVE |
| 11-12 avr | TIERWELT | Rostock DE | Foire | -20% am Stand | UPCOMING |
| 2-3 mai | CACIB Valence | Valence FR | Exposition | -15% race spécifique | UPCOMING |
| 8-10 mai | Dogs & Fun | Magdeburg DE | Foire | -10% alle Produkte | UPCOMING |
| 12-15 mai | Interzoo | Nuremberg DE | Foire pro | Pro pass -30% | UPCOMING |
| 17-18 mai | Salon du Chiot | Toulouse FR | Salon | -20% Puppy/Kitten | UPCOMING |
| 4-6 sept | World Dog Show | Göteborg SE | Exposition | VIP pass RC | UPCOMING |
| 5-6 sept | Nationale Élevage | Dijon FR | Exposition | -15% gamme éleveur | UPCOMING |
| 21-22 nov | Salon du Chat | Autun FR | Salon | -20% RC Feline | UPCOMING |
Sources : Société Centrale Canine, FCI, The Kennel Club, NürnbergMesse, Paris Animal Show, LOOF.
| Format | Extensions | Usage typique | Conversion |
|---|---|---|---|
| CSV | .csv | SAP, Excel, Oracle — auto-détection , ou ; | Natif (parseCSV) |
| Excel | .xlsx .xls | Bureautique universelle | SheetJS (client-side) |
| TSV | .tsv .txt | MySQL, SAP exports tabulés | Tab → CSV |
| JSON | .json | API REST, Salesforce, MongoDB | JSON.parse → CSV |
| XML | .xml | SAP IDoc, Oracle XML dumps | DOMParser → CSV |
| SQL INSERT | .sql | Dumps MySQL, PostgreSQL, Oracle | Regex extraction → CSV |
| vCard | .vcf | Outlook, iPhone, LDAP contacts | Line parser → CSV |
| dBase/FoxPro | .dbf | Legacy ERP, SIG | SheetJS DBF → CSV |
Détection d'encodage : Windows-1252 automatique pour les exports SAP avec accents français.
Mapping automatique : Synonymes FR/EN/DE par cible (raison_sociale → name, code_postal → zip, etc.)
Cibles d'import : Directeurs pays, Directeurs régionaux, Distributeurs (chacun avec ses champs spécifiques).
Plateforme d'adoption intégrée avec données scrapées de 3 sources majeures et quiz de compatibilité.
| Source | Type | Données |
|---|---|---|
| Seconde Chance | Refuge | Animaux + fiches contact refuges |
| Paaw | Plateforme adoption | Animaux + refuges partenaires |
| Animaux.fr | Annuaire | Animaux + annonces |
| Chiens de France | Éleveurs | 26 éleveurs référencés |
Chaque fiche comprend : photo, nom, espèce, race, age, sexe, taille, description, refuge d'origine, et boutons d'action :
| Action | Fonctionnalité |
|---|---|
| Appeler | tel: direct vers le refuge |
| mailto: pré-rempli avec nom de l'animal | |
| SMS | sms: pré-rempli |
| Itinéraire | Google Maps / Apple Plans vers le refuge |
6 filtres combinables : espèce (chien/chat), race, âge, sexe, taille (petit/moyen/grand), source (Seconde Chance/Paaw/Animaux.fr).
Encyclopédie de 30 races avec fiches détaillées, images DALL-E et recommandations nutrition Royal Canin.
| Section | Contenu | Source |
|---|---|---|
| Description | Origine, histoire, morphologie | FCI / LOOF / AKC |
| Caractère | Tempérament, comportement, sociabilité | Littérature cynophile/féline |
| Prédispositions santé | Pathologies connues de la race | BSAVA Manual / Merck Vet Manual |
| Nutrition RC | Produit Royal Canin recommandé par âge | Catalogue Royal Canin |
| Besoins | Exercice, toilettage, espace minimum | Guides vétérinaires |
| Compatibilité | Score sur 5 (enfants, appartement, sport...) | Évaluation comportementale |
| Anecdote | Fait historique ou culturel de la race | Littérature |
Filtrage par espèce (chien/chat) avec recherche textuelle. Chaque race est illustrée par une image DALL-E originale (style cartoon professionnel).
Calculateur nutritionnel basé sur les formules vétérinaires standards avec recommandation produit Royal Canin.
| Facteur | Coefficient | Détail |
|---|---|---|
| Chien adulte actif | x 1.6 | Activité modérée quotidienne |
| Chien sédentaire / stérilisé | x 1.2 | Risque surpoids (+30% animaux concernés) |
| Chiot en croissance | x 2.0 — 3.0 | Selon âge et race |
| Chat adulte | x 1.2 — 1.4 | Indoor vs outdoor |
| Chat stérilisé | x 1.0 | Besoins réduits |
| Gestation | x 1.6 — 2.0 | Dernier tiers |
| Lactation | x 2.0 — 6.0 | Selon taille portée |
| Senior (>7 ans) | x 1.0 — 1.2 | Métabolisme réduit |
Basée sur la race, l'age et le profil de l'animal. Affiche le produit RC adapté avec la quantite en grammes par jour. Liens vers le catalogue officiel.
Carnet de santé numérique complet avec 6 onglets de suivi et graphique de poids.
| Onglet | Données | Fonctionnalités |
|---|---|---|
| Vaccins | Nom, date, rappel, vétérinaire | Ajout, modification, alertes rappel |
| Traitements | Antiparasitaires, médicaments, posologie | Historique complet, durée |
| Chirurgies | Stérilisation, détartrage, interventions | Date, clinique, notes post-op |
| Poids | Historique pesées avec dates | Graphique Canvas natif (courbe temporelle) |
| Allergies | Alimentaires, médicamenteuses, contact | Signalement visible dans tous les modules |
| Vétérinaire | Coordonnées du vétérinaire traitant | Lien avec base 21 827 vétos |
Toutes les données sont persistées en localStorage sur l'appareil de l'utilisateur (pas de cloud, conformité RGPD par design).
Actions : Bouton Partager (envoi PDF au vétérinaire) + Bouton Imprimer (génération page A4 imprimable).
Réseau social intégré avec groupes par race et discussions thématiques.
| Type | Exemples | Contenu |
|---|---|---|
| Groupes race | Labrador, Berger Allemand, Maine Coon... | 1 groupe par race (30 races = 30 groupes) |
| Thématiques | Nutrition, Santé, Éducation, Adoption, Sport canin, Senior, Chiot/Chaton, Voyage | 8 groupes transversaux |
Discussions réalistes avec réponses pré-générées. Les utilisateurs peuvent poster, répondre et liker (localStorage).
| Fonctionnalité | Description |
|---|---|
| Post | Rédiger un message dans un groupe |
| Reply | Répondre à un message existant |
| Like | Liker un message (compteur visible) |
| Histoires d'adoption | Témoignages réels d'adoptants |
| Conseils experts RC | Contenu éditorial Royal Canin intégré aux discussions |
| Événements | Annonces de rencontres et sorties |
Module de solidarité animale avec partenaires, actions concrètes et compteurs solidaires.
Contenu éditorial intégré (pas de liens sortants) pour chaque partenaire : présentation, mission, actions possibles.
| # | Action | Description |
|---|---|---|
| 1 | Famille d'accueil | Accueillir temporairement un animal en attente d'adoption |
| 2 | Promenades bénévoles | Promener les chiens des refuges partenaires |
| 3 | Dons matériel | Couvertures, jouets, gamelles — liste des besoins par refuge |
| 4 | Dons financiers | Soutien aux soins vétérinaires des refuges |
| 5 | Partage & sensibilisation | Diffusion des profils animaux adoptables |
Histoires d'adoption : Témoignages illustrés avec images races DALL-E.
Clubs & rencontres : Annuaire de clubs canins et félins avec événements.
Compteurs solidaires : Animations chiffrées (adoptions, dons, bénévoles) avec incrémentation visuelle.
Carte interactive des services animaliers à proximité basée sur la géolocalisation.
| Catégorie | Source | Données |
|---|---|---|
| Vétérinaires | Base D1 SIRENE + OSM | 21 827 fiches, 1 351 emails, 3 321 téléphones |
| Refuges | Module Adoption | 80 refuges avec contact |
| Parcs canins | Données communautaires | Espaces verts et parcs à chiens |
| Toiletteurs | Annuaires professionnels | Salons de toilettage à proximité |
| Lieux dog-friendly | Données communautaires | Restaurants, hôtels, magasins acceptant les animaux |
| Transports animaux | Annuaires spécialisés | Taxi animalier, transport vétérinaire |
Chaque fiche comprend : nom, adresse, distance, et 4 boutons d'action (Appeler, Email, SMS, Itinéraire).
Dédoublonnage automatique : Détection et fusion des doublons basée sur le nom normalisé + code postal.
Fiche d'identité numérique complète de l'animal avec génération de QR code SVG.
Upload via caméra ou fichier. Redimensionnement automatique à 400px (Canvas API). Stockage en localStorage (base64).
| Champ | Type | Détail |
|---|---|---|
| Espèce | Sélection | Chien / Chat |
| Race | Sélection | Liée aux 30 fiches races |
| Date de naissance | Date | Calcul automatique de l'âge |
| Sexe | Sélection | Mâle / Femelle |
| Stérilisé | Oui/Non | Impact sur calcul nutritionnel |
| Poids | Nombre (kg) | Lié au carnet de santé |
| Couleur | Texte | Description robe |
| Champ | Format |
|---|---|
| Puce électronique | 15 chiffres (norme ISO 11784/11785) |
| Tatouage | 3 lettres + 3 chiffres |
| I-CAD | Numéro fichier national d'identification |
QR code généré en SVG natif (pas de dépendance externe). Encode les informations essentielles de l'animal. Impression sur page A4 dédiée.
Liens : Le profil est lié au Carnet de Santé (section 15) et au Module Nutrition (section 14) pour le pré-remplissage automatique.
Contenu généré par les utilisateurs intégré à la communauté et aux modules.
| Type | Description | Stockage |
|---|---|---|
| Posts communauté | Messages dans les groupes race et thématiques | localStorage |
| Likes | Compteur de likes sur chaque post | localStorage |
| Commentaires | Réponses aux posts et fiches | localStorage |
| Partages | Partage de fiches animaux et races | Web Share API |
Vidéos éducatives et divertissantes intégrées via iframe YouTube :
| Source | Contenu | Crédit |
|---|---|---|
| The Unique Pet Show | Émissions animalières | Yoann Latouche Group (YLG) |
| YLG | Contenus éducatifs animaux | Yoann Latouche Group (YLG) |
Moteur de recherche fuzzy intégré avec Fuse.js, accessible partout dans l'application.
| Composant | Détail |
|---|---|
| Librairie | Fuse.js v7.0.0 (CDN, 6 KB gzippé) |
| Recherche fuzzy | Tolérance aux fautes de frappe (threshold 0.4) |
| Normalisation | Accents français (NFD + RegExp diacritiques) |
| Raccourci clavier | Cmd+K (macOS) / Ctrl+K (Windows/Linux) |
5 types de données indexés avec résultats colorés par type :
| Type | Données indexées | Couleur résultat |
|---|---|---|
| Races | 30 fiches races (nom, description, caractère) | Bleu |
| Animaux | 97 animaux adoptables (nom, race, refuge) | Vert |
| Refuges | 80 refuges (nom, ville, département) | Orange |
| Éleveurs | 26 éleveurs (nom, races, localisation) | Violet |
| Modules | 22 modules (nom, description, mots-clés) | Rouge |
Navigation directe : Cliquer sur un résultat navigue directement vers la page/fiche correspondante (hash routing).
Single Page Application unifiée regroupant tous les modules dans un fichier unique.
| Fichier | Rôle | Taille |
|---|---|---|
app.html | Structure HTML + templates des 12 vues | 1 fichier unique |
app.css | Styles (responsive, mobile-first) | 1 fichier unique |
app.js | Logique, routage, données, modules | 1 fichier unique |
12 routes principales :
| Route | Module |
|---|---|
#accueil | Page d'accueil avec dashboard |
#adoption | Module Adoption (section 12) |
#races | Module Races (section 13) |
#nutrition | Module Nutrition (section 14) |
#carnet | Module Carnet de Santé (section 15) |
#communaute | Module Communauté (section 16) |
#ensemble | Module Ensemble (section 17) |
#services | Module Services & Carte (section 18) |
#profil | Module Profil Animal (section 19) |
#ugc | UGC — Contenu Utilisateur (section 20) |
#recherche | Recherche Intelligente (section 21) |
#diagnostic | 9 modules pathologiques (Cardio, Respi, etc.) |
| Composant | Description |
|---|---|
| Modal system | Système de modales réutilisable (fiches, quiz, détails) |
| Menu hamburger | Navigation mobile (slide-in, 12 entrées) |
| Nav desktop | Barre de navigation avec dropdowns catégorisés |
| Breadcrumbs | Fil d'Ariane contextuel (Accueil > Module > Détail) |
| Disclaimer juridique | rc-disclaimer.js — obligatoire, affiché au lancement (Code rural art. L.243-3) |
| Onboarding | Profil animal demandé au premier lancement (espèce, race, âge) |
SOS Animal — Documentation Admin Back-Office v5.0 — 28 mars 2026
Confidentiel — Royal Canin / Mars Petcare
sos-toutou.pages.dev · github.com/mrkleinemmanuel24-hub/SOS-TOUTOU