Grille AGGIR (Autonomie Gérontologique – Groupe Iso-Ressources) > JSON
1. Le problème initial
La grille AGGIR (Autonomie Gérontologique – Groupe Iso-Ressources) est une grille papier ou tableur utilisée pour évaluer l’autonomie d’une personne âgée, afin de déterminer son GIR (1 à 6).
Dans SynergIA, l’agent conversationnel mène un entretien vocal, puis doit :
- interpréter les réponses,
- les structurer,
- les stocker,
- les partager avec Odoo, le DMP, la famille, les soignants, etc.
Pour que cela fonctionne de manière fiable et automatisée, ces données doivent être converties dans un format informatique standard.
Ce format est : un JSON normalisé.
2. Qu’est-ce qu’un « JSON normalisé » ?
C’est un format structuré, stable et universel, qui représente toutes les réponses AGGIR dans une forme :
- lisible par les agents IA,
- exploitable par Odoo et n8n,
- compatible avec des standards comme HL7 / FHIR,
- réutilisable par les médecins, les évaluateurs APA, les partenaires.
En résumé :
AGGIR → JSON normalisé signifie :
*« transformer une grille AGGIR en une version informatique standardisée, exploitable automatiquement par SynergIA ». *
3. Pourquoi c’est indispensable pour SynergIA ?
L’agent conversationnel :
- pose les questions,
- comprend les réponses,
- calcule un GIR,
- génère un rapport.
Mais il ne peut pas stocker des phrases libres.
Il doit stocker des données structurées pour :
- alimenter le journal de bord,
- générer une synthèse,
- déclencher des alertes,
- produire un PDF,
- envoyer au DMP,
- comparer l’évolution dans le temps.
Un JSON normalisé permet cela parce qu’il :
- décrit chaque item AGGIR de manière codée,
- évite toute ambiguïté,
- permet le calcul automatique,
- garantit l’interopérabilité.
4. Exemple très simple (pour bien comprendre)
Réponse du patient (conversation) :
“Oui, je m’habille tout seul mais j’ai du mal à lever les bras.”
L’agent comprend heuristiquement :
- Catégorie : Habillage
- Code AGGIR : HAB
- Valeur : B (fait seul mais imparfaitement)
Le JSON normalisé devient :
{ "code": "HAB", "label": "Habillage", "value": "B", "value_label": "Fait seul mais de façon imparfaite", "comment": "Limitation dans l'élévation des bras" }
Ce JSON est ensuite inséré dans la structure complète de l'évaluation AGGIR.
5. Ce que “normalisé” signifie réellement
5.1. Normalisé = toujours la même structure
Pour tous les patients, tous les soignants, tous les agents SynergIA.
5.2. Normalisé = interopérable
Compatible avec :
- Odoo (JSONB)
- n8n
- Supabase
- FHIR QuestionnaireResponse
5.3. Normalisé = peut être traité automatiquement
On peut :
- recalculer le GIR,
- analyser les tendances,
- déclencher des alertes (“dégradation autonomie”),
- générer des rapports PDF.
6. Schéma simple pour expliquer
AVANT (papier)
AGGIR = tableau difficile à exploiter, non automatisable.
APRÈS (SynergIA)
AGGIR → JSON normalisé :
- données structurées,
- exploitables par IA,
- partageables au DMP,
- stockées intelligemment dans le dossier,
- comparables dans le temps.
7. Formule courte pour mémoriser
AGGIR → JSON normalisé signifie :
“On transforme la grille AGGIR traditionnelle en une structure informatique standardisée, codée, exploitable automatiquement par SynergIA pour analyser, stocker, partager et calculer le GIR.”
Table de correspondance AGGIR → JSON pour les 10 variables discriminantes et les 7 variables illustratives, avec des codes stables pour SynergIA.
Voici une table de correspondance AGGIR → JSON pour les 10 variables discriminantes et les 7 variables illustratives, avec des codes stables pour SynergIA.
L’idée est que chaque item AGGIR devient un objet JSON du type :
{ "code": "COH", "label": "Cohérence", "value": "B", "value_label": "Fait seul mais de façon imparfaite", "comment": "Répétitions fréquentes, mais compréhension globale correcte." }
1. Variables discriminantes (10)
Ce sont celles qui servent directement au calcul du GIR.
| Ordre | Code JSON | Clé JSON recommandée | Label AGGIR (FR) | Description clinique synthétique | Valeurs possibles (AGGIR) |
| 1 | COH | code: "COH" | Cohérence | Dialoguer, se comporter de façon sensée, s’orienter par rapport aux situations. | A / B / C |
| 2 | ORI | code: "ORI" | Orientation | Se repérer dans le temps, dans l’espace, par rapport aux personnes. | A / B / C |
| 3 | TOI | code: "TOI" | Toilette | Réaliser l’hygiène corporelle (lavage visage, mains, corps, douche, bain…). | A / B / C |
| 4 | HAB | code: "HAB" | Habillage | S’habiller / se déshabiller (haut, bas, boutons, fermetures, chaussures…). | A / B / C |
| 5 | ALI | code: "ALI" | Alimentation | Manger et boire (porter les aliments à la bouche, gérer les couverts, rythme du repas). | A / B / C |
| 6 | ELIM | code: "ELIM" | Élimination | Continence urinaire et fécale, utilisation des toilettes, protections, gestion des incidents. | A / B / C |
| 7 | TRF | code: "TRF" | Transferts | Se lever, se coucher, s’asseoir, passer du lit au fauteuil, etc. | A / B / C |
| 8 | DEPL_INT | code: "DEPL_INT" | Déplacements à l’intérieur | Marcher ou se déplacer à l’intérieur du logement (avec ou sans aide technique). | A / B / C |
| 9 | DEPL_EXT | code: "DEPL_EXT" | Déplacements à l’extérieur | Sortir du domicile, se déplacer dans l’environnement proche, utiliser trottoirs, escaliers… | A / B / C |
| 10 | COMD | code: "COMD" | Communication à distance | Utiliser un téléphone, une sonnette, un dispositif d’appel, alerter en cas de besoin. | A / B / C |
Convention de valeurs (champ value)
Pour simplifier, vous pouvez standardiser ainsi dans JSON :
- "A" = Fait seul, habituellement, correctement.
- "B" = Fait seul mais de façon partielle / imparfaite / avec difficulté.
- "C" = Ne fait pas, ou seulement avec aide humaine indispensable.
Dans chaque objet JSON, vous pouvez ajouter un champ explicite :
- value_label pour avoir la phrase lisible,
- comment pour qualifier le cas (ex : “Utilise un déambulateur”, “Besoin d’une aide pour la douche uniquement”).
2. Variables illustratives (7)
Elles n’entrent pas directement dans le calcul du GIR, mais affinent le profil d’autonomie.
| Ordre | Code JSON | Clé JSON recommandée | Label AGGIR (FR) | Description clinique synthétique | Valeurs possibles |
| 1 | GES | code: "GES" | Gestion | Gérer son budget, ses papiers, ses démarches administratives, ses comptes bancaires. | A / B / C |
| 2 | CUIS | code: "CUIS" | Cuisine | Préparer les repas, utiliser les appareils (gaz, plaques, four), organiser la nourriture. | A / B / C |
| 3 | MEN | code: "MEN" | Ménage | Entretenir le logement (balayer, laver, ranger, faire les lits, etc.). | A / B / C |
| 4 | TRSP | code: "TRSP" | Transports | Utiliser les transports (voiture, taxi, bus), fixer un rendez-vous, s’y rendre. | A / B / C |
| 5 | ACH | code: "ACH" | Achats | Faire ses courses, choisir les produits, gérer la quantité, se rendre dans des commerces. | A / B / C |
| 6 | MED | code: "MED" | Suivi du traitement / prise des médicaments | Gérer les ordonnances, préparer les prises, respecter le schéma thérapeutique. | A / B / C |
| 7 | LOIS | code: "LOIS" | Activités de temps libre / loisirs | Participer à des activités sociales, culturelles, manuelles, sortir, rencontrer des proches. | A / B / C |
Même convention de valeurs que pour les discriminantes ("A", "B", "C").
3. Intégration directe dans votre JSON SynergIA
Vous pouvez organiser la partie AGGIR ainsi :
{ "assessment_type": "AGGIR", "version": "FR-AGGIR-1.0", "items": { "discriminant": [ { "code": "COH", "label": "Cohérence", "value": "B", "value_label": "Fait seul mais de façon imparfaite", "comment": "" }, { "code": "ORI", "label": "Orientation", "value": "A", "value_label": "Fait seul habituellement", "comment": "" }, { "code": "TOI", "label": "Toilette", "value": "C", "value_label": "Nécessite une aide humaine", "comment": "Besoin d'aide pour la douche" } // ... jusqu'à COMD ], "illustrative": [ { "code": "GES", "label": "Gestion", "value": "C", "value_label": "Ne fait pas / totalement aidé", "comment": "Gestion confiée à la fille" }, { "code": "CUIS", "label": "Cuisine", "value": "B", "value_label": "Fait partiellement", "comment": "" } // ... jusqu'à LOIS ] } }
Voici un exemple complet d’AGGIR → JSON normalisé pour un patient type SynergIA.
Vous pouvez l’utiliser tel quel comme base de test (Odoo, n8n, Supabase, etc.).
{ "assessment_type": "AGGIR", "version": "FR-AGGIR-1.0", "patient": { "patient_id": "PAT-000123", "ins": "1891234567890", "date_of_birth": "1939-04-17", "last_name": "Martin", "first_name": "Jeanne" }, "context": { "assessment_id": "AGGIR-2025-0001", "performed_at": "2025-12-10T09:45:00Z", "performed_by": { "role": "infirmier", "professional_id": "PRO-0042", "name": "Dupont Alice" }, "location": "domicile", "source": "synergia_conversational_agent", "notes": "Premier entretien gériatrique SynergIA au domicile, en présence de la fille." }, "items": { "discriminant": [ { "code": "COH", "label": "Cohérence", "description": "Dialoguer, se comporter de façon sensée.", "value": "B", "value_label": "Fait seul mais de façon imparfaite", "comment": "Répétitions fréquentes, quelques digressions, mais comprend les consignes simples." }, { "code": "ORI", "label": "Orientation", "description": "Se repérer dans le temps, l'espace et par rapport aux personnes.", "value": "B", "value_label": "Fait seul mais de façon imparfaite", "comment": "Orientée dans le lieu et les personnes, se trompe parfois sur la date et l'année." }, { "code": "TOI", "label": "Toilette", "description": "Réaliser l'hygiène corporelle.", "value": "C", "value_label": "Ne fait pas ou seulement avec aide humaine", "comment": "Besoin d'aide pour la douche complète, toilette partielle possible seule mais incomplète." }, { "code": "HAB", "label": "Habillage", "description": "S'habiller et se déshabiller.", "value": "B", "value_label": "Fait seul mais de façon imparfaite", "comment": "S'habille seule mais difficulté avec les boutons et les chaussures." }, { "code": "ALI", "label": "Alimentation", "description": "Manger et boire.", "value": "A", "value_label": "Fait seul habituellement", "comment": "Capable de manger seule, pas de fausses routes signalées." }, { "code": "ELIM", "label": "Élimination", "description": "Continence urinaire et fécale, utilisation des toilettes.", "value": "B", "value_label": "Fait seul mais de façon imparfaite", "comment": "Port de protections la nuit, quelques épisodes d’incontinence diurne." }, { "code": "TRF", "label": "Transferts", "description": "Passer du lit au fauteuil, se lever, se coucher.", "value": "B", "value_label": "Fait seul mais de façon imparfaite", "comment": "Utilise une canne pour se lever, se relève avec appui sur les accoudoirs." }, { "code": "DEPL_INT", "label": "Déplacements à l'intérieur", "description": "Se déplacer dans le logement.", "value": "B", "value_label": "Fait seul mais de façon imparfaite", "comment": "Se déplace seule dans l'appartement avec canne, risque de chute modéré." }, { "code": "DEPL_EXT", "label": "Déplacements à l'extérieur", "description": "Sortir du domicile et se déplacer dehors.", "value": "C", "value_label": "Ne fait pas ou seulement avec aide humaine", "comment": "Ne sort plus seule, besoin d’un accompagnement systématique." }, { "code": "COMD", "label": "Communication à distance", "description": "Utiliser un téléphone ou un dispositif d'appel.", "value": "B", "value_label": "Fait seul mais de façon imparfaite", "comment": "Sait répondre au téléphone, mais a des difficultés à composer un numéro." } ], "illustrative": [ { "code": "GES", "label": "Gestion", "description": "Gérer son budget, ses papiers, ses démarches.", "value": "C", "value_label": "Ne fait pas ou totalement aidé", "comment": "Gestion confiée entièrement à la fille (procuration bancaire)." }, { "code": "CUIS", "label": "Cuisine", "description": "Préparer les repas.", "value": "C", "value_label": "Ne fait pas ou totalement aidé", "comment": "Ne cuisine plus, repas préparés par un service de portage + famille." }, { "code": "MEN", "label": "Ménage", "description": "Entretenir le logement.", "value": "C", "value_label": "Ne fait pas ou totalement aidé", "comment": "Intervention d'une aide ménagère 3 fois par semaine." }, { "code": "TRSP", "label": "Transports", "description": "Utiliser les moyens de transport.", "value": "C", "value_label": "Ne fait pas ou totalement aidé", "comment": "Ne conduit plus, se déplace uniquement avec la famille ou taxi accompagné." }, { "code": "ACH", "label": "Achats", "description": "Faire les courses.", "value": "C", "value_label": "Ne fait pas ou totalement aidé", "comment": "Courses réalisées par la fille ou livraison à domicile." }, { "code": "MED", "label": "Suivi du traitement", "description": "Gérer et prendre les médicaments.", "value": "B", "value_label": "Fait seul mais de façon imparfaite", "comment": "Utilise un pilulier préparé par la pharmacie; oublis occasionnels." }, { "code": "LOIS", "label": "Activités de temps libre", "description": "Participer à des activités de loisirs.", "value": "B", "value_label": "Fait seul mais de façon imparfaite", "comment": "Regarde la télévision, écoute la radio, lit peu; sorties extérieures seulement accompagnée." } ] }, "computed_scores": { "gir": 3, "algorithm_version": "AGGIR-ALGO-1.0", "confidence": 0.93, "explanations": [ "Aide nécessaire pour la toilette, les sorties, la cuisine et la gestion.", "Autonomie partielle pour l'habillage, les transferts et les déplacements intérieurs." ] }, "exports": { "fhir_questionnaire_response_id": "FHIR-QR-AGGIR-0001", "pdf_report_id": "REP-AGGIR-2025-0001" } }
Modélisation Odoo” propre.
propose un modèle x_synergia_assessment qui soit :
- générique (AGGIR, MMS, GDS, etc.),
- optimisé pour Odoo Online / Odoo Studio,
- compatible avec votre JSON AGGIR normalisé,
- exploitable par n8n / RAG / exports FHIR.
1. Objectif du modèle x_synergia_assessment
- Centraliser toutes les évaluations structurées (AGGIR aujourd’hui, d’autres grilles demain).
- Stocker le JSON complet de la grille (détail des items).
- Exposer des champs synthétiques (GIR, score global…) pour les écrans, filtres et exports.
- Assurer la traçabilité : qui, quand, où, avec quelle version d’algorithme.
2. Liste des champs recommandés
2.1. Bloc identité / méta
| Champ Odoo | Type | Description fonctionnelle |
| name | Char | Nom lisible de l’évaluation (ex. “AGGIR – 10/12/2025”) |
| assessment_type | Selection | Type de grille : AGGIR, MMS, MINI_GDS, etc. |
| state | Selection | Statut : draft, in_progress, done, cancelled |
| performed_at | Datetime | Date/heure de réalisation effective |
| location | Char | Lieu (ex. “domicile”, “EHPAD”, “HDJ gériatrique”) |
| source | Selection | Origine : agent_conversationnel, saisie_manuelle, import_externe |
| notes | Text | Commentaires libres (soignant ou agent) |
2.2. Liens avec patient et professionnels
| Champ Odoo | Type | Description |
| patient_id | Many2one | Vers res.partner (patient ou modèle dédié patient) |
| performed_by_user_id | Many2one | Vers res.users (utilisateur interne qui valide l’évaluation) |
| performed_by_partner_id | Many2one | Vers res.partner (professionnel de santé, si distinct de l’utilisateur Odoo) |
2.3. Scores / résultats synthétiques
| Champ Odoo | Type | Description |
| main_score | Float | Score principal (ex. MMS sur 30, score dépressif, etc.) |
| gir | Integer | GIR 1–6 (uniquement pertinent si assessment_type = AGGIR) |
| confidence | Float | Niveau de confiance [0–1] de l’agent (optionnel mais utile pour IA / RAG) |
| algorithm_version | Char | Version de l’algorithme utilisé (ex. "AGGIR-ALGO-1.0") |
2.4. Payload JSON (le cœur AGGIR)
| Champ Odoo | Type | Description |
| payload_json | Text (ou JSON si dispo) | Contient le JSON complet de l’évaluation (AGGIR, MMS…) |
En Odoo Online, vous pouvez utiliser un champ Text avec du JSON sérialisé.
En Odoo on-prem, vous pouvez utiliser un fields.Json (Odoo 16+).
2.5. Interop / exports
| Champ Odoo | Type | Description |
| external_ref | Char | Référence externe éventuelle (DMP, SIH, autre outil) |
| fhir_questionnaire_response_id | Char | ID de l’objet FHIR correspondant, si vous le gérez |
| pdf_report_id | Char | Référence interne du PDF généré (ou lien de stockage) |
3. Exemple de modèle Python (pour vos devs / Odoo on-prem)
Même si vous êtes sur Odoo Online, ce squelette est utile comme référence technique pour votre équipe :
from odoo import models, fields class SynergiaAssessment(models.Model): _name = "x.synergia.assessment" _description = "Synergia Structured Assessment (AGGIR, MMS, etc.)" _rec_name = "name" name = fields.Char( string="Nom de l'évaluation", required=True, default=lambda self: "Nouvelle évaluation" ) assessment_type = fields.Selection( [ ("AGGIR", "AGGIR"), ("MMS", "Mini-Mental State"), ("MINI_GDS", "Mini-GDS"), ("OTHER", "Autre") ], string="Type d'évaluation", required=True, default="AGGIR" ) state = fields.Selection( [ ("draft", "Brouillon"), ("in_progress", "En cours"), ("done", "Validée"), ("cancelled", "Annulée") ], string="Statut", default="draft" ) patient_id = fields.Many2one( "res.partner", string="Patient", domain=[("is_company", "=", False)], required=True ) performed_at = fields.Datetime( string="Date de réalisation", default=fields.Datetime.now ) performed_by_user_id = fields.Many2one( "res.users", string="Validée par (utilisateur)" ) performed_by_partner_id = fields.Many2one( "res.partner", string="Professionnel de santé" ) location = fields.Char(string="Lieu de l'évaluation") source = fields.Selection( [ ("agent_conversationnel", "Agent conversationnel"), ("saisie_manuelle", "Saisie manuelle"), ("import_externe", "Import externe") ], string="Source", default="agent_conversationnel" ) # Résultats & scores main_score = fields.Float(string="Score principal") gir = fields.Integer(string="GIR", help="GIR calculé (1 à 6)") confidence = fields.Float(string="Confiance IA", help="Confiance [0–1]") algorithm_version = fields.Char(string="Version algorithme") # Payload JSON complet payload_json = fields.Text(string="Payload JSON de l'évaluation") # Interop external_ref = fields.Char(string="Référence externe") fhir_questionnaire_response_id = fields.Char(string="ID FHIR QuestionnaireResponse") pdf_report_id = fields.Char(string="ID Rapport PDF") notes = fields.Text(string="Notes / Commentaires")
4. Idée de vue formulaire (UI pour l’infirmier / Care Manager)
4.1. Logique ergonomique
-
En-tête (kanban / form header) :
- name, assessment_type, patient_id, performed_at, state, gir (si AGGIR).
-
Onglet 1 – Résumé
- Bloc “Patient & contexte” : patient, professionnel, lieu, source.
- Bloc “Résultats” : GIR, main_score, confidence, algorithm_version.
- Bloc “Synthèse” : champ texte notes + petite synthèse générée par l’IA (option).
-
Onglet 2 – Détails de la grille
À ce stade, deux options :- Afficher le JSON brut (technique) – pas idéal pour les soignants.
-
OU créer un widget / vue secondaire (externe) pour :
- lister les 10 variables discriminantes sous forme de lignes (code, label, valeur, commentaire),
- lister les 7 illustratives.
- ne pas rendre visible payload_json aux infirmières,
- afficher à la place un champ HTML généré par un serveur (ou IA) qui formate les items AGGIR en tableau lisible.
-
Onglet 3 – Historique & Documents
- Liens vers : rapport PDF, ID FHIR, attachements.
- Historique interne (messages, notes log).
4.2. Exemple XML (illustratif, non obligatoire pour vous)
<form string="Évaluation Synergia"> <header> <field name="state" widget="statusbar" statusbar_visible="draft,in_progress,done,cancelled"/> </header> <sheet> <group> <group> <field name="name"/> <field name="assessment_type"/> <field name="patient_id"/> <field name="performed_at"/> </group> <group> <field name="gir" attrs="{'invisible': [('assessment_type', '!=', 'AGGIR')]}"/> <field name="main_score"/> <field name="confidence"/> <field name="algorithm_version"/> </group> </group> <notebook> <page string="Résumé"> <group> <group string="Contexte"> <field name="performed_by_partner_id"/> <field name="location"/> <field name="source"/> </group> <group string="Synthèse"> <field name="notes"/> </group> </group> </page> <page string="Détails de l'évaluation"> <!-- Variante simple : affichage brut du JSON pour debug --> <field name="payload_json" nolabel="1" attrs="{'readonly': True}"/> </page> <page string="Interop / Documents"> <group> <field name="external_ref"/> <field name="fhir_questionnaire_response_id"/> <field name="pdf_report_id"/> </group> </page> </notebook> </sheet> </form>
5. Adaptation en Odoo Studio (Odoo Online)
En mode purement “Studio”, je vous conseille :
-
Créer un modèle personnalisé x_synergia_assessment avec :
- les champs listés dans les tableaux ci-dessus,
- un champ Texte long pour payload_json.
-
Ajouter un menu dans votre application Synergia :
- “Évaluations structurées” → Liste + Formulaire.
-
Sur le formulaire, mettre en évidence :
- en haut : patient, type, date, GIR, score.
- en bas / onglets : contexte, notes, JSON (pour votre équipe technique).