Logiciel / Application web libre et auto-hébergeable pour la gestion complète des refuges et associations de protection animale, pensé sur le terrain par un refuge animalier. https://globinours.fr
  • PHP 99.2%
  • CSS 0.5%
  • JavaScript 0.2%
  • Shell 0.1%
Find a file
2026-08-27 14:54:44 +02:00
readme.md Actualiser readme.md 2026-08-27 14:54:44 +02:00

Logo Globinours

Globinours

La gestion quotidienne dun refuge, pensée pour rester humaine, rapide et lisible.
Né de lhistoire de Twix, conçu pour protéger les suivants.

PHP 8.1+ SQLite Interface française Application légère En développement


🐾 Le projet

Globinours est une application web de gestion de refuge animalier, développée au plus près du fonctionnement réel de lassociation Les Coussinets.

Elle centralise les animaux, leur santé, leurs documents, leurs liens familiaux, les familles daccueil, les contacts et les actions quotidiennes. Son objectif est simple : permettre aux bénévoles et responsables de trouver ou saisir une information en quelques secondes, sans traverser une succession décrans complexes.

Globinours privilégie :

  • une interface claire et entièrement française ;
  • un fonctionnement rapide sur ordinateur comme sur tablette ;
  • une installation légère, sans framework serveur ni dépendances Composer ;
  • la traçabilité des actions importantes ;
  • la maîtrise locale des données du refuge.

Lidentité de lassociation est personnalisable, logo compris. Ce logo est conservé dans lespace privé de linstallation, sauvegardé avec les données et prévu pour alimenter les documents officiels.

Le pied de page identifie clairement le projet, son année de développement, sa version et son développeur, OverSu, avec un accès direct au code source.

Le récit complet est conservé dans lHistoire de TWIX et Globinours. Les changements techniques et fonctionnels sont consignés dans le CHANGELOG. La feuille de route synthétique reste disponible plus bas et sa version illustrée dans lapplication via Évolutions.

🐈 De TWIX à Globinours

Le projet est né au sein de lassociation Les Coussinets, face à un constat très concret : les logiciels de refuge existants répondaient mal au travail quotidien. Les informations restaient dispersées, certaines opérations exigeaient trop de manipulations et des besoins vétérinaires ou administratifs essentiels manquaient.

Lambition initiale nétait pas de construire un produit commercial, mais un compagnon de travail pensé par un refuge, pour un refuge. Le premier nom du logiciel fut TWIX, en hommage au premier chat sauvé par lassociation.

Les premières versions reposaient déjà sur une architecture volontairement légère : PHP, SQLite, Bootstrap puis Tabler, une organisation modulaire et DomPDF pour les premiers documents. SQLite sest imposé pour quatre raisons : aucune infrastructure de base de données complexe, sauvegardes simples, déplacement facile de linstallation et adaptation aux petites structures.

La fiche animale est devenue le premier véritable cœur fonctionnel, avant que le suivi vétérinaire — traitements, vaccins, protocoles, quarantaines, soins, poids et graphiques — puis la production documentaire ne prennent une place centrale. Lergonomie est ensuite devenue un chantier permanent : réduire les clics, accélérer la saisie et préserver la lisibilité sur des écrans utilisés plusieurs centaines de fois par semaine.

Lorsque le projet a commencé à pouvoir servir dautres associations, son code et son identité ont été progressivement ouverts et réorganisés. TWIX est alors devenu Globinours, surnom affectueux du même chat. La nouvelle identité graphique conserve cette histoire à travers une silhouette féline inspirée de Twix, des formes simples et des couleurs chaleureuses.

Larchitecture a continué à salléger : DomPDF et les dépendances Composer ont finalement été remplacés par limpression HTML/CSS du navigateur pour les fiches générées, tandis que LibreOffice reste utilisé pour convertir les modèles ODT lorsque cela est nécessaire.

Ce que propose Globinours

Gestion complète des animaux

  • gestion multi-espèces : chats, chiens, NAC, animaux de ferme, faune sauvage et espèces personnalisées ;
  • référentiel administrable avec catégorie, libellé, icône, couleur, ordre et désactivation sans perte des dossiers existants ;
  • choix de lespèce à la création, filtre dédié et badge visuel dans le listing ; les fonctions strictement félines, comme le FIV/FeLV et les portées, restent réservées aux chats ;
  • identité, statut, localisation, âge, sexe, robe, race et identification ;
  • historique automatique des changements de statut, salle, box et adresse, avec état avant/après et utilisateur responsable ;
  • profil de vie en trois états — oui, non ou inconnu — pour les chiens, chats, enfants et la propreté, avec lecture compacte et tris dédiés dans le listing ;
  • entrée structurée avec date, mode, motif, déposant lié à lannuaire, commune dorigine et circonstances, synchronisée avec le registre administratif ; les décès et entrées en EHPAD du propriétaire sont distingués ;
  • listing opérationnel limité par défaut aux animaux vivants actuellement pris en charge, avec accès filtré aux dossiers adoptés, décédés ou enfuis ;
  • choix mémorisé par utilisateur entre un tableau détaillé et une mosaïque photographique responsive pouvant afficher sept animaux par ligne ;
  • suivi FIV/FeLV, stérilisation, poids, vaccins, traitements, ordonnances, analyses biologiques et notes médicales ;
  • traçabilité vaccinale du fabricant, du lot et de son expiration, du vétérinaire et de la personne ayant réellement administré le vaccin ;
  • historique chronologique attribué aux utilisateurs ;
  • ouverture systématique des fiches sur longlet Identité, sauf lorsquune action redirige explicitement vers un onglet concerné ;
  • exports CSV unitaires ou regroupés en ZIP pour assurer la portabilité des données ;
  • dossier de décès avec cause, contexte, vétérinaire, crématorium et prise en charge ;
  • registre des sorties synchronisé avec les modifications du dossier de décès ;
  • parcours chronologique des réservations, placements en famille daccueil, adoptions définitives, retours et annulations, sans mode dessai ;
  • photos publiques, privées et médicales ;
  • mini-site public facultatif alimenté par les animaux disponibles à ladoption, avec trois thèmes légers, page libre, dons et contact ;
  • aperçu agrandi des photos directement au survol du listing ;
  • orientation, redimensionnement et compression automatiques des nouvelles images, avec suppression de leurs métadonnées ;
  • archivage, corbeille et restauration ;
  • fiche A4 imprimable ou enregistrable en PDF ;
  • cartographie des lieux de récupération et daccueil ;
  • parcours des chats libres avec site ou colonie, commune, localisation interne, référent, capture, remise en liberté et état de suivi ;

Portées et groupes inséparables

  • création rapide dune portée et de ses chatons ;
  • parents connus, partiellement connus ou inconnus ;
  • génération automatique des noms ;
  • regroupement visuel des frères et sœurs ;
  • groupes danimaux devant être adoptés ensemble.

Suivi médical et tournées sur tablette

  • tournée du matin ou du soir ;
  • salles collectives Silver et Twix ;
  • salles de soins et de quarantaine avec box modulables ;
  • plusieurs animaux par box ;
  • traitements attendus affichés pendant la tournée ;
  • référentiel de médicaments trié alphabétiquement et création à la volée lors du démarrage dun traitement ;
  • validation individuelle ou collective ;
  • suivi de lalimentation, de leau, des selles, des urines et de létat général ;
  • commentaire et photo en cas danomalie ;
  • incidents ajoutés à lhistorique de lanimal.

Annuaire du refuge

  • familles daccueil, bénévoles, dirigeants et adoptants ;
  • déposants, vétérinaires, cabinets et crématoriums ;
  • personnes et structures distinguées visuellement ;
  • lignes et fiches dannuaire cliquables réunissant coordonnées, rôles, rattachements et animaux liés ;
  • compteur danimaux adoptés dans le listing et historique des adoptions sur la fiche de ladoptant, y compris pour les animaux archivés ou décédés lorsque le lien historique existe ;
  • outil de réconciliation des adoptions ICAD, exécutable dabord en simulation puis avec sauvegarde et transaction, pour restaurer ou créer les fiches historiques, adoptants, dates, placements, sorties et historiques ;
  • fusion sécurisée des doublons de lannuaire malgré lordre prénom/nom, les accents, la casse, les tirets et les fautes typographiques mineures, avec transfert de toutes les relations vers la fiche la plus complète ;
  • recalcul de la photographie actuelle depuis le dernier placement : une adoption synchronise statut, archivage, adresse de ladoptant, sortie et historique, et les futurs imports ASM3 appliquent automatiquement ce devenir ;
  • possibilité de consolider les adoptions historiques attestées par le refuge lorsque lexport source est incomplet, en conservant leur provenance dans le parcours et lhistorique ;
  • correction des fiches archivées sans restauration : lidentité et les données administratives restent modifiables tandis que statut, emplacement et archivage sont protégés côté interface et serveur ;
  • dépenses cumulées et détail par animal sur la fiche des structures facturantes ;
  • création de contacts depuis certains formulaires médicaux ou dadoption.

Documents et administratif

  • registre annuel des entrées et sorties ;
  • bilans statistiques filtrables et imprimables par commune dorigine pour accompagner les demandes de subvention ;
  • modèles ODT accessibles depuis lespace administratif ;
  • contrats dadoption et documents dabandon préremplis ;
  • certificat de visite pré-adoption disponible en ODT et en PDF imprimable depuis ladministration ;
  • documents pour bénévoles et familles daccueil ;
  • conversion PDF avec LibreOffice ;
  • documents HTML A4 imprimables depuis le navigateur.

Utilisateurs et protection des données

  • connexion nominative ;
  • rôles administrateur, responsable, bénévole et lecture seule ;
  • journal daudit et attribution des événements ;
  • paramètres administrables pour lidentité de lassociation, les tarifs, la quarantaine et la conservation des sauvegardes ;
  • sauvegarde ZIP complète, téléchargeable et restaurable ;
  • sauvegarde durgence automatique avant restauration.

🖥️ Philosophie produit

Globinours ne cherche pas à devenir une suite universelle. Il couvre précisément le quotidien dun refuge, avec des parcours courts et compréhensibles.

Le dashboard répond à la question « Que devons-nous surveiller aujourdhui ? ». Les fiches animales conservent le détail. La tournée tablette accompagne le travail sur le terrain. Lespace administratif rassemble les documents et les futurs bilans annuels.


🛠️ Architecture technique

Application PHP rendue côté serveur, organisée autour de contrôleurs, services et vues :

refuge/
├── app/
│   ├── Controllers/       # Routes et actions
│   ├── Services/          # Base, sécurité, documents, sauvegardes…
│   └── Views/             # Interfaces HTML/PHP
├── data/
│   ├── association/       # Fichiers propres à lassociation
│   └── refuge.sqlite      # Base locale — à exclure de Git
├── migrations/            # Évolution versionnée de SQLite
├── public/                # Racine web, assets et médias
├── resources/
│   ├── branding/          # Identité visuelle livrée avec Globinours
│   └── documents/         # Modèles ODT du logiciel
├── storage/
│   ├── backups/           # Sauvegardes ZIP
│   └── logs/              # Journal PHP local et privé
├── tests/                 # Tests isolés sans base de production
├── CHANGELOG.md           # Historique versionné des changements
└── README.md

Technologies

Couche Technologie
Serveur PHP 8.1 ou supérieur
Données SQLite, PDO, clés étrangères et journal WAL
Interface HTML5, CSS, JavaScript natif et Tabler
Calendriers Flatpickr en français
Graphiques Chart.js
Cartographie Leaflet et OpenStreetMap/Nominatim
Documents ODT/XML, ZIP, LibreOffice headless et impression HTML/CSS A4
Images ImageMagick, WebP et conservation de loriginal en mode de repli
Sauvegardes ZipArchive, SHA-256 et contrôle dintégrité SQLite

Les bibliothèques dinterface sont actuellement chargées depuis leurs CDN. Aucun composer install ni npm install nest nécessaire.

🔐 Sécurité

Authentification

  • mots de passe avec password_hash() et password_verify() ;
  • minimum de 10 caractères dans linterface ;
  • régénération de lidentifiant de session après connexion ;
  • verrouillage de 15 minutes après 5 échecs ;
  • comptes désactivables ;
  • protection empêchant un administrateur de retirer ses propres droits.

Sessions et requêtes

  • cookies HttpOnly et SameSite=Strict ;
  • attribut Secure activé sous HTTPS ;
  • jeton CSRF aléatoire vérifié sur les requêtes POST ;
  • écritures autorisées selon le rôle ;
  • redirections après connexion limitées aux chemins internes.
  • en-têtes nosniff, anti-iframe, politique de référent limitée à lorigine et permissions navigateur restrictives ;
  • routes de maintenance limitées au mode développement, à la machine locale et aux administrateurs.

Base et affichage

  • requêtes paramétrées PDO et émulation désactivée ;
  • clés étrangères SQLite activées ;
  • échappement HTML des valeurs affichées ;
  • migrations transactionnelles ;
  • suppression logique des animaux avec possibilité de restauration.

Téléversements et audit

  • inspection MIME des photos côté serveur ;
  • distinction applicative des médias privés ;
  • audit nominatif des actions ;
  • mots de passe et jetons CSRF exclus des métadonnées daudit.

Sauvegardes

  • snapshot cohérent par VACUUM INTO ;
  • manifeste versionné et empreinte SHA-256 de chaque fichier ;
  • rejet des chemins ZIP dangereux ;
  • PRAGMA integrity_check avant restauration ;
  • sauvegarde automatique avant remplacement ;
  • reconnexion obligatoire après restauration.

Exports

  • accès réservé aux administrateurs et téléchargement journalisé ;
  • CSV UTF-8 compatibles avec Excel et LibreOffice ;
  • neutralisation des cellules pouvant être interprétées comme des formules ;
  • exclusion des mots de passe, sessions, secrets de configuration et médias.

Important

Lapplication manipule des données personnelles et médicales. Une installation en réseau doit utiliser HTTPS, des permissions système restrictives et des sauvegardes externes.

📦 Prérequis

  • PHP 8.1+ ;
  • extensions pdo_sqlite, sqlite3, zip, curl, fileinfo et mbstring ;
  • LibreOffice, facultatif mais nécessaire pour convertir les ODT en PDF ;
  • ImageMagick, recommandé pour optimiser automatiquement les images téléversées ;
  • écriture autorisée dans data, public/media et storage ;
  • accès Internet pour les CDN, la cartographie et les intégrations externes.

Exemple Debian/Ubuntu :

sudo apt install php php-sqlite3 php-zip php-curl php-mbstring libreoffice imagemagick

🚀 Installation locale

git clone <URL_DU_DEPOT> globinours
cd globinours

Créer un fichier .env uniquement si les intégrations correspondantes sont utilisées :

ICAD_LOGIN=
ICAD_PASSWORD=
GEOCODER_EMAIL=contact@example.org
APP_ENV=production

Préparer les permissions puis lancer le serveur de développement :

chmod -R u+rwX data public/media storage
php -d upload_max_filesize=250M -d post_max_size=260M -d max_execution_time=600 -S 127.0.0.1:8000 -t public

Ouvrir http://127.0.0.1:8000/setup. Lassistant contrôle PHP, PDO SQLite, les extensions requises, ZIP, cURL, le traitement dimages et les droits décriture. Il affiche la racine publique à déclarer, recueille lidentité de lassociation, la langue, le mode du mini-site et crée le premier administrateur. Les migrations SQL sont appliquées automatiquement au démarrage et lassistant devient inaccessible dès quun compte existe.

Pour une démonstration temporaire à distance, le routeur public/router.php permet dutiliser le serveur PHP intégré, puis un tunnel HTTPS éphémère. Cette méthode est réservée aux tests et doit être arrêtée après la présentation.

🌐 Déploiement

La racine du serveur web doit pointer vers public/, jamais vers la racine complète du projet. data/ et storage/ ne doivent pas être servis par HTTP.

Ainsi, si le projet se trouve dans /var/www/globinours, la racine documentaire du domaine doit être /var/www/globinours/public. Ladresse publique reste alors https://lescoussinets.org/ — il ne faut pas ajouter /public/ dans lURL. Le fichier public/.htaccess fourni redirige les routes applicatives vers index.php sur Apache ou LiteSpeed, sous réserve que les règles .htaccess soient autorisées.

Configuration Nginx équivalente dans le bloc du domaine :

root /var/www/globinours/public;
index index.php;

location / {
    try_files $uri $uri/ /index.php?$query_string;
}

Le bloc PHP-FPM habituel de lhébergeur doit ensuite exécuter les fichiers .php. Sur un panneau dhébergement, ce réglage porte généralement le nom Document root, Racine du document ou Dossier public.

Avant la mise en production :

  • activer HTTPS ;
  • désactiver laffichage public des erreurs PHP ;
  • protéger .env et SQLite par les permissions système ;
  • vérifier les limites PHP de téléversement ;
  • créer et télécharger une sauvegarde depuis Paramètres → Sauvegardes ;
  • copier régulièrement les ZIP vers un autre support.

Les routes internes /dev/* sont désactivées par défaut. Elles exigent simultanément APP_ENV=development, une connexion depuis la machine locale et un compte administrateur.

💾 Sauvegardes

Une archive Globinours contient la base, les photos, les médias médicaux, le logo personnalisé de lassociation, les justificatifs privés des subventions et un manifeste dintégrité. Les modèles et éléments graphiques livrés avec le logiciel restent dans resources/ et ne sont pas dupliqués dans chaque sauvegarde. .env est volontairement exclu afin de ne pas diffuser les identifiants externes.

Les 10 sauvegardes les plus récentes sont conservées localement. Elles peuvent être téléchargées, supprimées et restaurées depuis linterface.

🧪 Vérifications

find app public -name '*.php' -print0 | xargs -0 -n1 php -l
php scripts/check_translations.php
php tests/run.php

La suite fonctionne sans Composer et crée une base SQLite temporaire hors du projet. Elle contrôle une installation vierge complète, les migrations, lintégrité de la base, les paramètres, lauthentification, les permissions, un parcours médical et dadoption, les alertes et le contenu des sauvegardes ZIP. Elle ne lit ni ne modifie la base du refuge.

🩺 Santé et notifications

Paramètres → Santé de Globinours exécute un diagnostic en lecture seule : versions PHP/SQLite, extensions, droits décriture, intégrité et relations SQLite, migrations, espace disque, âge de la dernière sauvegarde, médias absents ou orphelins, configuration des erreurs et erreurs journalisées durant les sept derniers jours. Les erreurs applicatives sont dirigées vers storage/logs/php-errors.log, hors de la racine publique.

Le dashboard conserve un unique bloc opérationnel « Points à surveiller ». Paramètres → Notifications réutilise ces échéances, complétées par les vermifuges et lancienneté des sauvegardes, pour envoyer leur résumé immédiatement ou préparer un envoi quotidien/hebdomadaire. Lhébergeur doit exécuter régulièrement :

php scripts/send-notifications.php

La commande respecte la fréquence et la date du dernier envoi. Elle utilise la fonction mail() de PHP : le transport de courrier reste donc à configurer sur le serveur.

🗺️ Feuille de route

Étape État Contenu
Origines de TWIX Historique Besoin terrain des Coussinets, socle PHP/SQLite, premières fiches animales, médical et documents PDF
Passage à Globinours Historique Ouverture à dautres associations, réorganisation du code, nouvelle identité et hommage durable à Twix
Fondations Livré Animaux, portées, médical, annuaire, documents, adoptions et tournées tablette
Continuité Livré Utilisateurs, audit, sauvegarde/restauration, archives recherchables et triables, consultation des fiches archivées, corbeille et décès
Dashboard opérationnel Livré Synthèse des urgences, soins, échéances, quarantaines, poids, tournées du jour et qualité des fiches
Statistiques du refuge Livré Comparaison N1, activité, médical, profils, couleurs, races, âges, origines, séjours et photographie actuelle
Bilans communaux Livré Filtre annuel ou global par commune dorigine, villes cliquables, indicateurs recalculés et impression pour les subventions
Rôles et permissions Livré Accès par groupe et par module, séparation voir/modifier, navigation adaptée et contrôle serveur
Lieux de vie Livré Chronologie avant/après des statuts, salles, box, familles et adresses, attribution utilisateur et export CSV
Médias plus légers Livré Compression, orientation, redimensionnement et nettoyage des métadonnées à limport
Bilans annuels et subventions Livré Statistiques, bilan, demandes, checklist intelligente, validité des pièces, alertes et coffre documentaire privé
Portabilité Livré Exports CSV par domaine et archive ZIP complète, sans secrets ni mots de passe
Nettoyage et durcissement Livré Migrations strictes, erreurs non divulguées, routes DEV verrouillées, HTML et intégrité SQLite contrôlés
Profil de vie Livré Compatibilité chats, chiens et enfants, propreté en trois états et indicateurs compacts dans le listing
Entrées structurées Livré Mode et motif dentrée, déposant, commune de provenance, circonstances, registre synchronisé et statistiques dédiées
Situations du propriétaire Livré Décès, santé ou hospitalisation et entrée durable en EHPAD/établissement distingués dans les fiches, exports et statistiques
Traçabilité vaccinale Livré Fabricant, lot, expiration, intervenant réel, vétérinaire et distinction avec lutilisateur ayant saisi lacte
Référentiel des médicaments Livré Sélection alphabétique et création à la volée du nom, de la molécule et de la forme depuis un nouveau traitement
Chats libres Livré Statut actif distinct du refuge, site ou colonie, référent dannuaire, capture, remise en liberté, suivi et statistiques dédiées
Navigation des fiches Livré Identité ouverte par défaut et conservation des liens ciblés vers le médical, les photos, les portées et les autres onglets
Certificat pré-adoption Livré Modèle administratif vierge en ODT et aperçu PDF, à remettre au moins sept jours avant la cession
Identification structurée Livré Type, numéro, date de pose, statut denregistrement et synchronisation manuelle I-CAD compatible avec les formulaires actuels et historiques
Stérilisation structurée Livré État inconnu/non/oui, date, vétérinaire, cabinet et synchronisation depuis les notes médicales
Parcours daccueil Livré Réservations, familles daccueil, adoptions définitives, retours, annulations, contacts, motifs et registre synchronisé, sans essai dadoption
Disponibilité à ladoption Livré État à définir/non disponible/disponible, date douverture, motif et filtre opérationnel du listing
Migration depuis ASM3 Livré Assistant administratif : exports MySQL ou PostgreSQL, analyse, simulation, sauvegarde transactionnelle et import des animaux, contacts, mouvements, médical, poids et portées, en fusion ou remplacement
Photothèque ASM3 Livré Rattachement DBFS, import idempotent, optimisation, visibilité publique et choix automatique des photos principales
Vues du listing Livré Tableau de gestion ou mosaïque photographique responsive, choix conservé par utilisateur et aperçu agrandi au survol
Filiation et familles daccueil Livré Création dune portée depuis des fiches existantes, rattachement ultérieur de chatons et sélection dune FA de lannuaire lors dun changement demplacement
Réinitialisation et démonstration Livré Remise à zéro sécurisée ou chargement dun jeu fictif depuis les paramètres, avec sauvegarde automatique et conservation des comptes et réglages
Gestion multi-espèces Livré Référentiel extensible, catégories, icônes et couleurs, filtre du listing, imports compatibles et fonctions félines affichées uniquement pour les chats
Mémoire des décès Livré Total historique complet, causes globales et séparation explicite entre décès datés et décès sans date certaine
Décès connus à lannée Livré Précision annuelle sans fausse date, âge au décès, décès après adoption et médailles mémorielles conservés dans les imports historiques
Statistiques historiques réconciliées Livré Entrées, sorties, adoptions, naissances, vaccinations et médical consolidés depuis les fiches métier, avec événements non datés séparés de la chronologie
Vermifuges Livré Catalogue distinct des médicaments (9 produits initiaux), historique structuré, échéances selon lâge, rythme trimestriel adulte, administration groupée des portées et aperçu médical
Ordonnances et analyses Livré Documents privés, photo sur tablette, liaison aux traitements, résultats structurés, courbes par paramètre et références configurables par analyseur et espèce
Mini-site public Livré Accueil, navigation directe par espèce, fiches dadoption, page libre, dons, contact cartographié, identité légale en pied de page, coordonnées protégées des robots simples et trois thèmes CSS légers
Installation guidée Livré Contrôle des prérequis et écritures, identité associative, langue, mode public, premier administrateur et verrouillage après installation
Santé et maintenance Livré Intégrité SQLite, migrations, stockage, sauvegardes, médias, configuration PHP et erreurs récentes depuis une page en lecture seule
Notifications Livré Réutilisation des alertes opérationnelles sans doublon visuel, résumé manuel ou planifié pour vaccins, traitements, vermifuges et sauvegardes
Tests automatisés Socle livré Base temporaire, installation vierge, migrations, intégrité, paramètres, authentification, permissions, médical/adoption, notifications et sauvegardes ZIP
Tarifs et coûts Livré Grilles de structures, coût net figé, résumé dédié dans la fiche animale et statistiques financières
Navigation des paramètres Livré Une liste unique garantit les mêmes rubriques, icônes et ordre dans la roue et dans la navigation interne
Internationalisation Livré Interface, parcours métier, validations, impressions, confirmations sensibles et mini-site public couverts par des catalogues FR/EN contrôlés automatiquement
Annuaire structuré Livré Personnes et structures : familles daccueil, vétérinaires, cabinets, fourrières, crématoriums, adoptants, bénévoles et partenaires
Fiches de lannuaire Livré Lignes entièrement cliquables, animaux adoptés/accueillis/déposés — y compris archivés ou décédés —, personnes rattachées, compteur dadoptions et dépenses cumulées des structures
Réconciliation ICAD Livré Consolidation transactionnelle des adoptants et dates dadoption, création des fiches historiques manquantes et fusion contrôlée des doublons de contacts
Cohérence du parcours Livré Statut et emplacement recalculés depuis le dernier placement, historique et sortie synchronisés, corrections darchives sans restauration
Qualité de production 🚧 En progression Étendre les tests aux parcours HTTP complets, rendre le déploiement reproductible et documenter la comparaison avec Animal Shelter Manager

La roadmap illustrée et lhistorique des grandes évolutions sont également consultables directement dans lapplication depuis le lien Évolutions du pied de page. Le détail exhaustif destiné au suivi Git se trouve dans CHANGELOG.md.

Remise à zéro et base de démonstration

La page Paramètres → Données et démo est réservée aux administrateurs. Elle propose deux opérations protégées par une phrase de confirmation : vider toutes les données métier, ou les remplacer par un jeu entièrement fictif couvrant animaux, annuaire, portée, groupe inséparable, famille daccueil, médical, poids, vaccins et décès. Une sauvegarde ZIP complète est créée avant chaque opération.

Les utilisateurs, rôles et permissions, paramètres de lassociation, identité visuelle, modèles documentaires et sauvegardes existantes sont conservés. Les médias animaliers et justificatifs de subvention liés aux anciennes données sont retirés après validation de la transaction. Le jeu fictif est destiné aux démonstrations et ne doit jamais être confondu avec des données réelles.

Analyser une sauvegarde ASM3

Lanalyseur ne modifie ni le dump source ni la base Globinours. Il accepte les exports MySQL composés dinstructions INSERT, y compris lorsque leurs contenus occupent plusieurs lignes, ainsi que les sauvegardes PostgreSQL .pgsql utilisant les blocs COPY ... FROM stdin.

php scripts/asm3-analyze.php chemin/vers/dump.sql
php scripts/asm3-analyze.php chemin/vers/dump.sql --output rapport.md
php scripts/asm3-analyze.php chemin/vers/dump.sql --json
php scripts/asm3-plan.php chemin/vers/dump.sql plan-migration.json
php scripts/asm3-import.php chemin/vers/dump.sql
# Après lecture de la simulation uniquement :
php scripts/asm3-import.php chemin/vers/dump.sql --apply
php scripts/asm3-contacts.php chemin/vers/dump.sql
# Puis, après contrôle de la simulation :
php scripts/asm3-contacts.php chemin/vers/dump.sql --apply
php scripts/asm3-movements.php chemin/vers/dump.sql --apply
php scripts/asm3-clinical.php chemin/vers/dump.sql --apply
php scripts/asm3-litters.php chemin/vers/dump.sql --apply
# Reprendre les raisons dentrée et les communes conservées en texte libre :
php scripts/recover-asm3-intake.php chemin/vers/dump.sql
php scripts/recover-asm3-intake.php chemin/vers/dump.sql --apply

Le premier rapport inventorie les tables et les domaines migrables. Le plan JSON convertit ensuite chaque fiche animale vers les champs Globinours et la classe en create, match ou review. Une identification identique ou le couple nom + naissance permettent un rapprochement sûr. Le code refuge nest jamais utilisé seul entre deux sauvegardes historiques : ASM3 peut lavoir réattribué après une remise à zéro et Globinours suffixe alors le code importé sans confondre deux animaux.

La reprise des entrées lit le champ ASM3 REASONFORENTRY, conserve son texte dans les circonstances et ne structure une commune que lorsquelle a été relue comme lieu réel de prise en charge. Une sauvegarde précède lécriture et un CSV distingue les communes certaines des dossiers ambigus.

Sans --apply, les commandes restent en simulation. En mode réel, elles exigent une confirmation textuelle, créent une sauvegarde, utilisent des transactions et mémorisent les correspondances ASM3 afin quune reprise ne duplique rien. Les rapprochements et cas ambigus ne sont jamais fusionnés automatiquement.

Lensemble est également disponible sans terminal dans Paramètres → Migration ASM3. Ladministrateur dépose un fichier .sql ou .pgsql, consulte les volumes et ambiguïtés, puis confirme limport complet. Les animaux, contacts, rôles, adoptions, placements en FA, retours, vaccinations, historiques médicaux, poids et portées sont pris en charge. Les correspondances sûres sont reliées à la sauvegarde ancienne afin que leurs anciens événements rejoignent la bonne fiche actuelle. Si un dump ne contient que lindex des médias et pas leurs données binaires, lassistant lindique explicitement au lieu de créer des fichiers vides.

Lorsque les fichiers physiques ASM3 sont fournis séparément, limporteur de photos recroise les tables media et dbfs avec les correspondances animales déjà mémorisées. Il commence par une simulation, vérifie chaque image, crée une sauvegarde complète, optimise les fichiers et les importe dans une transaction. Les photos sont publiques et la marque WebsitePhoto dASM3 désigne la photo principale ; les médias Globinours déjà présents sont conservés. Les liens techniques enregistrés rendent une relance idempotente.

Deux stratégies sont proposées dans linterface : Fusionner conserve les données Globinours et ignore les rapprochements ambigus ; Remplacer les données métier vide les animaux, lannuaire et leur historique opérationnel avant limport. Ce second mode conserve les utilisateurs, rôles, paramètres de lassociation et dossiers de subvention. Il exige la phrase REMPLACER PAR ASM3. Une sauvegarde est créée avant lopération et nettoyage plus import sont réunis dans une transaction unique : une erreur annule lensemble.

La sauvegarde préalable ferme explicitement les curseurs SQLite de lanalyse avant la création de linstantané, afin déviter tout verrou interne pendant VACUUM INTO. Les limites PHP réellement actives sont affichées sur la page de dépôt et les erreurs de téléversement sont traduites précisément en français.

Les animaux historiques importés par ASM3 restent accessibles dans Animaux → Archives. Cette vue reprend la recherche, les filtres et les tris du listing courant, notamment pour isoler les animaux décédés. Une fiche archivée peut être consultée avec son historique, son médical et ses documents, puis restaurée si nécessaire ; elle demeure exclue du suivi courant et des statistiques opérationnelles.

Récupération d'archives fragmentaires

Un outillage complémentaire permet de reconstruire un historique à partir de sources hétérogènes lorsque la base d'origine est incomplète : exports I-CAD, contrats d'adoption numérisés et registre mémoriel des décès. Les scripts d'analyse produisent des CSV de rapprochement et séparent systématiquement les correspondances sûres, les anomalies et les dossiers à vérifier. L'import final fonctionne d'abord en simulation, crée une sauvegarde ZIP en mode réel, puis écrit animaux, contacts, entrées, sorties, adoptions, décès et fratries dans une transaction unique avec contrôle des clés étrangères.

Les décès dont la date exacte n'a pas pu être retrouvée restent enregistrés avec une précision inconnue, leur âge connu et les informations mémorielles disponibles. Ils sont visibles dans le dossier de l'animal sans être artificiellement attribués à une année dans les statistiques. Chaque élément importé conserve enfin un lien technique vers sa source afin de permettre un audit ou une reprise sans doublon.

La synthèse anonymisée des formulaires communaux est disponible dans docs/ANALYSE_SUBVENTIONS.md.

Bilans et demandes de subvention

Lespace Administratif → Subventions et bilans regroupe, année par année :

  • les indicateurs calculés depuis les mouvements, adoptions, décès, portées, vaccinations et traitements, avec comparaison automatique à N1 ;
  • les répartitions par sexe, âge à lentrée, origine, cause de décès et durée de séjour avant adoption ;
  • les effectifs associatifs, le rapport dactivité et les projets ;
  • une synthèse du réalisé, du prévisionnel, de la trésorerie et des contributions volontaires ;
  • le suivi des demandes par commune ou organisme ;
  • une checklist de dix pièces, avec formulaire officiel rattaché à son organisme et documents communs réutilisables ;
  • les justificatifs PDF/ODT conservés hors du dossier public, contrôlés selon leur validité et inclus dans les sauvegardes ;
  • une synthèse HTML optimisée pour limpression ou lenregistrement en PDF depuis le navigateur.

Les pièces sont classées comme valides, proches de lexpiration, expirées ou manquantes. Le dashboard signale uniquement aux rôles autorisés les échéances dépassées ou sous 30 jours, les dossiers incomplets et les documents à renouveler.

Cet outil prépare le noyau commun des dossiers, sans prétendre remplacer les formulaires officiels propres à chaque organisme.

📊 Statistiques internes

Le dashboard est la page daccueil de Globinours et indique ce qui demande une action aujourdhui. La page Statistiques le complète en analysant lactivité dans le temps. Une année peut être comparée à N1 et étudiée par animaux distincts pris en charge, mouvements, adoptions, décès, naissances, activité médicale, sexe, âge à lentrée, couleur, race, espèce, origine et durée de séjour. Le choix Toutes les années consolide lhistorique complet et remplace le comparatif N1 par une courbe ainsi quun tableau annuel. Les dossiers historiques sans année dentrée connue figurent dans le total général, mais jamais dans une année arbitraire. Une photographie séparée décrit les animaux actuellement pris en charge afin de ne pas la confondre avec les données historiques.

Le dashboard signale également les fiches actives auxquelles il manque une date de naissance, un sexe, une couleur, une race, une origine, une identification, la confirmation I-CAD, létat de stérilisation ou la disponibilité à ladoption. Chaque compteur ouvre le listing déjà filtré. Les animaux explicitement non stérilisés sont présentés séparément comme information de suivi.

Les dépenses vétérinaires peuvent être analysées par commune dorigine, cabinet et catégorie dacte. Globinours affiche le coût total, le nombre danimaux du périmètre, ceux ayant réellement généré une dépense, la moyenne sur lensemble des animaux, la moyenne sur les seuls animaux avec frais et leur médiane. Cette lecture produit des chiffres directement exploitables pour argumenter une demande de subvention communale sans laisser un cas médical exceptionnel fausser toute lanalyse.

Pour une année, le périmètre financier comprend les animaux pris en charge pendant cette année ou ayant généré une dépense pendant celle-ci. Le bilan global utilise toutes les fiches non supprimées. La commune est déduite du lieu de récupération, jamais du cabinet vétérinaire ni de la famille daccueil.

Les formulaires officiels des communes ne sont pas générés par Globinours : ils évoluent trop souvent pour garantir un résultat fiable. Le logiciel réunit plutôt les chiffres, le bilan et les justificatifs nécessaires à leur saisie.

🌐 Mini-site public

Le mini-site sactive dans Paramètres → Site public. Deux modes sont disponibles sans réécriture Apache ou Nginx : le mode intégré conserve Globinours à la racine et publie sous /site ; le mode domaine public affiche le site directement sous /, avec une entrée par espèce, /dons et /contact, tandis que /gestion conduit à la connexion ou au dashboard. /site reste un alias compatible. Son contenu reprend le logo et lidentité associative déjà configurés. Le pied de page publie ladresse complète, le RNA et le SIRET lorsquils sont renseignés. La page Contact positionne cette adresse sur une carte Leaflet dont la bibliothèque est embarquée localement ; sa fenêtre ouverte affiche le nom de lassociation puis son adresse. Seules les tuiles cartographiques OpenStreetMap sont chargées à distance. Le téléphone et le-mail sont inversés dans le HTML puis remis dans le bon sens par CSS, sans lien tel: ou mailto: exposé aux robots simples. Trois thèmes très légers — chaleureux, naturel et minimal — reposent sur quelques variables CSS communes.

Une fiche publique nexiste que si lanimal est simultanément marqué disponible à ladoption et publié sur le mini-site. Les requêtes publiques sélectionnent une liste limitée de colonnes : identité générale, âge, race, robe, compatibilités, stérilisation, présentation dédiée et photos marquées publiques. Notes, médical, identification, lieux internes, familles daccueil et documents ne sont jamais chargés par ces routes. Le site désactivé renvoie une page 404 non indexable.

🔐 Rôles et permissions

Les accès sont attribués aux rôles — administrateur, responsable, bénévole et lecture seule — depuis Paramètres → Rôles et permissions. Chaque module distingue la consultation de la modification. La navigation, les formulaires, les actions et les fenêtres dédition sadaptent au rôle. Le serveur contrôle également chaque route afin quune URL saisie directement ne contourne pas la règle ; une page 403 intégrée explique clairement le refus.

Après la connexion, lutilisateur est envoyé vers la première page autorisée à son rôle. Une ancienne URL mémorisée nest reprise que si ce rôle peut réellement louvrir.

Les administrateurs conservent obligatoirement tous les droits. La gestion des utilisateurs et permissions, les paramètres, les sauvegardes, les restaurations et le journal daudit restent exclusivement administratifs. Chaque modification de la matrice est journalisée.

Les catégories de paramètres utilisent un ordre commun dans la roue crantée et dans la navigation interne : Configuration, Référentiels métier, Accès et Maintenance. Une rubrique ajoutée au référentiel de navigation apparaît donc automatiquement au même endroit dans les deux menus.

Le module médical est dépendant de la consultation des animaux. Sans droit médical, les onglets, statuts FIV/FeLV, traitements, vaccinations, décès, événements médicaux et documents contenant ces informations ne sont pas rendus dans la fiche.

🌍 Interface multilingue

Linterface applicative est disponible en français et en anglais. La langue globale se choisit dans les paramètres généraux ; le français reste le repli si une traduction manque. Les textes des écrans, formulaires, validations, cartes et impressions générées vivent dans resources/lang/fr.php et resources/lang/en.php. Les valeurs métier persistées — codes de statuts, imports ASM3, historiques et colonnes dexport — restent volontairement stables et indépendantes de la langue affichée.

Le contrôle php scripts/check_translations.php vérifie les clés utilisées, la parité complète des deux catalogues et la cohérence de leurs variables (:name, :count, etc.).

Les confirmations destructives sont elles aussi localisées et contrôlées côté serveur. Par exemple, la remise à zéro attend VIDER LA BASE en français ou CLEAR DATABASE en anglais ; le chargement de démonstration et la migration ASM3 suivent la même règle. La phrase attendue provient toujours du catalogue actif, jamais dune constante cachée dans le contrôleur.

⚠️ Préparer le dépôt Git

Ne jamais publier les données réelles du refuge. Au minimum :

.env
data/refuge.sqlite*
data/association/**
public/media/**
!public/media/.gitkeep
storage/backups/**
storage/debug/**
storage/restore-*/

Les modèles ODT et les éléments graphiques propres à Globinours placés dans resources/ peuvent être versionnés sils ne contiennent aucune donnée personnelle. Le logo téléversé par une association reste une donnée dinstallation dans data/association/.

📄 Licence

Aucune licence de redistribution nest encore fournie. Avant de rendre le dépôt public, choisissez une licence et vérifiez que les documents, logos et modèles peuvent être diffusés.


Globinours
Un outil léger, construit autour des animaux et des personnes qui prennent soin deux.