commit 4a12cd267632b03acecce44337ebf8b1476ed6c0 Author: dom Date: Tue Feb 10 15:24:12 2026 +0100 feat: pipeline T2A - anonymisation, extraction CIM-10 et intégration edsnlp Pipeline complet de traitement de documents médicaux PDF : - Extraction texte (pdfplumber) et classification (Trackare/CRH) - Anonymisation multi-couche (regex + NER CamemBERT + sweep) - Extraction médicale CIM-10 hybride : edsnlp (AP-HP) enrichit les diagnostics, médicaments (codes ATC via Romedi) et négation, avec fallback regex pour les patterns spécifiques - Fix sentencepiece pinné à <0.2.0 pour compatibilité CamemBERT Co-Authored-By: Claude Opus 4.6 diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..af65819 --- /dev/null +++ b/.gitignore @@ -0,0 +1,8 @@ +.venv/ +__pycache__/ +*.pyc +.pytest_cache/ +.hypothesis/ +output/ +input/ +*.egg-info/ diff --git a/analyze_pdfs.py b/analyze_pdfs.py new file mode 100644 index 0000000..438c52f --- /dev/null +++ b/analyze_pdfs.py @@ -0,0 +1,254 @@ +#!/usr/bin/env python3 +""" +Analyse structurelle detaillee des PDFs dans /home/dom/ai/t2a/input/ +Utilise pdfplumber pour extraire texte, tableaux, headers et donnees personnelles. +""" + +import pdfplumber +import os +import re + +INPUT_DIR = "/home/dom/ai/t2a/input/" +REPORT_FILE = "/home/dom/ai/t2a/rapport_analyse_pdfs.md" + +# Patterns pour detecter des donnees personnelles +PATTERNS = { + "telephone": re.compile(r'(?:\+?\d{1,3}[\s.-]?)?\(?\d{2,4}\)?[\s.-]?\d{2,4}[\s.-]?\d{2,4}[\s.-]?\d{0,4}'), + "email": re.compile(r'[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}'), + "code_postal": re.compile(r'\b\d{5}\b'), + "numero_dossier": re.compile(r'\b\d{7,10}\b'), + "date": re.compile(r'\b\d{1,2}[/.-]\d{1,2}[/.-]\d{2,4}\b'), + "montant_euro": re.compile(r'\d+[\s.,]?\d*\s*[€]|\d+[\s.,]?\d*\s*EUR'), +} + +def analyze_pdf(filepath): + """Analyse complete d'un PDF.""" + result = { + "filename": os.path.basename(filepath), + "filepath": filepath, + "pages": [], + "tables_all": [], + "full_text": "", + "headers_detected": [], + "personal_data": {}, + "metadata": {}, + } + + with pdfplumber.open(filepath) as pdf: + result["metadata"] = { + "num_pages": len(pdf.pages), + "pdf_metadata": pdf.metadata if pdf.metadata else {}, + } + + for i, page in enumerate(pdf.pages): + page_info = { + "page_num": i + 1, + "width": page.width, + "height": page.height, + "text": "", + "tables": [], + "lines_count": 0, + "chars_count": 0, + "rects_count": 0, + "images_count": 0, + } + + text = page.extract_text() or "" + page_info["text"] = text + page_info["lines_count"] = len(text.split('\n')) if text else 0 + + page_info["chars_count"] = len(page.chars) if page.chars else 0 + page_info["rects_count"] = len(page.rects) if page.rects else 0 + page_info["images_count"] = len(page.images) if page.images else 0 + + tables = page.extract_tables() or [] + for t_idx, table in enumerate(tables): + table_info = { + "table_index": t_idx, + "page": i + 1, + "rows": len(table), + "cols": max(len(row) for row in table) if table else 0, + "data": table, + "header_row": table[0] if table else [], + } + page_info["tables"].append(table_info) + result["tables_all"].append(table_info) + + result["pages"].append(page_info) + result["full_text"] += f"\n--- PAGE {i+1} ---\n{text}\n" + + # Detecter les headers/sections + for line in result["full_text"].split('\n'): + stripped = line.strip() + if not stripped: + continue + if stripped.startswith("--- PAGE"): + continue + if len(stripped) >= 3 and stripped == stripped.upper() and any(c.isalpha() for c in stripped): + result["headers_detected"].append(stripped) + elif len(stripped) < 80 and stripped[0].isupper() and ':' in stripped: + result["headers_detected"].append(stripped) + + # Detecter les donnees personnelles + for pattern_name, pattern in PATTERNS.items(): + matches = pattern.findall(result["full_text"]) + if matches: + unique_matches = list(set(m.strip() for m in matches if len(m.strip()) > 3)) + if unique_matches: + result["personal_data"][pattern_name] = unique_matches + + return result + + +def format_table_for_md(table_data, max_rows=30): + """Formate un tableau en Markdown.""" + if not table_data: + return "_Tableau vide_" + + lines = [] + max_cols = max(len(row) for row in table_data) + + normalized = [] + for row in table_data[:max_rows]: + norm_row = [] + for j in range(max_cols): + if j < len(row) and row[j] is not None: + cell = str(row[j]).replace('\n', ' ').replace('|', '/').strip() + norm_row.append(cell if cell else "") + else: + norm_row.append("") + normalized.append(norm_row) + + lines.append("| " + " | ".join(normalized[0]) + " |") + lines.append("| " + " | ".join(["---"] * max_cols) + " |") + + for row in normalized[1:]: + lines.append("| " + " | ".join(row) + " |") + + if len(table_data) > max_rows: + lines.append(f"\n_... ({len(table_data) - max_rows} lignes supplementaires non affichees)_") + + return "\n".join(lines) + + +def generate_report(analyses): + """Genere le rapport Markdown.""" + report = [] + report.append("# Rapport d'analyse structurelle des PDFs") + report.append(f"\n**Repertoire analyse :** `{INPUT_DIR}`") + report.append(f"**Nombre de fichiers :** {len(analyses)}") + report.append("") + + for idx, analysis in enumerate(analyses, 1): + report.append(f"\n{'='*80}") + report.append(f"## {idx}. {analysis['filename']}") + report.append(f"{'='*80}\n") + + meta = analysis["metadata"] + report.append("### Metadonnees du PDF") + report.append(f"- **Nombre de pages :** {meta['num_pages']}") + if meta.get("pdf_metadata"): + for k, v in meta["pdf_metadata"].items(): + if v: + report.append(f"- **{k} :** {v}") + report.append("") + + report.append("### Structure par page") + for page in analysis["pages"]: + report.append(f"\n#### Page {page['page_num']}") + report.append(f"- **Dimensions :** {page['width']} x {page['height']} pts") + report.append(f"- **Lignes de texte :** {page['lines_count']}") + report.append(f"- **Caracteres (objets) :** {page['chars_count']}") + report.append(f"- **Rectangles :** {page['rects_count']}") + report.append(f"- **Images :** {page['images_count']}") + report.append(f"- **Tableaux detectes :** {len(page['tables'])}") + report.append("") + + report.append("### Texte complet extrait") + report.append("```") + report.append(analysis["full_text"].strip()) + report.append("```") + report.append("") + + if analysis["tables_all"]: + report.append(f"### Tableaux detectes ({len(analysis['tables_all'])} au total)") + for t in analysis["tables_all"]: + report.append(f"\n#### Tableau {t['table_index']+1} (Page {t['page']}) - {t['rows']} lignes x {t['cols']} colonnes") + report.append("") + report.append(format_table_for_md(t["data"])) + report.append("") + else: + report.append("### Tableaux detectes") + report.append("_Aucun tableau detecte par pdfplumber._\n") + + report.append("### Sections / Headers identifies") + if analysis["headers_detected"]: + seen = set() + for h in analysis["headers_detected"]: + if h not in seen: + report.append(f"- `{h}`") + seen.add(h) + else: + report.append("_Aucun header identifie._") + report.append("") + + report.append("### Donnees personnelles detectees") + if analysis["personal_data"]: + for category, values in analysis["personal_data"].items(): + report.append(f"\n**{category.replace('_', ' ').title()} :**") + for v in sorted(values): + report.append(f"- `{v}`") + else: + report.append("_Aucune donnee personnelle detectee._") + report.append("") + + report.append(f"\n{'='*80}") + report.append("## Resume comparatif") + report.append(f"{'='*80}\n") + + report.append("| Caracteristique | " + " | ".join(a["filename"] for a in analyses) + " |") + report.append("| --- | " + " | ".join(["---"] * len(analyses)) + " |") + report.append("| Pages | " + " | ".join(str(a["metadata"]["num_pages"]) for a in analyses) + " |") + report.append("| Tableaux | " + " | ".join(str(len(a["tables_all"])) for a in analyses) + " |") + report.append("| Headers | " + " | ".join(str(len(set(a["headers_detected"]))) for a in analyses) + " |") + report.append("| Longueur texte | " + " | ".join(str(len(a["full_text"])) + " chars" for a in analyses) + " |") + + return "\n".join(report) + + +def main(): + pdf_files = sorted([ + os.path.join(INPUT_DIR, f) + for f in os.listdir(INPUT_DIR) + if f.lower().endswith('.pdf') + ]) + + print(f"Fichiers PDF trouves : {len(pdf_files)}") + for f in pdf_files: + print(f" - {f}") + + analyses = [] + for filepath in pdf_files: + print(f"\nAnalyse de : {os.path.basename(filepath)} ...") + analysis = analyze_pdf(filepath) + analyses.append(analysis) + print(f" Pages: {analysis['metadata']['num_pages']}") + print(f" Tableaux: {len(analysis['tables_all'])}") + print(f" Headers: {len(set(analysis['headers_detected']))}") + print(f" Texte: {len(analysis['full_text'])} chars") + + report = generate_report(analyses) + + with open(REPORT_FILE, "w", encoding="utf-8") as f: + f.write(report) + + print(f"\n{'='*60}") + print(f"Rapport ecrit dans : {REPORT_FILE}") + print(f"{'='*60}") + + print("\n") + print(report) + + +if __name__ == "__main__": + main() diff --git a/rapport_analyse_pdfs.md b/rapport_analyse_pdfs.md new file mode 100644 index 0000000..5e342d8 --- /dev/null +++ b/rapport_analyse_pdfs.md @@ -0,0 +1,4075 @@ +# Rapport d'analyse structurelle des PDFs + +**Repertoire analyse :** `/home/dom/ai/t2a/input/` +**Nombre de fichiers :** 2 + + +================================================================================ +## 1. CRH 23042753.pdf +================================================================================ + +### Metadonnees du PDF +- **Nombre de pages :** 4 +- **Title :** Region.FRXX.Reports.ZEN.FRBYCS001CourrierSortieHospEndo.cls +- **Producer :** Apache FOP Version 2.4 +- **CreationDate :** D:20250408091553+02'00' + +### Structure par page + +#### Page 1 +- **Dimensions :** 595.275 x 841.889 pts +- **Lignes de texte :** 97 +- **Caracteres (objets) :** 5125 +- **Rectangles :** 151 +- **Images :** 1 +- **Tableaux detectes :** 2 + + +#### Page 2 +- **Dimensions :** 595.275 x 841.889 pts +- **Lignes de texte :** 107 +- **Caracteres (objets) :** 3135 +- **Rectangles :** 151 +- **Images :** 1 +- **Tableaux detectes :** 2 + + +#### Page 3 +- **Dimensions :** 595.275 x 841.889 pts +- **Lignes de texte :** 94 +- **Caracteres (objets) :** 5100 +- **Rectangles :** 151 +- **Images :** 1 +- **Tableaux detectes :** 2 + + +#### Page 4 +- **Dimensions :** 595.275 x 841.889 pts +- **Lignes de texte :** 102 +- **Caracteres (objets) :** 3135 +- **Rectangles :** 151 +- **Images :** 1 +- **Tableaux detectes :** 2 + +### Texte complet extrait +``` +--- PAGE 1 --- +N° Finess CENTRE HOSPITALIER COTE BASQUE +✉ 13, Avenue de l'Interne J. LOEB BP 8, 64109 BAYONNE CEDEX +☎ 05 59 44 35 35 - Fax: 05 59 63 35 88 +640000162 +Pôle Spécialités Médicales +Service de Gastro-Entérologie - Oncologie Digestive +ICANCE - Institut de Cancérologie Bayonne, le 03/03/2023 +Navarre Côte Basque +Mme Christelle Béraut, cadre de +fédération MME NARBAIS AUDREY +Dr Thomas Grellety, coordonnateur MAISON IRREXELAIA +médical de fédération +3297 QUARTIER AUZO TTIPI +Chef de Service 64430 ST ETIENNE DE BAIGORRY +Dr F. AUDEMAR +A. Interne Hôpitaux Strasbourg +A. Chef Clinique – Ass. Hôpitaux Mon cher confrère, +DESC Oncologie Digestive +Hépato-gastro-entérologue +Oncologue Digestif Votre patiente NARBAIS Audrey née le 23/02/1980 a été hospitalisée dans le service du 25/02/2023 au 03/03/2023 pour le motif +faudemar@ch-cotebasque.fr +suivant: +Praticiens Hospitaliers +Dr M. BOUBE +A. In. Hôpitaux Clermont Ferrand +A. Chef de clinique - Ass Hôpitaux Evolution : +Hépato-gastro-entérologue +MH : Douleur hypochondre droit +mboube@ch-cotebasque.fr +Dr M. BRUGEL +A. Interne Hôpitaux Reims Antécédents : +A. Ass. Hôpitaux Reims - fin janvier 2023 crise de colique hépatique avec vésicule lithiasique sur l'echo +DESC Cancérologie +Hépato-gastro-entérologue +Oncologue digestif Traitements :0 +mbrugel@ch-cotebasque.fr +Dr C. CAZELLES-BOUDIER Allergie :0 +A. Interne Hôpitaux Limoges +A. Chef Clinique – Ass. Hôpitaux +Histoire de la maladie : +Hépato-gastro-entérologue +Proctologue Fin janvier 1 er épisode de colique hépatique pris en charge aux urgences de St Palais. Lithiases vésiculaires sur echo en +Explorations Fonct. Digestives ville. La patiente devait revoir son médecin traitant début mars pour évoquer la suite de la prise en charge. +mcboudier@ch-cotebasque.fr +Le 24/02 vers 20h récidive des douleurs, en hypochondre droit, ne cédant pas. Arrive hyperalgique aux urgences. Pas de +Dr F. GOUTORBE signes d'irritation péritonéale. Hémodynamique stable. +A. In. Hôpitaux Clermont Ferrand +A. Chef de clinique - Ass Hôpitaux Le bilan biologique retrouve : Lipasémie à 6000 donc >3N. cytolyse ASAT=8.5N ALAT=9.6N / cholestase GGT=518 +DESC Oncologie Digestive U/L PAL=403 U/L / Bilirubine totale à 23 µmol/L / CRP=12 sans hyperleucocytose / troponine négative / pas de trouble +Proctologue ionique. +fgoutorbe@ch-cotebasque.fr +Pas de critère de SRIS clinique. +Dr A.GUILNGAR +A.Interne Hôpitaux Bordeaux +DESC Oncologie Digestive Donc au total : premier épisode de pancréatite aigue d'origine lithiasique suspectée chez une patiente ayant fait un épisode +Hépato-gastro-entérologue de colique hépatique en 01/23 avec indication chirurgicale retenue. +Oncologue Digestif +aguilngar@ch-cotebasque.fr +Titration morphine aux urgences puis relais en PCA et transfert dans le service de gastro entérologie : +Dr T. KHUONG +A. In. Hôpitaux Clermont Ferrand Rassurante sur le plan abdominal, sous PCA de morphine, non douloureuse et pas d'iléus. +A. Chef Clinique – Ass. Hôpitaux Laissée à jeun initialement. +Hépato-gastro-entérologue Evolution rapidement favorable permettant une reprise alimentaire progressive, et arrêt de la PCA de morphine. +Proctologue +Explorations Fonct. Digestives +tkhuong-huu@ch-cotebasque.fr Le TDM à J3 retrouve : Absence de signe de gravité. Pas d'anomalie significative de la glande pancréatique, ni infiltration +Dr D. NIVET péripancréatique. Pas de coulée liquidienne. Pas d'argument pour une complication vasculaire, en particulier pas de +A. Interne Hôpitaux Bordeaux - Ass. pseudoanévrisme décelé. On retrouve une minime infiltration périvésiculaire, évocatrice de pope hat sign, mais sans +Hôpitaux +hydrocholécyste ce jour. Score de Balthazar à 0. +Hépato-gastro-entérologue +dnivet@ch-cotebasque.fr +Dr B. OUI Cholécystectomie par cœlioscopie le 01/03 par Dr PUJOS. +A. Interne Hôpitaux Bordeaux Cholangiographie retrouvant une lithiase du bas cholédoque, de petite taille, sans opacification initialement du duodénum - +A. Chef Clinique - Ass. Hôpitaux > après plusieurs injections de produit de contraste on arrive finalement à pousser le calcul qui réussit à franchir la papille : +Hépato-gastro-entérologue +boui@ch-cotebasque.fr opacification franche du duodénum au décours sans lithiase résiduelle de la VBP, hépatogramme complet. Pas de KT +nécessaire donc. +Dr F. PREVOST +RPPS : 10100532760 Fermeture fils résorbables + colle à la peau. +Hépato-gastro-entérologue et assistante +nutritive +Pas de complication au décours de l'intervention. Reprise alimentaire progressive bien tolérée. +fprevost@ch-cotebasque.fr +Bilan hépatique à la sortie en amélioration ASAT 79 ALAT 123 GGT 242 PAL 148 bilirubine normale 8. +Unité d’Hospitalisation +Tel 05.59.44.37.23 +Fax 05.59.44.37.25 Eruption cutanée érythémateuse prédominant sur le tronc apparue le matin de la sortie, non prurigineuse ; dans un contexte +Cadre Infirmier de prise de CONTRAMAL la veille (première prise, unique). Réaction au tramadol? +Mme S. TIEBOIS +Introduction cétirizine. +Secrétariat et R.V. +Tel 05.59.44.37.22 Au total : Pancréatite aigue lithiasique sans signe de gravité. Cholécystectomisée. +Fax 05.59.44.37.29 +Patient(e) : CLIER AUDREY NARBAIS Né(e) le 23/02/1980 +IPP 01306172 / N° Episode 23042753 (MEDECINE GASTRO B2 HC) +V2 - Imprimé le 08/04/2025 à 09:15 par Page(s): 1 sur 2 + +--- PAGE 2 --- +N° Finess CENTRE HOSPITALIER COTE BASQUE +✉ 13, Avenue de l'Interne J. LOEB BP 8, 64109 BAYONNE CEDEX +☎ 05 59 44 35 35 - Fax: 05 59 63 35 88 +640000162 +Pôle Spécialités Médicales +Service de Gastro-Entérologie - Oncologie Digestive +ICANCE - Institut de Cancérologie +Navarre Côte Basque Devenir : +Mme Christelle Béraut, cadre de +Sortie le 03/03. +f +D +é +r +d é +T +r +h +a +o +ti +m +on +as Grellety, coordonnateur Bilan hépatique de contrôle et consultation avec le Dr PUJOS dans un mois (RDV à prendre par la patiente au secrétariat de +médical de fédération chirurgie viscérale). +Chef de Service +Dr F. AUDEMAR TTT de sortie : +A. Interne Hôpitaux Strasbourg Paracétamol et Acupan sur sucre si besoin +A. Chef Clinique – Ass. Hôpitaux +Cétirizine +DESC Oncologie Digestive +Hépato-gastro-entérologue +Oncologue Digestif +faudemar@ch-cotebasque.fr +Praticiens Hospitaliers +Dr M. BOUBE +A. In. Hôpitaux Clermont Ferrand Votre patient(e) quitte le service avec: +A. Chef de clinique - Ass Hôpitaux +Hépato-gastro-entérologue - Laboratoire : +mboube@ch-cotebasque.fr TP+TCA +Dr M. BRUGEL Num +Formule +Plaq +A. Interne Hôpitaux Reims +Ionogramme ( Na, K, CL ) +A. Ass. Hôpitaux Reims +DESC Cancérologie Glucose dosage sang +Hépato-gastro-entérologue Créatinine dosage sang +Oncologue digestif +Calcémie ( calcium total ) sang ( dosage ) +mbrugel@ch-cotebasque.fr +Réserve alcaline bicarbonates sang ( dosage ) +Dr C. CAZELLES-BOUDIER +A. Interne Hôpitaux Limoges Gamma GT GGT sang ( dosage ) +A. Chef Clinique – Ass. Hôpitaux Phosphatase alcaline dosage sang +Hépato-gastro-entérologue Lipase dosage sang +Proctologue +Explorations Fonct. Digestives Bilirubine ( totale + conjuguée + non conjuguée ) sang ( dosage ) +mcboudier@ch-cotebasque.fr CRP sang ( dosage ) +Dr F. GOUTORBE - Pharmacie : +A. In. Hôpitaux Clermont Ferrand KETOPROFENE - BIPROFENID LP 100MG CPR 100MG comprime 1 COMPRIME (ORALE) matin soir (8h - 20h) +A. Chef de clinique - Ass Hôpitaux +PARACETAMOL BBM 10MG/ML INJ 100ML [10] Flacon(s) 1 G (INTRAVEINEUSE) en direct ttes les 8h [0h 8h 16h] +DESC Oncologie Digestive +Proctologue +fgoutorbe@ch-cotebasque.fr +Dr A.GUILNGAR Les consignes d'usage ont été remises. +A.Interne Hôpitaux Bordeaux +DESC Oncologie Digestive +Hépato-gastro-entérologue +Oncologue Digestif +aguilngar@ch-cotebasque.fr +Bien confraternellement, +Dr T. KHUONG +A. In. Hôpitaux Clermont Ferrand +A. Chef Clinique – Ass. Hôpitaux +Hépato-gastro-entérologue +Proctologue +Docteur AUDEMAR Franck +Explorations Fonct. Digestives +tkhuong-huu@ch-cotebasque.fr *10002456746* +Dr D. NIVET +A. Interne Hôpitaux Bordeaux - Ass. +Hôpitaux 10002456746 +Hépato-gastro-entérologue +dnivet@ch-cotebasque.fr +Dr B. OUI +A. Interne Hôpitaux Bordeaux +A. Chef Clinique - Ass. Hôpitaux Rédigé par DUTREY Sarah +Hépato-gastro-entérologue +boui@ch-cotebasque.fr +Dr F. PREVOST +RPPS : 10100532760 +Hépato-gastro-entérologue et assistante +nutritive Liste des destinataires: +fprevost@ch-cotebasque.fr +Madame NARBAIS AUDREY +Unité d’Hospitalisation +DR. MELLIN Marie +Tel 05.59.44.37.23 +Fax 05.59.44.37.25 +Cadre Infirmier +Mme S. TIEBOIS +Secrétariat et R.V. +Tel 05.59.44.37.22 +Fax 05.59.44.37.29 +Patient(e) : CLIER AUDREY NARBAIS Né(e) le 23/02/1980 +IPP 01306172 / N° Episode 23042753 (MEDECINE GASTRO B2 HC) +V2 - Imprimé le 08/04/2025 à 09:15 par Page(s): 2 sur 2 + +--- PAGE 3 --- +N° Finess CENTRE HOSPITALIER COTE BASQUE +✉ 13, Avenue de l'Interne J. LOEB BP 8, 64109 BAYONNE CEDEX +☎ 05 59 44 35 35 - Fax: 05 59 63 35 88 +640000162 +Pôle Spécialités Médicales +Service de Gastro-Entérologie - Oncologie Digestive +ICANCE - Institut de Cancérologie Bayonne, le 03/03/2023 +Navarre Côte Basque +Mme Christelle Béraut, cadre de +fédération DR MELLIN MARIE +Dr Thomas Grellety, coordonnateur LOTISSEMENT GELTOKI +médical de fédération +64430 ST ETIENNE DE BAIGORRY +Chef de Service +Dr F. AUDEMAR +A. Interne Hôpitaux Strasbourg Mon cher confrère, +A. Chef Clinique – Ass. Hôpitaux +DESC Oncologie Digestive +Hépato-gastro-entérologue Votre patiente NARBAIS Audrey née le 23/02/1980 a été hospitalisée dans le service du 25/02/2023 au 03/03/2023 pour le motif +Oncologue Digestif suivant: +faudemar@ch-cotebasque.fr +Praticiens Hospitaliers +Dr M. BOUBE Evolution : +A. In. Hôpitaux Clermont Ferrand +A. Chef de clinique - Ass Hôpitaux MH : Douleur hypochondre droit +Hépato-gastro-entérologue +mboube@ch-cotebasque.fr +Antécédents : +Dr M. BRUGEL +A. Interne Hôpitaux Reims - fin janvier 2023 crise de colique hépatique avec vésicule lithiasique sur l'echo +A. Ass. Hôpitaux Reims +DESC Cancérologie Traitements :0 +Hépato-gastro-entérologue +Oncologue digestif +mbrugel@ch-cotebasque.fr Allergie :0 +Dr C. CAZELLES-BOUDIER +A. Interne Hôpitaux Limoges Histoire de la maladie : +A. Chef Clinique – Ass. Hôpitaux +Fin janvier 1 er épisode de colique hépatique pris en charge aux urgences de St Palais. Lithiases vésiculaires sur echo en +Hépato-gastro-entérologue +Proctologue ville. La patiente devait revoir son médecin traitant début mars pour évoquer la suite de la prise en charge. +Explorations Fonct. Digestives Le 24/02 vers 20h récidive des douleurs, en hypochondre droit, ne cédant pas. Arrive hyperalgique aux urgences. Pas de +mcboudier@ch-cotebasque.fr +signes d'irritation péritonéale. Hémodynamique stable. +Dr F. GOUTORBE Le bilan biologique retrouve : Lipasémie à 6000 donc >3N. cytolyse ASAT=8.5N ALAT=9.6N / cholestase GGT=518 +A. In. Hôpitaux Clermont Ferrand +A. Chef de clinique - Ass Hôpitaux U/L PAL=403 U/L / Bilirubine totale à 23 µmol/L / CRP=12 sans hyperleucocytose / troponine négative / pas de trouble +DESC Oncologie Digestive ionique. +Proctologue Pas de critère de SRIS clinique. +fgoutorbe@ch-cotebasque.fr +Dr A.GUILNGAR +Donc au total : premier épisode de pancréatite aigue d'origine lithiasique suspectée chez une patiente ayant fait un épisode +A.Interne Hôpitaux Bordeaux +DESC Oncologie Digestive de colique hépatique en 01/23 avec indication chirurgicale retenue. +Hépato-gastro-entérologue +Oncologue Digestif +Titration morphine aux urgences puis relais en PCA et transfert dans le service de gastro entérologie : +aguilngar@ch-cotebasque.fr +Rassurante sur le plan abdominal, sous PCA de morphine, non douloureuse et pas d'iléus. +Dr T. KHUONG +A. In. Hôpitaux Clermont Ferrand Laissée à jeun initialement. +A. Chef Clinique – Ass. Hôpitaux Evolution rapidement favorable permettant une reprise alimentaire progressive, et arrêt de la PCA de morphine. +Hépato-gastro-entérologue +Proctologue +Explorations Fonct. Digestives Le TDM à J3 retrouve : Absence de signe de gravité. Pas d'anomalie significative de la glande pancréatique, ni infiltration +tkhuong-huu@ch-cotebasque.fr péripancréatique. Pas de coulée liquidienne. Pas d'argument pour une complication vasculaire, en particulier pas de +Dr D. NIVET pseudoanévrisme décelé. On retrouve une minime infiltration périvésiculaire, évocatrice de pope hat sign, mais sans +A. Interne Hôpitaux Bordeaux - Ass. hydrocholécyste ce jour. Score de Balthazar à 0. +Hôpitaux +Hépato-gastro-entérologue +dnivet@ch-cotebasque.fr Cholécystectomie par cœlioscopie le 01/03 par Dr PUJOS. +Dr B. OUI Cholangiographie retrouvant une lithiase du bas cholédoque, de petite taille, sans opacification initialement du duodénum - +A. Interne Hôpitaux Bordeaux > après plusieurs injections de produit de contraste on arrive finalement à pousser le calcul qui réussit à franchir la papille : +A. Chef Clinique - Ass. Hôpitaux opacification franche du duodénum au décours sans lithiase résiduelle de la VBP, hépatogramme complet. Pas de KT +Hépato-gastro-entérologue +boui@ch-cotebasque.fr nécessaire donc. +Fermeture fils résorbables + colle à la peau. +Dr F. PREVOST +RPPS : 10100532760 +Hépato-gastro-entérologue et assistante Pas de complication au décours de l'intervention. Reprise alimentaire progressive bien tolérée. +nutritive +Bilan hépatique à la sortie en amélioration ASAT 79 ALAT 123 GGT 242 PAL 148 bilirubine normale 8. +fprevost@ch-cotebasque.fr +Unité d’Hospitalisation +Tel 05.59.44.37.23 Eruption cutanée érythémateuse prédominant sur le tronc apparue le matin de la sortie, non prurigineuse ; dans un contexte +Fax 05.59.44.37.25 de prise de CONTRAMAL la veille (première prise, unique). Réaction au tramadol? +Cadre Infirmier Introduction cétirizine. +Mme S. TIEBOIS +Secrétariat et R.V. Au total : Pancréatite aigue lithiasique sans signe de gravité. Cholécystectomisée. +Tel 05.59.44.37.22 +Fax 05.59.44.37.29 +Patient(e) : CLIER AUDREY NARBAIS Né(e) le 23/02/1980 +IPP 01306172 / N° Episode 23042753 (MEDECINE GASTRO B2 HC) +V2 - Imprimé le 08/04/2025 à 09:15 par Page(s): 1 sur 2 + +--- PAGE 4 --- +N° Finess CENTRE HOSPITALIER COTE BASQUE +✉ 13, Avenue de l'Interne J. LOEB BP 8, 64109 BAYONNE CEDEX +☎ 05 59 44 35 35 - Fax: 05 59 63 35 88 +640000162 +Pôle Spécialités Médicales +Service de Gastro-Entérologie - Oncologie Digestive +ICANCE - Institut de Cancérologie Devenir : +Navarre Côte Basque Sortie le 03/03. +Mme Christelle Béraut, cadre de +Bilan hépatique de contrôle et consultation avec le Dr PUJOS dans un mois (RDV à prendre par la patiente au secrétariat de +f +D +é +r +d é +T +r +h +a +o +ti +m +on +as Grellety, coordonnateur chirurgie viscérale). +médical de fédération +Chef de Service TTT de sortie : +Dr F. AUDEMAR Paracétamol et Acupan sur sucre si besoin +A. Interne Hôpitaux Strasbourg Cétirizine +A. Chef Clinique – Ass. Hôpitaux +DESC Oncologie Digestive +Hépato-gastro-entérologue +Oncologue Digestif +faudemar@ch-cotebasque.fr +Praticiens Hospitaliers +Dr M. BOUBE Votre patient(e) quitte le service avec: +A. In. Hôpitaux Clermont Ferrand +A. Chef de clinique - Ass Hôpitaux - Laboratoire : +Hépato-gastro-entérologue TP+TCA +mboube@ch-cotebasque.fr Num +Formule +Plaq +Dr M. BRUGEL Ionogramme ( Na, K, CL ) +A. Interne Hôpitaux Reims +Glucose dosage sang +A. Ass. Hôpitaux Reims +DESC Cancérologie Créatinine dosage sang +Hépato-gastro-entérologue Calcémie ( calcium total ) sang ( dosage ) +Oncologue digestif +Réserve alcaline bicarbonates sang ( dosage ) +mbrugel@ch-cotebasque.fr +Gamma GT GGT sang ( dosage ) +Dr C. CAZELLES-BOUDIER +A. Interne Hôpitaux Limoges Phosphatase alcaline dosage sang +A. Chef Clinique – Ass. Hôpitaux Lipase dosage sang +Hépato-gastro-entérologue Bilirubine ( totale + conjuguée + non conjuguée ) sang ( dosage ) +Proctologue +Explorations Fonct. Digestives CRP sang ( dosage ) +mcboudier@ch-cotebasque.fr - Pharmacie : +Dr F. GOUTORBE KETOPROFENE - BIPROFENID LP 100MG CPR 100MG comprime 1 COMPRIME (ORALE) matin soir (8h - 20h) +A. In. Hôpitaux Clermont Ferrand PARACETAMOL BBM 10MG/ML INJ 100ML [10] Flacon(s) 1 G (INTRAVEINEUSE) en direct ttes les 8h [0h 8h 16h] +A. Chef de clinique - Ass Hôpitaux +DESC Oncologie Digestive +Proctologue +fgoutorbe@ch-cotebasque.fr Les consignes d'usage ont été remises. +Dr A.GUILNGAR +A.Interne Hôpitaux Bordeaux +DESC Oncologie Digestive +Hépato-gastro-entérologue +Oncologue Digestif Bien confraternellement, +aguilngar@ch-cotebasque.fr +Dr T. KHUONG +A. In. Hôpitaux Clermont Ferrand +A. Chef Clinique – Ass. Hôpitaux +Hépato-gastro-entérologue Docteur AUDEMAR Franck +Proctologue +Explorations Fonct. Digestives *10002456746* +tkhuong-huu@ch-cotebasque.fr +Dr D. NIVET +A. Interne Hôpitaux Bordeaux - Ass. 10002456746 +Hôpitaux +Hépato-gastro-entérologue +dnivet@ch-cotebasque.fr +Dr B. OUI +A. Interne Hôpitaux Bordeaux Rédigé par DUTREY Sarah +A. Chef Clinique - Ass. Hôpitaux +Hépato-gastro-entérologue +boui@ch-cotebasque.fr +Dr F. PREVOST +RPPS : 10100532760 Liste des destinataires: +Hépato-gastro-entérologue et assistante +nutritive Madame NARBAIS AUDREY +fprevost@ch-cotebasque.fr +DR. MELLIN Marie +Unité d’Hospitalisation +Tel 05.59.44.37.23 +Fax 05.59.44.37.25 +Cadre Infirmier +Mme S. TIEBOIS +Secrétariat et R.V. +Tel 05.59.44.37.22 +Fax 05.59.44.37.29 +Patient(e) : CLIER AUDREY NARBAIS Né(e) le 23/02/1980 +IPP 01306172 / N° Episode 23042753 (MEDECINE GASTRO B2 HC) +V2 - Imprimé le 08/04/2025 à 09:15 par Page(s): 2 sur 2 +``` + +### Tableaux detectes (8 au total) + +#### Tableau 1 (Page 1) - 13 lignes x 14 colonnes + +| | | | | | | | | | | | | | | +| --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | +| | | | | | | | | | | | | | | +| | | | | | | | | | | | | | | +| | | | | | | | | | | | | | | +| | | | | | | | | | | | | | | +| | | | | | | | | | | | | | | +| | | | | | | | | | | | | | | +| | | | | | | | | | | | | | | +| | | | | | | | | | | | | | | +| | | | | | | | | | | | | | | +| | | | | | | | | | | | | | | +| | | | | | | | | | | | | | | +| | | | | | | | | | | | | | | + + +#### Tableau 2 (Page 1) - 1 lignes x 3 colonnes + +| | | | +| --- | --- | --- | + + +#### Tableau 1 (Page 2) - 13 lignes x 14 colonnes + +| | | | | | | | | | | | | | | +| --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | +| | | | | | | | | | | | | | | +| | | | | | | | | | | | | | | +| | | | | | | | | | | | | | | +| | | | | | | | | | | | | | | +| | | | | | | | | | | | | | | +| | | | | | | | | | | | | | | +| | | | | | | | | | | | | | | +| | | | | | | | | | | | | | | +| | | | | | | | | | | | | | | +| | | | | | | | | | | | | | | +| | | | | | | | | | | | | | | +| | | | | | | | | | | | | | | + + +#### Tableau 2 (Page 2) - 1 lignes x 3 colonnes + +| | | | +| --- | --- | --- | + + +#### Tableau 1 (Page 3) - 13 lignes x 14 colonnes + +| | | | | | | | | | | | | | | +| --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | +| | | | | | | | | | | | | | | +| | | | | | | | | | | | | | | +| | | | | | | | | | | | | | | +| | | | | | | | | | | | | | | +| | | | | | | | | | | | | | | +| | | | | | | | | | | | | | | +| | | | | | | | | | | | | | | +| | | | | | | | | | | | | | | +| | | | | | | | | | | | | | | +| | | | | | | | | | | | | | | +| | | | | | | | | | | | | | | +| | | | | | | | | | | | | | | + + +#### Tableau 2 (Page 3) - 1 lignes x 3 colonnes + +| | | | +| --- | --- | --- | + + +#### Tableau 1 (Page 4) - 13 lignes x 14 colonnes + +| | | | | | | | | | | | | | | +| --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | +| | | | | | | | | | | | | | | +| | | | | | | | | | | | | | | +| | | | | | | | | | | | | | | +| | | | | | | | | | | | | | | +| | | | | | | | | | | | | | | +| | | | | | | | | | | | | | | +| | | | | | | | | | | | | | | +| | | | | | | | | | | | | | | +| | | | | | | | | | | | | | | +| | | | | | | | | | | | | | | +| | | | | | | | | | | | | | | +| | | | | | | | | | | | | | | + + +#### Tableau 2 (Page 4) - 1 lignes x 3 colonnes + +| | | | +| --- | --- | --- | + +### Sections / Headers identifies +- `3297 QUARTIER AUZO TTIPI` +- `A. Chef de clinique - Ass Hôpitaux Evolution :` +- `MH : Douleur hypochondre droit` +- `A. Interne Hôpitaux Reims Antécédents :` +- `Oncologue digestif Traitements :0` +- `Dr C. CAZELLES-BOUDIER Allergie :0` +- `Histoire de la maladie :` +- `RPPS : 10100532760 Fermeture fils résorbables + colle à la peau.` +- `Patient(e) : CLIER AUDREY NARBAIS Né(e) le 23/02/1980` +- `V2 - Imprimé le 08/04/2025 à 09:15 par Page(s): 1 sur 2` +- `Navarre Côte Basque Devenir :` +- `Dr F. AUDEMAR TTT de sortie :` +- `A. In. Hôpitaux Clermont Ferrand Votre patient(e) quitte le service avec:` +- `Hépato-gastro-entérologue - Laboratoire :` +- `Dr F. GOUTORBE - Pharmacie :` +- `RPPS : 10100532760` +- `V2 - Imprimé le 08/04/2025 à 09:15 par Page(s): 2 sur 2` +- `64430 ST ETIENNE DE BAIGORRY` +- `Oncologue Digestif suivant:` +- `Dr M. BOUBE Evolution :` +- `A. Chef de clinique - Ass Hôpitaux MH : Douleur hypochondre droit` +- `Antécédents :` +- `DESC Cancérologie Traitements :0` +- `A. Interne Hôpitaux Limoges Histoire de la maladie :` +- `ICANCE - Institut de Cancérologie Devenir :` +- `Chef de Service TTT de sortie :` +- `Dr M. BOUBE Votre patient(e) quitte le service avec:` +- `A. Chef de clinique - Ass Hôpitaux - Laboratoire :` +- `RPPS : 10100532760 Liste des destinataires:` + +### Donnees personnelles detectees + +**Telephone :** +- `01306172` +- `05 59 44 35 35` +- `05 59 63 35 88` +- `05.59.44.37.22` +- `05.59.44.37.23` +- `05.59.44.37.25` +- `05.59.44.37.29` +- `10002456746` +- `10100532760` +- `23042753` +- `640000162` + +**Email :** +- `aguilngar@ch-cotebasque.fr` +- `boui@ch-cotebasque.fr` +- `dnivet@ch-cotebasque.fr` +- `faudemar@ch-cotebasque.fr` +- `fgoutorbe@ch-cotebasque.fr` +- `fprevost@ch-cotebasque.fr` +- `mboube@ch-cotebasque.fr` +- `mbrugel@ch-cotebasque.fr` +- `mcboudier@ch-cotebasque.fr` +- `tkhuong-huu@ch-cotebasque.fr` + +**Code Postal :** +- `64109` +- `64430` + +**Numero Dossier :** +- `01306172` +- `23042753` +- `640000162` + +**Date :** +- `03/03/2023` +- `05.59.44` +- `08/04/2025` +- `23/02/1980` +- `25/02/2023` + + +================================================================================ +## 2. trackare-01306172-23042753_01306172_23042753.pdf +================================================================================ + +### Metadonnees du PDF +- **Nombre de pages :** 28 +- **Title :** Region.FRXX.Reports.ZEN.FRBYFullEPR.cls +- **Producer :** Apache FOP Version 2.4 +- **CreationDate :** D:20230303135129+01'00' + +### Structure par page + +#### Page 1 +- **Dimensions :** 595.275 x 841.889 pts +- **Lignes de texte :** 66 +- **Caracteres (objets) :** 2247 +- **Rectangles :** 0 +- **Images :** 0 +- **Tableaux detectes :** 5 + + +#### Page 2 +- **Dimensions :** 595.275 x 841.889 pts +- **Lignes de texte :** 87 +- **Caracteres (objets) :** 2787 +- **Rectangles :** 0 +- **Images :** 0 +- **Tableaux detectes :** 7 + + +#### Page 3 +- **Dimensions :** 595.275 x 841.889 pts +- **Lignes de texte :** 66 +- **Caracteres (objets) :** 3433 +- **Rectangles :** 4 +- **Images :** 0 +- **Tableaux detectes :** 2 + + +#### Page 4 +- **Dimensions :** 595.275 x 841.889 pts +- **Lignes de texte :** 83 +- **Caracteres (objets) :** 3620 +- **Rectangles :** 0 +- **Images :** 0 +- **Tableaux detectes :** 1 + + +#### Page 5 +- **Dimensions :** 595.275 x 841.889 pts +- **Lignes de texte :** 72 +- **Caracteres (objets) :** 2723 +- **Rectangles :** 0 +- **Images :** 0 +- **Tableaux detectes :** 2 + + +#### Page 6 +- **Dimensions :** 595.275 x 841.889 pts +- **Lignes de texte :** 63 +- **Caracteres (objets) :** 2108 +- **Rectangles :** 2 +- **Images :** 0 +- **Tableaux detectes :** 1 + + +#### Page 7 +- **Dimensions :** 595.275 x 841.889 pts +- **Lignes de texte :** 67 +- **Caracteres (objets) :** 2042 +- **Rectangles :** 0 +- **Images :** 0 +- **Tableaux detectes :** 2 + + +#### Page 8 +- **Dimensions :** 595.275 x 841.889 pts +- **Lignes de texte :** 99 +- **Caracteres (objets) :** 2822 +- **Rectangles :** 0 +- **Images :** 0 +- **Tableaux detectes :** 6 + + +#### Page 9 +- **Dimensions :** 595.275 x 841.889 pts +- **Lignes de texte :** 95 +- **Caracteres (objets) :** 2935 +- **Rectangles :** 0 +- **Images :** 0 +- **Tableaux detectes :** 4 + + +#### Page 10 +- **Dimensions :** 595.275 x 841.889 pts +- **Lignes de texte :** 116 +- **Caracteres (objets) :** 3503 +- **Rectangles :** 0 +- **Images :** 0 +- **Tableaux detectes :** 2 + + +#### Page 11 +- **Dimensions :** 595.275 x 841.889 pts +- **Lignes de texte :** 15 +- **Caracteres (objets) :** 556 +- **Rectangles :** 0 +- **Images :** 0 +- **Tableaux detectes :** 1 + + +#### Page 12 +- **Dimensions :** 595.275 x 841.889 pts +- **Lignes de texte :** 90 +- **Caracteres (objets) :** 3286 +- **Rectangles :** 2 +- **Images :** 0 +- **Tableaux detectes :** 4 + + +#### Page 13 +- **Dimensions :** 595.275 x 841.889 pts +- **Lignes de texte :** 87 +- **Caracteres (objets) :** 2636 +- **Rectangles :** 6 +- **Images :** 0 +- **Tableaux detectes :** 2 + + +#### Page 14 +- **Dimensions :** 595.275 x 841.889 pts +- **Lignes de texte :** 86 +- **Caracteres (objets) :** 2157 +- **Rectangles :** 4 +- **Images :** 0 +- **Tableaux detectes :** 1 + + +#### Page 15 +- **Dimensions :** 595.275 x 841.889 pts +- **Lignes de texte :** 86 +- **Caracteres (objets) :** 2125 +- **Rectangles :** 5 +- **Images :** 0 +- **Tableaux detectes :** 1 + + +#### Page 16 +- **Dimensions :** 595.275 x 841.889 pts +- **Lignes de texte :** 84 +- **Caracteres (objets) :** 2210 +- **Rectangles :** 4 +- **Images :** 0 +- **Tableaux detectes :** 1 + + +#### Page 17 +- **Dimensions :** 595.275 x 841.889 pts +- **Lignes de texte :** 81 +- **Caracteres (objets) :** 2385 +- **Rectangles :** 3 +- **Images :** 0 +- **Tableaux detectes :** 1 + + +#### Page 18 +- **Dimensions :** 595.275 x 841.889 pts +- **Lignes de texte :** 7 +- **Caracteres (objets) :** 279 +- **Rectangles :** 0 +- **Images :** 0 +- **Tableaux detectes :** 0 + + +#### Page 19 +- **Dimensions :** 595.275 x 841.889 pts +- **Lignes de texte :** 85 +- **Caracteres (objets) :** 3203 +- **Rectangles :** 0 +- **Images :** 0 +- **Tableaux detectes :** 2 + + +#### Page 20 +- **Dimensions :** 595.275 x 841.889 pts +- **Lignes de texte :** 86 +- **Caracteres (objets) :** 2558 +- **Rectangles :** 0 +- **Images :** 0 +- **Tableaux detectes :** 2 + + +#### Page 21 +- **Dimensions :** 595.275 x 841.889 pts +- **Lignes de texte :** 86 +- **Caracteres (objets) :** 2128 +- **Rectangles :** 0 +- **Images :** 0 +- **Tableaux detectes :** 1 + + +#### Page 22 +- **Dimensions :** 595.275 x 841.889 pts +- **Lignes de texte :** 86 +- **Caracteres (objets) :** 2144 +- **Rectangles :** 0 +- **Images :** 0 +- **Tableaux detectes :** 1 + + +#### Page 23 +- **Dimensions :** 595.275 x 841.889 pts +- **Lignes de texte :** 86 +- **Caracteres (objets) :** 2227 +- **Rectangles :** 0 +- **Images :** 0 +- **Tableaux detectes :** 1 + + +#### Page 24 +- **Dimensions :** 595.275 x 841.889 pts +- **Lignes de texte :** 75 +- **Caracteres (objets) :** 2301 +- **Rectangles :** 0 +- **Images :** 0 +- **Tableaux detectes :** 2 + + +#### Page 25 +- **Dimensions :** 595.275 x 841.889 pts +- **Lignes de texte :** 59 +- **Caracteres (objets) :** 3312 +- **Rectangles :** 0 +- **Images :** 0 +- **Tableaux detectes :** 1 + + +#### Page 26 +- **Dimensions :** 595.275 x 841.889 pts +- **Lignes de texte :** 82 +- **Caracteres (objets) :** 3283 +- **Rectangles :** 0 +- **Images :** 0 +- **Tableaux detectes :** 1 + + +#### Page 27 +- **Dimensions :** 595.275 x 841.889 pts +- **Lignes de texte :** 67 +- **Caracteres (objets) :** 2515 +- **Rectangles :** 0 +- **Images :** 0 +- **Tableaux detectes :** 2 + + +#### Page 28 +- **Dimensions :** 595.275 x 841.889 pts +- **Lignes de texte :** 35 +- **Caracteres (objets) :** 2104 +- **Rectangles :** 0 +- **Images :** 0 +- **Tableaux detectes :** 0 + +### Texte complet extrait +``` +--- PAGE 1 --- +CENTRE HOSPITALIER COTE BASQUE +N° Finess +*640000162* +✉ 13, Avenue de l'Interne J. LOEB BP 8, 64109 BAYONNE CEDEX +640000162 +MEDECINE GASTRO ENTERO HC - MEDECINE GASTRO B2 HC +Dossier Patient +Détails des patients +Nom de naissance: CLIER IPP: 01306172 +Nom et Prénom: NARBAIS AUDREY Date de naissance: 23/02/1980 +Sexe: Féminin Lieu de naissance: CHAMPIGNY SUR MARNE +Nationalité: FRANCE Code Postal: 64430 +Adresse: MAISON IRREXELAIA QUARTIER AUZO TTIPI Ville de résidence: ST ETIENNE DE BAIGORRY +Détails épisode +Episode No: 23042753 +Localisation: MEDECINE GASTRO B2 HC Médecin courant: DR. Franck AUDEMAR +Date d'admission: 25/02/2023 Heure d'admission: 03:07 +Date de sortie: 03/03/2023 Heure de sortie: 13:08 +Médecin traitant +Nom Adresse Téléphone +DR. Marie MELLIN Lotissement Geltoki 64430 ST ETIENNE DE BAIGORRY +Liste des contacts +Tél. +Type de contact Relation Nom Prénom Adresse Tél. domicile Mobile +professionel +Personne de +Epoux narbais 06.25.39.26.82 +confiance +Personne de +Epoux narbais serge +confiance +Passage aux Urgences +Episode - Date 25/02/2023 +Episode - Heure 03:07 +Mode de transport à l'arrivée Ambulance +Médicalisation du transport Prise en charge paramédicale +Mode d'entrée Autres admissions urgentes +Date d'orientation 25/02/2023 +Heure d'orientation 03:12 +IAO ETCHEGOIN Joan +Priorité Priorité 3 +Sous-type épisode URG - Circuit Long +Douleur abdominale +Motif de prise en charge Ictère +Nausées et/ou vomissements +douleurs abdominales sur le flanc droit +vomissement en début de soirée +pris spasfon + ATG1 1g + ATG 2 à 21h +Observ. IDE Urg +ATCD : colique hépatique en 28 janvier 2023 +allergie : RAS +bracelet identification posé +Médecin de la prise en charge médicale MENDIBOURE Noémie +Date de prise en charge médicale 25/02/2023 +Heure de prise en charge médicale 03:07 +Médecin de la décision médicale SOULAT Marie +Date de décision médicale 25/02/2023 +Heure de décision médicale 07:19 +Décision médicale Hospitalisation MCO +Orientation du patient hospitalisation dans une unité de Médecine hors SC, SI, REA +Date de sortie des urgences 25/02/2023 +Heure de sortie des Urgences 16:44 +US de destination US Chirurgie Urologique et Gynécologique +Patient: CLIER NARBAIS AUDREY - Date de naissance: 23/02/1980 (01306172 ) +Episode N.: 23042753 ( MEDECINE GASTRO ENTERO HC - MEDECINE GASTRO B2 HC ) - Taille: 162 cm - Poids: 90.2 kg - IMC: 34.370 +Le 03/03/2023 13:51 Page 1 de 28 + +--- PAGE 2 --- +UF de destination MEDECINE GASTRO B2 HC +Diagnostic aux urgences +Type Etat Code Date +Principal actif K80.5 Calcul des canaux biliaires (sans angiocholite ni cholécystite) [CMA2] 25/02/2023 05:27 +Antécédents et habitudes de vie (texte libre) +Type de note Nom Date Heure Note +Aucune donnée +renseignée +Signes Vitaux +Item de 03/03/2023 02/03/2023 02/03/2023 02/03/2023 02/03/2023 02/03/2023 02/03/2023 01/03/2023 01/03/2023 01/03/2023 01/03/2023 28/02/2023 28/02/2023 +surveillance 08:49 23:13 20:00 18:13 16:02 08:36 07:33 22:58 20:02 09:38 09:16 16:30 09:19 +Température 37,40 37,80 37,90 37,90 37,90 37,10 36,70 36,00 36,90 35,70 37,10 36,00 +Pouls 83,00 81,00 92,00 97,00 75,00 66,00 72,00 63,00 69,00 72,00 +PA +105,00 124,00 102,00 149,00 121,00 138,00 126,00 162,00 128,00 118,00 +Systolique +PA +60,00 67,00 61,00 69,00 83,00 75,00 72,00 70,00 60,00 69,00 +Diastolique +PA +75,00 86,00 75,00 96,00 96,00 96,00 90,00 101,00 83,00 85,00 +Moyenne +Saturation +99,00 98,00 99,00 97,00 99,00 97,00 99,00 100,00 95,00 +O² +Ventilation Ventilation VentilationVentilationVentilationVentilationVentilationVentilation +spontanée spontanée spontanée spontanée spontanée spontanée spontanée spontanée +Ventilation +Air Air Air Air Air Air Air Air +ambiant ambiant ambiant ambiant ambiant ambiant ambiant ambiant +Echelle +EN EN EN EN EN EN EN EN EN EN +douleur +Score au +0,00 2,00 2,00 3,00 4,00 2,00 0,00 0,00 0,00 0,00 +repos +Gaz + +Transit Gaz Gaz Gaz Gaz Gaz +selles +Glycémie +1,13 0,90 1,02 0,93 +capillaire +PA +Gauche +Latéralité +Poids/Taille +Item de 27/02/2023 25/02/2023 +surveillance 17:39 17:04 +Taille [cm] 162,00 162,00 +Poids [kg] 90,20 90,00 +Indice +de masse 34.370 +corporelle +Surface +1.95 +corporelle +Surv. Isolement et Contention +Item de 03/03/2023 02/03/2023 02/03/2023 02/03/2023 02/03/2023 02/03/2023 01/03/2023 01/03/2023 01/03/2023 01/03/2023 28/02/2023 28/02/2023 28/02/2023 +surveillance 08:49 23:13 20:00 18:13 16:02 08:36 22:58 20:02 09:38 09:16 16:30 09:19 00:52 +Température 37,40 37,80 37,90 37,90 37,90 37,10 36,70 36,00 36,90 35,70 37,10 36,00 36,90 +Pouls 83,00 81,00 92,00 97,00 75,00 66,00 72,00 63,00 69,00 72,00 +PA +105,00 124,00 102,00 149,00 121,00 138,00 126,00 162,00 128,00 118,00 +Systolique +PA +60,00 67,00 61,00 69,00 83,00 75,00 72,00 70,00 60,00 69,00 +Diastolique +Saturation +99,00 98,00 99,00 97,00 99,00 97,00 99,00 100,00 95,00 +O² +Gaz + +Transit Gaz Gaz Gaz Gaz Gaz +selles +Surv. Contention +Item de 03/03/2023 02/03/2023 02/03/2023 02/03/2023 02/03/2023 02/03/2023 01/03/2023 01/03/2023 01/03/2023 01/03/2023 28/02/2023 28/02/2023 28/02/2023 +surveillance 08:49 23:13 20:00 18:13 16:02 08:36 22:58 20:02 09:38 09:16 16:30 09:19 00:52 +Température 37,40 37,80 37,90 37,90 37,90 37,10 36,70 36,00 36,90 35,70 37,10 36,00 36,90 +Pouls 83,00 81,00 92,00 97,00 75,00 66,00 72,00 63,00 69,00 72,00 +PA +105,00 124,00 102,00 149,00 121,00 138,00 126,00 162,00 128,00 118,00 +Systolique +PA +60,00 67,00 61,00 69,00 83,00 75,00 72,00 70,00 60,00 69,00 +Diastolique +Patient: CLIER NARBAIS AUDREY - Date de naissance: 23/02/1980 (01306172 ) +Episode N.: 23042753 ( MEDECINE GASTRO ENTERO HC - MEDECINE GASTRO B2 HC ) - Taille: 162 cm - Poids: 90.2 kg - IMC: 34.370 +Le 03/03/2023 13:51 Page 2 de 28 + +--- PAGE 3 --- +Saturation +99,00 98,00 99,00 97,00 99,00 97,00 99,00 100,00 95,00 +O² +Gaz + +Transit Gaz Gaz Gaz Gaz Gaz +selles +Glycémie +1,13 0,90 1,02 0,93 +capillaire +Observations médicales +Type d'observation Nom Date Commentaires +MH : Douleur hypochondre droit +Antécédents : +- fin janvier 2023 crise de colique hépatique avec vésicule lithiasique sur l'echo +Traitements :0 +Allergie :0 +Histoire de la maladie : +Fin janvier 1 er épisode de colique hépatique pris en charge aux urgences de St Palais. Lithiases +vésiculaires sur echo en ville. La patiente devait revoir son médecin traitant début mars pour +évoquer la suite de la prise en charge. +Le 24/02 vers 20h récidive des douleurs, en hypochondre droit, ne cédant pas. Arrive +hyperalgique aux urgences. Pas de signes d'irritation péritonéale. Hémodynamique stable. +Le bilan biologique retrouve : Lipasémie à 6000 donc >3N. cytolyse ASAT=8.5N ALAT=9.6N / +cholestase GGT=518 U/L PAL=403 U/L / Bilirubine totale à 23 µmol/L / CRP=12 sans +hyperleucocytose / troponine négative / pas de trouble ionique. +Pas de critère de SRIS clinique. +Donc au total : premier épisode de pancréatite aigue d'origine lithiasique suspectée chez une +patiente ayant fait un épisode de colique hépatique en 01/23 avec indication chirurgicale retenue. +Titration morphine aux urgences puis relais en PCA et transfert dans le service de gastro +entérologie : +Rassurante sur le plan abdominal, sous PCA de morphine, non douloureuse et pas d'iléus. +Laissée à jeun initialement. +Evolution rapidement favorable permettant une reprise alimentaire progressive, et arrêt de la +PCA de morphine. +Le TDM à J3 retrouve : Absence de signe de gravité. Pas d'anomalie significative de la glande +pancréatique, ni infiltration péripancréatique. Pas de coulée liquidienne. Pas d'argument pour +03/03/2023 +Note d'évolution Sarah DUTREY une complication vasculaire, en particulier pas de pseudoanévrisme décelé. On retrouve une +09:24 +minime infiltration périvésiculaire, évocatrice de pope hat sign, mais sans hydrocholécyste ce +jour. Score de Balthazar à 0. +Cholécystectomie par cœlioscopie le 01/03 par Dr PUJOS. +Cholangiographie retrouvant une lithiase du bas cholédoque, de petite taille, sans opacification +initialement du duodénum -> après plusieurs injections de produit de contraste on arrive +finalement à pousser le calcul qui réussit à franchir la papille : opacification franche du +duodénum au décours sans lithiase résiduelle de la VBP, hépatogramme complet. Pas de KT +nécessaire donc. +Fermeture fils résorbables + colle à la peau. +Pas de complication au décours de l'intervention. Reprise alimentaire progressive bien tolérée. +Bilan hépatique à la sortie en amélioration ASAT 79 ALAT 123 GGT 242 PAL 148 bilirubine +normale 8. +Eruption cutanée érythémateuse prédominant sur le tronc apparue le matin de la sortie, non +prurigineuse ; dans un contexte de prise de CONTRAMAL la veille (première prise, unique). +Réaction au tramadol? +Introduction cétirizine. +Au total : Pancréatite aigue lithiasique sans signe de gravité. Cholécystectomisée. +Devenir : +Sortie le 03/03. +Bilan hépatique de contrôle et consultation avec le Dr PUJOS dans un mois (RDV à prendre par +la patiente au secrétariat de chirurgie viscérale). +TTT de sortie : +Paracétamol et Acupan sur sucre si besoin +Cétirizine +Patient: CLIER NARBAIS AUDREY - Date de naissance: 23/02/1980 (01306172 ) +Episode N.: 23042753 ( MEDECINE GASTRO ENTERO HC - MEDECINE GASTRO B2 HC ) - Taille: 162 cm - Poids: 90.2 kg - IMC: 34.370 +Le 03/03/2023 13:51 Page 3 de 28 + +--- PAGE 4 --- +02/03/23 +02/03/2023 Patiente cholécystectomisée hier le 01/03 +Note d'évolution Sarah DUTREY +15:55 Ce jour, quelques douleurs abdominales bien soulagées par paracétamol et tramadol. +Reprise de l'alimentation bien tolérée, bilan biologique demain puis sortie si RAS +Cholécystectomie par cœlioscopie ce jour : +Cholangiographie retrouvant une lithiase du bas cholédoque, de petite taille, sans opacification +initialement du duodénum -> après plusieurs injections de produit de contraste on arrive +finalement à pousser le calcul qui réussit à franchir la papille : opacification franche du +duodénum au décours sans lithiase résiduelle de la VBP, hépatogramme complet. Pas de KT +01/03/2023 +Note d'évolution Marion PUJOS nécessaire donc. +16:47 +Fermeture fils résorbables + colle à la peau. +Clichés de cholangiographie dans le dossier de la patiente. +Réalimentation CY ce soir, normal demain. +BH à J1 et sortie au décours si RAS. +DR. Marie-Christine +28/02/2023 +Note d'évolution CAZELLES- +12:32 +BOUDIER +DR. Marie-Christine Pas de signe de gravite sur le TDM. +27/02/2023 +Note d'évolution CAZELLES- Cholecystectomie le 01/03/23 +18:08 +BOUDIER Patiente informée +DR. Felix 27/02/2023 Le 27/02/23 +Note d'évolution +GOUTORBE 10:48 Appel Radio Dr BENNIS: OK pour TDM ce jour +26/02/23: +Pas de douleurs, gaz présents +ok eau ce jour, et BCY dès demain si pas de douleurs +DR. Anne 26/02/2023 +Note d'évolution +GUILNGAR 12:12 +TDM + bio demain +Discussion avec M Pujos : pourrait aller en chir viscérale en vue de cholecystectomie rapide, +après TDM si PA non grave ( ce qui semble être le cas) +Au total : +Premier épisode de pancréatite aigue d'origine suspectée chez une patiente ayant fait un épisode +de colique hépatique en 01/23 avec indication chirurgicale retenue. +Douleurs abdo le 24/02 au soir. +A son arrivée, aux urgences lipasémie 6000 avec cytolyse 300 ASAT ALAT et cholestase +400-500 GGT PAL; +25/02/2023 CRP 12 sans hyperleucocytose. +Note d'évolution Isabelle DONAT +13:28 Pas de critère de SRIS clinique. +Rassurante sur le plan abdominal, actuellement sous PCA de morphine, non douloureuse et pas +d'iléus. +on poursuit on la laisse à jeun ce jour. +Selon évolution demain BYC. +En attente d'un TDM à faire lundi 72h des douleurs + évaluation des voies biliaires notamment +élimination d'une lithiase enclavée dans le cholédoque. Je ne demande pas d'écho puisque calcul +connu de la vésicule biliaire et mauvais exam pour évaluer le cholédoque. +25/02/2023 +Note d'évolution DR. Claire ROGER non douloureuse ce matin +08:31 +Pancréatite lithiasique. Antalgie. Hospitalisation. Scanner à 48h du début +Conclusion Obs. 25/02/2023 +DR. Marie SOULAT des symptômes. Patiente soulagée après morphiniques informée de la +médicales 07:02 +suite de la prise en charge. +Conclusion Obs. Noémie 25/02/2023 Colique hépatique sans signe de complication chez patient ayant une vésicule lithiasique connue +médicales MENDIBOURE 05:28 Retour à domicile avec antalgie, bilan de contrôle et avis chirurgien viscéral +soulagée apres 6 mg de morphine +Bilan sanguin : +cytolyse ASAT=8.5N ALAT=9.6N +cholestase GGT=518 U/L +PAL=403 U/L +Noémie 25/02/2023 +Note d'évolution Bilirubine totale à 23 µmol/L +MENDIBOURE 04:36 +CRP=12 +troponine negative +pas de trouble ionique +Surveillance jusqu'à 8heure pour éliminer une récidive douloureuse, si pas de nouvelle crise +retour à domicile avec bilan sanguin de contrôle , antalgique et avis chirurgien viscéral à prendre +Histoire de la Noémie 25/02/2023 Motif d’admission : douleur hypochondre droit +maladie MENDIBOURE 03:38 +Patient: CLIER NARBAIS AUDREY - Date de naissance: 23/02/1980 (01306172 ) +Episode N.: 23042753 ( MEDECINE GASTRO ENTERO HC - MEDECINE GASTRO B2 HC ) - Taille: 162 cm - Poids: 90.2 kg - IMC: 34.370 +Le 03/03/2023 13:51 Page 4 de 28 + +--- PAGE 5 --- +Antécédents : +- fin janvier 2023 crise de colique hépatique avec vésicule lithiasique sur l'echo +Traitements :0 +Allergie :0 +Histoire de la maladie : +Fin janvier 1 er épisode de colique hépatique pris en charge aux urgences de St Palais. Lithiases +vésiculaires sur echo en ville. La patiente devait revoir son médecin traitant début mars pour +évoquer la suite de la prise en charge. +Cette nuit le 24/02 vers 20h recifive des douleur , en hypochondre droit, ne cédant pas. Arrive +hyperalgique en IAO. +Examen clinique : +PA=13/8 FC=69 SatO2=96% T=37.5°C EVA= 10 +Douleur hypochondre droit retrouvé à la palpation, sans defense, irradiant en hemiceinture, reste +de l'abdomen souple et depressible, BHA+, pas de trouble du transit +Examen cardio vasculaire sans particularité +Au total : colique hépatique +PEC : titration morphinique et bilan sanguin +Surveillance Psychiatrie +Item de 25/02/2023 25/02/2023 25/02/2023 25/02/2023 25/02/2023 25/02/2023 26/02/2023 26/02/2023 26/02/2023 26/02/2023 27/02/2023 27/02/2023 27/02/2023 +surveillance 03:12 07:05 09:00 13:36 16:06 17:04 00:42 04:48 08:28 15:34 06:04 08:44 14:46 +Température 37.5 37.2 37 37 37 36.2 37.4 36.8 37.4 37.5 37.5 36.6 +Pouls 69 55 46 54 56 62 70 60 56 62 +PA +131 109 112 120 119 125 113 137 131 120 +Systolique +PA +80 54 49 73 67 59 63 62 64 74 +Diastolique +Saturation +96 98 99 99 100 100 98 99 99 97 +O² +Gaz + +Transit Gaz Gaz Gaz Gaz +selles +Notes paramédicales +Type de note Nom Date Note +03/03/2023 +Note IDE Annie GUIRESSE Non algique en début de nuit mais garde une fébricule à 37°8 +02:28 +DOULEUR: gene abdo mais pas de douleurs franche, ne souhaite pas d'ATG +ALIMENTATION: bien toleré +02/03/2023 INFECTIEUX: 37.9° toute l'apres midi non ressenti +Note IDE Magali GOYTINO +22:32 +ELIMINATIN: gaz mais pas de selles +DEVENIR: bilan sang demain et en fonction rad avec son epoux en fin de matinée +rdv dans 1mois a prendre avec chir +Algique à 10h : +Argitxu 02/03/2023 +Note IDE contramal 50 administré +HIRIGOYEN 14:05 +soulagé à 12h +02/03/2023 +Note IDE Annie GUIRESSE Douleurs: algique à 0h00 (EN 4)==> ATG3 donné à sa demande +03:37 +Cholécystectomie par cœlioscopie ce jour : +Cholangiographie retrouvant une lithiase du bas +cholédoque, de petite taille, sans opacification +initialement du duodénum -> après plusieurs +injections de produit de contraste on arrive +finalement à pousser le calcul qui réussit à +01/03/2023 franchir la papille : opacification franche du +Note IDE Grégory SERRE +20:02 duodénum au décours sans lithiase résiduelle +de la VBP, hépatogramme complet. Pas de KT +nécessaire donc. +Fermeture fils résorbables + colle à la peau. +Clichés de cholangiographie dans le dossier de +la patiente. +Patient: CLIER NARBAIS AUDREY - Date de naissance: 23/02/1980 (01306172 ) +Episode N.: 23042753 ( MEDECINE GASTRO ENTERO HC - MEDECINE GASTRO B2 HC ) - Taille: 162 cm - Poids: 90.2 kg - IMC: 34.370 +Le 03/03/2023 13:51 Page 5 de 28 + +--- PAGE 6 --- +Réalimentation CY ce soir, normal demain. +BH à J1 et sortie au décours si RAS. +RBO : RBO 19h45, non algique. Mobilisation +ok. Refuse alimentation ce soir, faire BCY +demain matin pour essai. +28/02/2023 bloc : a jeun à minuit pour cholécystectomie prévue +Note IDE Tiphaine SELLE +23:32 pas de plaintes sur la nuit +Examen : cholecystectomie prévue le 01/03/2023. Cs Anesth ok. +28/02/2023 +Note IDE Grégory SERRE Douleur : non algique. +16:33 +Equipement : KTO posé MS droit +Elimination : +Pas de selles ce jour +Douleur : +28/02/2023 +Note IDE Lisa VIGNEAU Absence de douleur +13:35 +Alimentation bien tolérée +Hydratation +Diminution des apports hydriques iv +28/02/2023 élimination : petites selles moulées ce soir +Note IDE Tiphaine SELLE +00:55 non algique +MH : Entrée le 25/02 : douleur hypochondre droit/ pancréatite +Histoire de la maladie : +Fin janvier 1 er épisode de colique hépatique pris en charge aux urgences de St Palais. Lithiases +vésiculaires sur echo en ville. La patiente devait revoir son médecin traitant début mars pour +évoquer la suite de la prise en charge. +Nuit du 24/02 vers 20h recifive des douleur , en hypochondre droit, ne cédant pas. Arrive +hyperalgique en IAO. +autonome +Mariée, grands enfants +pas d'activité professionnelles pour le moment +27/02/2023 +Note IDE Gaelle NOVION +17:23 *pancreatite : +TDM : pas de complications secondaires à la pancréatite +Alim BCY -GAZ depuis le 22/02 +=> patiente hydratée IV sur Kt Gch 27/02 +*Douleur : patienter non algique à son arrivée +DOULEUR absente +ALIMENTATION BCY bien tolérés +Bertrand 27/02/2023 +Note IDE +LARCEBAL 14:48 +TRANSIT gazs +, selles - +TRANSFERT en GASTRO en attente. Transmissions orales faites +DOULEUR absente +ALIMENTATION BCY bien tolérés +Stephanie 27/02/2023 TDM fait et à voir +Note IDE +CONSTANTIN 08:54 +TRANSIT gazs +, selles - +TRANSFERT en GASTRO dès que chambre disponible. Transmissions orales faites à équipe +d'après-midi +27/02/2023 +Note IDE Clara ARGANO +06:04 THERMIE: apyrétique +Patient: CLIER NARBAIS AUDREY - Date de naissance: 23/02/1980 (01306172 ) +Episode N.: 23042753 ( MEDECINE GASTRO ENTERO HC - MEDECINE GASTRO B2 HC ) - Taille: 162 cm - Poids: 90.2 kg - IMC: 34.370 +Le 03/03/2023 13:51 Page 6 de 28 + +--- PAGE 7 --- +VVP: non fonctionnelle => reposée + BS +TRANSIT: G+, S- +RISQUE INFECTIEUX : apyrétique +RISQUE DOULEUR : EN 0/10 , refuse ATG +26/02/2023 TRANSIT : gaz ok , absence de selle +Note IDE Mélanie BAU +15:43 +ALIM' : eau ok --> bien tolérée +BCY demain 27/02 si RAS +EXAMEN : TDM + BS demain 27/02 +Risque infectieux : apyrétique +Aucune douleur +26/02/2023 +Note IDE Camille COUDERC +08:30 +Laissé à jeun pour le moment > vu avec le médecin : eau autorisé ce midi +Transit :G+S- +26/02/2023 THERMIE: apyrétique +Note IDE Clara ARGANO +00:42 +DLR: non algique +ENTREE : patiente transférée des urgences , hébergée GASTRO , pour PANCREATITE +LITHIASIQUE +HDM : douleur abdo flanc droit + vomissements hier et cette nuit +25/02/2023 RISQUE INFECTIEUX : apyrétique +Note IDE Mélanie BAU +17:41 +RISQUE DOULEUR : confortable , EN 0/10 cet AM +ALIM' : AJ ce soir et +/- BCY demain , à faire confirmer +EXAMEN : TDM + BS de contrôle lundi ++ IONOGRAMME : +Hydratation débuté avec 3.4 de potassium au BS; +--> hydratation potassium dénbuté hydratation/ +25/02/2023 DOULEUR : +Note IDE Juliette SCHEFFLER +16:42 NOn algique, +DEVENIR : +transfert chir uro +TDM ==> +Au total : +Premier épisode de pancréatite aigue d'origine +suspectée chez une patiente ayant fait un +25/02/2023 épisode de colique hépatique en 01/23 avec +Note IDE Julie LAMPRE +14:16 indication chirurgicale retenue. +25/02/2023 Non algique +Note IDE Julie LAMPRE +09:20 En attente du TDM +25/02/2023 Patiente installée en tri en attente d'un scanner ce matin. +Note IDE Florence DESGIGOT +07:35 A jeun pour +/- bloc op. +25/02/2023 +Note IDE Manon BILLE Devenir : transfert dans le tri +07:35 +Motif d'entrée : douleurs abdominales sur le flanc droit +Soins : +-pose VVP + BS +25/02/2023 +Note IDE Manon BILLE -PCR covid +03:44 +Douleur : +-en=10/10 --> titration atg3 débutée --> 2mg à 3h38 --> en=5 --> 2mg à 3h43 --> en=3 --> 2mg à +3h48 --> patiente soulagée +Traitements médicamenteux +Patient: CLIER NARBAIS AUDREY - Date de naissance: 23/02/1980 (01306172 ) +Episode N.: 23042753 ( MEDECINE GASTRO ENTERO HC - MEDECINE GASTRO B2 HC ) - Taille: 162 cm - Poids: 90.2 kg - IMC: 34.370 +Le 03/03/2023 13:51 Page 7 de 28 + +--- PAGE 8 --- +Date de dernière +Prescription Dose Fréquence Date de début Note Docteur +administration +Voie d`administration: INTRAVEINEUSE +Statut des prescriptions: Signé +ONDANSETRON AGT +DR. Claire +4MG/2ML SOL INJ AMP 4 mg - Normal 01/03/2023 17:36 03/03/2023 09:36 +LEGRAS +[10] Ampoule(s) +PARACETAMOL BBM +- Ttes les 8h [0h 8h Noémie +10MG/ML INJ 100ML [10] 1 G 25/02/2023 05:28 +16h] Presc. de Sortie MENDIBOURE +Flacon(s) +Statut des prescriptions: Arrêté +ACUPAN 20MG/2ML SOL +1 AMP - Normal 25/02/2023 13:18 Isabelle DONAT +INJ [5] Ampoule(s) +Notes du +professionel de +MORPHINE CHL REN santé: titration: 2 +Noémie +10MG/ML INJ 1ML 2 mg - Normal 25/02/2023 03:23 25/02/2023 07:11 à 3 mg toutes les +MENDIBOURE +Ampoule(s) 5 min Dose MAX +20 mg => avis +médical +Le débit en cours +est : 24 ML par +1 hrs. Notes du +PHLOROGLUCINOL ARW professionel de +40MG/0,04MG INJ [10] 80 mg - Normal 25/02/2023 13:18 28/02/2023 07:18 santé: A préparer Isabelle DONAT +Ampoule(s) Bouteille(s) dans 100 mL +de NaCl 0,9% +à mettre dans la +perfusion +Le débit en +POLYIONIQUE 1A G5 +cours est : +BAX POC VFO 500ML [1] - Normal 25/02/2023 13:18 01/03/2023 06:00 Isabelle DONAT +41.666666666666664 +POCHE(S) +ML par 1 hrs. +Le débit en +SODIUM CHL MACO +cours est : +0,9% INJ PP 500ML [1] - Normal 25/02/2023 13:18 28/02/2023 06:00 Isabelle DONAT +41.666666666666664 +POCHE(S) +ML par 1 hrs. +Voie d`administration: ORALE +Statut des prescriptions: Signé +CETIRIZINE ARW 10MG +1 CPR - Matin [8h] Normal 03/03/2023 10:20 Sarah DUTREY +CPR [60] COMPRIME(S) +OXYNORMORO 5MG CPR +1 CPR - Normal 25/02/2023 13:29 03/03/2023 09:54 Isabelle DONAT +DISP [14] COMPRIME(S) +PARACETAMOL ARW +500MG GELULE [12] 2 GEL - Normal 25/02/2023 13:18 03/03/2023 13:00 Isabelle DONAT +Gelule(s) +Statut des prescriptions: Arrêté +NEFOPAM MYL Notes du +- Matin midi soir +20MG/2ML SOL INJ [5] 1 AMP 03/03/2023 10:25 professionel de Sarah DUTREY +Normal +Ampoule(s) santé: sur un sucre +Statut des prescriptions: Réalisé +CETIRIZINE ARW 10MG - Matin [8h] Presc. de +1 CPR 03/03/2023 10:25 Sarah DUTREY +CPR [60] COMPRIME(S) Sortie +CETIRIZINE ARW 10MG - Matin [8h] Presc. de +1 CPR 03/03/2023 10:34 Sarah DUTREY +CPR [60] COMPRIME(S) Sortie +KETOPROFENE - +- Matin soir (8h - Noémie +BIPROFENID LP 100MG 1 CPR 25/02/2023 05:28 +20h) Presc. de Sortie MENDIBOURE +CPR 100MG comprime +NEFOPAM MYL Notes du +- Matin midi soir +20MG/2ML SOL INJ [5] 1 AMP 03/03/2023 10:31 professionel de Sarah DUTREY +Presc. de Sortie +Ampoule(s) santé: sur un sucre +NEFOPAM MYL Notes du +- Matin midi soir +20MG/2ML SOL INJ [5] 1 AMP 03/03/2023 10:34 professionel de Sarah DUTREY +Presc. de Sortie +Ampoule(s) santé: sur un sucre +PARACETAMOL ARW +500MG GELULE [12] 2 GEL - Presc. de Sortie 03/03/2023 10:25 Sarah DUTREY +Gelule(s) +PARACETAMOL ARW +500MG GELULE [12] 2 GEL - Presc. de Sortie 03/03/2023 10:34 Sarah DUTREY +Gelule(s) +Patient: CLIER NARBAIS AUDREY - Date de naissance: 23/02/1980 (01306172 ) +Episode N.: 23042753 ( MEDECINE GASTRO ENTERO HC - MEDECINE GASTRO B2 HC ) - Taille: 162 cm - Poids: 90.2 kg - IMC: 34.370 +Le 03/03/2023 13:51 Page 8 de 28 + +--- PAGE 9 --- +Voie d`administration: SOUS-CUTANEE +Statut des prescriptions: Signé +LOVENOX 4000UI +1 +AXa/0,4ML INJ SER +SERINGUE(S) - Matin [8h] Normal 25/02/2023 13:18 03/03/2023 09:17 Isabelle DONAT ++S [2] SERINGUE(S) +PREREMPLIE(S) +PREREMPLIE(S) +Prescriptions de radiologie +Heure Date Heure +Date début Prescription Statut Docteur Note +début exécution exécution +27/02/2023 10:13 Scanner Abdomino+/-Pelvien 27/02/2023 11:05 Réalisé DR. Marie SOULAT +Prescriptions de laboratoire +Date de +Date Heure Prescription Docteur Note +collection +25/02/2023 +25/02/2023 03:23 Ionogramme ( Na, K, CL ) Noémie MENDIBOURE +03:44 +25/02/2023 04:23 Troponine sang ( dosage ) Noémie MENDIBOURE +25/02/2023 05:29 TP+TCA Noémie MENDIBOURE +25/02/2023 05:29 Num +Formule +Plaq Noémie MENDIBOURE +25/02/2023 05:29 Ionogramme ( Na, K, CL ) Noémie MENDIBOURE +25/02/2023 05:29 Glucose dosage sang Noémie MENDIBOURE +25/02/2023 05:29 Créatinine dosage sang Noémie MENDIBOURE +Calcémie ( calcium total ) sang +25/02/2023 05:29 Noémie MENDIBOURE +( dosage ) +Réserve alcaline bicarbonates sang +25/02/2023 05:29 Noémie MENDIBOURE +( dosage ) +25/02/2023 05:29 Protéines dosage sang Noémie MENDIBOURE +Transaminases ASAT + ALAT sang +25/02/2023 05:29 Noémie MENDIBOURE +( dosage ) +25/02/2023 05:29 Gamma GT GGT sang ( dosage ) Noémie MENDIBOURE +25/02/2023 05:29 Phosphatase alcaline dosage sang Noémie MENDIBOURE +25/02/2023 05:29 Lipase dosage sang Noémie MENDIBOURE +Bilirubine ( totale + conjuguée + +25/02/2023 05:29 Noémie MENDIBOURE +non conjuguée ) sang ( dosage ) +25/02/2023 05:29 CRP sang ( dosage ) Noémie MENDIBOURE +25/02/2023 07:09 PCR COVID ( nez ) urgente DR. Marie SOULAT +27/02/2023 +27/02/2023 06:00 TP+INR ( si AVK ) Isabelle DONAT +05:52 +27/02/2023 +27/02/2023 06:00 Glucose dosage sang Isabelle DONAT +05:52 +DR. Marie-Christine CAZELLES- 01/03/2023 +01/03/2023 08:00 Ionogramme ( Na, K, CL ) +BOUDIER 08:12 +Bilirubine ( totale + conjuguée + DR. Marie-Christine CAZELLES- 01/03/2023 +01/03/2023 08:00 +non conjuguée ) sang ( dosage ) BOUDIER 08:12 +Pièce opératoire ( Atlantic- 01/03/2023 +01/03/2023 16:36 Lucie LOUIS +Pathologie) 16:36 +02/03/2023 +02/03/2023 07:00 TP+INR ( si AVK ) Sarah DUTREY +08:31 +02/03/2023 +02/03/2023 07:00 Glucose dosage sang Sarah DUTREY +08:31 +Prescriptions de soins +Prescription Dose Statut Fréquence Date de début Quantité administrée Note Docteur +REGIME REPRISE 1 Jour - Matin [8h] 01/03/2023 DR. Claire +Signé +ALIMENTAIRE / DESSERT Normal 17:37 LEGRAS +ACCOMPAGNER +- Ttes les 8H [4h 12h 27/02/2023 Therese +INSTALLER AUX Réalisé +20h] Normal 07:00 ETCHEBARNE +TOILETTES +AIDE A LA PRISE - Matin midi soir 27/02/2023 Therese +Réalisé +MEDICAMENTS Normal 07:00 ETCHEBARNE +CHANGEMENT +- Ttes les 8H [4h 12h 27/02/2023 Therese +POSITION / PREV Réalisé +20h] Normal 07:00 ETCHEBARNE +ESCARRE +- Ttes les 8H [4h 12h 27/02/2023 Therese +CHANGES ADULTE Réalisé +20h] Normal 07:00 ETCHEBARNE +DESINFECTION +27/02/2023 Therese +ENVIRONNEMENT Réalisé - à 12h Normal +07:00 ETCHEBARNE +PATIENT +Patient: CLIER NARBAIS AUDREY - Date de naissance: 23/02/1980 (01306172 ) +Episode N.: 23042753 ( MEDECINE GASTRO ENTERO HC - MEDECINE GASTRO B2 HC ) - Taille: 162 cm - Poids: 90.2 kg - IMC: 34.370 +Le 03/03/2023 13:51 Page 9 de 28 + +--- PAGE 10 --- +- 2X /jour (8h 16h) 27/02/2023 Therese +LEVER : AU FAUTEUIL Réalisé +Normal 07:00 ETCHEBARNE +LIT : REFECTION 27/02/2023 Therese +Réalisé - à 12h Normal +COMPLETE 07:00 ETCHEBARNE +MATELAS DYNAMIQUE 27/02/2023 Therese +Réalisé - à 12h Normal +POSE 07:00 ETCHEBARNE +- Ttes les 8H [4h 12h 27/02/2023 Therese +POCHE A URINE : VIDER Réalisé +20h] Normal 07:00 ETCHEBARNE +- Matin midi goûter 27/02/2023 Therese +REPAS : AIDE PARTIELLE Réalisé +soir Normal 07:00 ETCHEBARNE +SOINS DE BOUCHE NON - Matin midi soir 27/02/2023 Therese +Réalisé +MEDICAMENTEUX Normal 07:00 ETCHEBARNE +- 3x/Nuit (22h 2h 6h) 26/02/2023 David +SOMMEIL : SURV. Réalisé +Normal 04:53 MALABAT +27/02/2023 Therese +SOMMEIL : SURV. Réalisé - à 06h Normal +07:00 ETCHEBARNE +TOILETTE : AIDE 27/02/2023 Therese +Réalisé - à 08h Normal +COMPLETE 07:00 ETCHEBARNE +TOILETTE DOUCHE : 1 Semaine - Matin 27/02/2023 Therese +Réalisé +AIDE PARTIELLE [8h] Normal 07:00 ETCHEBARNE +- Ttes les 8H [4h 12h 27/02/2023 Therese +URINAL / BASSIN : VIDER Réalisé +20h] Normal 07:00 ETCHEBARNE +10 Jours - Ttes les +01/03/2023 DR. Claire +DOULEUR : SURV Réalisé 6h [2h 8h 14h 20h] +17:36 LEGRAS +Normal +SIGNES VITAUX (Pls, 1 Mois (30j) - Ttes +01/03/2023 DR. Claire +TA, FR, T°, Glyc, Miction, Réalisé les 6h [2h 8h 14h +17:36 LEGRAS +Transit) 20h] Normal +Prescriptions de sortie +Prescription Dose Statut Fréquence Date de début Quantité administrée Note Docteur +Bilirubine ( totale + +25/02/2023 Noémie +conjuguée + non conjuguée ) Signé - Presc. de Sortie +05:29 MENDIBOURE +sang ( dosage ) +Calcémie ( calcium total ) 25/02/2023 Noémie +Signé - Presc. de Sortie +sang ( dosage ) 05:29 MENDIBOURE +CETIRIZINE ARW 10MG 1 CPR - Matin [8h] Presc. de 03/03/2023 0/7 : Non administré Sarah +Réalisé +CPR [60] COMPRIME(S) ORALE Sortie 10:25 Révisé/Traité DUTREY +CETIRIZINE ARW 10MG 1 CPR - Matin [8h] Presc. de 03/03/2023 0/7 : Non administré Sarah +Réalisé +CPR [60] COMPRIME(S) ORALE Sortie 10:34 Révisé/Traité DUTREY +25/02/2023 Noémie +Créatinine dosage sang Signé - Presc. de Sortie +05:29 MENDIBOURE +25/02/2023 Noémie +CRP sang ( dosage ) Signé - Presc. de Sortie +05:29 MENDIBOURE +Gamma GT GGT sang 25/02/2023 Noémie +Signé - Presc. de Sortie +( dosage ) 05:29 MENDIBOURE +25/02/2023 Noémie +Glucose dosage sang Signé - Presc. de Sortie +05:29 MENDIBOURE +25/02/2023 Noémie +Ionogramme ( Na, K, CL ) Signé - Presc. de Sortie +05:29 MENDIBOURE +KETOPROFENE - +1 CPR - Matin soir (8h - 25/02/2023 0/10 : Non administré Noémie +BIPROFENID LP 100MG Réalisé +ORALE 20h) Presc. de Sortie 05:28 Révisé/Traité MENDIBOURE +CPR 100MG comprime +25/02/2023 Noémie +Lipase dosage sang Signé - Presc. de Sortie +05:29 MENDIBOURE +NEFOPAM MYL +1 AMP - Matin midi soir 03/03/2023 0/9 : Non administré Sarah +20MG/2ML SOL INJ [5] Réalisé +ORALE Presc. de Sortie 10:31 Révisé/Traité DUTREY +Ampoule(s) +NEFOPAM MYL +1 AMP - Matin midi soir 03/03/2023 0/21 : Non administré Sarah +20MG/2ML SOL INJ [5] Réalisé +ORALE Presc. de Sortie 10:34 Révisé/Traité DUTREY +Ampoule(s) +25/02/2023 Noémie +Num +Formule +Plaq Signé - Presc. de Sortie +05:29 MENDIBOURE +PARACETAMOL ARW +2 GEL 03/03/2023 0/56 : Non administré Sarah +500MG GELULE [12] Réalisé - Presc. de Sortie +ORALE 10:25 Révisé/Traité DUTREY +Gelule(s) +PARACETAMOL ARW +2 GEL 03/03/2023 0/56 : Non administré Sarah +500MG GELULE [12] Réalisé - Presc. de Sortie +ORALE 10:34 Révisé/Traité DUTREY +Gelule(s) +PARACETAMOL BBM +1 G - Ttes les 8h [0h 8h 25/02/2023 0/90 : Non administré Noémie +10MG/ML INJ 100ML [10] Signé +INTRAVEINEUSE 16h] Presc. de Sortie 05:28 A valider MENDIBOURE +Flacon(s) +Phosphatase alcaline dosage 25/02/2023 Noémie +Signé - Presc. de Sortie +sang 05:29 MENDIBOURE +Patient: CLIER NARBAIS AUDREY - Date de naissance: 23/02/1980 (01306172 ) +Episode N.: 23042753 ( MEDECINE GASTRO ENTERO HC - MEDECINE GASTRO B2 HC ) - Taille: 162 cm - Poids: 90.2 kg - IMC: 34.370 +Le 03/03/2023 13:51 Page 10 de 28 + +--- PAGE 11 --- +25/02/2023 Noémie +Protéines dosage sang Signé - Presc. de Sortie +05:29 MENDIBOURE +Réserve alcaline bicarbonates 25/02/2023 Noémie +Signé - Presc. de Sortie +sang ( dosage ) 05:29 MENDIBOURE +25/02/2023 Noémie +TP+TCA Signé - Presc. de Sortie +05:29 MENDIBOURE +Transaminases ASAT + 25/02/2023 Noémie +Signé - Presc. de Sortie +ALAT sang ( dosage ) 05:29 MENDIBOURE +Patient: CLIER NARBAIS AUDREY - Date de naissance: 23/02/1980 (01306172 ) +Episode N.: 23042753 ( MEDECINE GASTRO ENTERO HC - MEDECINE GASTRO B2 HC ) - Taille: 162 cm - Poids: 90.2 kg - IMC: 34.370 +Le 03/03/2023 13:51 Page 11 de 28 + +--- PAGE 12 --- +Plan de soins Jour J du 03/03/2023 07h00 au 04/03/2023 07h00 +Prescriptions Matin (07h-12h) Midi (12h-16h) Soir (16h-21h) Soir (21h-07h) +Signé — ONDANSETRON AGT 4 MG SOL LEGRAS Claire +INJ AMP - NR solution (2 mL) - Dose 4 mg +Début le 01/03/2023 à +- INTRAVEINEUSE Directe - Toutes les 8 +17:36 +Heure(s) Si besoin - Début presc.: 01/03/2023 @ Fin le 04/03/2023 à 17:36 * 4 mg +17:36 +09:36 +SI NAUSEES/VOMISSEMENTS Admin le 03/03/2023 à +09:36 +Signé — ONDANSETRON AGT 4 MG SOL LEGRAS Claire +INJ AMP - NR solution (2 mL) - Dose 4 mg +Début le 01/03/2023 à +- INTRAVEINEUSE Directe - Toutes les 8 +17:36 +Heure(s) Si besoin - Début presc.: 01/03/2023 @ Fin le 04/03/2023 à 01:36 * 4 mg +17:36 +09:36 +SI NAUSEES/VOMISSEMENTS Admin le 03/03/2023 à +09:36 +Signé — ONDANSETRON AGT 4 MG SOL LEGRAS Claire +INJ AMP - NR solution (2 mL) - Dose 4 mg +Début le 01/03/2023 à +- INTRAVEINEUSE Directe - Toutes les 8 +17:36 +Heure(s) Si besoin - Début presc.: 01/03/2023 @ Fin le 04/03/2023 à 09:36 * 4 mg +17:36 +09:36 +SI NAUSEES/VOMISSEMENTS Admin le 03/03/2023 à +09:36 +Signé — OXYNORMORO 5MG CPR DISP DONAT Isabelle +- 5MG comprime - Dose 1 CPR - ORALE - Début le 25/02/2023 à +Toutes les 4 Heure(s) Si besoin - Début presc.: 13:29 +25/02/2023 @ 13:29 Fin le 01/04/2023 à 13:54 * 1 +CPR +"si douleurs " — Nombre de prises max par 24h : 01:54 +6 — Dose totale : 6 Admin le 03/03/2023 à +09:54 +Signé — OXYNORMORO 5MG CPR DISP DONAT Isabelle +- 5MG comprime - Dose 1 CPR - ORALE - Début le 25/02/2023 à +Toutes les 4 Heure(s) Si besoin - Début presc.: 13:29 +25/02/2023 @ 13:29 Fin le 01/04/2023 à 17:54 * 1 +CPR +"si douleurs " — Nombre de prises max par 24h : 01:54 +6 — Dose totale : 6 Admin le 03/03/2023 à +09:54 +Signé — OXYNORMORO 5MG CPR DISP DONAT Isabelle +- 5MG comprime - Dose 1 CPR - ORALE - Début le 25/02/2023 à +Toutes les 4 Heure(s) Si besoin - Début presc.: 13:29 +25/02/2023 @ 13:29 Fin le 01/04/2023 à 21:54 * 1 +CPR +"si douleurs " — Nombre de prises max par 24h : 01:54 +6 — Dose totale : 6 Admin le 03/03/2023 à +09:54 +Signé — OXYNORMORO 5MG CPR DISP DONAT Isabelle +- 5MG comprime - Dose 1 CPR - ORALE - Début le 25/02/2023 à +Toutes les 4 Heure(s) Si besoin - Début presc.: 13:29 +25/02/2023 @ 13:29 Fin le 01/04/2023 à 01:54 * 1 +CPR +"si douleurs " — Nombre de prises max par 24h : 01:54 +6 — Dose totale : 6 Admin le 03/03/2023 à +09:54 +Signé — OXYNORMORO 5MG CPR DISP DONAT Isabelle +- 5MG comprime - Dose 1 CPR - ORALE - Début le 25/02/2023 à +Toutes les 4 Heure(s) Si besoin - Début presc.: 13:29 +25/02/2023 @ 13:29 Fin le 01/04/2023 à 05:54 * 1 +CPR +"si douleurs " — Nombre de prises max par 24h : 01:54 +6 — Dose totale : 6 Admin le 03/03/2023 à +09:54 +Signé — OXYNORMORO 5MG CPR DISP DONAT Isabelle +- 5MG comprime - Dose 1 CPR - ORALE - Début le 25/02/2023 à +Toutes les 4 Heure(s) Si besoin - Début presc.: 13:29 +25/02/2023 @ 13:29 Fin le 01/04/2023 à 09:54 * 1 +CPR +"si douleurs " — Nombre de prises max par 24h : 01:54 +6 — Dose totale : 6 Admin le 03/03/2023 à +09:54 +Signé — PARACETAMOL ARW 500MG +GELULE - 500MG gelule - Dose 2 GEL - DONAT Isabelle +ORALE - Toutes les 6 Heure(s) Si besoin - Début Début le 25/02/2023 à +19:00 * 2 +presc.: 25/02/2023 @ 13:18 13:18 GEL +si douleur si température sup à 38,5 Fin le 31/03/2023 à +19:00 +Patient: CLIER NARBAIS AUDREY - Date de naissance: 23/02/1980 (01306172 ) +Episode N.: 23042753 ( MEDECINE GASTRO ENTERO HC - MEDECINE GASTRO B2 HC ) - Taille: 162 cm - Poids: 90.2 kg - IMC: 34.370 +Le 03/03/2023 13:51 Page 12 de 28 + +--- PAGE 13 --- +Admin le 03/03/2023 à +13:00 +Signé — PARACETAMOL ARW 500MG DONAT Isabelle +GELULE - 500MG gelule - Dose 2 GEL - Début le 25/02/2023 à +ORALE - Toutes les 6 Heure(s) Si besoin - Début 13:18 +01:00 * 2 +presc.: 25/02/2023 @ 13:18 Fin le 31/03/2023 à GEL +si douleur si température sup à 38,5 19:00 +Admin le 03/03/2023 à +13:00 +Signé — PARACETAMOL ARW 500MG DONAT Isabelle +GELULE - 500MG gelule - Dose 2 GEL - Début le 25/02/2023 à +ORALE - Toutes les 6 Heure(s) Si besoin - Début 13:18 +07:00 * 2 +presc.: 25/02/2023 @ 13:18 Fin le 31/03/2023 à GEL +si douleur si température sup à 38,5 19:00 +Admin le 03/03/2023 à +13:00 +Signé — PARACETAMOL ARW 500MG DONAT Isabelle +GELULE - 500MG gelule - Dose 2 GEL - Début le 25/02/2023 à +ORALE - Toutes les 6 Heure(s) Si besoin - Début 13:18 +13:00 * 2 +presc.: 25/02/2023 @ 13:18 Fin le 31/03/2023 à GEL +si douleur si température sup à 38,5 19:00 +Admin le 03/03/2023 à +13:00 +DONAT Isabelle +Signé — LOVENOX 4000UI AXA/0,4ML +INJ SER +S - 4000UI solution (0,4 mL) - Dose Début le 25/02/2023 à +1 SERINGUE(S) PREREMPLIE(S) - SOUS- 13:18 09:17 * 1 +CUTANEE Directe - Matin [8h] - 1ère dose: Fin le 27/03/2023 à SERINGUE(S) +26/02/2023 @ 08:00 08:00 PREREMPLIE(S) +Admin le 03/03/2023 à +09:17 +ETCHEBARNE +Therese +Réalisé — ACCOMPAGNER INSTALLER AUX Début le 27/02/2023 à +TOILETTES - Ttes les 8H [4h 12h 20h] - pendant 07:00 +20:00 * 1 +10 Jour(s)- Date Début: 27/02/2023 @ 07:00 Fin le 09/03/2023 à +04:00 +Admin le 03/03/2023 à +12:00 +ETCHEBARNE +Therese +Réalisé — ACCOMPAGNER INSTALLER AUX Début le 27/02/2023 à +TOILETTES - Ttes les 8H [4h 12h 20h] - pendant 07:00 +04:00 * 1 +10 Jour(s)- Date Début: 27/02/2023 @ 07:00 Fin le 09/03/2023 à +04:00 +Admin le 03/03/2023 à +12:00 +ETCHEBARNE +Therese +Réalisé — ACCOMPAGNER INSTALLER AUX Début le 27/02/2023 à +TOILETTES - Ttes les 8H [4h 12h 20h] - pendant 07:00 +12:00 * 1 +10 Jour(s)- Date Début: 27/02/2023 @ 07:00 Fin le 09/03/2023 à +04:00 +Admin le 03/03/2023 à +12:00 +ETCHEBARNE +Therese +Réalisé — AIDE A LA PRISE MEDICAMENTS Début le 27/02/2023 à +- Matin midi soir - pendant 10 Jour(s)- Date 07:00 +19:00 * 1 +Début: 27/02/2023 @ 07:00 Fin le 08/03/2023 à +19:00 +Admin le 03/03/2023 à +12:00 +ETCHEBARNE +Therese +Réalisé — AIDE A LA PRISE MEDICAMENTS Début le 27/02/2023 à +- Matin midi soir - pendant 10 Jour(s)- Date 07:00 +08:00 * 1 +Début: 27/02/2023 @ 07:00 Fin le 08/03/2023 à +19:00 +Admin le 03/03/2023 à +12:00 +Réalisé — AIDE A LA PRISE MEDICAMENTS ETCHEBARNE +- Matin midi soir - pendant 10 Jour(s)- Date Therese +12:00 * 1 +Début: 27/02/2023 @ 07:00 Début le 27/02/2023 à +07:00 +Patient: CLIER NARBAIS AUDREY - Date de naissance: 23/02/1980 (01306172 ) +Episode N.: 23042753 ( MEDECINE GASTRO ENTERO HC - MEDECINE GASTRO B2 HC ) - Taille: 162 cm - Poids: 90.2 kg - IMC: 34.370 +Le 03/03/2023 13:51 Page 13 de 28 + +--- PAGE 14 --- +Fin le 08/03/2023 à +19:00 +Admin le 03/03/2023 à +12:00 +ETCHEBARNE +Therese +Réalisé — CHANGEMENT POSITION / PREV Début le 27/02/2023 à +ESCARRE - Ttes les 8H [4h 12h 20h] - pendant 07:00 +20:00 * 1 +10 Jour(s)- Date Début: 27/02/2023 @ 07:00 Fin le 09/03/2023 à +04:00 +Admin le 03/03/2023 à +12:00 +ETCHEBARNE +Therese +Réalisé — CHANGEMENT POSITION / PREV Début le 27/02/2023 à +ESCARRE - Ttes les 8H [4h 12h 20h] - pendant 07:00 +04:00 * 1 +10 Jour(s)- Date Début: 27/02/2023 @ 07:00 Fin le 09/03/2023 à +04:00 +Admin le 03/03/2023 à +12:00 +ETCHEBARNE +Therese +Réalisé — CHANGEMENT POSITION / PREV Début le 27/02/2023 à +ESCARRE - Ttes les 8H [4h 12h 20h] - pendant 07:00 +12:00 * 1 +10 Jour(s)- Date Début: 27/02/2023 @ 07:00 Fin le 09/03/2023 à +04:00 +Admin le 03/03/2023 à +12:00 +ETCHEBARNE +Therese +Réalisé — CHANGES ADULTE - Ttes les 8H Début le 27/02/2023 à +[4h 12h 20h] - pendant 10 Jour(s)- Date Début: 07:00 +20:00 * 1 +27/02/2023 @ 07:00 Fin le 09/03/2023 à +04:00 +Admin le 03/03/2023 à +12:00 +ETCHEBARNE +Therese +Réalisé — CHANGES ADULTE - Ttes les 8H Début le 27/02/2023 à +[4h 12h 20h] - pendant 10 Jour(s)- Date Début: 07:00 +04:00 * 1 +27/02/2023 @ 07:00 Fin le 09/03/2023 à +04:00 +Admin le 03/03/2023 à +12:00 +ETCHEBARNE +Therese +Réalisé — CHANGES ADULTE - Ttes les 8H Début le 27/02/2023 à +[4h 12h 20h] - pendant 10 Jour(s)- Date Début: 07:00 +12:00 * 1 +27/02/2023 @ 07:00 Fin le 09/03/2023 à +04:00 +Admin le 03/03/2023 à +12:00 +ETCHEBARNE +Therese +Réalisé — DESINFECTION Début le 27/02/2023 à +ENVIRONNEMENT PATIENT - à 12h - pendant 07:00 +12:00 * 1 +10 Jour(s)- Date Début: 27/02/2023 @ 07:00 Fin le 08/03/2023 à +12:00 +Admin le 03/03/2023 à +12:00 +ETCHEBARNE +Therese +Réalisé — LEVER : AU FAUTEUIL - 2X / Début le 27/02/2023 à +jour (8h 16h) - pendant 10 Jour(s)- Date Début: 07:00 +16:00 * 1 +27/02/2023 @ 07:00 Fin le 08/03/2023 à +16:00 +Admin le 03/03/2023 à +08:00 +ETCHEBARNE +Réalisé — LEVER : AU FAUTEUIL - 2X / Therese +jour (8h 16h) - pendant 10 Jour(s)- Date Début: Début le 27/02/2023 à +08:00 * 1 +27/02/2023 @ 07:00 07:00 +Fin le 08/03/2023 à +16:00 +Patient: CLIER NARBAIS AUDREY - Date de naissance: 23/02/1980 (01306172 ) +Episode N.: 23042753 ( MEDECINE GASTRO ENTERO HC - MEDECINE GASTRO B2 HC ) - Taille: 162 cm - Poids: 90.2 kg - IMC: 34.370 +Le 03/03/2023 13:51 Page 14 de 28 + +--- PAGE 15 --- +Admin le 03/03/2023 à +08:00 +ETCHEBARNE +Therese +Réalisé — LIT : REFECTION COMPLETE - à Début le 27/02/2023 à +12h - pendant 10 Jour(s)- Date Début: 27/02/2023 07:00 +12:00 * 1 +@ 07:00 Fin le 08/03/2023 à +12:00 +Admin le 03/03/2023 à +12:00 +ETCHEBARNE +Therese +Réalisé — MATELAS DYNAMIQUE POSE - à Début le 27/02/2023 à +12h - pendant 10 Jour(s)- Date Début: 27/02/2023 07:00 +12:00 * 1 +@ 07:00 Fin le 08/03/2023 à +12:00 +Admin le 03/03/2023 à +12:00 +ETCHEBARNE +Therese +Réalisé — POCHE A URINE : VIDER - Ttes Début le 27/02/2023 à +les 8H [4h 12h 20h] - pendant 10 Jour(s)- Date 07:00 +20:00 * 1 +Début: 27/02/2023 @ 07:00 Fin le 09/03/2023 à +04:00 +Admin le 03/03/2023 à +12:00 +ETCHEBARNE +Therese +Réalisé — POCHE A URINE : VIDER - Ttes Début le 27/02/2023 à +les 8H [4h 12h 20h] - pendant 10 Jour(s)- Date 07:00 +04:00 * 1 +Début: 27/02/2023 @ 07:00 Fin le 09/03/2023 à +04:00 +Admin le 03/03/2023 à +12:00 +ETCHEBARNE +Therese +Réalisé — POCHE A URINE : VIDER - Ttes Début le 27/02/2023 à +les 8H [4h 12h 20h] - pendant 10 Jour(s)- Date 07:00 +12:00 * 1 +Début: 27/02/2023 @ 07:00 Fin le 09/03/2023 à +04:00 +Admin le 03/03/2023 à +12:00 +ETCHEBARNE +Therese +Réalisé — REPAS : AIDE PARTIELLE - Matin Début le 27/02/2023 à +midi goûter soir - pendant 10 Jour(s)- Date Début: 07:00 +16:00 * 1 +27/02/2023 @ 07:00 Fin le 08/03/2023 à +19:00 +Admin le 03/03/2023 à +12:00 +ETCHEBARNE +Therese +Réalisé — REPAS : AIDE PARTIELLE - Matin Début le 27/02/2023 à +midi goûter soir - pendant 10 Jour(s)- Date Début: 07:00 +19:00 * 1 +27/02/2023 @ 07:00 Fin le 08/03/2023 à +19:00 +Admin le 03/03/2023 à +12:00 +ETCHEBARNE +Therese +Réalisé — REPAS : AIDE PARTIELLE - Matin Début le 27/02/2023 à +midi goûter soir - pendant 10 Jour(s)- Date Début: 07:00 +08:00 * 1 +27/02/2023 @ 07:00 Fin le 08/03/2023 à +19:00 +Admin le 03/03/2023 à +12:00 +ETCHEBARNE +Therese +Réalisé — REPAS : AIDE PARTIELLE - Matin Début le 27/02/2023 à +midi goûter soir - pendant 10 Jour(s)- Date Début: 07:00 +12:00 * 1 +27/02/2023 @ 07:00 Fin le 08/03/2023 à +19:00 +Admin le 03/03/2023 à +12:00 +Patient: CLIER NARBAIS AUDREY - Date de naissance: 23/02/1980 (01306172 ) +Episode N.: 23042753 ( MEDECINE GASTRO ENTERO HC - MEDECINE GASTRO B2 HC ) - Taille: 162 cm - Poids: 90.2 kg - IMC: 34.370 +Le 03/03/2023 13:51 Page 15 de 28 + +--- PAGE 16 --- +ETCHEBARNE +Therese +Réalisé — SOINS DE BOUCHE NON Début le 27/02/2023 à +MEDICAMENTEUX - Matin midi soir - pendant 07:00 +19:00 * 1 +10 Jour(s)- Date Début: 27/02/2023 @ 07:00 Fin le 08/03/2023 à +19:00 +Admin le 03/03/2023 à +12:00 +ETCHEBARNE +Therese +Réalisé — SOINS DE BOUCHE NON Début le 27/02/2023 à +MEDICAMENTEUX - Matin midi soir - pendant 07:00 +08:00 * 1 +10 Jour(s)- Date Début: 27/02/2023 @ 07:00 Fin le 08/03/2023 à +19:00 +Admin le 03/03/2023 à +12:00 +ETCHEBARNE +Therese +Réalisé — SOINS DE BOUCHE NON Début le 27/02/2023 à +MEDICAMENTEUX - Matin midi soir - pendant 07:00 +12:00 * 1 +10 Jour(s)- Date Début: 27/02/2023 @ 07:00 Fin le 08/03/2023 à +19:00 +Admin le 03/03/2023 à +12:00 +David MALABAT +Réalisé — SOMMEIL : SURV. - 3x/Nuit (22h 2h Début le 26/02/2023 à +6h) - pendant 7 Jour(s)- Date Début: 26/02/2023 04:53 +@ 04:53 Fin le 05/03/2023 à 22:00 * 1 +02:00 +Admin le 03/03/2023 à +06:00 +David MALABAT +Réalisé — SOMMEIL : SURV. - 3x/Nuit (22h 2h Début le 26/02/2023 à +6h) - pendant 7 Jour(s)- Date Début: 26/02/2023 04:53 +@ 04:53 Fin le 05/03/2023 à 02:00 * 1 +02:00 +Admin le 03/03/2023 à +06:00 +David MALABAT +Réalisé — SOMMEIL : SURV. - 3x/Nuit (22h 2h Début le 26/02/2023 à +6h) - pendant 7 Jour(s)- Date Début: 26/02/2023 04:53 +@ 04:53 Fin le 05/03/2023 à 06:00 * 1 +02:00 +Admin le 03/03/2023 à +06:00 +ETCHEBARNE +Therese +Début le 27/02/2023 à +Réalisé — SOMMEIL : SURV. - à 06h - pendant +07:00 +10 Jour(s)- Date Début: 27/02/2023 @ 07:00 06:00 * 1 +Fin le 09/03/2023 à +06:00 +Admin le 03/03/2023 à +06:00 +ETCHEBARNE +Therese +Réalisé — TOILETTE : AIDE COMPLETE - à Début le 27/02/2023 à +08h - pendant 10 Jour(s)- Date Début: 27/02/2023 07:00 +08:00 * 1 +@ 07:00 Fin le 08/03/2023 à +08:00 +Admin le 03/03/2023 à +08:00 +ETCHEBARNE +Therese +Réalisé — TOILETTE DOUCHE : AIDE Début le 27/02/2023 à +PARTIELLE - Matin [8h] - 1 Semaine- Date 07:00 +08:00 * 1 +Début: 27/02/2023 @ 07:00 Fin le 05/03/2023 à +08:00 +Admin le 03/03/2023 à +08:00 +Réalisé — URINAL / BASSIN : VIDER - Ttes ETCHEBARNE +les 8H [4h 12h 20h] - pendant 10 Jour(s)- Date Therese +20:00 * 1 +Début: 27/02/2023 @ 07:00 Début le 27/02/2023 à +07:00 +Patient: CLIER NARBAIS AUDREY - Date de naissance: 23/02/1980 (01306172 ) +Episode N.: 23042753 ( MEDECINE GASTRO ENTERO HC - MEDECINE GASTRO B2 HC ) - Taille: 162 cm - Poids: 90.2 kg - IMC: 34.370 +Le 03/03/2023 13:51 Page 16 de 28 + +--- PAGE 17 --- +Fin le 09/03/2023 à +04:00 +Admin le 03/03/2023 à +12:00 +ETCHEBARNE +Therese +Réalisé — URINAL / BASSIN : VIDER - Ttes Début le 27/02/2023 à +les 8H [4h 12h 20h] - pendant 10 Jour(s)- Date 07:00 +04:00 * 1 +Début: 27/02/2023 @ 07:00 Fin le 09/03/2023 à +04:00 +Admin le 03/03/2023 à +12:00 +ETCHEBARNE +Therese +Réalisé — URINAL / BASSIN : VIDER - Ttes Début le 27/02/2023 à +les 8H [4h 12h 20h] - pendant 10 Jour(s)- Date 07:00 +12:00 * 1 +Début: 27/02/2023 @ 07:00 Fin le 09/03/2023 à +04:00 +Admin le 03/03/2023 à +12:00 +LEGRAS Claire +Réalisé — DOULEUR : SURV - Ttes les 6h [2h Début le 01/03/2023 à +8h 14h 20h] - 10 Jours- Date Début: 01/03/2023 17:36 +@ 17:36 Fin le 11/03/2023 à 14:00 * 1 +14:00 +Admin le 03/03/2023 à +08:00 +LEGRAS Claire +Réalisé — DOULEUR : SURV - Ttes les 6h [2h Début le 01/03/2023 à +8h 14h 20h] - 10 Jours- Date Début: 01/03/2023 17:36 +@ 17:36 Fin le 11/03/2023 à 20:00 * 1 +14:00 +Admin le 03/03/2023 à +08:00 +LEGRAS Claire +Réalisé — DOULEUR : SURV - Ttes les 6h [2h Début le 01/03/2023 à +8h 14h 20h] - 10 Jours- Date Début: 01/03/2023 17:36 +@ 17:36 Fin le 11/03/2023 à 02:00 * 1 +14:00 +Admin le 03/03/2023 à +08:00 +LEGRAS Claire +Réalisé — DOULEUR : SURV - Ttes les 6h [2h Début le 01/03/2023 à +8h 14h 20h] - 10 Jours- Date Début: 01/03/2023 17:36 +@ 17:36 Fin le 11/03/2023 à 08:00 * 1 +14:00 +Admin le 03/03/2023 à +08:00 +LEGRAS Claire +Réalisé — SIGNES VITAUX (Pls, TA, FR, T°, Début le 01/03/2023 à +Glyc, Miction, Transit) - Ttes les 6h [2h 8h 14h 17:36 +20h] - 1 Mois (30j)- Date Début: 01/03/2023 @ Fin le 31/03/2023 à 14:00 * 1 +17:36 14:00 +Admin le 03/03/2023 à +08:00 +LEGRAS Claire +Réalisé — SIGNES VITAUX (Pls, TA, FR, T°, Début le 01/03/2023 à +Glyc, Miction, Transit) - Ttes les 6h [2h 8h 14h 17:36 +20h] - 1 Mois (30j)- Date Début: 01/03/2023 @ Fin le 31/03/2023 à 20:00 * 1 +17:36 14:00 +Admin le 03/03/2023 à +08:00 +LEGRAS Claire +Réalisé — SIGNES VITAUX (Pls, TA, FR, T°, Début le 01/03/2023 à +Glyc, Miction, Transit) - Ttes les 6h [2h 8h 14h 17:36 +20h] - 1 Mois (30j)- Date Début: 01/03/2023 @ Fin le 31/03/2023 à 02:00 * 1 +17:36 14:00 +Admin le 03/03/2023 à +08:00 +Réalisé — SIGNES VITAUX (Pls, TA, FR, T°, +LEGRAS Claire +Glyc, Miction, Transit) - Ttes les 6h [2h 8h 14h +Début le 01/03/2023 à 08:00 * 1 +20h] - 1 Mois (30j)- Date Début: 01/03/2023 @ +17:36 +17:36 +Patient: CLIER NARBAIS AUDREY - Date de naissance: 23/02/1980 (01306172 ) +Episode N.: 23042753 ( MEDECINE GASTRO ENTERO HC - MEDECINE GASTRO B2 HC ) - Taille: 162 cm - Poids: 90.2 kg - IMC: 34.370 +Le 03/03/2023 13:51 Page 17 de 28 + +--- PAGE 18 --- +Fin le 31/03/2023 à +14:00 +Admin le 03/03/2023 à +08:00 +Patient: CLIER NARBAIS AUDREY - Date de naissance: 23/02/1980 (01306172 ) +Episode N.: 23042753 ( MEDECINE GASTRO ENTERO HC - MEDECINE GASTRO B2 HC ) - Taille: 162 cm - Poids: 90.2 kg - IMC: 34.370 +Le 03/03/2023 13:51 Page 18 de 28 + +--- PAGE 19 --- +Plan de soins Jour J + 1 du 04/03/2023 07h00 au 05/03/2023 07h00 +Prescriptions Matin (07h-12h) Midi (12h-16h) Soir (16h-21h) Soir (21h-07h) +Signé — ONDANSETRON AGT 4 MG SOL LEGRAS Claire +INJ AMP - NR solution (2 mL) - Dose 4 mg +Début le 01/03/2023 à +- INTRAVEINEUSE Directe - Toutes les 8 +17:36 +Heure(s) Si besoin - Début presc.: 01/03/2023 @ Fin le 04/03/2023 à 09:36 * 4 mg +17:36 +09:36 +SI NAUSEES/VOMISSEMENTS Admin le 03/03/2023 à +09:36 +DUTREY Sarah +Signé — CETIRIZINE ARW 10MG CPR - 10MG +comprime - Dose 1 CPR - ORALE - Matin [8h] - Début le 03/03/2023 à 08:00 * 1 +1ère dose: 04/03/2023 @ 08:00 10:20 CPR +Fin le 10/03/2023 à +08:00 +Signé — OXYNORMORO 5MG CPR DISP DONAT Isabelle +- 5MG comprime - Dose 1 CPR - ORALE - Début le 25/02/2023 à +Toutes les 4 Heure(s) Si besoin - Début presc.: 13:29 +25/02/2023 @ 13:29 Fin le 01/04/2023 à 09:54 * 1 +CPR +"si douleurs " — Nombre de prises max par 24h : 01:54 +6 — Dose totale : 6 Admin le 03/03/2023 à +09:54 +Signé — OXYNORMORO 5MG CPR DISP DONAT Isabelle +- 5MG comprime - Dose 1 CPR - ORALE - Début le 25/02/2023 à +Toutes les 4 Heure(s) Si besoin - Début presc.: 13:29 +25/02/2023 @ 13:29 Fin le 01/04/2023 à 13:54 * 1 +CPR +"si douleurs " — Nombre de prises max par 24h : 01:54 +6 — Dose totale : 6 Admin le 03/03/2023 à +09:54 +Signé — OXYNORMORO 5MG CPR DISP DONAT Isabelle +- 5MG comprime - Dose 1 CPR - ORALE - Début le 25/02/2023 à +Toutes les 4 Heure(s) Si besoin - Début presc.: 13:29 +25/02/2023 @ 13:29 Fin le 01/04/2023 à 17:54 * 1 +CPR +"si douleurs " — Nombre de prises max par 24h : 01:54 +6 — Dose totale : 6 Admin le 03/03/2023 à +09:54 +Signé — OXYNORMORO 5MG CPR DISP DONAT Isabelle +- 5MG comprime - Dose 1 CPR - ORALE - Début le 25/02/2023 à +Toutes les 4 Heure(s) Si besoin - Début presc.: 13:29 +25/02/2023 @ 13:29 Fin le 01/04/2023 à 21:54 * 1 +CPR +"si douleurs " — Nombre de prises max par 24h : 01:54 +6 — Dose totale : 6 Admin le 03/03/2023 à +09:54 +Signé — OXYNORMORO 5MG CPR DISP DONAT Isabelle +- 5MG comprime - Dose 1 CPR - ORALE - Début le 25/02/2023 à +Toutes les 4 Heure(s) Si besoin - Début presc.: 13:29 +25/02/2023 @ 13:29 Fin le 01/04/2023 à 01:54 * 1 +CPR +"si douleurs " — Nombre de prises max par 24h : 01:54 +6 — Dose totale : 6 Admin le 03/03/2023 à +09:54 +Signé — OXYNORMORO 5MG CPR DISP DONAT Isabelle +- 5MG comprime - Dose 1 CPR - ORALE - Début le 25/02/2023 à +Toutes les 4 Heure(s) Si besoin - Début presc.: 13:29 +25/02/2023 @ 13:29 Fin le 01/04/2023 à 05:54 * 1 +CPR +"si douleurs " — Nombre de prises max par 24h : 01:54 +6 — Dose totale : 6 Admin le 03/03/2023 à +09:54 +Signé — PARACETAMOL ARW 500MG DONAT Isabelle +GELULE - 500MG gelule - Dose 2 GEL - Début le 25/02/2023 à +ORALE - Toutes les 6 Heure(s) Si besoin - Début 13:18 +07:00 * 2 +presc.: 25/02/2023 @ 13:18 Fin le 31/03/2023 à GEL +si douleur si température sup à 38,5 19:00 +Admin le 03/03/2023 à +13:00 +Signé — PARACETAMOL ARW 500MG DONAT Isabelle +GELULE - 500MG gelule - Dose 2 GEL - Début le 25/02/2023 à +ORALE - Toutes les 6 Heure(s) Si besoin - Début 13:18 +13:00 * 2 +presc.: 25/02/2023 @ 13:18 Fin le 31/03/2023 à GEL +si douleur si température sup à 38,5 19:00 +Admin le 03/03/2023 à +13:00 +Patient: CLIER NARBAIS AUDREY - Date de naissance: 23/02/1980 (01306172 ) +Episode N.: 23042753 ( MEDECINE GASTRO ENTERO HC - MEDECINE GASTRO B2 HC ) - Taille: 162 cm - Poids: 90.2 kg - IMC: 34.370 +Le 03/03/2023 13:51 Page 19 de 28 + +--- PAGE 20 --- +Signé — PARACETAMOL ARW 500MG DONAT Isabelle +GELULE - 500MG gelule - Dose 2 GEL - Début le 25/02/2023 à +ORALE - Toutes les 6 Heure(s) Si besoin - Début 13:18 +19:00 * 2 +presc.: 25/02/2023 @ 13:18 Fin le 31/03/2023 à GEL +si douleur si température sup à 38,5 19:00 +Admin le 03/03/2023 à +13:00 +Signé — PARACETAMOL ARW 500MG DONAT Isabelle +GELULE - 500MG gelule - Dose 2 GEL - Début le 25/02/2023 à +ORALE - Toutes les 6 Heure(s) Si besoin - Début 13:18 +01:00 * 2 +presc.: 25/02/2023 @ 13:18 Fin le 31/03/2023 à GEL +si douleur si température sup à 38,5 19:00 +Admin le 03/03/2023 à +13:00 +DONAT Isabelle +Signé — LOVENOX 4000UI AXA/0,4ML +INJ SER +S - 4000UI solution (0,4 mL) - Dose Début le 25/02/2023 à +1 SERINGUE(S) PREREMPLIE(S) - SOUS- 13:18 08:00 * 1 +CUTANEE Directe - Matin [8h] - 1ère dose: Fin le 27/03/2023 à SERINGUE(S) +26/02/2023 @ 08:00 08:00 PREREMPLIE(S) +Admin le 03/03/2023 à +09:17 +ETCHEBARNE +Therese +Réalisé — ACCOMPAGNER INSTALLER AUX Début le 27/02/2023 à +TOILETTES - Ttes les 8H [4h 12h 20h] - pendant 07:00 +12:00 * 1 +10 Jour(s)- Date Début: 27/02/2023 @ 07:00 Fin le 09/03/2023 à +04:00 +Admin le 03/03/2023 à +12:00 +ETCHEBARNE +Therese +Réalisé — ACCOMPAGNER INSTALLER AUX Début le 27/02/2023 à +TOILETTES - Ttes les 8H [4h 12h 20h] - pendant 07:00 +20:00 * 1 +10 Jour(s)- Date Début: 27/02/2023 @ 07:00 Fin le 09/03/2023 à +04:00 +Admin le 03/03/2023 à +12:00 +ETCHEBARNE +Therese +Réalisé — ACCOMPAGNER INSTALLER AUX Début le 27/02/2023 à +TOILETTES - Ttes les 8H [4h 12h 20h] - pendant 07:00 +04:00 * 1 +10 Jour(s)- Date Début: 27/02/2023 @ 07:00 Fin le 09/03/2023 à +04:00 +Admin le 03/03/2023 à +12:00 +ETCHEBARNE +Therese +Réalisé — AIDE A LA PRISE MEDICAMENTS Début le 27/02/2023 à +- Matin midi soir - pendant 10 Jour(s)- Date 07:00 +08:00 * 1 +Début: 27/02/2023 @ 07:00 Fin le 08/03/2023 à +19:00 +Admin le 03/03/2023 à +12:00 +ETCHEBARNE +Therese +Réalisé — AIDE A LA PRISE MEDICAMENTS Début le 27/02/2023 à +- Matin midi soir - pendant 10 Jour(s)- Date 07:00 +12:00 * 1 +Début: 27/02/2023 @ 07:00 Fin le 08/03/2023 à +19:00 +Admin le 03/03/2023 à +12:00 +ETCHEBARNE +Therese +Réalisé — AIDE A LA PRISE MEDICAMENTS Début le 27/02/2023 à +- Matin midi soir - pendant 10 Jour(s)- Date 07:00 +19:00 * 1 +Début: 27/02/2023 @ 07:00 Fin le 08/03/2023 à +19:00 +Admin le 03/03/2023 à +12:00 +Réalisé — CHANGEMENT POSITION / PREV ETCHEBARNE +ESCARRE - Ttes les 8H [4h 12h 20h] - pendant Therese +12:00 * 1 +10 Jour(s)- Date Début: 27/02/2023 @ 07:00 Début le 27/02/2023 à +07:00 +Patient: CLIER NARBAIS AUDREY - Date de naissance: 23/02/1980 (01306172 ) +Episode N.: 23042753 ( MEDECINE GASTRO ENTERO HC - MEDECINE GASTRO B2 HC ) - Taille: 162 cm - Poids: 90.2 kg - IMC: 34.370 +Le 03/03/2023 13:51 Page 20 de 28 + +--- PAGE 21 --- +Fin le 09/03/2023 à +04:00 +Admin le 03/03/2023 à +12:00 +ETCHEBARNE +Therese +Réalisé — CHANGEMENT POSITION / PREV Début le 27/02/2023 à +ESCARRE - Ttes les 8H [4h 12h 20h] - pendant 07:00 +20:00 * 1 +10 Jour(s)- Date Début: 27/02/2023 @ 07:00 Fin le 09/03/2023 à +04:00 +Admin le 03/03/2023 à +12:00 +ETCHEBARNE +Therese +Réalisé — CHANGEMENT POSITION / PREV Début le 27/02/2023 à +ESCARRE - Ttes les 8H [4h 12h 20h] - pendant 07:00 +04:00 * 1 +10 Jour(s)- Date Début: 27/02/2023 @ 07:00 Fin le 09/03/2023 à +04:00 +Admin le 03/03/2023 à +12:00 +ETCHEBARNE +Therese +Réalisé — CHANGES ADULTE - Ttes les 8H Début le 27/02/2023 à +[4h 12h 20h] - pendant 10 Jour(s)- Date Début: 07:00 +12:00 * 1 +27/02/2023 @ 07:00 Fin le 09/03/2023 à +04:00 +Admin le 03/03/2023 à +12:00 +ETCHEBARNE +Therese +Réalisé — CHANGES ADULTE - Ttes les 8H Début le 27/02/2023 à +[4h 12h 20h] - pendant 10 Jour(s)- Date Début: 07:00 +20:00 * 1 +27/02/2023 @ 07:00 Fin le 09/03/2023 à +04:00 +Admin le 03/03/2023 à +12:00 +ETCHEBARNE +Therese +Réalisé — CHANGES ADULTE - Ttes les 8H Début le 27/02/2023 à +[4h 12h 20h] - pendant 10 Jour(s)- Date Début: 07:00 +04:00 * 1 +27/02/2023 @ 07:00 Fin le 09/03/2023 à +04:00 +Admin le 03/03/2023 à +12:00 +ETCHEBARNE +Therese +Réalisé — DESINFECTION Début le 27/02/2023 à +ENVIRONNEMENT PATIENT - à 12h - pendant 07:00 +12:00 * 1 +10 Jour(s)- Date Début: 27/02/2023 @ 07:00 Fin le 08/03/2023 à +12:00 +Admin le 03/03/2023 à +12:00 +ETCHEBARNE +Therese +Réalisé — LEVER : AU FAUTEUIL - 2X / Début le 27/02/2023 à +jour (8h 16h) - pendant 10 Jour(s)- Date Début: 07:00 +08:00 * 1 +27/02/2023 @ 07:00 Fin le 08/03/2023 à +16:00 +Admin le 03/03/2023 à +08:00 +ETCHEBARNE +Therese +Réalisé — LEVER : AU FAUTEUIL - 2X / Début le 27/02/2023 à +jour (8h 16h) - pendant 10 Jour(s)- Date Début: 07:00 +16:00 * 1 +27/02/2023 @ 07:00 Fin le 08/03/2023 à +16:00 +Admin le 03/03/2023 à +08:00 +ETCHEBARNE +Réalisé — LIT : REFECTION COMPLETE - à Therese +12h - pendant 10 Jour(s)- Date Début: 27/02/2023 Début le 27/02/2023 à +12:00 * 1 +@ 07:00 07:00 +Fin le 08/03/2023 à +12:00 +Patient: CLIER NARBAIS AUDREY - Date de naissance: 23/02/1980 (01306172 ) +Episode N.: 23042753 ( MEDECINE GASTRO ENTERO HC - MEDECINE GASTRO B2 HC ) - Taille: 162 cm - Poids: 90.2 kg - IMC: 34.370 +Le 03/03/2023 13:51 Page 21 de 28 + +--- PAGE 22 --- +Admin le 03/03/2023 à +12:00 +ETCHEBARNE +Therese +Réalisé — MATELAS DYNAMIQUE POSE - à Début le 27/02/2023 à +12h - pendant 10 Jour(s)- Date Début: 27/02/2023 07:00 +12:00 * 1 +@ 07:00 Fin le 08/03/2023 à +12:00 +Admin le 03/03/2023 à +12:00 +ETCHEBARNE +Therese +Réalisé — POCHE A URINE : VIDER - Ttes Début le 27/02/2023 à +les 8H [4h 12h 20h] - pendant 10 Jour(s)- Date 07:00 +12:00 * 1 +Début: 27/02/2023 @ 07:00 Fin le 09/03/2023 à +04:00 +Admin le 03/03/2023 à +12:00 +ETCHEBARNE +Therese +Réalisé — POCHE A URINE : VIDER - Ttes Début le 27/02/2023 à +les 8H [4h 12h 20h] - pendant 10 Jour(s)- Date 07:00 +20:00 * 1 +Début: 27/02/2023 @ 07:00 Fin le 09/03/2023 à +04:00 +Admin le 03/03/2023 à +12:00 +ETCHEBARNE +Therese +Réalisé — POCHE A URINE : VIDER - Ttes Début le 27/02/2023 à +les 8H [4h 12h 20h] - pendant 10 Jour(s)- Date 07:00 +04:00 * 1 +Début: 27/02/2023 @ 07:00 Fin le 09/03/2023 à +04:00 +Admin le 03/03/2023 à +12:00 +ETCHEBARNE +Therese +Réalisé — REPAS : AIDE PARTIELLE - Matin Début le 27/02/2023 à +midi goûter soir - pendant 10 Jour(s)- Date Début: 07:00 +08:00 * 1 +27/02/2023 @ 07:00 Fin le 08/03/2023 à +19:00 +Admin le 03/03/2023 à +12:00 +ETCHEBARNE +Therese +Réalisé — REPAS : AIDE PARTIELLE - Matin Début le 27/02/2023 à +midi goûter soir - pendant 10 Jour(s)- Date Début: 07:00 +12:00 * 1 +27/02/2023 @ 07:00 Fin le 08/03/2023 à +19:00 +Admin le 03/03/2023 à +12:00 +ETCHEBARNE +Therese +Réalisé — REPAS : AIDE PARTIELLE - Matin Début le 27/02/2023 à +midi goûter soir - pendant 10 Jour(s)- Date Début: 07:00 +16:00 * 1 +27/02/2023 @ 07:00 Fin le 08/03/2023 à +19:00 +Admin le 03/03/2023 à +12:00 +ETCHEBARNE +Therese +Réalisé — REPAS : AIDE PARTIELLE - Matin Début le 27/02/2023 à +midi goûter soir - pendant 10 Jour(s)- Date Début: 07:00 +19:00 * 1 +27/02/2023 @ 07:00 Fin le 08/03/2023 à +19:00 +Admin le 03/03/2023 à +12:00 +ETCHEBARNE +Therese +Réalisé — SOINS DE BOUCHE NON Début le 27/02/2023 à +MEDICAMENTEUX - Matin midi soir - pendant 07:00 +08:00 * 1 +10 Jour(s)- Date Début: 27/02/2023 @ 07:00 Fin le 08/03/2023 à +19:00 +Admin le 03/03/2023 à +12:00 +Patient: CLIER NARBAIS AUDREY - Date de naissance: 23/02/1980 (01306172 ) +Episode N.: 23042753 ( MEDECINE GASTRO ENTERO HC - MEDECINE GASTRO B2 HC ) - Taille: 162 cm - Poids: 90.2 kg - IMC: 34.370 +Le 03/03/2023 13:51 Page 22 de 28 + +--- PAGE 23 --- +ETCHEBARNE +Therese +Réalisé — SOINS DE BOUCHE NON Début le 27/02/2023 à +MEDICAMENTEUX - Matin midi soir - pendant 07:00 +12:00 * 1 +10 Jour(s)- Date Début: 27/02/2023 @ 07:00 Fin le 08/03/2023 à +19:00 +Admin le 03/03/2023 à +12:00 +ETCHEBARNE +Therese +Réalisé — SOINS DE BOUCHE NON Début le 27/02/2023 à +MEDICAMENTEUX - Matin midi soir - pendant 07:00 +19:00 * 1 +10 Jour(s)- Date Début: 27/02/2023 @ 07:00 Fin le 08/03/2023 à +19:00 +Admin le 03/03/2023 à +12:00 +David MALABAT +Réalisé — SOMMEIL : SURV. - 3x/Nuit (22h 2h Début le 26/02/2023 à +6h) - pendant 7 Jour(s)- Date Début: 26/02/2023 04:53 +@ 04:53 Fin le 05/03/2023 à 22:00 * 1 +02:00 +Admin le 03/03/2023 à +06:00 +David MALABAT +Réalisé — SOMMEIL : SURV. - 3x/Nuit (22h 2h Début le 26/02/2023 à +6h) - pendant 7 Jour(s)- Date Début: 26/02/2023 04:53 +@ 04:53 Fin le 05/03/2023 à 02:00 * 1 +02:00 +Admin le 03/03/2023 à +06:00 +ETCHEBARNE +Therese +Début le 27/02/2023 à +Réalisé — SOMMEIL : SURV. - à 06h - pendant +07:00 +10 Jour(s)- Date Début: 27/02/2023 @ 07:00 06:00 * 1 +Fin le 09/03/2023 à +06:00 +Admin le 03/03/2023 à +06:00 +ETCHEBARNE +Therese +Réalisé — TOILETTE : AIDE COMPLETE - à Début le 27/02/2023 à +08h - pendant 10 Jour(s)- Date Début: 27/02/2023 07:00 +08:00 * 1 +@ 07:00 Fin le 08/03/2023 à +08:00 +Admin le 03/03/2023 à +08:00 +ETCHEBARNE +Therese +Réalisé — TOILETTE DOUCHE : AIDE Début le 27/02/2023 à +PARTIELLE - Matin [8h] - 1 Semaine- Date 07:00 +08:00 * 1 +Début: 27/02/2023 @ 07:00 Fin le 05/03/2023 à +08:00 +Admin le 03/03/2023 à +08:00 +ETCHEBARNE +Therese +Réalisé — URINAL / BASSIN : VIDER - Ttes Début le 27/02/2023 à +les 8H [4h 12h 20h] - pendant 10 Jour(s)- Date 07:00 +12:00 * 1 +Début: 27/02/2023 @ 07:00 Fin le 09/03/2023 à +04:00 +Admin le 03/03/2023 à +12:00 +ETCHEBARNE +Therese +Réalisé — URINAL / BASSIN : VIDER - Ttes Début le 27/02/2023 à +les 8H [4h 12h 20h] - pendant 10 Jour(s)- Date 07:00 +20:00 * 1 +Début: 27/02/2023 @ 07:00 Fin le 09/03/2023 à +04:00 +Admin le 03/03/2023 à +12:00 +Réalisé — URINAL / BASSIN : VIDER - Ttes ETCHEBARNE +les 8H [4h 12h 20h] - pendant 10 Jour(s)- Date Therese +04:00 * 1 +Début: 27/02/2023 @ 07:00 Début le 27/02/2023 à +07:00 +Patient: CLIER NARBAIS AUDREY - Date de naissance: 23/02/1980 (01306172 ) +Episode N.: 23042753 ( MEDECINE GASTRO ENTERO HC - MEDECINE GASTRO B2 HC ) - Taille: 162 cm - Poids: 90.2 kg - IMC: 34.370 +Le 03/03/2023 13:51 Page 23 de 28 + +--- PAGE 24 --- +Fin le 09/03/2023 à +04:00 +Admin le 03/03/2023 à +12:00 +LEGRAS Claire +Réalisé — DOULEUR : SURV - Ttes les 6h [2h Début le 01/03/2023 à +8h 14h 20h] - 10 Jours- Date Début: 01/03/2023 17:36 +@ 17:36 Fin le 11/03/2023 à 08:00 * 1 +14:00 +Admin le 03/03/2023 à +08:00 +LEGRAS Claire +Réalisé — DOULEUR : SURV - Ttes les 6h [2h Début le 01/03/2023 à +8h 14h 20h] - 10 Jours- Date Début: 01/03/2023 17:36 +@ 17:36 Fin le 11/03/2023 à 14:00 * 1 +14:00 +Admin le 03/03/2023 à +08:00 +LEGRAS Claire +Réalisé — DOULEUR : SURV - Ttes les 6h [2h Début le 01/03/2023 à +8h 14h 20h] - 10 Jours- Date Début: 01/03/2023 17:36 +@ 17:36 Fin le 11/03/2023 à 20:00 * 1 +14:00 +Admin le 03/03/2023 à +08:00 +LEGRAS Claire +Réalisé — DOULEUR : SURV - Ttes les 6h [2h Début le 01/03/2023 à +8h 14h 20h] - 10 Jours- Date Début: 01/03/2023 17:36 +@ 17:36 Fin le 11/03/2023 à 02:00 * 1 +14:00 +Admin le 03/03/2023 à +08:00 +LEGRAS Claire +Réalisé — SIGNES VITAUX (Pls, TA, FR, T°, Début le 01/03/2023 à +Glyc, Miction, Transit) - Ttes les 6h [2h 8h 14h 17:36 +20h] - 1 Mois (30j)- Date Début: 01/03/2023 @ Fin le 31/03/2023 à 08:00 * 1 +17:36 14:00 +Admin le 03/03/2023 à +08:00 +LEGRAS Claire +Réalisé — SIGNES VITAUX (Pls, TA, FR, T°, Début le 01/03/2023 à +Glyc, Miction, Transit) - Ttes les 6h [2h 8h 14h 17:36 +20h] - 1 Mois (30j)- Date Début: 01/03/2023 @ Fin le 31/03/2023 à 14:00 * 1 +17:36 14:00 +Admin le 03/03/2023 à +08:00 +LEGRAS Claire +Réalisé — SIGNES VITAUX (Pls, TA, FR, T°, Début le 01/03/2023 à +Glyc, Miction, Transit) - Ttes les 6h [2h 8h 14h 17:36 +20h] - 1 Mois (30j)- Date Début: 01/03/2023 @ Fin le 31/03/2023 à 20:00 * 1 +17:36 14:00 +Admin le 03/03/2023 à +08:00 +LEGRAS Claire +Réalisé — SIGNES VITAUX (Pls, TA, FR, T°, Début le 01/03/2023 à +Glyc, Miction, Transit) - Ttes les 6h [2h 8h 14h 17:36 +20h] - 1 Mois (30j)- Date Début: 01/03/2023 @ Fin le 31/03/2023 à 02:00 * 1 +17:36 14:00 +Admin le 03/03/2023 à +08:00 +Résultats de radiologie +Prescription Date Résultat +Compte rendu au format texte +Bayonne, le 27/02/2023 +Docteur SOULAT Marie +27/02/2023 Nom de naissance : CLIER +CR Scanner +10:13 Nom utilisé : NARBAIS +Prénom de naissance : AUDREY +Prénom utilisé : AUDREY +Date de naissance : 23/02/1980 +Lieu de naissance : 94017 +Patient: CLIER NARBAIS AUDREY - Date de naissance: 23/02/1980 (01306172 ) +Episode N.: 23042753 ( MEDECINE GASTRO ENTERO HC - MEDECINE GASTRO B2 HC ) - Taille: 162 cm - Poids: 90.2 kg - IMC: 34.370 +Le 03/03/2023 13:51 Page 24 de 28 + +--- PAGE 25 --- +Sexe : F +Matricule INS : (NIR) 280029401710339 +Examen du : 27/02/2023 +Compte-rendu validé électroniquement par Dr BENNIS Inès le 27/02/2023 +EXAMEN TOMODENSITOMETRIQUE ABDOMINO PELVIEN +Indication : +Bilan de pancréatite aiguë lithiasique. +Protocole : +Acquisition tomodensitométrique hélicoïdale de l'abdomen et du pelvis après injection multiphasique de produit de contraste . +RESULTATS : +Comparativement au scanner précédent du 28 janvier 2023 : +Sur le plan pancréaticobiliaire : Pas d'anomalie significative de la glande pancréatique, ni infiltration péripancréatique. Pas de +coulée liquidienne. Pas d'argument pour une complication vasculaire, en particulier pas de pseudoanévrisme décelé. On retrouve +une minime infiltration périvésiculaire, évocatrice de pope hat sign, mais sans hydrocholécyste ce jour. +Foie de taille normale au parenchyme homogène sans lésion suspecte. Moins bonne visibilité des voies biliaires intrahépatiques . +Perméabilité normale des axes vasculaires hépatiques. +Stigmates de by-pass gastrectomie. +Par ailleurs : rate de taille normale, homogène. +Pas d'anomalie des surrénales ni des reins. +Pas de distension ni d'épaississement pariétal des différentes anses digestives explorées. +Stabilité de la formation ganglionnaire arrondie iléocaecale de 9 mm. +Lame d'épanchement pelvienne, aspécifique chez cette patiente au cours de son cycle menstruel. +Hernie sus-ombilicale (9 mm au-dessus de l'ombilic sur la ligne médiane, à collet serré (5 mm dans le plan axial) au contenu +graisseux. +Petite hernie ombilicale au collet serrée également, mesurée à 4 mm +CONCLUSION : +Pas de complication liée à la pancréatite aiguë décelée par cet examen, avec un score de Balthazar à 0. +Dr BENNIS Inès +Technique : +PDL : 1042.21 mGy.cm CTDI : 26.23 mGy +Protocole d'acquisition : 6.1 AbdoPelvis +XENETIX 350 200mL 22wf0215c01 90.00 ml +Cet examen rendu anonyme est accessible sur le site WEB de l'établissement pour une durée de 10 mois : www.ch-cote-basque.fr +« accès examens d'imagerie » +N° d'examen : RAD001122555 +Date de naissance : 23-02-1980 +Résultats de laboratoire +03/03/2023 07:18 02/03/2023 08:31 02/03/2023 08:31 01/03/2023 08:12 27/02/2023 05:52 +Résultat de labo +(5897778) (5897001) (5896968) (5895690) (5893522) +Albumine 36,7 g/l 36,8 g/l +Bilirubine totale 8 µmol/l 10 µmol/l "" µmol/l 8 µmol/l 13 µmol/l +Score Fibrosis-4 (FIB4) 0,83 0,57 1,01 +Le score Fibrosis-4 est Le score Fibrosis-4 est Le score Fibrosis-4 est +un test de dépistage de un test de dépistage de un test de dépistage de +la fibrose hépatique. la fibrose hépatique. la fibrose hépatique. +S?il existe une cause S?il existe une cause S?il existe une cause +connue de cytolyse connue de cytolyse connue de cytolyse +hépatique ou de hépatique ou de hépatique ou de +Commentaire score Fibrosis-4 +thrombopénie, il ne thrombopénie, il ne thrombopénie, il ne +faut pas tenir compte faut pas tenir compte faut pas tenir compte +de ce résultat. Dans de ce résultat. Dans de ce résultat. Dans +les autres cas, si la les autres cas, si la les autres cas, si la +valeur est > 2,67, valeur est > 2,67, valeur est > 2,67, +un avis en hépatologie un avis en hépatologie un avis en hépatologie +Patient: CLIER NARBAIS AUDREY - Date de naissance: 23/02/1980 (01306172 ) +Episode N.: 23042753 ( MEDECINE GASTRO ENTERO HC - MEDECINE GASTRO B2 HC ) - Taille: 162 cm - Poids: 90.2 kg - IMC: 34.370 +Le 03/03/2023 13:51 Page 25 de 28 + +--- PAGE 26 --- +est recommandé. Si la est recommandé. Si la est recommandé. Si la +valeur est < 1,3, il valeur est < 1,3, il valeur est < 1,3, il +n?existe pas de maladie n?existe pas de maladie n?existe pas de maladie +hépatique sévère. hépatique sévère. hépatique sévère. +Dans les autres cas, un Dans les autres cas, un Dans les autres cas, un +contrôle à distance est contrôle à distance est contrôle à distance est +recommandé. recommandé. recommandé. +ASAT 79 U/l 90 U/l "" U/l 63 U/l 123 U/l +Bilirubine totale < Bilirubine totale < Bilirubine totale < Bilirubine totale < +21 µmol/L : dosage des 21 µmol/L : dosage des 21 µmol/L : dosage des 21 µmol/L : dosage des +Commentaire bilirubine totale fractions conjuguée fractions conjuguée fractions conjuguée fractions conjuguée +et non conjugée non et non conjugée non et non conjugée non et non conjugée non +réalisé. réalisé. réalisé. réalisé. +Non-applicable en cas Non-applicable en cas +d'insuffisance rénale d'insuffisance rénale +aigue. Estimation du aigue. Estimation du +DFG non validée dans DFG non validée dans +les situations suivantes: les situations suivantes: +- patients âgés > 75 - patients âgés > 75 +ans - poids extrêmes ans - poids extrêmes +Commentaire CKD-EPI +et variations de la et variations de la +masse musculaire - masse musculaire - +alimentation pauvre alimentation pauvre +en protéines animales en protéines animales +et patients dénutris - et patients dénutris - +patients d'origine non patients d'origine non +caucasienne caucasienne +Gamma GT 242 U/l 299 U/l "" U/l 306 U/l 368 U/l +Phosphatase alcaline 148 U/l 183 U/l "" U/l 179 U/l 246 U/l +Calcium 2,16 mmol/l +Calcium corrigé 2,24 mmol/l +Estimation du DFG (CKD- +111 ml/mn/1.73 m2 111 ml/mn/1.73 m2 +EPI) +Chlore 104 mmol/l 105 mmol/l 105 mmol/l +Créatinine 55 µmol/l 54 µmol/l +CRP 6 mg/l 1 mg/l 2 mg/l +Compte-rendu laboratoire Labo230303101519-1.pdfLabo230302110632-1.pdfLabo230302085759-1.pdfLabo230301111252-1.pdf Labo230227092323-1.pdf +Polynucléaires neutrophiles +65,7 % 43,9 % 41,9 % +(%) +Polynucléaires neutrophiles +5,28 10.9/l 2,42 10.9/l 1,98 10.9/l +(#) +Polynucléaires éosinophiles +0,2 % 2,4 % 2,3 % +(%) +Polynucléaires éosinophiles +0,02 10.9/l 0,13 10.9/l 0,11 10.9/l +(#) +Polynucléaires basophiles (%) 0,2 % 0,9 % 1,1 % +Polynucléaires basophiles (#) 0,02 10.9/l 0,05 10.9/l 0,05 10.9/l +Lymphocytes (%) 24,4 % 43,9 % 45,2 % +Lymphocytes (#) 1,96 10.9/l 2,42 10.9/l 2,14 10.9/l +Monocytes (%) 9,5 % 8,9 % 9,5 % +Monocytes (#) 0,76 10.9/l 0,49 10.9/l 0,45 10.9/l +Glucose 5,2 mmol/l 4,4 mmol/l +ALAT 126 U/l 163 U/l "" U/l 169 U/l 281 U/l +Hémoglobine 12,4 g/dl 12,5 g/dl 12,1 g/dl +réalisée sur automate réalisée sur automate réalisée sur automate +Formule sanguine +XN (Sysmex) XN (Sysmex) XN (Sysmex) +Hématocrite (%) 37,4 % 38,8 % 35,5 % +Indice de distribution des +13,1 % 13,5 % 13,2 % +hématies +Absence de traitement Absence de traitement +Traitement anticoagulant +anticoagulant anticoagulant +Cible de l'INR pour Cible de l'INR pour +un patient sous AVK un patient sous AVK +selon l'indication: - selon l'indication: - +Indications autres que Indications autres que +Valeurs normales INR +prothèses mécaniques : prothèses mécaniques : +INR cible = 2.5 (2.0 INR cible = 2.5 (2.0 +à 3.0) - Prothèses à 3.0) - Prothèses +mécaniques: INR mécaniques: INR +Patient: CLIER NARBAIS AUDREY - Date de naissance: 23/02/1980 (01306172 ) +Episode N.: 23042753 ( MEDECINE GASTRO ENTERO HC - MEDECINE GASTRO B2 HC ) - Taille: 162 cm - Poids: 90.2 kg - IMC: 34.370 +Le 03/03/2023 13:51 Page 26 de 28 + +--- PAGE 27 --- +cible entre 2.5 et 4.0 cible entre 2.5 et 4.0 +selon les facteurs de selon les facteurs de +risque du patient et le risque du patient et le +risque intrinsèque de la risque intrinsèque de la +prothèse prothèse +INR 0,98 0,98 +Potassium 4,0 mmol/l 4,0 mmol/l 3,6 mmol/l +Magnésium 0,81 mmol/l +Leucocytes 8,03 10.9/l 5,51 10.9/l 4,73 10.9/l +Hématies 4,29 10.12/l (t/l) 4,29 10.12/l (t/l) 4,09 10.12/l (t/l) +VGM 87,2 fl 90,4 fl 86,8 fl +TCMH 28,9 pg 29,1 pg 29,6 pg +CCMH 33,2 g/dl 32,2 g/dl 34,1 g/dl +Sodium 139 mmol/l 142 mmol/l 139 mmol/l +Osmolarité sang 283 mOSM/l 282 mOSM/l +Phosphore 1,39 mmol/l +Plaquettes 364 10.9/l 363 10.9/l 311 10.9/l +Protéines 65 g/l 66 g/l +Réserve alcaline 26 mmol/l +Validation et diffusion sous la Hedy NEMEUR Dr. Julien Hedy NEMEUR +Dr Rémi SEGUES "" +responsabilité du biologiste (interne) GUILLEMAUD (interne) +Trou anionique 12 +TP 104 % 104 % +Triglycérides 1,12 mmol/l +Volume plaquettaire moyen 9,9 fl 10,0 fl 9,8 fl +Lettres +Date +Type Texte Utilisateur +d'impression +Compte Rendu Opératoire +Identité du patient : +NARBAIS CLIER AUDREY +le 23/02/1980 +MAISON IRREXELAIA +64430 ST ETIENNE DE BAIGORRY +INTERVENTION +CHOLECYSTECTOMIE PAR COELIOSCOPIE - CHOLANGIOGRAPHIE PEROPERATOIRE +Diagnostic : Cholécystectomie prophylactique après migration lithiasique. +Voie d'abord : Laparoscopie. +Installation : +Compte +Sous anesthésie générale. +rendu +Décubitus dorsal, bras gauche le long du corps. +d’intervention +Vérification des points d'appuis. +(CRO) +Désinfection cutanée et champage stérile selon protocole. +Check-list. +Gestes effectués : +Création d'un pneumopéritoine par open-laparoscopie sus-ombilicale. +Introduction d'un trocart de 10 mm sous contrôle de la vue pour insufflation d'un pneumopéritoine à 12 +mmHg. +Mise en place de 3 autres trocarts de 5 mm : 1 en flanc droit, 1 en hypochondre gauche et 1 en sous- +xiphoïdien pénétrant dans la cavité abdominale à gauche du ligament rond afin de soulever le foie droit. +Constatations peropératoires : +- La vésicule est en réplétion, non inflammatoire mais avec des adhérences à l'épiploon. +- Le foie est d'aspect normal. +- Le canal cystique est long. +Libération prudente des adhérences péri-vésiculaires. +Abord et dissection du triangle de Callot et de l'infundibulum vésiculaire permettant d'individualiser le +canal cystique au ras du collet vésiculaire ainsi que l'artère cystique. +Mise en place d'un clip Hemo-lock sur l'infundibulum cystique. +Patient: CLIER NARBAIS AUDREY - Date de naissance: 23/02/1980 (01306172 ) +Episode N.: 23042753 ( MEDECINE GASTRO ENTERO HC - MEDECINE GASTRO B2 HC ) - Taille: 162 cm - Poids: 90.2 kg - IMC: 34.370 +Le 03/03/2023 13:51 Page 27 de 28 + +--- PAGE 28 --- +Cysticotomie et introduction sans incident du kit de cholangiographie par ponction de l'hypochondre droit +pour cholangiographie. +Cholangiographie peropératoire : +- Passage duodénal à forte pression initialement du fait de la présence d'un micro-calcul du bas +cholédoque visualisé, qu'on réussit progressivement à pousser avec le produit de contraste et qui parvient +finalement à franchir la papille duodénale. Passage à faible pression en suivant avec une franche +opacification du duodénum sans image de lithiase résiduelle. +- Par ailleurs, absence de dilatation de la voie biliaire principale ni des voies biliaires intra-hépatiques. +- Canal cystique long. +- Cholangiogramme intra-hépatique : +> Canal droit opacifié. +> Canal sectoriel paramédian droit : opacifié. +> Canal sectoriel latéral droit : opacifié. +> Canal gauche : opacifié. +> Architecture biliaire : modale. +Section du canal cystique après contrôle du moignon cystique restant par 2 clips Hemo-lock de 5 mm. +Section de l'artère cystique entre 2 clips Hemo-lock de 5 mm. +Cholécystectomie rétrograde. +Extériorisation de la vésicule dans un Endo-bag introduit par le trocart de 10 mm. +Vérification du lit vésiculaire et réalisation d'hémostase complémentaire ponctuelle. +Vérification de l'artère et du canal cystique clipés qui retrouve une bonne hémostase et l'absence de fuite +biliaire. +Ablation de tous les trocarts sous contrôle de la vue ce qui permet de vérifier l'absence de saignement au +niveau des points de ponction. +Exsufflation de l'ensemble du pneumopéritoine. +Fermeture aponévrotique de l'orifice de trocart de 10 mm par un point en X de Vicryl 0. +Fermeture cutanée par du fil résorbable Monocryl 4.0 + colle. +Drainage : non. +Bactériologie : non. +Envoi de la pièce opératoire pour examen anatomopathologique : présence de micro-lithiases +vésiculaires ; absence de polype vésiculaire ni canal biliaire aberrant. +Marion PUJOS +Patient: CLIER NARBAIS AUDREY - Date de naissance: 23/02/1980 (01306172 ) +Episode N.: 23042753 ( MEDECINE GASTRO ENTERO HC - MEDECINE GASTRO B2 HC ) - Taille: 162 cm - Poids: 90.2 kg - IMC: 34.370 +Le 03/03/2023 13:51 Page 28 de 28 +``` + +### Tableaux detectes (56 au total) + +#### Tableau 1 (Page 1) - 5 lignes x 2 colonnes + +| Nom de naissance: CLIER | IPP: 01306172 | +| --- | --- | +| Nom et Prénom: NARBAIS AUDREY | Date de naissance: 23/02/1980 | +| Sexe: Féminin | Lieu de naissance: CHAMPIGNY SUR MARNE | +| Nationalité: FRANCE | Code Postal: 64430 | +| Adresse: MAISON IRREXELAIA QUARTIER AUZO TTIPI | Ville de résidence: ST ETIENNE DE BAIGORRY | + + +#### Tableau 2 (Page 1) - 4 lignes x 2 colonnes + +| Episode No: 23042753 | | +| --- | --- | +| Localisation: MEDECINE GASTRO B2 HC | Médecin courant: DR. Franck AUDEMAR | +| Date d'admission: 25/02/2023 | Heure d'admission: 03:07 | +| Date de sortie: 03/03/2023 | Heure de sortie: 13:08 | + + +#### Tableau 3 (Page 1) - 2 lignes x 3 colonnes + +| Nom | Adresse | Téléphone | +| --- | --- | --- | +| DR. Marie MELLIN | Lotissement Geltoki 64430 ST ETIENNE DE BAIGORRY | | + + +#### Tableau 4 (Page 1) - 3 lignes x 8 colonnes + +| Type de contact | Relation | Nom | Prénom | Adresse | Tél. domicile | Tél. professionel | Mobile | +| --- | --- | --- | --- | --- | --- | --- | --- | +| Personne de confiance | Epoux | narbais | | | | | 06.25.39.26.82 | +| Personne de confiance | Epoux | narbais | serge | | | | | + + +#### Tableau 5 (Page 1) - 23 lignes x 2 colonnes + +| Episode - Date | 25/02/2023 | +| --- | --- | +| Episode - Heure | 03:07 | +| Mode de transport à l'arrivée | Ambulance | +| Médicalisation du transport | Prise en charge paramédicale | +| Mode d'entrée | Autres admissions urgentes | +| Date d'orientation | 25/02/2023 | +| Heure d'orientation | 03:12 | +| IAO | ETCHEGOIN Joan | +| Priorité | Priorité 3 | +| Sous-type épisode | URG - Circuit Long | +| Motif de prise en charge | Douleur abdominale Ictère Nausées et/ou vomissements | +| Observ. IDE Urg | douleurs abdominales sur le flanc droit vomissement en début de soirée pris spasfon + ATG1 1g + ATG 2 à 21h ATCD : colique hépatique en 28 janvier 2023 allergie : RAS bracelet identification posé | +| Médecin de la prise en charge médicale | MENDIBOURE Noémie | +| Date de prise en charge médicale | 25/02/2023 | +| Heure de prise en charge médicale | 03:07 | +| Médecin de la décision médicale | SOULAT Marie | +| Date de décision médicale | 25/02/2023 | +| Heure de décision médicale | 07:19 | +| Décision médicale | Hospitalisation MCO | +| Orientation du patient | hospitalisation dans une unité de Médecine hors SC, SI, REA | +| Date de sortie des urgences | 25/02/2023 | +| Heure de sortie des Urgences | 16:44 | +| US de destination | US Chirurgie Urologique et Gynécologique | + + +#### Tableau 1 (Page 2) - 1 lignes x 2 colonnes + +| UF de destination | MEDECINE GASTRO B2 HC | +| --- | --- | + + +#### Tableau 2 (Page 2) - 2 lignes x 4 colonnes + +| Type | Etat | Code | Date | +| --- | --- | --- | --- | +| Principal | actif | K80.5 Calcul des canaux biliaires (sans angiocholite ni cholécystite) [CMA2] | 25/02/2023 05:27 | + + +#### Tableau 3 (Page 2) - 2 lignes x 5 colonnes + +| Type de note | Nom | Date | Heure | Note | +| --- | --- | --- | --- | --- | +| Aucune donnée renseignée | | | | | + + +#### Tableau 4 (Page 2) - 13 lignes x 14 colonnes + +| Item de surveillance | 03/03/2023 08:49 | 02/03/2023 23:13 | 02/03/2023 20:00 | 02/03/2023 18:13 | 02/03/2023 16:02 | 02/03/2023 08:36 | 02/03/2023 07:33 | 01/03/2023 22:58 | 01/03/2023 20:02 | 01/03/2023 09:38 | 01/03/2023 09:16 | 28/02/2023 16:30 | 28/02/2023 09:19 | +| --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | +| Température | 37,40 | 37,80 | 37,90 | 37,90 | 37,90 | 37,10 | | 36,70 | 36,00 | 36,90 | 35,70 | 37,10 | 36,00 | +| Pouls | 83,00 | | | 81,00 | 92,00 | 97,00 | | 75,00 | 66,00 | 72,00 | 63,00 | 69,00 | 72,00 | +| PA Systolique | 105,00 | | | 124,00 | 102,00 | 149,00 | | 121,00 | 138,00 | 126,00 | 162,00 | 128,00 | 118,00 | +| PA Diastolique | 60,00 | | | 67,00 | 61,00 | 69,00 | | 83,00 | 75,00 | 72,00 | 70,00 | 60,00 | 69,00 | +| PA Moyenne | 75,00 | | | 86,00 | 75,00 | 96,00 | | 96,00 | 96,00 | 90,00 | 101,00 | 83,00 | 85,00 | +| Saturation O² | 99,00 | | | | 98,00 | 99,00 | | 97,00 | 99,00 | 97,00 | 99,00 | 100,00 | 95,00 | +| Ventilation | Ventilatio spontanée Air ambiant | n | | | | Ventilatio spontanée Air ambiant | n | Ventilatio spontanée Air ambiant | nVentilatio spontanée Air ambiant | nVentilatio spontanée Air ambiant | nVentilatio spontanée Air ambiant | nVentilatio spontanée Air ambiant | nVentilatio spontanée Air ambiant | +| Echelle douleur | EN | EN | | | EN | | EN | EN | EN | EN | EN | EN | EN | +| Score au repos | 0,00 | 2,00 | | | 2,00 | | 3,00 | 4,00 | 2,00 | 0,00 | 0,00 | 0,00 | 0,00 | +| Transit | Gaz | | | | Gaz | | | | | Gaz | Gaz | Gaz | Gaz + selles | +| Glycémie capillaire | 1,13 | | | | | 0,90 | | | | 1,02 | | | 0,93 | +| PA Latéralité | | | | | | Gauche | | | | | | | | + + +#### Tableau 5 (Page 2) - 5 lignes x 14 colonnes + +| Item de surveillance | 27/02/2023 17:39 | 25/02/2023 17:04 | | | | | | | | | | | | +| --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | +| Taille [cm] | 162,00 | 162,00 | | | | | | | | | | | | +| Poids [kg] | 90,20 | 90,00 | | | | | | | | | | | | +| Indice de masse corporelle | 34.370 | | | | | | | | | | | | | +| Surface corporelle | 1.95 | | | | | | | | | | | | | + + +#### Tableau 6 (Page 2) - 7 lignes x 14 colonnes + +| Item de surveillance | 03/03/2023 08:49 | 02/03/2023 23:13 | 02/03/2023 20:00 | 02/03/2023 18:13 | 02/03/2023 16:02 | 02/03/2023 08:36 | 01/03/2023 22:58 | 01/03/2023 20:02 | 01/03/2023 09:38 | 01/03/2023 09:16 | 28/02/2023 16:30 | 28/02/2023 09:19 | 28/02/2023 00:52 | +| --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | +| Température | 37,40 | 37,80 | 37,90 | 37,90 | 37,90 | 37,10 | 36,70 | 36,00 | 36,90 | 35,70 | 37,10 | 36,00 | 36,90 | +| Pouls | 83,00 | | | 81,00 | 92,00 | 97,00 | 75,00 | 66,00 | 72,00 | 63,00 | 69,00 | 72,00 | | +| PA Systolique | 105,00 | | | 124,00 | 102,00 | 149,00 | 121,00 | 138,00 | 126,00 | 162,00 | 128,00 | 118,00 | | +| PA Diastolique | 60,00 | | | 67,00 | 61,00 | 69,00 | 83,00 | 75,00 | 72,00 | 70,00 | 60,00 | 69,00 | | +| Saturation O² | 99,00 | | | | 98,00 | 99,00 | 97,00 | 99,00 | 97,00 | 99,00 | 100,00 | 95,00 | | +| Transit | Gaz | | | | Gaz | | | | Gaz | Gaz | Gaz | Gaz + selles | | + + +#### Tableau 7 (Page 2) - 5 lignes x 14 colonnes + +| Item de surveillance | 03/03/2023 08:49 | 02/03/2023 23:13 | 02/03/2023 20:00 | 02/03/2023 18:13 | 02/03/2023 16:02 | 02/03/2023 08:36 | 01/03/2023 22:58 | 01/03/2023 20:02 | 01/03/2023 09:38 | 01/03/2023 09:16 | 28/02/2023 16:30 | 28/02/2023 09:19 | 28/02/2023 00:52 | +| --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | +| Température | 37,40 | 37,80 | 37,90 | 37,90 | 37,90 | 37,10 | 36,70 | 36,00 | 36,90 | 35,70 | 37,10 | 36,00 | 36,90 | +| Pouls | 83,00 | | | 81,00 | 92,00 | 97,00 | 75,00 | 66,00 | 72,00 | 63,00 | 69,00 | 72,00 | | +| PA Systolique | 105,00 | | | 124,00 | 102,00 | 149,00 | 121,00 | 138,00 | 126,00 | 162,00 | 128,00 | 118,00 | | +| PA Diastolique | 60,00 | | | 67,00 | 61,00 | 69,00 | 83,00 | 75,00 | 72,00 | 70,00 | 60,00 | 69,00 | | + + +#### Tableau 1 (Page 3) - 3 lignes x 14 colonnes + +| Saturation O² | 99,00 | | | | 98,00 | 99,00 | 97,00 | 99,00 | 97,00 | 99,00 | 100,00 | 95,00 | | +| --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | +| Transit | Gaz | | | | Gaz | | | | Gaz | Gaz | Gaz | Gaz + selles | | +| Glycémie capillaire | 1,13 | | | | | 0,90 | | | 1,02 | | | 0,93 | | + + +#### Tableau 2 (Page 3) - 2 lignes x 4 colonnes + +| Type d'observation | Nom | Date | Commentaires | +| --- | --- | --- | --- | +| Note d'évolution | Sarah DUTREY | 03/03/2023 09:24 | MH : Douleur hypochondre droit Antécédents : - fin janvier 2023 crise de colique hépatique avec vésicule lithiasique sur l'echo Traitements :0 Allergie :0 Histoire de la maladie : Fin janvier 1 er épisode de colique hépatique pris en charge aux urgences de St Palais. Lithiases vésiculaires sur echo en ville. La patiente devait revoir son médecin traitant début mars pour évoquer la suite de la prise en charge. Le 24/02 vers 20h récidive des douleurs, en hypochondre droit, ne cédant pas. Arrive hyperalgique aux urgences. Pas de signes d'irritation péritonéale. Hémodynamique stable. Le bilan biologique retrouve : Lipasémie à 6000 donc >3N. cytolyse ASAT=8.5N ALAT=9.6N / cholestase GGT=518 U/L PAL=403 U/L / Bilirubine totale à 23 µmol/L / CRP=12 sans hyperleucocytose / troponine négative / pas de trouble ionique. Pas de critère de SRIS clinique. Donc au total : premier épisode de pancréatite aigue d'origine lithiasique suspectée chez une patiente ayant fait un épisode de colique hépatique en 01/23 avec indication chirurgicale retenue. Titration morphine aux urgences puis relais en PCA et transfert dans le service de gastro entérologie : Rassurante sur le plan abdominal, sous PCA de morphine, non douloureuse et pas d'iléus. Laissée à jeun initialement. Evolution rapidement favorable permettant une reprise alimentaire progressive, et arrêt de la PCA de morphine. Le TDM à J3 retrouve : Absence de signe de gravité. Pas d'anomalie significative de la glande pancréatique, ni infiltration péripancréatique. Pas de coulée liquidienne. Pas d'argument pour une complication vasculaire, en particulier pas de pseudoanévrisme décelé. On retrouve une minime infiltration périvésiculaire, évocatrice de pope hat sign, mais sans hydrocholécyste ce jour. Score de Balthazar à 0. Cholécystectomie par cœlioscopie le 01/03 par Dr PUJOS. Cholangiographie retrouvant une lithiase du bas cholédoque, de petite taille, sans opacification initialement du duodénum -> après plusieurs injections de produit de contraste on arrive finalement à pousser le calcul qui réussit à franchir la papille : opacification franche du duodénum au décours sans lithiase résiduelle de la VBP, hépatogramme complet. Pas de KT nécessaire donc. Fermeture fils résorbables + colle à la peau. Pas de complication au décours de l'intervention. Reprise alimentaire progressive bien tolérée. Bilan hépatique à la sortie en amélioration ASAT 79 ALAT 123 GGT 242 PAL 148 bilirubine normale 8. Eruption cutanée érythémateuse prédominant sur le tronc apparue le matin de la sortie, non prurigineuse ; dans un contexte de prise de CONTRAMAL la veille (première prise, unique). Réaction au tramadol? Introduction cétirizine. Au total : Pancréatite aigue lithiasique sans signe de gravité. Cholécystectomisée. Devenir : Sortie le 03/03. Bilan hépatique de contrôle et consultation avec le Dr PUJOS dans un mois (RDV à prendre par la patiente au secrétariat de chirurgie viscérale). TTT de sortie : Paracétamol et Acupan sur sucre si besoin Cétirizine | + + +#### Tableau 1 (Page 4) - 11 lignes x 4 colonnes + +| Note d'évolution | Sarah DUTREY | 02/03/2023 15:55 | 02/03/23 Patiente cholécystectomisée hier le 01/03 Ce jour, quelques douleurs abdominales bien soulagées par paracétamol et tramadol. Reprise de l'alimentation bien tolérée, bilan biologique demain puis sortie si RAS | +| --- | --- | --- | --- | +| Note d'évolution | Marion PUJOS | 01/03/2023 16:47 | Cholécystectomie par cœlioscopie ce jour : Cholangiographie retrouvant une lithiase du bas cholédoque, de petite taille, sans opacification initialement du duodénum -> après plusieurs injections de produit de contraste on arrive finalement à pousser le calcul qui réussit à franchir la papille : opacification franche du duodénum au décours sans lithiase résiduelle de la VBP, hépatogramme complet. Pas de KT nécessaire donc. Fermeture fils résorbables + colle à la peau. Clichés de cholangiographie dans le dossier de la patiente. Réalimentation CY ce soir, normal demain. BH à J1 et sortie au décours si RAS. | +| Note d'évolution | DR. Marie-Christine CAZELLES- BOUDIER | 28/02/2023 12:32 | | +| Note d'évolution | DR. Marie-Christine CAZELLES- BOUDIER | 27/02/2023 18:08 | Pas de signe de gravite sur le TDM. Cholecystectomie le 01/03/23 Patiente informée | +| Note d'évolution | DR. Felix GOUTORBE | 27/02/2023 10:48 | Le 27/02/23 Appel Radio Dr BENNIS: OK pour TDM ce jour | +| Note d'évolution | DR. Anne GUILNGAR | 26/02/2023 12:12 | 26/02/23: Pas de douleurs, gaz présents ok eau ce jour, et BCY dès demain si pas de douleurs TDM + bio demain Discussion avec M Pujos : pourrait aller en chir viscérale en vue de cholecystectomie rapide, après TDM si PA non grave ( ce qui semble être le cas) | +| Note d'évolution | Isabelle DONAT | 25/02/2023 13:28 | Au total : Premier épisode de pancréatite aigue d'origine suspectée chez une patiente ayant fait un épisode de colique hépatique en 01/23 avec indication chirurgicale retenue. Douleurs abdo le 24/02 au soir. A son arrivée, aux urgences lipasémie 6000 avec cytolyse 300 ASAT ALAT et cholestase 400-500 GGT PAL; CRP 12 sans hyperleucocytose. Pas de critère de SRIS clinique. Rassurante sur le plan abdominal, actuellement sous PCA de morphine, non douloureuse et pas d'iléus. on poursuit on la laisse à jeun ce jour. Selon évolution demain BYC. En attente d'un TDM à faire lundi 72h des douleurs + évaluation des voies biliaires notamment élimination d'une lithiase enclavée dans le cholédoque. Je ne demande pas d'écho puisque calcul connu de la vésicule biliaire et mauvais exam pour évaluer le cholédoque. | +| Note d'évolution | DR. Claire ROGER | 25/02/2023 08:31 | non douloureuse ce matin | +| Conclusion Obs. médicales | DR. Marie SOULAT | 25/02/2023 07:02 | Pancréatite lithiasique. Antalgie. Hospitalisation. Scanner à 48h du début des symptômes. Patiente soulagée après morphiniques informée de la suite de la prise en charge. | +| Conclusion Obs. médicales | Noémie MENDIBOURE | 25/02/2023 05:28 | Colique hépatique sans signe de complication chez patient ayant une vésicule lithiasique connue Retour à domicile avec antalgie, bilan de contrôle et avis chirurgien viscéral | +| Note d'évolution | Noémie MENDIBOURE | 25/02/2023 04:36 | soulagée apres 6 mg de morphine Bilan sanguin : cytolyse ASAT=8.5N ALAT=9.6N cholestase GGT=518 U/L PAL=403 U/L Bilirubine totale à 23 µmol/L CRP=12 troponine negative pas de trouble ionique Surveillance jusqu'à 8heure pour éliminer une récidive douloureuse, si pas de nouvelle crise retour à domicile avec bilan sanguin de contrôle , antalgique et avis chirurgien viscéral à prendre | + + +#### Tableau 1 (Page 5) - 7 lignes x 14 colonnes + +| Item de surveillance | 25/02/2023 03:12 | 25/02/2023 07:05 | 25/02/2023 09:00 | 25/02/2023 13:36 | 25/02/2023 16:06 | 25/02/2023 17:04 | 26/02/2023 00:42 | 26/02/2023 04:48 | 26/02/2023 08:28 | 26/02/2023 15:34 | 27/02/2023 06:04 | 27/02/2023 08:44 | 27/02/2023 14:46 | +| --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | +| Température | 37.5 | 37.2 | 37 | 37 | 37 | 36.2 | 37.4 | 36.8 | 37.4 | 37.5 | 37.5 | 36.6 | | +| Pouls | 69 | 55 | 46 | 54 | 56 | 62 | | | 70 | 60 | | 56 | 62 | +| PA Systolique | 131 | 109 | 112 | 120 | 119 | 125 | | | 113 | 137 | | 131 | 120 | +| PA Diastolique | 80 | 54 | 49 | 73 | 67 | 59 | | | 63 | 62 | | 64 | 74 | +| Saturation O² | 96 | 98 | 99 | 99 | 100 | 100 | | | 98 | 99 | | 99 | 97 | +| Transit | Gaz | | Gaz | | | Gaz | | | | Gaz | | | Gaz + selles | + + +#### Tableau 2 (Page 5) - 5 lignes x 4 colonnes + +| Type de note | Nom | Date | Note | +| --- | --- | --- | --- | +| Note IDE | Annie GUIRESSE | 03/03/2023 02:28 | Non algique en début de nuit mais garde une fébricule à 37°8 | +| Note IDE | Magali GOYTINO | 02/03/2023 22:32 | DOULEUR: gene abdo mais pas de douleurs franche, ne souhaite pas d'ATG ALIMENTATION: bien toleré INFECTIEUX: 37.9° toute l'apres midi non ressenti ELIMINATIN: gaz mais pas de selles DEVENIR: bilan sang demain et en fonction rad avec son epoux en fin de matinée rdv dans 1mois a prendre avec chir | +| Note IDE | Argitxu HIRIGOYEN | 02/03/2023 14:05 | Algique à 10h : contramal 50 administré soulagé à 12h | +| Note IDE | Annie GUIRESSE | 02/03/2023 03:37 | Douleurs: algique à 0h00 (EN 4)==> ATG3 donné à sa demande | + + +#### Tableau 1 (Page 6) - 7 lignes x 4 colonnes + +| Note IDE | Tiphaine SELLE | 28/02/2023 23:32 | bloc : a jeun à minuit pour cholécystectomie prévue pas de plaintes sur la nuit | +| --- | --- | --- | --- | +| Note IDE | Grégory SERRE | 28/02/2023 16:33 | Examen : cholecystectomie prévue le 01/03/2023. Cs Anesth ok. Douleur : non algique. Equipement : KTO posé MS droit | +| Note IDE | Lisa VIGNEAU | 28/02/2023 13:35 | Elimination : Pas de selles ce jour Douleur : Absence de douleur Alimentation bien tolérée Hydratation Diminution des apports hydriques iv | +| Note IDE | Tiphaine SELLE | 28/02/2023 00:55 | élimination : petites selles moulées ce soir non algique | +| Note IDE | Gaelle NOVION | 27/02/2023 17:23 | MH : Entrée le 25/02 : douleur hypochondre droit/ pancréatite Histoire de la maladie : Fin janvier 1 er épisode de colique hépatique pris en charge aux urgences de St Palais. Lithiases vésiculaires sur echo en ville. La patiente devait revoir son médecin traitant début mars pour évoquer la suite de la prise en charge. Nuit du 24/02 vers 20h recifive des douleur , en hypochondre droit, ne cédant pas. Arrive hyperalgique en IAO. autonome Mariée, grands enfants pas d'activité professionnelles pour le moment *pancreatite : TDM : pas de complications secondaires à la pancréatite Alim BCY -GAZ depuis le 22/02 => patiente hydratée IV sur Kt Gch 27/02 *Douleur : patienter non algique à son arrivée | +| Note IDE | Bertrand LARCEBAL | 27/02/2023 14:48 | DOULEUR absente ALIMENTATION BCY bien tolérés TRANSIT gazs +, selles - TRANSFERT en GASTRO en attente. Transmissions orales faites | +| Note IDE | Stephanie CONSTANTIN | 27/02/2023 08:54 | DOULEUR absente ALIMENTATION BCY bien tolérés TDM fait et à voir TRANSIT gazs +, selles - TRANSFERT en GASTRO dès que chambre disponible. Transmissions orales faites à équipe d'après-midi | + + +#### Tableau 1 (Page 7) - 10 lignes x 4 colonnes + +| Note IDE | Mélanie BAU | 26/02/2023 15:43 | RISQUE INFECTIEUX : apyrétique RISQUE DOULEUR : EN 0/10 , refuse ATG TRANSIT : gaz ok , absence de selle ALIM' : eau ok --> bien tolérée BCY demain 27/02 si RAS EXAMEN : TDM + BS demain 27/02 | +| --- | --- | --- | --- | +| Note IDE | Camille COUDERC | 26/02/2023 08:30 | Risque infectieux : apyrétique Aucune douleur Laissé à jeun pour le moment > vu avec le médecin : eau autorisé ce midi Transit :G+S- | +| Note IDE | Clara ARGANO | 26/02/2023 00:42 | THERMIE: apyrétique DLR: non algique | +| Note IDE | Mélanie BAU | 25/02/2023 17:41 | ENTREE : patiente transférée des urgences , hébergée GASTRO , pour PANCREATITE LITHIASIQUE HDM : douleur abdo flanc droit + vomissements hier et cette nuit RISQUE INFECTIEUX : apyrétique RISQUE DOULEUR : confortable , EN 0/10 cet AM ALIM' : AJ ce soir et +/- BCY demain , à faire confirmer EXAMEN : TDM + BS de contrôle lundi | +| Note IDE | Juliette SCHEFFLER | 25/02/2023 16:42 | + IONOGRAMME : Hydratation débuté avec 3.4 de potassium au BS; --> hydratation potassium dénbuté hydratation/ DOULEUR : NOn algique, DEVENIR : transfert chir uro | +| Note IDE | Julie LAMPRE | 25/02/2023 14:16 | TDM ==> Au total : Premier épisode de pancréatite aigue d'origine suspectée chez une patiente ayant fait un épisode de colique hépatique en 01/23 avec indication chirurgicale retenue. | +| Note IDE | Julie LAMPRE | 25/02/2023 09:20 | Non algique En attente du TDM | +| Note IDE | Florence DESGIGOT | 25/02/2023 07:35 | Patiente installée en tri en attente d'un scanner ce matin. A jeun pour +/- bloc op. | +| Note IDE | Manon BILLE | 25/02/2023 07:35 | Devenir : transfert dans le tri | +| Note IDE | Manon BILLE | 25/02/2023 03:44 | Motif d'entrée : douleurs abdominales sur le flanc droit Soins : -pose VVP + BS -PCR covid Douleur : -en=10/10 --> titration atg3 débutée --> 2mg à 3h38 --> en=5 --> 2mg à 3h43 --> en=3 --> 2mg à 3h48 --> patiente soulagée | + + +#### Tableau 2 (Page 7) - 1 lignes x 2 colonnes + +| | Au total : Premier épisode de pancréatite aigue d'origine suspectée chez une patiente ayant fait un épisode de colique hépatique en 01/23 avec indication chirurgicale retenue. | +| --- | --- | + + +#### Tableau 1 (Page 8) - 1 lignes x 7 colonnes + +| Prescription | Dose | Fréquence | Date de début | Date de dernière administration | Note | Docteur | +| --- | --- | --- | --- | --- | --- | --- | + + +#### Tableau 2 (Page 8) - 2 lignes x 7 colonnes + +| ONDANSETRON AGT 4MG/2ML SOL INJ AMP [10] Ampoule(s) | 4 mg | - Normal | 01/03/2023 17:36 | 03/03/2023 09:36 | | DR. Claire LEGRAS | +| --- | --- | --- | --- | --- | --- | --- | +| PARACETAMOL BBM 10MG/ML INJ 100ML [10] Flacon(s) | 1 G | - Ttes les 8h [0h 8h 16h] Presc. de Sortie | 25/02/2023 05:28 | | | Noémie MENDIBOURE | + + +#### Tableau 3 (Page 8) - 5 lignes x 7 colonnes + +| ACUPAN 20MG/2ML SOL INJ [5] Ampoule(s) | 1 AMP | - Normal | 25/02/2023 13:18 | | | Isabelle DONAT | +| --- | --- | --- | --- | --- | --- | --- | +| MORPHINE CHL REN 10MG/ML INJ 1ML Ampoule(s) | 2 mg | - Normal | 25/02/2023 03:23 | 25/02/2023 07:11 | Notes du professionel de santé: titration: 2 à 3 mg toutes les 5 min Dose MAX 20 mg => avis médical | Noémie MENDIBOURE | +| PHLOROGLUCINOL ARW 40MG/0,04MG INJ [10] Ampoule(s) Bouteille(s) | 80 mg | - Normal | 25/02/2023 13:18 | 28/02/2023 07:18 | Le débit en cours est : 24 ML par 1 hrs. Notes du professionel de santé: A préparer dans 100 mL de NaCl 0,9% à mettre dans la perfusion | Isabelle DONAT | +| POLYIONIQUE 1A G5 BAX POC VFO 500ML [1] POCHE(S) | | - Normal | 25/02/2023 13:18 | 01/03/2023 06:00 | Le débit en cours est : 41.66666666666666 ML par 1 hrs. | Isabelle DONAT 4 | +| SODIUM CHL MACO 0,9% INJ PP 500ML [1] POCHE(S) | | - Normal | 25/02/2023 13:18 | 28/02/2023 06:00 | Le débit en cours est : 41.66666666666666 ML par 1 hrs. | Isabelle DONAT 4 | + + +#### Tableau 4 (Page 8) - 3 lignes x 7 colonnes + +| CETIRIZINE ARW 10MG CPR [60] COMPRIME(S) | 1 CPR | - Matin [8h] Normal | 03/03/2023 10:20 | | | Sarah DUTREY | +| --- | --- | --- | --- | --- | --- | --- | +| OXYNORMORO 5MG CPR DISP [14] COMPRIME(S) | 1 CPR | - Normal | 25/02/2023 13:29 | 03/03/2023 09:54 | | Isabelle DONAT | +| PARACETAMOL ARW 500MG GELULE [12] Gelule(s) | 2 GEL | - Normal | 25/02/2023 13:18 | 03/03/2023 13:00 | | Isabelle DONAT | + + +#### Tableau 5 (Page 8) - 1 lignes x 7 colonnes + +| NEFOPAM MYL 20MG/2ML SOL INJ [5] Ampoule(s) | 1 AMP | - Matin midi soir Normal | 03/03/2023 10:25 | | Notes du professionel de santé: sur un sucre | Sarah DUTREY | +| --- | --- | --- | --- | --- | --- | --- | + + +#### Tableau 6 (Page 8) - 7 lignes x 7 colonnes + +| CETIRIZINE ARW 10MG CPR [60] COMPRIME(S) | 1 CPR | - Matin [8h] Presc. de Sortie | 03/03/2023 10:25 | | | Sarah DUTREY | +| --- | --- | --- | --- | --- | --- | --- | +| CETIRIZINE ARW 10MG CPR [60] COMPRIME(S) | 1 CPR | - Matin [8h] Presc. de Sortie | 03/03/2023 10:34 | | | Sarah DUTREY | +| KETOPROFENE - BIPROFENID LP 100MG CPR 100MG comprime | 1 CPR | - Matin soir (8h - 20h) Presc. de Sortie | 25/02/2023 05:28 | | | Noémie MENDIBOURE | +| NEFOPAM MYL 20MG/2ML SOL INJ [5] Ampoule(s) | 1 AMP | - Matin midi soir Presc. de Sortie | 03/03/2023 10:31 | | Notes du professionel de santé: sur un sucre | Sarah DUTREY | +| NEFOPAM MYL 20MG/2ML SOL INJ [5] Ampoule(s) | 1 AMP | - Matin midi soir Presc. de Sortie | 03/03/2023 10:34 | | Notes du professionel de santé: sur un sucre | Sarah DUTREY | +| PARACETAMOL ARW 500MG GELULE [12] Gelule(s) | 2 GEL | - Presc. de Sortie | 03/03/2023 10:25 | | | Sarah DUTREY | +| PARACETAMOL ARW 500MG GELULE [12] Gelule(s) | 2 GEL | - Presc. de Sortie | 03/03/2023 10:34 | | | Sarah DUTREY | + + +#### Tableau 1 (Page 9) - 1 lignes x 7 colonnes + +| LOVENOX 4000UI AXa/0,4ML INJ SER +S [2] SERINGUE(S) PREREMPLIE(S) | 1 SERINGUE(S) PREREMPLIE | - Matin [8h] Normal (S) | 25/02/2023 13:18 | 03/03/2023 09:17 | | Isabelle DONAT | +| --- | --- | --- | --- | --- | --- | --- | + + +#### Tableau 2 (Page 9) - 2 lignes x 8 colonnes + +| Date début | Heure début | Prescription | Date exécution | Heure exécution | Statut | Docteur | Note | +| --- | --- | --- | --- | --- | --- | --- | --- | +| 27/02/2023 | 10:13 | Scanner Abdomino+/-Pelvien | 27/02/2023 | 11:05 | Réalisé | DR. Marie SOULAT | | + + +#### Tableau 3 (Page 9) - 25 lignes x 6 colonnes + +| Date | Heure | Prescription | Docteur | Date de collection | Note | +| --- | --- | --- | --- | --- | --- | +| 25/02/2023 | 03:23 | Ionogramme ( Na, K, CL ) | Noémie MENDIBOURE | 25/02/2023 03:44 | | +| 25/02/2023 | 04:23 | Troponine sang ( dosage ) | Noémie MENDIBOURE | | | +| 25/02/2023 | 05:29 | TP+TCA | Noémie MENDIBOURE | | | +| 25/02/2023 | 05:29 | Num +Formule +Plaq | Noémie MENDIBOURE | | | +| 25/02/2023 | 05:29 | Ionogramme ( Na, K, CL ) | Noémie MENDIBOURE | | | +| 25/02/2023 | 05:29 | Glucose dosage sang | Noémie MENDIBOURE | | | +| 25/02/2023 | 05:29 | Créatinine dosage sang | Noémie MENDIBOURE | | | +| 25/02/2023 | 05:29 | Calcémie ( calcium total ) sang ( dosage ) | Noémie MENDIBOURE | | | +| 25/02/2023 | 05:29 | Réserve alcaline bicarbonates sang ( dosage ) | Noémie MENDIBOURE | | | +| 25/02/2023 | 05:29 | Protéines dosage sang | Noémie MENDIBOURE | | | +| 25/02/2023 | 05:29 | Transaminases ASAT + ALAT sang ( dosage ) | Noémie MENDIBOURE | | | +| 25/02/2023 | 05:29 | Gamma GT GGT sang ( dosage ) | Noémie MENDIBOURE | | | +| 25/02/2023 | 05:29 | Phosphatase alcaline dosage sang | Noémie MENDIBOURE | | | +| 25/02/2023 | 05:29 | Lipase dosage sang | Noémie MENDIBOURE | | | +| 25/02/2023 | 05:29 | Bilirubine ( totale + conjuguée + non conjuguée ) sang ( dosage ) | Noémie MENDIBOURE | | | +| 25/02/2023 | 05:29 | CRP sang ( dosage ) | Noémie MENDIBOURE | | | +| 25/02/2023 | 07:09 | PCR COVID ( nez ) urgente | DR. Marie SOULAT | | | +| 27/02/2023 | 06:00 | TP+INR ( si AVK ) | Isabelle DONAT | 27/02/2023 05:52 | | +| 27/02/2023 | 06:00 | Glucose dosage sang | Isabelle DONAT | 27/02/2023 05:52 | | +| 01/03/2023 | 08:00 | Ionogramme ( Na, K, CL ) | DR. Marie-Christine CAZELLES- BOUDIER | 01/03/2023 08:12 | | +| 01/03/2023 | 08:00 | Bilirubine ( totale + conjuguée + non conjuguée ) sang ( dosage ) | DR. Marie-Christine CAZELLES- BOUDIER | 01/03/2023 08:12 | | +| 01/03/2023 | 16:36 | Pièce opératoire ( Atlantic- Pathologie) | Lucie LOUIS | 01/03/2023 16:36 | | +| 02/03/2023 | 07:00 | TP+INR ( si AVK ) | Sarah DUTREY | 02/03/2023 08:31 | | +| 02/03/2023 | 07:00 | Glucose dosage sang | Sarah DUTREY | 02/03/2023 08:31 | | + + +#### Tableau 4 (Page 9) - 7 lignes x 8 colonnes + +| Prescription | Dose | Statut | Fréquence | Date de début | Quantité administrée | Note | Docteur | +| --- | --- | --- | --- | --- | --- | --- | --- | +| REGIME REPRISE ALIMENTAIRE / DESSERT | | Signé | 1 Jour - Matin [8h] Normal | 01/03/2023 17:37 | | | DR. Claire LEGRAS | +| ACCOMPAGNER INSTALLER AUX TOILETTES | | Réalisé | - Ttes les 8H [4h 12h 20h] Normal | 27/02/2023 07:00 | | | Therese ETCHEBARN | +| AIDE A LA PRISE MEDICAMENTS | | Réalisé | - Matin midi soir Normal | 27/02/2023 07:00 | | | Therese ETCHEBARN | +| CHANGEMENT POSITION / PREV ESCARRE | | Réalisé | - Ttes les 8H [4h 12h 20h] Normal | 27/02/2023 07:00 | | | Therese ETCHEBARN | +| CHANGES ADULTE | | Réalisé | - Ttes les 8H [4h 12h 20h] Normal | 27/02/2023 07:00 | | | Therese ETCHEBARN | +| DESINFECTION ENVIRONNEMENT PATIENT | | Réalisé | - à 12h Normal | 27/02/2023 07:00 | | | Therese ETCHEBARN | + + +#### Tableau 1 (Page 10) - 13 lignes x 8 colonnes + +| LEVER : AU FAUTEUIL | | Réalisé | - 2X /jour (8h 16h) Normal | 27/02/2023 07:00 | | | Therese ETCHEBARN | +| --- | --- | --- | --- | --- | --- | --- | --- | +| LIT : REFECTION COMPLETE | | Réalisé | - à 12h Normal | 27/02/2023 07:00 | | | Therese ETCHEBARN | +| MATELAS DYNAMIQUE POSE | | Réalisé | - à 12h Normal | 27/02/2023 07:00 | | | Therese ETCHEBARN | +| POCHE A URINE : VIDER | | Réalisé | - Ttes les 8H [4h 12h 20h] Normal | 27/02/2023 07:00 | | | Therese ETCHEBARN | +| REPAS : AIDE PARTIELLE | | Réalisé | - Matin midi goûter soir Normal | 27/02/2023 07:00 | | | Therese ETCHEBARN | +| SOINS DE BOUCHE NON MEDICAMENTEUX | | Réalisé | - Matin midi soir Normal | 27/02/2023 07:00 | | | Therese ETCHEBARN | +| SOMMEIL : SURV. | | Réalisé | - 3x/Nuit (22h 2h 6h) Normal | 26/02/2023 04:53 | | | David MALABAT | +| SOMMEIL : SURV. | | Réalisé | - à 06h Normal | 27/02/2023 07:00 | | | Therese ETCHEBARN | +| TOILETTE : AIDE COMPLETE | | Réalisé | - à 08h Normal | 27/02/2023 07:00 | | | Therese ETCHEBARN | +| TOILETTE DOUCHE : AIDE PARTIELLE | | Réalisé | 1 Semaine - Matin [8h] Normal | 27/02/2023 07:00 | | | Therese ETCHEBARN | +| URINAL / BASSIN : VIDER | | Réalisé | - Ttes les 8H [4h 12h 20h] Normal | 27/02/2023 07:00 | | | Therese ETCHEBARN | +| DOULEUR : SURV | | Réalisé | 10 Jours - Ttes les 6h [2h 8h 14h 20h] Normal | 01/03/2023 17:36 | | | DR. Claire LEGRAS | +| SIGNES VITAUX (Pls, TA, FR, T°, Glyc, Miction, Transit) | | Réalisé | 1 Mois (30j) - Ttes les 6h [2h 8h 14h 20h] Normal | 01/03/2023 17:36 | | | DR. Claire LEGRAS | + + +#### Tableau 2 (Page 10) - 19 lignes x 8 colonnes + +| Prescription | Dose | Statut | Fréquence | Date de début | Quantité administrée | Note | Docteur | +| --- | --- | --- | --- | --- | --- | --- | --- | +| Bilirubine ( totale + conjuguée + non conjuguée ) sang ( dosage ) | | Signé | - Presc. de Sortie | 25/02/2023 05:29 | | | Noémie MENDIBOUR | +| Calcémie ( calcium total ) sang ( dosage ) | | Signé | - Presc. de Sortie | 25/02/2023 05:29 | | | Noémie MENDIBOUR | +| CETIRIZINE ARW 10MG CPR [60] COMPRIME(S) | 1 CPR ORALE | Réalisé | - Matin [8h] Presc. de Sortie | 03/03/2023 10:25 | 0/7 : Non administré Révisé/Traité | | Sarah DUTREY | +| CETIRIZINE ARW 10MG CPR [60] COMPRIME(S) | 1 CPR ORALE | Réalisé | - Matin [8h] Presc. de Sortie | 03/03/2023 10:34 | 0/7 : Non administré Révisé/Traité | | Sarah DUTREY | +| Créatinine dosage sang | | Signé | - Presc. de Sortie | 25/02/2023 05:29 | | | Noémie MENDIBOUR | +| CRP sang ( dosage ) | | Signé | - Presc. de Sortie | 25/02/2023 05:29 | | | Noémie MENDIBOUR | +| Gamma GT GGT sang ( dosage ) | | Signé | - Presc. de Sortie | 25/02/2023 05:29 | | | Noémie MENDIBOUR | +| Glucose dosage sang | | Signé | - Presc. de Sortie | 25/02/2023 05:29 | | | Noémie MENDIBOUR | +| Ionogramme ( Na, K, CL ) | | Signé | - Presc. de Sortie | 25/02/2023 05:29 | | | Noémie MENDIBOUR | +| KETOPROFENE - BIPROFENID LP 100MG CPR 100MG comprime | 1 CPR ORALE | Réalisé | - Matin soir (8h - 20h) Presc. de Sortie | 25/02/2023 05:28 | 0/10 : Non administré Révisé/Traité | | Noémie MENDIBOUR | +| Lipase dosage sang | | Signé | - Presc. de Sortie | 25/02/2023 05:29 | | | Noémie MENDIBOUR | +| NEFOPAM MYL 20MG/2ML SOL INJ [5] Ampoule(s) | 1 AMP ORALE | Réalisé | - Matin midi soir Presc. de Sortie | 03/03/2023 10:31 | 0/9 : Non administré Révisé/Traité | | Sarah DUTREY | +| NEFOPAM MYL 20MG/2ML SOL INJ [5] Ampoule(s) | 1 AMP ORALE | Réalisé | - Matin midi soir Presc. de Sortie | 03/03/2023 10:34 | 0/21 : Non administré Révisé/Traité | | Sarah DUTREY | +| Num +Formule +Plaq | | Signé | - Presc. de Sortie | 25/02/2023 05:29 | | | Noémie MENDIBOUR | +| PARACETAMOL ARW 500MG GELULE [12] Gelule(s) | 2 GEL ORALE | Réalisé | - Presc. de Sortie | 03/03/2023 10:25 | 0/56 : Non administré Révisé/Traité | | Sarah DUTREY | +| PARACETAMOL ARW 500MG GELULE [12] Gelule(s) | 2 GEL ORALE | Réalisé | - Presc. de Sortie | 03/03/2023 10:34 | 0/56 : Non administré Révisé/Traité | | Sarah DUTREY | +| PARACETAMOL BBM 10MG/ML INJ 100ML [10] Flacon(s) | 1 G INTRAVEINE | Signé USE | - Ttes les 8h [0h 8h 16h] Presc. de Sortie | 25/02/2023 05:28 | 0/90 : Non administré A valider | | Noémie MENDIBOUR | +| Phosphatase alcaline dosage sang | | Signé | - Presc. de Sortie | 25/02/2023 05:29 | | | Noémie MENDIBOUR | + + +#### Tableau 1 (Page 11) - 4 lignes x 8 colonnes + +| Protéines dosage sang | | Signé | - Presc. de Sortie | 25/02/2023 05:29 | | | Noémie MENDIBOUR | +| --- | --- | --- | --- | --- | --- | --- | --- | +| Réserve alcaline bicarbonates sang ( dosage ) | | Signé | - Presc. de Sortie | 25/02/2023 05:29 | | | Noémie MENDIBOUR | +| TP+TCA | | Signé | - Presc. de Sortie | 25/02/2023 05:29 | | | Noémie MENDIBOUR | +| Transaminases ASAT + ALAT sang ( dosage ) | | Signé | - Presc. de Sortie | 25/02/2023 05:29 | | | Noémie MENDIBOUR | + + +#### Tableau 1 (Page 12) - 10 lignes x 6 colonnes + +| Prescriptions | | Matin (07h-12h) | Midi (12h-16h) | Soir (16h-21h) | Soir (21h-07h) | +| --- | --- | --- | --- | --- | --- | +| Signé — ONDANSETRON AGT 4 MG SOL INJ AMP - NR solution (2 mL) - Dose 4 mg - INTRAVEINEUSE Directe - Toutes les 8 Heure(s) Si besoin - Début presc.: 01/03/2023 @ 17:36 SI NAUSEES/VOMISSEMENTS | LEGRAS Claire Début le 01/03/2023 à 17:36 Fin le 04/03/2023 à 09:36 Admin le 03/03/2023 à 09:36 | | | 17:36 * 4 mg | | +| Signé — ONDANSETRON AGT 4 MG SOL INJ AMP - NR solution (2 mL) - Dose 4 mg - INTRAVEINEUSE Directe - Toutes les 8 Heure(s) Si besoin - Début presc.: 01/03/2023 @ 17:36 SI NAUSEES/VOMISSEMENTS | LEGRAS Claire Début le 01/03/2023 à 17:36 Fin le 04/03/2023 à 09:36 Admin le 03/03/2023 à 09:36 | | | | 01:36 * 4 mg | +| Signé — ONDANSETRON AGT 4 MG SOL INJ AMP - NR solution (2 mL) - Dose 4 mg - INTRAVEINEUSE Directe - Toutes les 8 Heure(s) Si besoin - Début presc.: 01/03/2023 @ 17:36 SI NAUSEES/VOMISSEMENTS | LEGRAS Claire Début le 01/03/2023 à 17:36 Fin le 04/03/2023 à 09:36 Admin le 03/03/2023 à 09:36 | 09:36 * 4 mg | | | | +| Signé — OXYNORMORO 5MG CPR DISP - 5MG comprime - Dose 1 CPR - ORALE - Toutes les 4 Heure(s) Si besoin - Début presc.: 25/02/2023 @ 13:29 "si douleurs " — Nombre de prises max par 24h : 6 — Dose totale : 6 | DONAT Isabelle Début le 25/02/2023 à 13:29 Fin le 01/04/2023 à 01:54 Admin le 03/03/2023 à 09:54 | | 13:54 * 1 CPR | | | +| Signé — OXYNORMORO 5MG CPR DISP - 5MG comprime - Dose 1 CPR - ORALE - Toutes les 4 Heure(s) Si besoin - Début presc.: 25/02/2023 @ 13:29 "si douleurs " — Nombre de prises max par 24h : 6 — Dose totale : 6 | DONAT Isabelle Début le 25/02/2023 à 13:29 Fin le 01/04/2023 à 01:54 Admin le 03/03/2023 à 09:54 | | | 17:54 * 1 CPR | | +| Signé — OXYNORMORO 5MG CPR DISP - 5MG comprime - Dose 1 CPR - ORALE - Toutes les 4 Heure(s) Si besoin - Début presc.: 25/02/2023 @ 13:29 "si douleurs " — Nombre de prises max par 24h : 6 — Dose totale : 6 | DONAT Isabelle Début le 25/02/2023 à 13:29 Fin le 01/04/2023 à 01:54 Admin le 03/03/2023 à 09:54 | | | | 21:54 * 1 CPR | +| Signé — OXYNORMORO 5MG CPR DISP - 5MG comprime - Dose 1 CPR - ORALE - Toutes les 4 Heure(s) Si besoin - Début presc.: 25/02/2023 @ 13:29 "si douleurs " — Nombre de prises max par 24h : 6 — Dose totale : 6 | DONAT Isabelle Début le 25/02/2023 à 13:29 Fin le 01/04/2023 à 01:54 Admin le 03/03/2023 à 09:54 | | | | 01:54 * 1 CPR | +| Signé — OXYNORMORO 5MG CPR DISP - 5MG comprime - Dose 1 CPR - ORALE - Toutes les 4 Heure(s) Si besoin - Début presc.: 25/02/2023 @ 13:29 "si douleurs " — Nombre de prises max par 24h : 6 — Dose totale : 6 | DONAT Isabelle Début le 25/02/2023 à 13:29 Fin le 01/04/2023 à 01:54 Admin le 03/03/2023 à 09:54 | | | | 05:54 * 1 CPR | +| Signé — OXYNORMORO 5MG CPR DISP - 5MG comprime - Dose 1 CPR - ORALE - Toutes les 4 Heure(s) Si besoin - Début presc.: 25/02/2023 @ 13:29 "si douleurs " — Nombre de prises max par 24h : 6 — Dose totale : 6 | DONAT Isabelle Début le 25/02/2023 à 13:29 Fin le 01/04/2023 à 01:54 Admin le 03/03/2023 à 09:54 | 09:54 * 1 CPR | | | | + + +#### Tableau 2 (Page 12) - 2 lignes x 1 colonnes + +| | +| --- | +| | + + +#### Tableau 3 (Page 12) - 2 lignes x 1 colonnes + +| | +| --- | +| | + + +#### Tableau 4 (Page 12) - 2 lignes x 1 colonnes + +| | +| --- | +| | + + +#### Tableau 1 (Page 13) - 9 lignes x 6 colonnes + +| Signé — PARACETAMOL ARW 500MG GELULE - 500MG gelule - Dose 2 GEL - ORALE - Toutes les 6 Heure(s) Si besoin - Début presc.: 25/02/2023 @ 13:18 si douleur si température sup à 38,5 | DONAT Isabelle Début le 25/02/2023 à 13:18 Fin le 31/03/2023 à 19:00 Admin le 03/03/2023 à 13:00 | | | | 01:00 * 2 GEL | +| --- | --- | --- | --- | --- | --- | +| Signé — PARACETAMOL ARW 500MG GELULE - 500MG gelule - Dose 2 GEL - ORALE - Toutes les 6 Heure(s) Si besoin - Début presc.: 25/02/2023 @ 13:18 si douleur si température sup à 38,5 | DONAT Isabelle Début le 25/02/2023 à 13:18 Fin le 31/03/2023 à 19:00 Admin le 03/03/2023 à 13:00 | 07:00 * 2 GEL | | | | +| Signé — PARACETAMOL ARW 500MG GELULE - 500MG gelule - Dose 2 GEL - ORALE - Toutes les 6 Heure(s) Si besoin - Début presc.: 25/02/2023 @ 13:18 si douleur si température sup à 38,5 | DONAT Isabelle Début le 25/02/2023 à 13:18 Fin le 31/03/2023 à 19:00 Admin le 03/03/2023 à 13:00 | | 13:00 * 2 GEL | | | +| Signé — LOVENOX 4000UI AXA/0,4ML INJ SER +S - 4000UI solution (0,4 mL) - Dose 1 SERINGUE(S) PREREMPLIE(S) - SOUS- CUTANEE Directe - Matin [8h] - 1ère dose: 26/02/2023 @ 08:00 | DONAT Isabelle Début le 25/02/2023 à 13:18 Fin le 27/03/2023 à 08:00 Admin le 03/03/2023 à 09:17 | 09:17 * 1 SERINGUE(S) PREREMPLIE( | S) | | | +| Réalisé — ACCOMPAGNER INSTALLER AUX TOILETTES - Ttes les 8H [4h 12h 20h] - pendant 10 Jour(s)- Date Début: 27/02/2023 @ 07:00 | ETCHEBARNE Therese Début le 27/02/2023 à 07:00 Fin le 09/03/2023 à 04:00 Admin le 03/03/2023 à 12:00 | | | 20:00 * 1 | | +| Réalisé — ACCOMPAGNER INSTALLER AUX TOILETTES - Ttes les 8H [4h 12h 20h] - pendant 10 Jour(s)- Date Début: 27/02/2023 @ 07:00 | ETCHEBARNE Therese Début le 27/02/2023 à 07:00 Fin le 09/03/2023 à 04:00 Admin le 03/03/2023 à 12:00 | | | | 04:00 * 1 | +| Réalisé — ACCOMPAGNER INSTALLER AUX TOILETTES - Ttes les 8H [4h 12h 20h] - pendant 10 Jour(s)- Date Début: 27/02/2023 @ 07:00 | ETCHEBARNE Therese Début le 27/02/2023 à 07:00 Fin le 09/03/2023 à 04:00 Admin le 03/03/2023 à 12:00 | | 12:00 * 1 | | | +| Réalisé — AIDE A LA PRISE MEDICAMENTS - Matin midi soir - pendant 10 Jour(s)- Date Début: 27/02/2023 @ 07:00 | ETCHEBARNE Therese Début le 27/02/2023 à 07:00 Fin le 08/03/2023 à 19:00 Admin le 03/03/2023 à 12:00 | | | 19:00 * 1 | | +| Réalisé — AIDE A LA PRISE MEDICAMENTS - Matin midi soir - pendant 10 Jour(s)- Date Début: 27/02/2023 @ 07:00 | ETCHEBARNE Therese Début le 27/02/2023 à 07:00 Fin le 08/03/2023 à 19:00 Admin le 03/03/2023 à 12:00 | 08:00 * 1 | | | | + + +#### Tableau 2 (Page 13) - 2 lignes x 1 colonnes + +| | +| --- | +| | + + +#### Tableau 1 (Page 14) - 8 lignes x 6 colonnes + +| Réalisé — CHANGEMENT POSITION / PREV ESCARRE - Ttes les 8H [4h 12h 20h] - pendant 10 Jour(s)- Date Début: 27/02/2023 @ 07:00 | ETCHEBARNE Therese Début le 27/02/2023 à 07:00 Fin le 09/03/2023 à 04:00 Admin le 03/03/2023 à 12:00 | | | 20:00 * 1 | | +| --- | --- | --- | --- | --- | --- | +| Réalisé — CHANGEMENT POSITION / PREV ESCARRE - Ttes les 8H [4h 12h 20h] - pendant 10 Jour(s)- Date Début: 27/02/2023 @ 07:00 | ETCHEBARNE Therese Début le 27/02/2023 à 07:00 Fin le 09/03/2023 à 04:00 Admin le 03/03/2023 à 12:00 | | | | 04:00 * 1 | +| Réalisé — CHANGEMENT POSITION / PREV ESCARRE - Ttes les 8H [4h 12h 20h] - pendant 10 Jour(s)- Date Début: 27/02/2023 @ 07:00 | ETCHEBARNE Therese Début le 27/02/2023 à 07:00 Fin le 09/03/2023 à 04:00 Admin le 03/03/2023 à 12:00 | | 12:00 * 1 | | | +| Réalisé — CHANGES ADULTE - Ttes les 8H [4h 12h 20h] - pendant 10 Jour(s)- Date Début: 27/02/2023 @ 07:00 | ETCHEBARNE Therese Début le 27/02/2023 à 07:00 Fin le 09/03/2023 à 04:00 Admin le 03/03/2023 à 12:00 | | | 20:00 * 1 | | +| Réalisé — CHANGES ADULTE - Ttes les 8H [4h 12h 20h] - pendant 10 Jour(s)- Date Début: 27/02/2023 @ 07:00 | ETCHEBARNE Therese Début le 27/02/2023 à 07:00 Fin le 09/03/2023 à 04:00 Admin le 03/03/2023 à 12:00 | | | | 04:00 * 1 | +| Réalisé — CHANGES ADULTE - Ttes les 8H [4h 12h 20h] - pendant 10 Jour(s)- Date Début: 27/02/2023 @ 07:00 | ETCHEBARNE Therese Début le 27/02/2023 à 07:00 Fin le 09/03/2023 à 04:00 Admin le 03/03/2023 à 12:00 | | 12:00 * 1 | | | +| Réalisé — DESINFECTION ENVIRONNEMENT PATIENT - à 12h - pendant 10 Jour(s)- Date Début: 27/02/2023 @ 07:00 | ETCHEBARNE Therese Début le 27/02/2023 à 07:00 Fin le 08/03/2023 à 12:00 Admin le 03/03/2023 à 12:00 | | 12:00 * 1 | | | +| Réalisé — LEVER : AU FAUTEUIL - 2X / jour (8h 16h) - pendant 10 Jour(s)- Date Début: 27/02/2023 @ 07:00 | ETCHEBARNE Therese Début le 27/02/2023 à 07:00 Fin le 08/03/2023 à 16:00 Admin le 03/03/2023 à 08:00 | | | 16:00 * 1 | | + + +#### Tableau 1 (Page 15) - 9 lignes x 6 colonnes + +| Réalisé — LIT : REFECTION COMPLETE - à 12h - pendant 10 Jour(s)- Date Début: 27/02/2023 @ 07:00 | ETCHEBARNE Therese Début le 27/02/2023 à 07:00 Fin le 08/03/2023 à 12:00 Admin le 03/03/2023 à 12:00 | | 12:00 * 1 | | | +| --- | --- | --- | --- | --- | --- | +| Réalisé — MATELAS DYNAMIQUE POSE - à 12h - pendant 10 Jour(s)- Date Début: 27/02/2023 @ 07:00 | ETCHEBARNE Therese Début le 27/02/2023 à 07:00 Fin le 08/03/2023 à 12:00 Admin le 03/03/2023 à 12:00 | | 12:00 * 1 | | | +| Réalisé — POCHE A URINE : VIDER - Ttes les 8H [4h 12h 20h] - pendant 10 Jour(s)- Date Début: 27/02/2023 @ 07:00 | ETCHEBARNE Therese Début le 27/02/2023 à 07:00 Fin le 09/03/2023 à 04:00 Admin le 03/03/2023 à 12:00 | | | 20:00 * 1 | | +| Réalisé — POCHE A URINE : VIDER - Ttes les 8H [4h 12h 20h] - pendant 10 Jour(s)- Date Début: 27/02/2023 @ 07:00 | ETCHEBARNE Therese Début le 27/02/2023 à 07:00 Fin le 09/03/2023 à 04:00 Admin le 03/03/2023 à 12:00 | | | | 04:00 * 1 | +| Réalisé — POCHE A URINE : VIDER - Ttes les 8H [4h 12h 20h] - pendant 10 Jour(s)- Date Début: 27/02/2023 @ 07:00 | ETCHEBARNE Therese Début le 27/02/2023 à 07:00 Fin le 09/03/2023 à 04:00 Admin le 03/03/2023 à 12:00 | | 12:00 * 1 | | | +| Réalisé — REPAS : AIDE PARTIELLE - Matin midi goûter soir - pendant 10 Jour(s)- Date Début: 27/02/2023 @ 07:00 | ETCHEBARNE Therese Début le 27/02/2023 à 07:00 Fin le 08/03/2023 à 19:00 Admin le 03/03/2023 à 12:00 | | | 16:00 * 1 | | +| Réalisé — REPAS : AIDE PARTIELLE - Matin midi goûter soir - pendant 10 Jour(s)- Date Début: 27/02/2023 @ 07:00 | ETCHEBARNE Therese Début le 27/02/2023 à 07:00 Fin le 08/03/2023 à 19:00 Admin le 03/03/2023 à 12:00 | | | 19:00 * 1 | | +| Réalisé — REPAS : AIDE PARTIELLE - Matin midi goûter soir - pendant 10 Jour(s)- Date Début: 27/02/2023 @ 07:00 | ETCHEBARNE Therese Début le 27/02/2023 à 07:00 Fin le 08/03/2023 à 19:00 Admin le 03/03/2023 à 12:00 | 08:00 * 1 | | | | +| Réalisé — REPAS : AIDE PARTIELLE - Matin midi goûter soir - pendant 10 Jour(s)- Date Début: 27/02/2023 @ 07:00 | ETCHEBARNE Therese Début le 27/02/2023 à 07:00 Fin le 08/03/2023 à 19:00 Admin le 03/03/2023 à 12:00 | | 12:00 * 1 | | | + + +#### Tableau 1 (Page 16) - 9 lignes x 6 colonnes + +| Réalisé — SOINS DE BOUCHE NON MEDICAMENTEUX - Matin midi soir - pendant 10 Jour(s)- Date Début: 27/02/2023 @ 07:00 | ETCHEBARNE Therese Début le 27/02/2023 à 07:00 Fin le 08/03/2023 à 19:00 Admin le 03/03/2023 à 12:00 | | | 19:00 * 1 | | +| --- | --- | --- | --- | --- | --- | +| Réalisé — SOINS DE BOUCHE NON MEDICAMENTEUX - Matin midi soir - pendant 10 Jour(s)- Date Début: 27/02/2023 @ 07:00 | ETCHEBARNE Therese Début le 27/02/2023 à 07:00 Fin le 08/03/2023 à 19:00 Admin le 03/03/2023 à 12:00 | 08:00 * 1 | | | | +| Réalisé — SOINS DE BOUCHE NON MEDICAMENTEUX - Matin midi soir - pendant 10 Jour(s)- Date Début: 27/02/2023 @ 07:00 | ETCHEBARNE Therese Début le 27/02/2023 à 07:00 Fin le 08/03/2023 à 19:00 Admin le 03/03/2023 à 12:00 | | 12:00 * 1 | | | +| Réalisé — SOMMEIL : SURV. - 3x/Nuit (22h 2h 6h) - pendant 7 Jour(s)- Date Début: 26/02/2023 @ 04:53 | David MALABAT Début le 26/02/2023 à 04:53 Fin le 05/03/2023 à 02:00 Admin le 03/03/2023 à 06:00 | | | | 22:00 * 1 | +| Réalisé — SOMMEIL : SURV. - 3x/Nuit (22h 2h 6h) - pendant 7 Jour(s)- Date Début: 26/02/2023 @ 04:53 | David MALABAT Début le 26/02/2023 à 04:53 Fin le 05/03/2023 à 02:00 Admin le 03/03/2023 à 06:00 | | | | 02:00 * 1 | +| Réalisé — SOMMEIL : SURV. - 3x/Nuit (22h 2h 6h) - pendant 7 Jour(s)- Date Début: 26/02/2023 @ 04:53 | David MALABAT Début le 26/02/2023 à 04:53 Fin le 05/03/2023 à 02:00 Admin le 03/03/2023 à 06:00 | | | | 06:00 * 1 | +| Réalisé — SOMMEIL : SURV. - à 06h - pendant 10 Jour(s)- Date Début: 27/02/2023 @ 07:00 | ETCHEBARNE Therese Début le 27/02/2023 à 07:00 Fin le 09/03/2023 à 06:00 Admin le 03/03/2023 à 06:00 | | | | 06:00 * 1 | +| Réalisé — TOILETTE : AIDE COMPLETE - à 08h - pendant 10 Jour(s)- Date Début: 27/02/2023 @ 07:00 | ETCHEBARNE Therese Début le 27/02/2023 à 07:00 Fin le 08/03/2023 à 08:00 Admin le 03/03/2023 à 08:00 | 08:00 * 1 | | | | +| Réalisé — TOILETTE DOUCHE : AIDE PARTIELLE - Matin [8h] - 1 Semaine- Date Début: 27/02/2023 @ 07:00 | ETCHEBARNE Therese Début le 27/02/2023 à 07:00 Fin le 05/03/2023 à 08:00 Admin le 03/03/2023 à 08:00 | 08:00 * 1 | | | | + + +#### Tableau 1 (Page 17) - 9 lignes x 6 colonnes + +| Réalisé — URINAL / BASSIN : VIDER - Ttes les 8H [4h 12h 20h] - pendant 10 Jour(s)- Date Début: 27/02/2023 @ 07:00 | ETCHEBARNE Therese Début le 27/02/2023 à 07:00 Fin le 09/03/2023 à 04:00 Admin le 03/03/2023 à 12:00 | | | | 04:00 * 1 | +| --- | --- | --- | --- | --- | --- | +| Réalisé — URINAL / BASSIN : VIDER - Ttes les 8H [4h 12h 20h] - pendant 10 Jour(s)- Date Début: 27/02/2023 @ 07:00 | ETCHEBARNE Therese Début le 27/02/2023 à 07:00 Fin le 09/03/2023 à 04:00 Admin le 03/03/2023 à 12:00 | | 12:00 * 1 | | | +| Réalisé — DOULEUR : SURV - Ttes les 6h [2h 8h 14h 20h] - 10 Jours- Date Début: 01/03/2023 @ 17:36 | LEGRAS Claire Début le 01/03/2023 à 17:36 Fin le 11/03/2023 à 14:00 Admin le 03/03/2023 à 08:00 | | 14:00 * 1 | | | +| Réalisé — DOULEUR : SURV - Ttes les 6h [2h 8h 14h 20h] - 10 Jours- Date Début: 01/03/2023 @ 17:36 | LEGRAS Claire Début le 01/03/2023 à 17:36 Fin le 11/03/2023 à 14:00 Admin le 03/03/2023 à 08:00 | | | 20:00 * 1 | | +| Réalisé — DOULEUR : SURV - Ttes les 6h [2h 8h 14h 20h] - 10 Jours- Date Début: 01/03/2023 @ 17:36 | LEGRAS Claire Début le 01/03/2023 à 17:36 Fin le 11/03/2023 à 14:00 Admin le 03/03/2023 à 08:00 | | | | 02:00 * 1 | +| Réalisé — DOULEUR : SURV - Ttes les 6h [2h 8h 14h 20h] - 10 Jours- Date Début: 01/03/2023 @ 17:36 | LEGRAS Claire Début le 01/03/2023 à 17:36 Fin le 11/03/2023 à 14:00 Admin le 03/03/2023 à 08:00 | 08:00 * 1 | | | | +| Réalisé — SIGNES VITAUX (Pls, TA, FR, T°, Glyc, Miction, Transit) - Ttes les 6h [2h 8h 14h 20h] - 1 Mois (30j)- Date Début: 01/03/2023 @ 17:36 | LEGRAS Claire Début le 01/03/2023 à 17:36 Fin le 31/03/2023 à 14:00 Admin le 03/03/2023 à 08:00 | | 14:00 * 1 | | | +| Réalisé — SIGNES VITAUX (Pls, TA, FR, T°, Glyc, Miction, Transit) - Ttes les 6h [2h 8h 14h 20h] - 1 Mois (30j)- Date Début: 01/03/2023 @ 17:36 | LEGRAS Claire Début le 01/03/2023 à 17:36 Fin le 31/03/2023 à 14:00 Admin le 03/03/2023 à 08:00 | | | 20:00 * 1 | | +| Réalisé — SIGNES VITAUX (Pls, TA, FR, T°, Glyc, Miction, Transit) - Ttes les 6h [2h 8h 14h 20h] - 1 Mois (30j)- Date Début: 01/03/2023 @ 17:36 | LEGRAS Claire Début le 01/03/2023 à 17:36 Fin le 31/03/2023 à 14:00 Admin le 03/03/2023 à 08:00 | | | | 02:00 * 1 | + + +#### Tableau 1 (Page 19) - 11 lignes x 6 colonnes + +| Prescriptions | | Matin (07h-12h) | Midi (12h-16h) | Soir (16h-21h) | Soir (21h-07h) | +| --- | --- | --- | --- | --- | --- | +| Signé — ONDANSETRON AGT 4 MG SOL INJ AMP - NR solution (2 mL) - Dose 4 mg - INTRAVEINEUSE Directe - Toutes les 8 Heure(s) Si besoin - Début presc.: 01/03/2023 @ 17:36 SI NAUSEES/VOMISSEMENTS | LEGRAS Claire Début le 01/03/2023 à 17:36 Fin le 04/03/2023 à 09:36 Admin le 03/03/2023 à 09:36 | 09:36 * 4 mg | | | | +| Signé — CETIRIZINE ARW 10MG CPR - 10MG comprime - Dose 1 CPR - ORALE - Matin [8h] - 1ère dose: 04/03/2023 @ 08:00 | DUTREY Sarah Début le 03/03/2023 à 10:20 Fin le 10/03/2023 à 08:00 | 08:00 * 1 CPR | | | | +| Signé — OXYNORMORO 5MG CPR DISP - 5MG comprime - Dose 1 CPR - ORALE - Toutes les 4 Heure(s) Si besoin - Début presc.: 25/02/2023 @ 13:29 "si douleurs " — Nombre de prises max par 24h : 6 — Dose totale : 6 | DONAT Isabelle Début le 25/02/2023 à 13:29 Fin le 01/04/2023 à 01:54 Admin le 03/03/2023 à 09:54 | 09:54 * 1 CPR | | | | +| Signé — OXYNORMORO 5MG CPR DISP - 5MG comprime - Dose 1 CPR - ORALE - Toutes les 4 Heure(s) Si besoin - Début presc.: 25/02/2023 @ 13:29 "si douleurs " — Nombre de prises max par 24h : 6 — Dose totale : 6 | DONAT Isabelle Début le 25/02/2023 à 13:29 Fin le 01/04/2023 à 01:54 Admin le 03/03/2023 à 09:54 | | 13:54 * 1 CPR | | | +| Signé — OXYNORMORO 5MG CPR DISP - 5MG comprime - Dose 1 CPR - ORALE - Toutes les 4 Heure(s) Si besoin - Début presc.: 25/02/2023 @ 13:29 "si douleurs " — Nombre de prises max par 24h : 6 — Dose totale : 6 | DONAT Isabelle Début le 25/02/2023 à 13:29 Fin le 01/04/2023 à 01:54 Admin le 03/03/2023 à 09:54 | | | 17:54 * 1 CPR | | +| Signé — OXYNORMORO 5MG CPR DISP - 5MG comprime - Dose 1 CPR - ORALE - Toutes les 4 Heure(s) Si besoin - Début presc.: 25/02/2023 @ 13:29 "si douleurs " — Nombre de prises max par 24h : 6 — Dose totale : 6 | DONAT Isabelle Début le 25/02/2023 à 13:29 Fin le 01/04/2023 à 01:54 Admin le 03/03/2023 à 09:54 | | | | 21:54 * 1 CPR | +| Signé — OXYNORMORO 5MG CPR DISP - 5MG comprime - Dose 1 CPR - ORALE - Toutes les 4 Heure(s) Si besoin - Début presc.: 25/02/2023 @ 13:29 "si douleurs " — Nombre de prises max par 24h : 6 — Dose totale : 6 | DONAT Isabelle Début le 25/02/2023 à 13:29 Fin le 01/04/2023 à 01:54 Admin le 03/03/2023 à 09:54 | | | | 01:54 * 1 CPR | +| Signé — OXYNORMORO 5MG CPR DISP - 5MG comprime - Dose 1 CPR - ORALE - Toutes les 4 Heure(s) Si besoin - Début presc.: 25/02/2023 @ 13:29 "si douleurs " — Nombre de prises max par 24h : 6 — Dose totale : 6 | DONAT Isabelle Début le 25/02/2023 à 13:29 Fin le 01/04/2023 à 01:54 Admin le 03/03/2023 à 09:54 | | | | 05:54 * 1 CPR | +| Signé — PARACETAMOL ARW 500MG GELULE - 500MG gelule - Dose 2 GEL - ORALE - Toutes les 6 Heure(s) Si besoin - Début presc.: 25/02/2023 @ 13:18 si douleur si température sup à 38,5 | DONAT Isabelle Début le 25/02/2023 à 13:18 Fin le 31/03/2023 à 19:00 Admin le 03/03/2023 à 13:00 | 07:00 * 2 GEL | | | | +| Signé — PARACETAMOL ARW 500MG GELULE - 500MG gelule - Dose 2 GEL - ORALE - Toutes les 6 Heure(s) Si besoin - Début presc.: 25/02/2023 @ 13:18 si douleur si température sup à 38,5 | DONAT Isabelle Début le 25/02/2023 à 13:18 Fin le 31/03/2023 à 19:00 Admin le 03/03/2023 à 13:00 | | 13:00 * 2 GEL | | | + + +#### Tableau 2 (Page 19) - 2 lignes x 1 colonnes + +| | +| --- | +| | + + +#### Tableau 1 (Page 20) - 9 lignes x 6 colonnes + +| Signé — PARACETAMOL ARW 500MG GELULE - 500MG gelule - Dose 2 GEL - ORALE - Toutes les 6 Heure(s) Si besoin - Début presc.: 25/02/2023 @ 13:18 si douleur si température sup à 38,5 | DONAT Isabelle Début le 25/02/2023 à 13:18 Fin le 31/03/2023 à 19:00 Admin le 03/03/2023 à 13:00 | | | 19:00 * 2 GEL | | +| --- | --- | --- | --- | --- | --- | +| Signé — PARACETAMOL ARW 500MG GELULE - 500MG gelule - Dose 2 GEL - ORALE - Toutes les 6 Heure(s) Si besoin - Début presc.: 25/02/2023 @ 13:18 si douleur si température sup à 38,5 | DONAT Isabelle Début le 25/02/2023 à 13:18 Fin le 31/03/2023 à 19:00 Admin le 03/03/2023 à 13:00 | | | | 01:00 * 2 GEL | +| Signé — LOVENOX 4000UI AXA/0,4ML INJ SER +S - 4000UI solution (0,4 mL) - Dose 1 SERINGUE(S) PREREMPLIE(S) - SOUS- CUTANEE Directe - Matin [8h] - 1ère dose: 26/02/2023 @ 08:00 | DONAT Isabelle Début le 25/02/2023 à 13:18 Fin le 27/03/2023 à 08:00 Admin le 03/03/2023 à 09:17 | 08:00 * 1 SERINGUE(S) PREREMPLIE( | S) | | | +| Réalisé — ACCOMPAGNER INSTALLER AUX TOILETTES - Ttes les 8H [4h 12h 20h] - pendant 10 Jour(s)- Date Début: 27/02/2023 @ 07:00 | ETCHEBARNE Therese Début le 27/02/2023 à 07:00 Fin le 09/03/2023 à 04:00 Admin le 03/03/2023 à 12:00 | | 12:00 * 1 | | | +| Réalisé — ACCOMPAGNER INSTALLER AUX TOILETTES - Ttes les 8H [4h 12h 20h] - pendant 10 Jour(s)- Date Début: 27/02/2023 @ 07:00 | ETCHEBARNE Therese Début le 27/02/2023 à 07:00 Fin le 09/03/2023 à 04:00 Admin le 03/03/2023 à 12:00 | | | 20:00 * 1 | | +| Réalisé — ACCOMPAGNER INSTALLER AUX TOILETTES - Ttes les 8H [4h 12h 20h] - pendant 10 Jour(s)- Date Début: 27/02/2023 @ 07:00 | ETCHEBARNE Therese Début le 27/02/2023 à 07:00 Fin le 09/03/2023 à 04:00 Admin le 03/03/2023 à 12:00 | | | | 04:00 * 1 | +| Réalisé — AIDE A LA PRISE MEDICAMENTS - Matin midi soir - pendant 10 Jour(s)- Date Début: 27/02/2023 @ 07:00 | ETCHEBARNE Therese Début le 27/02/2023 à 07:00 Fin le 08/03/2023 à 19:00 Admin le 03/03/2023 à 12:00 | 08:00 * 1 | | | | +| Réalisé — AIDE A LA PRISE MEDICAMENTS - Matin midi soir - pendant 10 Jour(s)- Date Début: 27/02/2023 @ 07:00 | ETCHEBARNE Therese Début le 27/02/2023 à 07:00 Fin le 08/03/2023 à 19:00 Admin le 03/03/2023 à 12:00 | | 12:00 * 1 | | | +| Réalisé — AIDE A LA PRISE MEDICAMENTS - Matin midi soir - pendant 10 Jour(s)- Date Début: 27/02/2023 @ 07:00 | ETCHEBARNE Therese Début le 27/02/2023 à 07:00 Fin le 08/03/2023 à 19:00 Admin le 03/03/2023 à 12:00 | | | 19:00 * 1 | | + + +#### Tableau 2 (Page 20) - 2 lignes x 1 colonnes + +| | +| --- | +| | + + +#### Tableau 1 (Page 21) - 8 lignes x 6 colonnes + +| Réalisé — CHANGEMENT POSITION / PREV ESCARRE - Ttes les 8H [4h 12h 20h] - pendant 10 Jour(s)- Date Début: 27/02/2023 @ 07:00 | ETCHEBARNE Therese Début le 27/02/2023 à 07:00 Fin le 09/03/2023 à 04:00 Admin le 03/03/2023 à 12:00 | | | 20:00 * 1 | | +| --- | --- | --- | --- | --- | --- | +| Réalisé — CHANGEMENT POSITION / PREV ESCARRE - Ttes les 8H [4h 12h 20h] - pendant 10 Jour(s)- Date Début: 27/02/2023 @ 07:00 | ETCHEBARNE Therese Début le 27/02/2023 à 07:00 Fin le 09/03/2023 à 04:00 Admin le 03/03/2023 à 12:00 | | | | 04:00 * 1 | +| Réalisé — CHANGES ADULTE - Ttes les 8H [4h 12h 20h] - pendant 10 Jour(s)- Date Début: 27/02/2023 @ 07:00 | ETCHEBARNE Therese Début le 27/02/2023 à 07:00 Fin le 09/03/2023 à 04:00 Admin le 03/03/2023 à 12:00 | | 12:00 * 1 | | | +| Réalisé — CHANGES ADULTE - Ttes les 8H [4h 12h 20h] - pendant 10 Jour(s)- Date Début: 27/02/2023 @ 07:00 | ETCHEBARNE Therese Début le 27/02/2023 à 07:00 Fin le 09/03/2023 à 04:00 Admin le 03/03/2023 à 12:00 | | | 20:00 * 1 | | +| Réalisé — CHANGES ADULTE - Ttes les 8H [4h 12h 20h] - pendant 10 Jour(s)- Date Début: 27/02/2023 @ 07:00 | ETCHEBARNE Therese Début le 27/02/2023 à 07:00 Fin le 09/03/2023 à 04:00 Admin le 03/03/2023 à 12:00 | | | | 04:00 * 1 | +| Réalisé — DESINFECTION ENVIRONNEMENT PATIENT - à 12h - pendant 10 Jour(s)- Date Début: 27/02/2023 @ 07:00 | ETCHEBARNE Therese Début le 27/02/2023 à 07:00 Fin le 08/03/2023 à 12:00 Admin le 03/03/2023 à 12:00 | | 12:00 * 1 | | | +| Réalisé — LEVER : AU FAUTEUIL - 2X / jour (8h 16h) - pendant 10 Jour(s)- Date Début: 27/02/2023 @ 07:00 | ETCHEBARNE Therese Début le 27/02/2023 à 07:00 Fin le 08/03/2023 à 16:00 Admin le 03/03/2023 à 08:00 | 08:00 * 1 | | | | +| Réalisé — LEVER : AU FAUTEUIL - 2X / jour (8h 16h) - pendant 10 Jour(s)- Date Début: 27/02/2023 @ 07:00 | ETCHEBARNE Therese Début le 27/02/2023 à 07:00 Fin le 08/03/2023 à 16:00 Admin le 03/03/2023 à 08:00 | | | 16:00 * 1 | | + + +#### Tableau 1 (Page 22) - 9 lignes x 6 colonnes + +| Réalisé — MATELAS DYNAMIQUE POSE - à 12h - pendant 10 Jour(s)- Date Début: 27/02/2023 @ 07:00 | ETCHEBARNE Therese Début le 27/02/2023 à 07:00 Fin le 08/03/2023 à 12:00 Admin le 03/03/2023 à 12:00 | | 12:00 * 1 | | | +| --- | --- | --- | --- | --- | --- | +| Réalisé — POCHE A URINE : VIDER - Ttes les 8H [4h 12h 20h] - pendant 10 Jour(s)- Date Début: 27/02/2023 @ 07:00 | ETCHEBARNE Therese Début le 27/02/2023 à 07:00 Fin le 09/03/2023 à 04:00 Admin le 03/03/2023 à 12:00 | | 12:00 * 1 | | | +| Réalisé — POCHE A URINE : VIDER - Ttes les 8H [4h 12h 20h] - pendant 10 Jour(s)- Date Début: 27/02/2023 @ 07:00 | ETCHEBARNE Therese Début le 27/02/2023 à 07:00 Fin le 09/03/2023 à 04:00 Admin le 03/03/2023 à 12:00 | | | 20:00 * 1 | | +| Réalisé — POCHE A URINE : VIDER - Ttes les 8H [4h 12h 20h] - pendant 10 Jour(s)- Date Début: 27/02/2023 @ 07:00 | ETCHEBARNE Therese Début le 27/02/2023 à 07:00 Fin le 09/03/2023 à 04:00 Admin le 03/03/2023 à 12:00 | | | | 04:00 * 1 | +| Réalisé — REPAS : AIDE PARTIELLE - Matin midi goûter soir - pendant 10 Jour(s)- Date Début: 27/02/2023 @ 07:00 | ETCHEBARNE Therese Début le 27/02/2023 à 07:00 Fin le 08/03/2023 à 19:00 Admin le 03/03/2023 à 12:00 | 08:00 * 1 | | | | +| Réalisé — REPAS : AIDE PARTIELLE - Matin midi goûter soir - pendant 10 Jour(s)- Date Début: 27/02/2023 @ 07:00 | ETCHEBARNE Therese Début le 27/02/2023 à 07:00 Fin le 08/03/2023 à 19:00 Admin le 03/03/2023 à 12:00 | | 12:00 * 1 | | | +| Réalisé — REPAS : AIDE PARTIELLE - Matin midi goûter soir - pendant 10 Jour(s)- Date Début: 27/02/2023 @ 07:00 | ETCHEBARNE Therese Début le 27/02/2023 à 07:00 Fin le 08/03/2023 à 19:00 Admin le 03/03/2023 à 12:00 | | | 16:00 * 1 | | +| Réalisé — REPAS : AIDE PARTIELLE - Matin midi goûter soir - pendant 10 Jour(s)- Date Début: 27/02/2023 @ 07:00 | ETCHEBARNE Therese Début le 27/02/2023 à 07:00 Fin le 08/03/2023 à 19:00 Admin le 03/03/2023 à 12:00 | | | 19:00 * 1 | | +| Réalisé — SOINS DE BOUCHE NON MEDICAMENTEUX - Matin midi soir - pendant 10 Jour(s)- Date Début: 27/02/2023 @ 07:00 | ETCHEBARNE Therese Début le 27/02/2023 à 07:00 Fin le 08/03/2023 à 19:00 Admin le 03/03/2023 à 12:00 | 08:00 * 1 | | | | + + +#### Tableau 1 (Page 23) - 9 lignes x 6 colonnes + +| Réalisé — SOINS DE BOUCHE NON MEDICAMENTEUX - Matin midi soir - pendant 10 Jour(s)- Date Début: 27/02/2023 @ 07:00 | ETCHEBARNE Therese Début le 27/02/2023 à 07:00 Fin le 08/03/2023 à 19:00 Admin le 03/03/2023 à 12:00 | | 12:00 * 1 | | | +| --- | --- | --- | --- | --- | --- | +| Réalisé — SOINS DE BOUCHE NON MEDICAMENTEUX - Matin midi soir - pendant 10 Jour(s)- Date Début: 27/02/2023 @ 07:00 | ETCHEBARNE Therese Début le 27/02/2023 à 07:00 Fin le 08/03/2023 à 19:00 Admin le 03/03/2023 à 12:00 | | | 19:00 * 1 | | +| Réalisé — SOMMEIL : SURV. - 3x/Nuit (22h 2h 6h) - pendant 7 Jour(s)- Date Début: 26/02/2023 @ 04:53 | David MALABAT Début le 26/02/2023 à 04:53 Fin le 05/03/2023 à 02:00 Admin le 03/03/2023 à 06:00 | | | | 22:00 * 1 | +| Réalisé — SOMMEIL : SURV. - 3x/Nuit (22h 2h 6h) - pendant 7 Jour(s)- Date Début: 26/02/2023 @ 04:53 | David MALABAT Début le 26/02/2023 à 04:53 Fin le 05/03/2023 à 02:00 Admin le 03/03/2023 à 06:00 | | | | 02:00 * 1 | +| Réalisé — SOMMEIL : SURV. - à 06h - pendant 10 Jour(s)- Date Début: 27/02/2023 @ 07:00 | ETCHEBARNE Therese Début le 27/02/2023 à 07:00 Fin le 09/03/2023 à 06:00 Admin le 03/03/2023 à 06:00 | | | | 06:00 * 1 | +| Réalisé — TOILETTE : AIDE COMPLETE - à 08h - pendant 10 Jour(s)- Date Début: 27/02/2023 @ 07:00 | ETCHEBARNE Therese Début le 27/02/2023 à 07:00 Fin le 08/03/2023 à 08:00 Admin le 03/03/2023 à 08:00 | 08:00 * 1 | | | | +| Réalisé — TOILETTE DOUCHE : AIDE PARTIELLE - Matin [8h] - 1 Semaine- Date Début: 27/02/2023 @ 07:00 | ETCHEBARNE Therese Début le 27/02/2023 à 07:00 Fin le 05/03/2023 à 08:00 Admin le 03/03/2023 à 08:00 | 08:00 * 1 | | | | +| Réalisé — URINAL / BASSIN : VIDER - Ttes les 8H [4h 12h 20h] - pendant 10 Jour(s)- Date Début: 27/02/2023 @ 07:00 | ETCHEBARNE Therese Début le 27/02/2023 à 07:00 Fin le 09/03/2023 à 04:00 Admin le 03/03/2023 à 12:00 | | 12:00 * 1 | | | +| Réalisé — URINAL / BASSIN : VIDER - Ttes les 8H [4h 12h 20h] - pendant 10 Jour(s)- Date Début: 27/02/2023 @ 07:00 | ETCHEBARNE Therese Début le 27/02/2023 à 07:00 Fin le 09/03/2023 à 04:00 Admin le 03/03/2023 à 12:00 | | | 20:00 * 1 | | + + +#### Tableau 1 (Page 24) - 8 lignes x 6 colonnes + +| Réalisé — DOULEUR : SURV - Ttes les 6h [2h 8h 14h 20h] - 10 Jours- Date Début: 01/03/2023 @ 17:36 | LEGRAS Claire Début le 01/03/2023 à 17:36 Fin le 11/03/2023 à 14:00 Admin le 03/03/2023 à 08:00 | 08:00 * 1 | | | | +| --- | --- | --- | --- | --- | --- | +| Réalisé — DOULEUR : SURV - Ttes les 6h [2h 8h 14h 20h] - 10 Jours- Date Début: 01/03/2023 @ 17:36 | LEGRAS Claire Début le 01/03/2023 à 17:36 Fin le 11/03/2023 à 14:00 Admin le 03/03/2023 à 08:00 | | 14:00 * 1 | | | +| Réalisé — DOULEUR : SURV - Ttes les 6h [2h 8h 14h 20h] - 10 Jours- Date Début: 01/03/2023 @ 17:36 | LEGRAS Claire Début le 01/03/2023 à 17:36 Fin le 11/03/2023 à 14:00 Admin le 03/03/2023 à 08:00 | | | 20:00 * 1 | | +| Réalisé — DOULEUR : SURV - Ttes les 6h [2h 8h 14h 20h] - 10 Jours- Date Début: 01/03/2023 @ 17:36 | LEGRAS Claire Début le 01/03/2023 à 17:36 Fin le 11/03/2023 à 14:00 Admin le 03/03/2023 à 08:00 | | | | 02:00 * 1 | +| Réalisé — SIGNES VITAUX (Pls, TA, FR, T°, Glyc, Miction, Transit) - Ttes les 6h [2h 8h 14h 20h] - 1 Mois (30j)- Date Début: 01/03/2023 @ 17:36 | LEGRAS Claire Début le 01/03/2023 à 17:36 Fin le 31/03/2023 à 14:00 Admin le 03/03/2023 à 08:00 | 08:00 * 1 | | | | +| Réalisé — SIGNES VITAUX (Pls, TA, FR, T°, Glyc, Miction, Transit) - Ttes les 6h [2h 8h 14h 20h] - 1 Mois (30j)- Date Début: 01/03/2023 @ 17:36 | LEGRAS Claire Début le 01/03/2023 à 17:36 Fin le 31/03/2023 à 14:00 Admin le 03/03/2023 à 08:00 | | 14:00 * 1 | | | +| Réalisé — SIGNES VITAUX (Pls, TA, FR, T°, Glyc, Miction, Transit) - Ttes les 6h [2h 8h 14h 20h] - 1 Mois (30j)- Date Début: 01/03/2023 @ 17:36 | LEGRAS Claire Début le 01/03/2023 à 17:36 Fin le 31/03/2023 à 14:00 Admin le 03/03/2023 à 08:00 | | | 20:00 * 1 | | +| Réalisé — SIGNES VITAUX (Pls, TA, FR, T°, Glyc, Miction, Transit) - Ttes les 6h [2h 8h 14h 20h] - 1 Mois (30j)- Date Début: 01/03/2023 @ 17:36 | LEGRAS Claire Début le 01/03/2023 à 17:36 Fin le 31/03/2023 à 14:00 Admin le 03/03/2023 à 08:00 | | | | 02:00 * 1 | + + +#### Tableau 2 (Page 24) - 1 lignes x 3 colonnes + +| Prescription | Date | Résultat | +| --- | --- | --- | + + +#### Tableau 1 (Page 25) - 4 lignes x 6 colonnes + +| Résultat de labo | 03/03/2023 07:18 (5897778) | 02/03/2023 08:31 (5897001) | 02/03/2023 08:31 (5896968) | 01/03/2023 08:12 (5895690) | 27/02/2023 05:52 (5893522) | +| --- | --- | --- | --- | --- | --- | +| Albumine | | 36,7 g/l | | | 36,8 g/l | +| Bilirubine totale | 8 µmol/l | 10 µmol/l | "" µmol/l | 8 µmol/l | 13 µmol/l | +| Score Fibrosis-4 (FIB4) | | 0,83 | | 0,57 | 1,01 | + + +#### Tableau 1 (Page 26) - 29 lignes x 6 colonnes + +| ASAT | 79 U/l | 90 U/l | "" U/l | 63 U/l | 123 U/l | +| --- | --- | --- | --- | --- | --- | +| Commentaire bilirubine totale | Bilirubine totale < 21 µmol/L : dosage des fractions conjuguée et non conjugée non réalisé. | Bilirubine totale < 21 µmol/L : dosage des fractions conjuguée et non conjugée non réalisé. | | Bilirubine totale < 21 µmol/L : dosage des fractions conjuguée et non conjugée non réalisé. | Bilirubine totale < 21 µmol/L : dosage des fractions conjuguée et non conjugée non réalisé. | +| Commentaire CKD-EPI | | Non-applicable en cas d'insuffisance rénale aigue. Estimation du DFG non validée dans les situations suivantes: - patients âgés > 75 ans - poids extrêmes et variations de la masse musculaire - alimentation pauvre en protéines animales et patients dénutris - patients d'origine non caucasienne | | | Non-applicable en cas d'insuffisance rénale aigue. Estimation du DFG non validée dans les situations suivantes: - patients âgés > 75 ans - poids extrêmes et variations de la masse musculaire - alimentation pauvre en protéines animales et patients dénutris - patients d'origine non caucasienne | +| Gamma GT | 242 U/l | 299 U/l | "" U/l | 306 U/l | 368 U/l | +| Phosphatase alcaline | 148 U/l | 183 U/l | "" U/l | 179 U/l | 246 U/l | +| Calcium | | | | | 2,16 mmol/l | +| Calcium corrigé | | | | | 2,24 mmol/l | +| Estimation du DFG (CKD- EPI) | | 111 ml/mn/1.73 m2 | | | 111 ml/mn/1.73 m2 | +| Chlore | | 104 mmol/l | | 105 mmol/l | 105 mmol/l | +| Créatinine | | 55 µmol/l | | | 54 µmol/l | +| CRP | | 6 mg/l | | 1 mg/l | 2 mg/l | +| Compte-rendu laboratoire | Labo230303101519-1.pd | fLabo230302110632-1.pd | fLabo230302085759-1.pd | fLabo230301111252-1.pd | f Labo230227092323-1.pd | +| Polynucléaires neutrophiles (%) | | 65,7 % | | 43,9 % | 41,9 % | +| Polynucléaires neutrophiles (#) | | 5,28 10.9/l | | 2,42 10.9/l | 1,98 10.9/l | +| Polynucléaires éosinophiles (%) | | 0,2 % | | 2,4 % | 2,3 % | +| Polynucléaires éosinophiles (#) | | 0,02 10.9/l | | 0,13 10.9/l | 0,11 10.9/l | +| Polynucléaires basophiles (%) | | 0,2 % | | 0,9 % | 1,1 % | +| Polynucléaires basophiles (#) | | 0,02 10.9/l | | 0,05 10.9/l | 0,05 10.9/l | +| Lymphocytes (%) | | 24,4 % | | 43,9 % | 45,2 % | +| Lymphocytes (#) | | 1,96 10.9/l | | 2,42 10.9/l | 2,14 10.9/l | +| Monocytes (%) | | 9,5 % | | 8,9 % | 9,5 % | +| Monocytes (#) | | 0,76 10.9/l | | 0,49 10.9/l | 0,45 10.9/l | +| Glucose | | 5,2 mmol/l | | | 4,4 mmol/l | +| ALAT | 126 U/l | 163 U/l | "" U/l | 169 U/l | 281 U/l | +| Hémoglobine | | 12,4 g/dl | | 12,5 g/dl | 12,1 g/dl | +| Formule sanguine | | réalisée sur automate XN (Sysmex) | | réalisée sur automate XN (Sysmex) | réalisée sur automate XN (Sysmex) | +| Hématocrite (%) | | 37,4 % | | 38,8 % | 35,5 % | +| Indice de distribution des hématies | | 13,1 % | | 13,5 % | 13,2 % | +| Traitement anticoagulant | | Absence de traitement anticoagulant | | | Absence de traitement anticoagulant | + + +#### Tableau 1 (Page 27) - 19 lignes x 6 colonnes + +| INR | | 0,98 | | | 0,98 | +| --- | --- | --- | --- | --- | --- | +| Potassium | | 4,0 mmol/l | | 4,0 mmol/l | 3,6 mmol/l | +| Magnésium | | | | | 0,81 mmol/l | +| Leucocytes | | 8,03 10.9/l | | 5,51 10.9/l | 4,73 10.9/l | +| Hématies | | 4,29 10.12/l (t/l) | | 4,29 10.12/l (t/l) | 4,09 10.12/l (t/l) | +| VGM | | 87,2 fl | | 90,4 fl | 86,8 fl | +| TCMH | | 28,9 pg | | 29,1 pg | 29,6 pg | +| CCMH | | 33,2 g/dl | | 32,2 g/dl | 34,1 g/dl | +| Sodium | | 139 mmol/l | | 142 mmol/l | 139 mmol/l | +| Osmolarité sang | | 283 mOSM/l | | | 282 mOSM/l | +| Phosphore | | | | | 1,39 mmol/l | +| Plaquettes | | 364 10.9/l | | 363 10.9/l | 311 10.9/l | +| Protéines | | 65 g/l | | | 66 g/l | +| Réserve alcaline | | | | | 26 mmol/l | +| Validation et diffusion sous la responsabilité du biologiste | Dr Rémi SEGUES | Hedy NEMEUR (interne) | "" | Dr. Julien GUILLEMAUD | Hedy NEMEUR (interne) | +| Trou anionique | | | | | 12 | +| TP | | 104 % | | | 104 % | +| Triglycérides | | | | | 1,12 mmol/l | +| Volume plaquettaire moyen | | 9,9 fl | | 10,0 fl | 9,8 fl | + + +#### Tableau 2 (Page 27) - 1 lignes x 4 colonnes + +| Type | Texte | Date d'impression | Utilisateur | +| --- | --- | --- | --- | + +### Sections / Headers identifies +- `CENTRE HOSPITALIER COTE BASQUE` +- `MEDECINE GASTRO ENTERO HC - MEDECINE GASTRO B2 HC` +- `Nom de naissance: CLIER IPP: 01306172` +- `Nom et Prénom: NARBAIS AUDREY Date de naissance: 23/02/1980` +- `Sexe: Féminin Lieu de naissance: CHAMPIGNY SUR MARNE` +- `Nationalité: FRANCE Code Postal: 64430` +- `Episode No: 23042753` +- `Localisation: MEDECINE GASTRO B2 HC Médecin courant: DR. Franck AUDEMAR` +- `Date d'admission: 25/02/2023 Heure d'admission: 03:07` +- `Date de sortie: 03/03/2023 Heure de sortie: 13:08` +- `Episode - Heure 03:07` +- `Heure d'orientation 03:12` +- `ATCD : colique hépatique en 28 janvier 2023` +- `Heure de prise en charge médicale 03:07` +- `Heure de décision médicale 07:19` +- `Heure de sortie des Urgences 16:44` +- `Patient: CLIER NARBAIS AUDREY - Date de naissance: 23/02/1980 (01306172 )` +- `Le 03/03/2023 13:51 Page 1 de 28` +- `EN EN EN EN EN EN EN EN EN EN` +- `Le 03/03/2023 13:51 Page 2 de 28` +- `MH : Douleur hypochondre droit` +- `Antécédents :` +- `Traitements :0` +- `Allergie :0` +- `Histoire de la maladie :` +- `Devenir :` +- `TTT de sortie :` +- `Le 03/03/2023 13:51 Page 3 de 28` +- `Cholécystectomie par cœlioscopie ce jour :` +- `BOUDIER` +- `GOUTORBE 10:48 Appel Radio Dr BENNIS: OK pour TDM ce jour` +- `GUILNGAR 12:12` +- `Au total :` +- `400-500 GGT PAL;` +- `Bilan sanguin :` +- `PAL=403 U/L` +- `MENDIBOURE 04:36` +- `CRP=12` +- `Histoire de la Noémie 25/02/2023 Motif d’admission : douleur hypochondre droit` +- `Le 03/03/2023 13:51 Page 4 de 28` +- `Examen clinique :` +- `Au total : colique hépatique` +- `PEC : titration morphinique et bilan sanguin` +- `DOULEUR: gene abdo mais pas de douleurs franche, ne souhaite pas d'ATG` +- `ALIMENTATION: bien toleré` +- `ELIMINATIN: gaz mais pas de selles` +- `DEVENIR: bilan sang demain et en fonction rad avec son epoux en fin de matinée` +- `Algique à 10h :` +- `HIRIGOYEN 14:05` +- `Le 03/03/2023 13:51 Page 5 de 28` +- `RBO : RBO 19h45, non algique. Mobilisation` +- `Examen : cholecystectomie prévue le 01/03/2023. Cs Anesth ok.` +- `Note IDE Grégory SERRE Douleur : non algique.` +- `Equipement : KTO posé MS droit` +- `Elimination :` +- `Douleur :` +- `MH : Entrée le 25/02 : douleur hypochondre droit/ pancréatite` +- `TDM : pas de complications secondaires à la pancréatite` +- `LARCEBAL 14:48` +- `CONSTANTIN 08:54` +- `Le 03/03/2023 13:51 Page 6 de 28` +- `VVP: non fonctionnelle => reposée + BS` +- `TRANSIT: G+, S-` +- `RISQUE INFECTIEUX : apyrétique` +- `RISQUE DOULEUR : EN 0/10 , refuse ATG` +- `ALIM' : eau ok --> bien tolérée` +- `EXAMEN : TDM + BS demain 27/02` +- `Risque infectieux : apyrétique` +- `Laissé à jeun pour le moment > vu avec le médecin : eau autorisé ce midi` +- `Transit :G+S-` +- `DLR: non algique` +- `ENTREE : patiente transférée des urgences , hébergée GASTRO , pour PANCREATITE` +- `LITHIASIQUE` +- `HDM : douleur abdo flanc droit + vomissements hier et cette nuit` +- `RISQUE DOULEUR : confortable , EN 0/10 cet AM` +- `ALIM' : AJ ce soir et +/- BCY demain , à faire confirmer` +- `EXAMEN : TDM + BS de contrôle lundi` +- `+ IONOGRAMME :` +- `25/02/2023 DOULEUR :` +- `DEVENIR :` +- `TDM ==>` +- `Note IDE Manon BILLE Devenir : transfert dans le tri` +- `Motif d'entrée : douleurs abdominales sur le flanc droit` +- `Soins :` +- `Le 03/03/2023 13:51 Page 7 de 28` +- `Voie d`administration: INTRAVEINEUSE` +- `Statut des prescriptions: Signé` +- `ONDANSETRON AGT` +- `LEGRAS` +- `PARACETAMOL BBM` +- `10MG/ML INJ 100ML [10] 1 G 25/02/2023 05:28` +- `Statut des prescriptions: Arrêté` +- `ACUPAN 20MG/2ML SOL` +- `MORPHINE CHL REN santé: titration: 2` +- `MENDIBOURE` +- `POLYIONIQUE 1A G5` +- `BAX POC VFO 500ML [1] - Normal 25/02/2023 13:18 01/03/2023 06:00 Isabelle DONAT` +- `POCHE(S)` +- `SODIUM CHL MACO` +- `Voie d`administration: ORALE` +- `CETIRIZINE ARW 10MG` +- `CPR [60] COMPRIME(S)` +- `OXYNORMORO 5MG CPR` +- `DISP [14] COMPRIME(S)` +- `PARACETAMOL ARW` +- `Ampoule(s) santé: sur un sucre` +- `Statut des prescriptions: Réalisé` +- `KETOPROFENE -` +- `BIPROFENID LP 100MG 1 CPR 25/02/2023 05:28` +- `Le 03/03/2023 13:51 Page 8 de 28` +- `Voie d`administration: SOUS-CUTANEE` +- `LOVENOX 4000UI` +- `+S [2] SERINGUE(S)` +- `PREREMPLIE(S)` +- `BOUDIER 08:12` +- `Pathologie) 16:36` +- `ALIMENTAIRE / DESSERT Normal 17:37 LEGRAS` +- `ACCOMPAGNER` +- `TOILETTES` +- `MEDICAMENTS Normal 07:00 ETCHEBARNE` +- `CHANGEMENT` +- `ESCARRE` +- `DESINFECTION` +- `07:00 ETCHEBARNE` +- `PATIENT` +- `Le 03/03/2023 13:51 Page 9 de 28` +- `LEVER : AU FAUTEUIL Réalisé` +- `Normal 07:00 ETCHEBARNE` +- `LIT : REFECTION 27/02/2023 Therese` +- `COMPLETE 07:00 ETCHEBARNE` +- `POSE 07:00 ETCHEBARNE` +- `POCHE A URINE : VIDER Réalisé` +- `REPAS : AIDE PARTIELLE Réalisé` +- `MEDICAMENTEUX Normal 07:00 ETCHEBARNE` +- `SOMMEIL : SURV. Réalisé` +- `Normal 04:53 MALABAT` +- `SOMMEIL : SURV. Réalisé - à 06h Normal` +- `TOILETTE : AIDE 27/02/2023 Therese` +- `TOILETTE DOUCHE : 1 Semaine - Matin 27/02/2023 Therese` +- `AIDE PARTIELLE [8h] Normal 07:00 ETCHEBARNE` +- `URINAL / BASSIN : VIDER Réalisé` +- `DOULEUR : SURV Réalisé 6h [2h 8h 14h 20h]` +- `17:36 LEGRAS` +- `05:29 MENDIBOURE` +- `CPR [60] COMPRIME(S) ORALE Sortie 10:25 Révisé/Traité DUTREY` +- `CPR [60] COMPRIME(S) ORALE Sortie 10:34 Révisé/Traité DUTREY` +- `ORALE 20h) Presc. de Sortie 05:28 Révisé/Traité MENDIBOURE` +- `NEFOPAM MYL` +- `ORALE Presc. de Sortie 10:31 Révisé/Traité DUTREY` +- `ORALE Presc. de Sortie 10:34 Révisé/Traité DUTREY` +- `ORALE 10:25 Révisé/Traité DUTREY` +- `ORALE 10:34 Révisé/Traité DUTREY` +- `INTRAVEINEUSE 16h] Presc. de Sortie 05:28 A valider MENDIBOURE` +- `Le 03/03/2023 13:51 Page 10 de 28` +- `ALAT sang ( dosage ) 05:29 MENDIBOURE` +- `Le 03/03/2023 13:51 Page 11 de 28` +- `Toutes les 4 Heure(s) Si besoin - Début presc.: 13:29` +- `CPR` +- `Le 03/03/2023 13:51 Page 12 de 28` +- `ORALE - Toutes les 6 Heure(s) Si besoin - Début 13:18` +- `1 SERINGUE(S) PREREMPLIE(S) - SOUS- 13:18 09:17 * 1` +- `CUTANEE Directe - Matin [8h] - 1ère dose: Fin le 27/03/2023 à SERINGUE(S)` +- `26/02/2023 @ 08:00 08:00 PREREMPLIE(S)` +- `ETCHEBARNE` +- `TOILETTES - Ttes les 8H [4h 12h 20h] - pendant 07:00` +- `Début: 27/02/2023 @ 07:00 Fin le 08/03/2023 à` +- `Début: 27/02/2023 @ 07:00 Début le 27/02/2023 à` +- `Le 03/03/2023 13:51 Page 13 de 28` +- `ESCARRE - Ttes les 8H [4h 12h 20h] - pendant 07:00` +- `ENVIRONNEMENT PATIENT - à 12h - pendant 07:00` +- `Réalisé — LEVER : AU FAUTEUIL - 2X / Début le 27/02/2023 à` +- `Réalisé — LEVER : AU FAUTEUIL - 2X / Therese` +- `Le 03/03/2023 13:51 Page 14 de 28` +- `Réalisé — LIT : REFECTION COMPLETE - à Début le 27/02/2023 à` +- `Réalisé — POCHE A URINE : VIDER - Ttes Début le 27/02/2023 à` +- `Début: 27/02/2023 @ 07:00 Fin le 09/03/2023 à` +- `Réalisé — REPAS : AIDE PARTIELLE - Matin Début le 27/02/2023 à` +- `Le 03/03/2023 13:51 Page 15 de 28` +- `MEDICAMENTEUX - Matin midi soir - pendant 07:00` +- `Réalisé — SOMMEIL : SURV. - 3x/Nuit (22h 2h Début le 26/02/2023 à` +- `Réalisé — SOMMEIL : SURV. - à 06h - pendant` +- `Réalisé — TOILETTE : AIDE COMPLETE - à Début le 27/02/2023 à` +- `Réalisé — TOILETTE DOUCHE : AIDE Début le 27/02/2023 à` +- `PARTIELLE - Matin [8h] - 1 Semaine- Date 07:00` +- `Début: 27/02/2023 @ 07:00 Fin le 05/03/2023 à` +- `Réalisé — URINAL / BASSIN : VIDER - Ttes ETCHEBARNE` +- `Le 03/03/2023 13:51 Page 16 de 28` +- `Réalisé — URINAL / BASSIN : VIDER - Ttes Début le 27/02/2023 à` +- `Réalisé — DOULEUR : SURV - Ttes les 6h [2h Début le 01/03/2023 à` +- `Glyc, Miction, Transit) - Ttes les 6h [2h 8h 14h 17:36` +- `Début le 01/03/2023 à 08:00 * 1` +- `Le 03/03/2023 13:51 Page 17 de 28` +- `Le 03/03/2023 13:51 Page 18 de 28` +- `Le 03/03/2023 13:51 Page 19 de 28` +- `1 SERINGUE(S) PREREMPLIE(S) - SOUS- 13:18 08:00 * 1` +- `Le 03/03/2023 13:51 Page 20 de 28` +- `Réalisé — LIT : REFECTION COMPLETE - à Therese` +- `Le 03/03/2023 13:51 Page 21 de 28` +- `Le 03/03/2023 13:51 Page 22 de 28` +- `Le 03/03/2023 13:51 Page 23 de 28` +- `Prénom de naissance : AUDREY` +- `Prénom utilisé : AUDREY` +- `Date de naissance : 23/02/1980` +- `Lieu de naissance : 94017` +- `Le 03/03/2023 13:51 Page 24 de 28` +- `Sexe : F` +- `Matricule INS : (NIR) 280029401710339` +- `Examen du : 27/02/2023` +- `EXAMEN TOMODENSITOMETRIQUE ABDOMINO PELVIEN` +- `Indication :` +- `Protocole :` +- `RESULTATS :` +- `Comparativement au scanner précédent du 28 janvier 2023 :` +- `Par ailleurs : rate de taille normale, homogène.` +- `CONCLUSION :` +- `Technique :` +- `PDL : 1042.21 mGy.cm CTDI : 26.23 mGy` +- `Protocole d'acquisition : 6.1 AbdoPelvis` +- `N° d'examen : RAD001122555` +- `Date de naissance : 23-02-1980` +- `Le 03/03/2023 13:51 Page 25 de 28` +- `EPI)` +- `Le 03/03/2023 13:51 Page 26 de 28` +- `INR 0,98 0,98` +- `TP 104 % 104 %` +- `Identité du patient :` +- `NARBAIS CLIER AUDREY` +- `MAISON IRREXELAIA` +- `64430 ST ETIENNE DE BAIGORRY` +- `INTERVENTION` +- `CHOLECYSTECTOMIE PAR COELIOSCOPIE - CHOLANGIOGRAPHIE PEROPERATOIRE` +- `Diagnostic : Cholécystectomie prophylactique après migration lithiasique.` +- `Voie d'abord : Laparoscopie.` +- `Installation :` +- `(CRO)` +- `Gestes effectués :` +- `Constatations peropératoires :` +- `Le 03/03/2023 13:51 Page 27 de 28` +- `Cholangiographie peropératoire :` +- `Drainage : non.` +- `Bactériologie : non.` +- `Le 03/03/2023 13:51 Page 28 de 28` + +### Donnees personnelles detectees + +**Telephone :** +- `(5893522` +- `(5895690` +- `(5896968` +- `(5897001` +- `(5897778` +- `001122555` +- `01 90.00` +- `01306172` +- `06.25.39.26.82` +- `09 10.12` +- `100 98 99 99 97` +- `1042.21` +- `125 113 137 131 120` +- `131 109 112 120 119` +- `2 37 37 37 36` +- `2023 +01` +- `2023 +02` +- `2023 +25` +- `2023 +27` +- `2023 01` +- `2023 02` +- `2023 03` +- `2023 04` +- `2023 05` +- `2023 06` +- `2023 07` +- `2023 08` +- `2023 09` +- `2023 10` +- `2023 11` +- `2023 13` +- `2023 16` +- `2023 17` +- `2023 25` +- `2023 26` +- `2023 27` +- `2023 28` +- `23-02-1980` +- `230227092323-1` +- `230301111252-1` +- `230302085759-1` +- `230302110632-1` +- `230303101519-1` +- `23042753` +- `280029401710339` +- `29 10.12` +- `41.666666666666664` +- `59 63 62 64 74` +- `62 70 60 56 62` +- `640000162` +- `69 55 46 54 56` +- `80 54 49 73 67` +- `96 98 99 99 100` +- `980 (01306172` + +**Code Postal :** +- `64109` +- `64430` +- `94017` + +**Numero Dossier :** +- `01306172` +- `23042753` +- `5893522` +- `5895690` +- `5896968` +- `5897001` +- `5897778` +- `640000162` + +**Date :** +- `01/03/2023` +- `01/03/23` +- `01/04/2023` +- `02/03/2023` +- `02/03/23` +- `03/03/2023` +- `04/03/2023` +- `05/03/2023` +- `06.25.39` +- `08/03/2023` +- `09/03/2023` +- `10/03/2023` +- `11/03/2023` +- `23-02-1980` +- `23/02/1980` +- `25/02/2023` +- `26/02/2023` +- `26/02/23` +- `27/02/2023` +- `27/02/23` +- `27/03/2023` +- `28/02/2023` +- `31/03/2023` + + +================================================================================ +## Resume comparatif +================================================================================ + +| Caracteristique | CRH 23042753.pdf | trackare-01306172-23042753_01306172_23042753.pdf | +| --- | --- | --- | +| Pages | 4 | 28 | +| Tableaux | 8 | 56 | +| Headers | 29 | 242 | +| Longueur texte | 16994 chars | 73630 chars | \ No newline at end of file diff --git a/requirements.txt b/requirements.txt new file mode 100644 index 0000000..54774ad --- /dev/null +++ b/requirements.txt @@ -0,0 +1,8 @@ +pdfplumber>=0.10.0 +transformers>=4.35.0 +torch>=2.1.0 +regex>=2023.0 +pydantic>=2.5.0 +pytest>=7.4.0 +sentencepiece>=0.1.99,<0.2.0 +edsnlp[ml]>=0.17.0 diff --git a/src/__init__.py b/src/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/src/anonymization/__init__.py b/src/anonymization/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/src/anonymization/anonymizer.py b/src/anonymization/anonymizer.py new file mode 100644 index 0000000..18e3e97 --- /dev/null +++ b/src/anonymization/anonymizer.py @@ -0,0 +1,529 @@ +"""Pipeline d'anonymisation en 3 phases : regex → NER → balayage final.""" + +from __future__ import annotations + +import logging +import re +from typing import Any + +import regex as regex_mod + +from ..config import KEEP_ESTABLISHMENT_NAME, AnonymizationReport +from . import regex_patterns as patterns +from .entity_registry import EntityRegistry +from .ner_anonymizer import extract_person_entities + +logger = logging.getLogger(__name__) + +# Termes médicaux à ne pas anonymiser même s'ils ressemblent à des noms +MEDICAL_TERMS_WHITELIST = { + "balthazar", "sris", "ras", "atg", "pca", "bcy", "bcr", + "nac", "nacl", "asat", "alat", "ggt", "pal", "crp", "imc", + "en", "pa", "fc", "vvp", "ide", "iao", "mco", "urg", "bh", + "kt", "vbp", "iv", "ap", "am", "ok", "apres", "sous", + "normal", "normaux", "stable", "absent", "absente", + "date", "heure", "type", "note", "etat", "code", + "orale", "intraveineuse", "signé", "arrêté", "réalisé", + # Termes médicaux fréquents à ne jamais anonymiser + "cholécystectomie", "cholecystectomie", "cholangiographie", + "pancréatite", "pancreatite", "lithiase", "lithiases", + "cœlioscopie", "coelioscopie", "cholédoque", "choledoque", + "angiocholite", "cholécystite", "cholecystite", + "morphine", "paracétamol", "paracetamol", "cétirizine", "cetirizine", + "tramadol", "contramal", "acupan", "nefopam", + "service", "médecin", "medecin", "docteur", "chirurgie", + "gastro", "entérologie", "enterologie", "oncologie", + "hépato", "hepato", "digestif", "digestive", + "proctologue", "nutritive", "pôle", "pole", + "fonct", "fonctionnelle", "fonctionnelles", + "praticiens", "hospitaliers", "interne", "clinique", + "desc", "chef", + "secrétariat", "infirmier", "infirmière", + "unité", "hospitalisation", "urgences", + "coordonnateur", "fédération", "federation", + "navarre", "institut", "cancérologie", + "bordeaux", "strasbourg", "reims", "limoges", "clermont", "ferrand", + "palais", +} + +# Noms d'établissement à préserver si configuré +ESTABLISHMENT_NAMES = { + "centre hospitalier cote basque", + "centre hospitalier côte basque", + "ch-cotebasque", + "icance", +} + + +class Anonymizer: + """Anonymiseur 3 phases pour documents médicaux.""" + + def __init__(self, parsed_data: dict | None = None): + self.registry = EntityRegistry(whitelist=MEDICAL_TERMS_WHITELIST) + self.report = AnonymizationReport(source_file="") + self._parsed = parsed_data or {} + + # Pré-enregistrer les entités connues du parsing + self._register_parsed_entities() + + def anonymize(self, text: str) -> str: + """Exécute les 3 phases d'anonymisation.""" + text = self._phase1_regex(text) + text = self._phase2_ner(text) + text = self._phase3_sweep(text) + + self.report.total_replacements = ( + self.report.regex_replacements + + self.report.ner_replacements + + self.report.sweep_replacements + ) + return text + + # --- Phase 1 : Regex --- + + def _phase1_regex(self, text: str) -> str: + """Anonymisation par patterns regex.""" + count = 0 + + # CRH footer combiné (IPP + Episode sur la même ligne) + text, n = self._replace_crh_footer_ipp_episode(text) + count += n + + # Identifiants + text, n = self._replace_pattern( + text, patterns.IPP_PATTERN, "ipp", + group_handler=self._handle_multi_group, + ) + count += n + + text, n = self._replace_pattern( + text, patterns.EPISODE_PATTERN, "episode", + group_handler=self._handle_multi_group, + ) + count += n + + text, n = self._replace_pattern(text, patterns.NIR_PATTERN, "nir") + count += n + + text, n = self._replace_pattern(text, patterns.FINESS_PATTERN, "finess") + count += n + + text, n = self._replace_pattern(text, patterns.RPPS_PATTERN, "rpps") + count += n + + text, n = self._replace_pattern(text, patterns.BARCODE_PATTERN, "code_barre") + count += n + + text, n = self._replace_pattern(text, patterns.BARCODE_REPEAT_PATTERN, "code_barre") + count += n + + # Contact + text, n = self._replace_phone(text) + count += n + + text, n = self._replace_pattern( + text, patterns.EMAIL_PATTERN, "email", + skip_establishment_check=True, + ) + count += n + + text, n = self._replace_fax(text) + count += n + + # Adresses + text, n = self._replace_addresses(text) + count += n + + # Scanner les patterns d'adresse inline (MAISON xxx, QUARTIER xxx...) + text, n = self._replace_inline_addresses(text) + count += n + + # Dates de naissance + text, n = self._replace_date_naissance(text) + count += n + + # Lieu de naissance + text, n = self._replace_pattern( + text, patterns.LIEU_NAISSANCE_PATTERN, "lieu_naissance", + ) + count += n + + # Noms structurés + text, n = self._replace_structured_names(text) + count += n + + # Footers (Trackare et CRH) + text, n = self._replace_footer(text) + count += n + + self.report.regex_replacements = count + return text + + # --- Phase 2 : NER --- + + def _phase2_ner(self, text: str) -> str: + """Anonymisation par NER CamemBERT.""" + try: + ner_entities = extract_person_entities(text) + except Exception as e: + logger.warning("NER indisponible (%s), phase 2 ignorée.", e) + return text + + count = 0 + # Trier par position décroissante pour remplacer de la fin au début + ner_entities.sort(key=lambda e: e["start"], reverse=True) + + for ent in ner_entities: + word = ent["word"] + if self._is_whitelisted(word): + continue + if self._is_establishment(word): + continue + + # Vérifier si déjà anonymisé (contient des crochets) + if "[" in word and "]" in word: + continue + + pseudo = self.registry.get_replacement(word) + if pseudo is None: + pseudo = self.registry.register(word, "personne") + + text = text[:ent["start"]] + pseudo + text[ent["end"]:] + count += 1 + + self.report.entities_found.append({ + "original": word, + "replacement": pseudo, + "source": "ner", + "score": ent["score"], + }) + + self.report.ner_replacements = count + return text + + # --- Phase 3 : Balayage final --- + + def _phase3_sweep(self, text: str) -> str: + """Balayage brute-force des entités connues restantes.""" + count = 0 + all_entities = self.registry.get_all_entities() + + for original, replacement in sorted( + all_entities.items(), key=lambda x: len(x[0]), reverse=True + ): + if len(original) < 3: + continue + if self._is_whitelisted(original): + continue + + # Recherche insensible à la casse, avec frontières de mots + escaped = re.escape(original) + pattern = re.compile(r"\b" + escaped + r"\b", re.IGNORECASE) + matches = pattern.findall(text) + if matches: + text = pattern.sub(replacement, text) + count += len(matches) + + self.report.sweep_replacements = count + return text + + # --- Helpers --- + + def _register_parsed_entities(self) -> None: + """Pré-enregistre les entités extraites par les parsers.""" + patient = self._parsed.get("patient", {}) + + # Noms patient + for key in ("nom_prenom", "nom_naissance", "nom_complet"): + if patient.get(key): + self.registry.register(patient[key], "patient") + + # Adresse patient — enregistrer l'adresse complète et chaque mot significatif + if patient.get("adresse"): + self._register_address(patient["adresse"]) + if patient.get("ville"): + self.registry.register(patient["ville"], "adresse") + if patient.get("code_postal"): + cp = patient["code_postal"] + if patient.get("ville"): + self.registry.register(f"{cp} {patient['ville']}", "adresse") + if patient.get("lieu_naissance"): + self.registry.register(patient["lieu_naissance"], "lieu_naissance") + + # Médecins + for med in self._parsed.get("medecins", []): + self.registry.register(med, "medecin") + + # Scanner le texte brut pour les lignes d'adresse non captées par le parser + raw_text = self._parsed.get("contenu_medical", "") + # Pas disponible ici, on le fera via les patterns dans phase 1 + + # Contacts + for contact in self._parsed.get("contacts", []): + # Extraire les noms des contacts + names = re.findall( + r"([A-ZÉÈÊËÀÂa-zéèêëàâ]{2,}(?:\s+[A-ZÉÈÊËÀÂa-zéèêëàâ]{2,})+)", + contact, + ) + for name in names: + if not self._is_whitelisted(name): + self.registry.register(name, "contact") + + def _replace_pattern( + self, + text: str, + pattern: regex_mod.Pattern, + category: str, + group_handler: Any = None, + skip_establishment_check: bool = False, + ) -> tuple[str, int]: + """Remplace les matches d'un pattern.""" + count = 0 + for m in reversed(list(pattern.finditer(text))): + if group_handler: + matched_text = group_handler(m) + else: + matched_text = m.group(1) if m.lastindex else m.group(0) + + if not matched_text: + continue + + if not skip_establishment_check and self._is_establishment(matched_text): + continue + + pseudo = self.registry.register(matched_text, category) + + # Trouver le bon span à remplacer + if group_handler: + # Pour les multi-group, trouver quel groupe a matché + for i in range(1, (m.lastindex or 0) + 1): + if m.group(i) == matched_text: + start, end = m.span(i) + break + else: + start, end = m.span() + elif m.lastindex: + start, end = m.span(1) + else: + start, end = m.span() + + text = text[:start] + pseudo + text[end:] + count += 1 + + self.report.entities_found.append({ + "original": matched_text, + "replacement": pseudo, + "source": "regex", + "category": category, + }) + + return text, count + + def _handle_multi_group(self, m: regex_mod.Match) -> str | None: + """Gère les patterns avec plusieurs groupes alternatifs.""" + for i in range(1, (m.lastindex or 0) + 1): + if m.group(i): + return m.group(i) + return None + + def _replace_crh_footer_ipp_episode(self, text: str) -> tuple[str, int]: + """Remplace les IPP/épisode dans les footers CRH (format combiné).""" + count = 0 + for m in reversed(list(patterns.CRH_FOOTER_IPP_EPISODE.finditer(text))): + ipp = m.group(1) + episode = m.group(2) + pseudo_ipp = self.registry.register(ipp, "ipp") + pseudo_ep = self.registry.register(episode, "episode") + replacement = f"IPP {pseudo_ipp} / N° Episode {pseudo_ep}" + text = text[:m.start()] + replacement + text[m.end():] + count += 2 + return text, count + + def _replace_phone(self, text: str) -> tuple[str, int]: + """Remplace les numéros de téléphone.""" + count = 0 + for m in reversed(list(patterns.PHONE_PATTERN.finditer(text))): + phone = m.group(0) + # Ne pas anonymiser le standard de l'hôpital si configuré + normalized = phone.replace(".", " ").replace("-", " ") + if KEEP_ESTABLISHMENT_NAME and "05 59 44 35 35" in normalized: + continue + pseudo = self.registry.register(phone, "telephone") + text = text[:m.start()] + pseudo + text[m.end():] + count += 1 + return text, count + + def _replace_fax(self, text: str) -> tuple[str, int]: + """Remplace les numéros de fax.""" + count = 0 + for m in reversed(list(patterns.FAX_PATTERN.finditer(text))): + fax_num = m.group(1) + pseudo = self.registry.register(fax_num, "telephone") + text = text[:m.start(1)] + pseudo + text[m.end(1):] + count += 1 + return text, count + + def _replace_addresses(self, text: str) -> tuple[str, int]: + """Remplace les adresses.""" + count = 0 + + # Lignes d'adresse + for m in reversed(list(patterns.ADDRESS_LINE_PATTERN.finditer(text))): + addr = m.group(1).strip() + if len(addr) > 5 and not self._is_establishment(addr): + pseudo = self.registry.register(addr, "adresse") + text = text[:m.start(1)] + pseudo + text[m.end(1):] + count += 1 + + # Code postal + ville (sauf l'hôpital / Bayonne) + for m in reversed(list(patterns.CP_VILLE_PATTERN.finditer(text))): + ville = m.group(2).strip() + cp = m.group(1) + full = f"{cp} {ville}" + if self._is_establishment(full) or "BAYONNE" in ville.upper(): + if not KEEP_ESTABLISHMENT_NAME: + pseudo = self.registry.register(full, "adresse") + text = text[:m.start()] + pseudo + text[m.end():] + count += 1 + else: + pseudo = self.registry.register(full, "adresse") + text = text[:m.start()] + pseudo + text[m.end():] + count += 1 + + return text, count + + def _replace_inline_addresses(self, text: str) -> tuple[str, int]: + """Capture les adresses inline (MAISON xxx, QUARTIER xxx, LOTISSEMENT xxx).""" + count = 0 + # Pattern : MAISON/QUARTIER/LOTISSEMENT suivi de mots (noms propres de lieux) + inline_addr = re.compile( + r"((?:MAISON|QUARTIER|LOTISSEMENT|RESIDENCE|HAMEAU)\s+[A-ZÉÈÊËÀÂÄÙÛÜÔÖÎÏÇ][A-ZÉÈÊËÀÂÄÙÛÜÔÖÎÏÇa-zéèêëàâäùûüôöîïç\s]+?)(?=\n|$|Dr|\d{5}|Chef|médical|coordonnateur)", + re.IGNORECASE, + ) + for m in reversed(list(inline_addr.finditer(text))): + addr = m.group(1).strip() + if len(addr) > 5: + self._register_address(addr) + pseudo = self.registry.register(addr, "adresse") + text = text[:m.start(1)] + pseudo + text[m.end(1):] + count += 1 + return text, count + + def _replace_date_naissance(self, text: str) -> tuple[str, int]: + """Remplace les dates de naissance.""" + count = 0 + for m in reversed(list(patterns.DATE_NAISSANCE_PATTERN.finditer(text))): + date_str = m.group(1) + pseudo = self.registry.register(date_str, "date_naissance") + text = text[:m.start(1)] + pseudo + text[m.end(1):] + count += 1 + return text, count + + def _replace_structured_names(self, text: str) -> tuple[str, int]: + """Remplace les noms détectés par patterns structurels.""" + count = 0 + + # CRH footer patient : "Patient(e) : NOM PRENOM Né(e)" + for m in reversed(list(patterns.CRH_FOOTER_PATIENT_PATTERN.finditer(text))): + name = m.group(1).strip() + if len(name) >= 3 and not self._is_whitelisted(name): + pseudo = self.registry.register(name, "patient") + text = text[:m.start(1)] + pseudo + text[m.end(1):] + count += 1 + + # Patient names + for pat in [patterns.PATIENT_NAME_PATTERN, patterns.CIVILITE_NAME_PATTERN]: + for m in reversed(list(pat.finditer(text))): + name = m.group(1).strip() + if len(name) >= 3 and not self._is_whitelisted(name): + pseudo = self.registry.register(name, "patient") + text = text[:m.start(1)] + pseudo + text[m.end(1):] + count += 1 + + # Doctor names (tous les patterns) + for pat in [patterns.DR_NAME_PATTERN, patterns.MEDECIN_COURANT_PATTERN, + patterns.MEDECIN_TRAITANT_PATTERN, patterns.MEDECIN_PEC_PATTERN]: + for m in reversed(list(pat.finditer(text))): + name = m.group(1).strip() + if len(name) >= 3 and not self._is_whitelisted(name): + pseudo = self.registry.register(name, "medecin") + text = text[:m.start(1)] + pseudo + text[m.end(1):] + count += 1 + + # Note authors (with date suffix) + for m in reversed(list(patterns.NOTE_AUTHOR_DATE_PATTERN.finditer(text))): + name = m.group(1).strip() + if len(name) >= 3 and not self._is_whitelisted(name): + pseudo = self.registry.register(name, "soignant") + text = text[:m.start(1)] + pseudo + text[m.end(1):] + count += 1 + + # Note authors (Prénom NOM pattern, sans date) + for m in reversed(list(patterns.NOTE_AUTHOR_PATTERN.finditer(text))): + name = m.group(1).strip() + if len(name) >= 3 and not self._is_whitelisted(name): + pseudo = self.registry.register(name, "soignant") + text = text[:m.start(1)] + pseudo + text[m.end(1):] + count += 1 + + # IAO + for m in reversed(list(patterns.IAO_PATTERN.finditer(text))): + name = m.group(1).strip() + if len(name) >= 3 and not self._is_whitelisted(name): + pseudo = self.registry.register(name, "soignant") + text = text[:m.start(1)] + pseudo + text[m.end(1):] + count += 1 + + # Rédigé par + for m in reversed(list(patterns.REDIGE_PAR_PATTERN.finditer(text))): + name = m.group(1).strip() + if len(name) >= 3 and not self._is_whitelisted(name): + pseudo = self.registry.register(name, "soignant") + text = text[:m.start(1)] + pseudo + text[m.end(1):] + count += 1 + + # Staff names from header + for m in reversed(list(patterns.STAFF_NAME_PATTERN.finditer(text))): + name = m.group(1).strip() if m.group(1) else "" + if len(name) >= 3 and not self._is_whitelisted(name): + pseudo = self.registry.register(name, "soignant") + text = text[:m.start(1)] + pseudo + text[m.end(1):] + count += 1 + + self.report.regex_replacements += count + return text, count + + def _replace_footer(self, text: str) -> tuple[str, int]: + """Remplace les infos patient dans les footers (Trackare et CRH).""" + count = 0 + for m in reversed(list(patterns.FOOTER_PATIENT_PATTERN.finditer(text))): + name = m.group(1).strip() + pseudo = self.registry.register(name, "patient") + text = text[:m.start(1)] + pseudo + text[m.end(1):] + count += 1 + return text, count + + def _register_address(self, addr: str) -> None: + """Enregistre une adresse et ses mots significatifs.""" + self.registry.register(addr, "adresse") + skip_words = { + "maison", "quartier", "lotissement", "rue", "avenue", + "boulevard", "chemin", "place", "route", "résidence", + "hameau", "lieu", "dit", "impasse", "allée", "batiment", + "bp", "cedex", + } + for word in addr.split(): + word_clean = word.strip(",.") + if len(word_clean) >= 4 and word_clean.lower() not in skip_words: + self.registry.register(word_clean, "adresse") + + def _is_whitelisted(self, text: str) -> bool: + """Vérifie si un terme est dans la whitelist médicale.""" + return text.lower().strip() in MEDICAL_TERMS_WHITELIST + + def _is_establishment(self, text: str) -> bool: + """Vérifie si le texte fait référence à l'établissement.""" + if not KEEP_ESTABLISHMENT_NAME: + return False + text_lower = text.lower().strip() + return any(est in text_lower for est in ESTABLISHMENT_NAMES) diff --git a/src/anonymization/entity_registry.py b/src/anonymization/entity_registry.py new file mode 100644 index 0000000..f94407b --- /dev/null +++ b/src/anonymization/entity_registry.py @@ -0,0 +1,86 @@ +"""Registre d'entités pour assurer la cohérence des remplacements.""" + +from __future__ import annotations + +import re +from collections import defaultdict + + +class EntityRegistry: + """Maintient un mapping cohérent entre entités réelles et pseudonymes.""" + + def __init__(self, whitelist: set[str] | None = None): + self._counters: dict[str, int] = defaultdict(int) + self._mappings: dict[str, str] = {} + self._category_map: dict[str, str] = {} + self._whitelist: set[str] = whitelist or set() + + def register(self, entity: str, category: str) -> str: + """Enregistre une entité et retourne son pseudonyme. + + Si l'entité est déjà connue, retourne le même pseudonyme. + """ + key = self._normalize(entity) + if not key: + return entity + + if key in self._mappings: + return self._mappings[key] + + self._counters[category] += 1 + count = self._counters[category] + + pseudo = self._generate_pseudo(category, count) + self._mappings[key] = pseudo + self._category_map[key] = category + + # Enregistrer aussi les sous-parties du nom (sauf termes médicaux) + parts = key.split() + if len(parts) > 1: + for part in parts: + if len(part) >= 3 and part not in self._whitelist: + part_key = part + if part_key not in self._mappings: + self._mappings[part_key] = f"[{category.upper()}]" + + return pseudo + + def get_replacement(self, entity: str) -> str | None: + """Retourne le pseudonyme d'une entité connue, ou None.""" + key = self._normalize(entity) + return self._mappings.get(key) + + def get_all_entities(self) -> dict[str, str]: + """Retourne tous les mappings entity → pseudo.""" + return dict(self._mappings) + + def get_all_original_names(self) -> list[str]: + """Retourne toutes les entités originales (noms avant normalisation).""" + return list(self._mappings.keys()) + + def _normalize(self, text: str) -> str: + """Normalise un nom pour lookup : minuscules, espaces simplifiés.""" + text = text.strip() + text = re.sub(r"\s+", " ", text) + return text.lower() + + def _generate_pseudo(self, category: str, count: int) -> str: + """Génère un pseudonyme selon la catégorie.""" + labels = { + "patient": f"[PATIENT_{count}]", + "medecin": f"[MEDECIN_{count}]", + "soignant": f"[SOIGNANT_{count}]", + "contact": f"[CONTACT_{count}]", + "personne": f"[PERSONNE_{count}]", + "ipp": f"[IPP_{count}]", + "episode": f"[EPISODE_{count}]", + "nir": f"[NIR_{count}]", + "telephone": f"[TEL_{count}]", + "email": f"[EMAIL_{count}]", + "adresse": f"[ADRESSE_{count}]", + "date_naissance": f"[DATE_NAISS_{count}]", + "lieu_naissance": f"[LIEU_NAISS_{count}]", + "finess": f"[FINESS]", + "code_barre": f"[CODE_BARRE_{count}]", + } + return labels.get(category, f"[{category.upper()}_{count}]") diff --git a/src/anonymization/ner_anonymizer.py b/src/anonymization/ner_anonymizer.py new file mode 100644 index 0000000..ea42b27 --- /dev/null +++ b/src/anonymization/ner_anonymizer.py @@ -0,0 +1,95 @@ +"""NER via CamemBERT pour détecter les noms en texte libre.""" + +from __future__ import annotations + +import logging +from typing import TYPE_CHECKING + +from ..config import NER_CONFIDENCE_THRESHOLD, NER_MODEL + +if TYPE_CHECKING: + from transformers import Pipeline + +logger = logging.getLogger(__name__) + +_pipeline: Pipeline | None = None + + +def _get_pipeline() -> Pipeline: + """Charge le modèle NER (lazy loading).""" + global _pipeline + if _pipeline is None: + logger.info("Chargement du modèle NER %s...", NER_MODEL) + from transformers import AutoModelForTokenClassification, AutoTokenizer, pipeline + + tokenizer = AutoTokenizer.from_pretrained(NER_MODEL) + model = AutoModelForTokenClassification.from_pretrained(NER_MODEL) + _pipeline = pipeline( + "ner", + model=model, + tokenizer=tokenizer, + aggregation_strategy="simple", + ) + logger.info("Modèle NER chargé.") + return _pipeline + + +def extract_person_entities(text: str) -> list[dict]: + """Extrait les entités de type PER (personnes) du texte. + + Retourne une liste de dicts avec 'word', 'start', 'end', 'score'. + """ + pipe = _get_pipeline() + + # CamemBERT a une limite de tokens — découper en chunks + chunks = _split_text(text, max_chars=500) + entities: list[dict] = [] + offset = 0 + + for chunk in chunks: + results = pipe(chunk) + for ent in results: + if ent["entity_group"] == "PER" and ent["score"] >= NER_CONFIDENCE_THRESHOLD: + word = ent["word"].strip() + if len(word) >= 2: + entities.append({ + "word": word, + "start": ent["start"] + offset, + "end": ent["end"] + offset, + "score": float(ent["score"]), + }) + offset += len(chunk) + + return _deduplicate(entities) + + +def _split_text(text: str, max_chars: int = 500) -> list[str]: + """Découpe le texte en chunks de taille raisonnable aux limites de phrases.""" + if len(text) <= max_chars: + return [text] + + chunks: list[str] = [] + start = 0 + while start < len(text): + end = start + max_chars + if end < len(text): + # Chercher la fin de phrase la plus proche + for sep in ["\n", ". ", ", ", " "]: + pos = text.rfind(sep, start, end) + if pos > start: + end = pos + len(sep) + break + chunks.append(text[start:end]) + start = end + + return chunks + + +def _deduplicate(entities: list[dict]) -> list[dict]: + """Déduplique les entités par mot (garde le score le plus élevé).""" + seen: dict[str, dict] = {} + for ent in entities: + key = ent["word"].lower() + if key not in seen or ent["score"] > seen[key]["score"]: + seen[key] = ent + return list(seen.values()) diff --git a/src/anonymization/regex_patterns.py b/src/anonymization/regex_patterns.py new file mode 100644 index 0000000..81c3981 --- /dev/null +++ b/src/anonymization/regex_patterns.py @@ -0,0 +1,194 @@ +"""Patterns regex pour la détection de données personnelles dans les documents médicaux FR.""" + +from __future__ import annotations + +import regex + +# --- Identifiants --- + +# IPP : séquence de 6-10 chiffres après "IPP" (avec ou sans :) +IPP_PATTERN = regex.compile( + r"(?:IPP\s*[:=]?\s*)(\d{6,10})" + r"|" + r"\((\d{8})\s*\)", # Footer "(01306172 )" +) + +# Numéro d'épisode (toutes les variantes) +EPISODE_PATTERN = regex.compile( + r"(?:Episode\s*(?:No|N°|N\.?)\s*[:=]?\s*)(\d{6,10})" + r"|" + r"(?:N°\s*Episode\s+)(\d{6,10})", +) + +# NIR / Numéro de sécurité sociale (15 chiffres) +NIR_PATTERN = regex.compile(r"\b([12]\d{2}(?:0[1-9]|1[0-2])\d{2,3}\d{6}\s?\d{2})\b") + +# FINESS (9 chiffres, souvent précédé de "Finess") +FINESS_PATTERN = regex.compile(r"(?:Finess|FINESS)\s*[:\s]*\*?(\d{9})\*?") + +# RPPS (11 chiffres) +RPPS_PATTERN = regex.compile(r"RPPS\s*[:=]?\s*(\d{11})") + +# Code-barres (nombre entre astérisques) +BARCODE_PATTERN = regex.compile(r"\*(\d{9,15})\*") + +# Numéro isolé après code-barres (même numéro répété sans astérisques) +BARCODE_REPEAT_PATTERN = regex.compile(r"\*\d{9,15}\*\s*\n(\d{9,15})") + +# --- Contact --- + +# Téléphones FR : 10 chiffres avec séparateurs variés +PHONE_PATTERN = regex.compile( + r"\b(0[1-9])[\s.\-]?(\d{2})[\s.\-]?(\d{2})[\s.\-]?(\d{2})[\s.\-]?(\d{2})\b" +) + +# Emails (y compris @ch-cotebasque.fr qui contiennent des initiales de soignants) +EMAIL_PATTERN = regex.compile( + r"\b[a-zA-Z0-9._%+\-]+@[a-zA-Z0-9.\-]+\.[a-zA-Z]{2,}\b" +) + +# Fax +FAX_PATTERN = regex.compile( + r"Fax\s*:\s*(0[1-9][\s.\-]?\d{2}[\s.\-]?\d{2}[\s.\-]?\d{2}[\s.\-]?\d{2})" +) + +# --- Adresses --- + +# Code postal + ville (uniquement les ALL_CAPS après 5 digits) +CP_VILLE_PATTERN = regex.compile( + r"\b(\d{5})\s+([A-ZÉÈÊËÀÂÄÙÛÜÔÖÎÏÇ][A-ZÉÈÊËÀÂÄÙÛÜÔÖÎÏÇ\s\-]{2,})\b" +) + +# Lignes d'adresse avec mots-clés (y compris noms propres basques/locaux) +ADDRESS_LINE_PATTERN = regex.compile( + r"^((?:(?:\d+\s*,?\s*)?(?:MAISON|LOTISSEMENT|QUARTIER|RUE|AVENUE|BOULEVARD|IMPASSE|CHEMIN|PLACE|ALLEE|ALLÉE|ROUTE|LIEU[\s-]DIT|RESIDENCE|RÉSIDENCE|BATIMENT|BÂTIMENT|HAMEAU)[\s\w\-''ÉÈÊËÀÂÄÙÛÜÔÖÎÏÇ]+))$", + regex.MULTILINE | regex.IGNORECASE, +) + +# Adresse complète multi-ligne (après nom patient dans CRH/Trackare) +ADDRESS_BLOCK_PATTERN = regex.compile( + r"(?:Adresse\s*:\s*)(.+?)(?:\s+Ville|\n)", +) + +# --- Dates de naissance --- + +# Toutes les variantes : "né(e) le", "née le", "né le", "Né(e) le", "Date de naissance:" +DATE_NAISSANCE_PATTERN = regex.compile( + r"(?:[Nn][ée]+(?:\(e\))?\s+le\s+|Date de naissance\s*[:=]?\s*)(\d{2}/\d{2}/\d{4})" +) + +# --- Noms structurés --- + +# Footer CRH : "Patient(e) : NOM PRENOM Né(e) le" +CRH_FOOTER_PATIENT_PATTERN = regex.compile( + r"Patient(?:\(e\))?\s*:\s*([A-ZÉÈÊËÀÂÄÙÛÜÔÖÎÏÇ][A-ZÉÈÊËÀÂÄÙÛÜÔÖÎÏÇa-zéèêëàâäùûüôöîïç\s\-]+?)\s+(?:Né|né)" +) + +# Footer CRH : "IPP NNNNNNNN / N° Episode NNNNNNNN" +CRH_FOOTER_IPP_EPISODE = regex.compile( + r"IPP\s+(\d{6,10})\s*/\s*N°\s*Episode\s+(\d{6,10})" +) + +# Après "Nom de naissance:", "Nom et Prénom:", "Patient(e):" +PATIENT_NAME_PATTERN = regex.compile( + r"(?:Patient(?:\(e\))?\s*:\s*|Nom de naissance\s*:\s*|Nom et Prénom\s*:\s*)" + r"([A-ZÉÈÊËÀÂÄÙÛÜÔÖÎÏÇ][A-ZÉÈÊËÀÂÄÙÛÜÔÖÎÏÇa-zéèêëàâäùûüôöîïç\s\-]+)", +) + +# "MME/Mme/M./MR/Madame/Monsieur" suivi du nom +CIVILITE_NAME_PATTERN = regex.compile( + r"(?:MME|Mme|Madame|M\.|Mr|MR|Monsieur)\s+([A-ZÉÈÊËÀÂÄÙÛÜÔÖÎÏÇ][A-ZÉÈÊËÀÂÄÙÛÜÔÖÎÏÇa-zéèêëàâäùûüôöîïç\s\.\-]+?)(?:\s+[Nn]é|\s+Date|\n|,)" +) + +# "DR." / "Dr" / "Docteur" suivi du nom du médecin +DR_NAME_PATTERN = regex.compile( + r"(?:DR\.?|Dr\.?|Docteur)\s+([A-ZÉÈÊËÀÂÄÙÛÜÔÖÎÏÇ][A-ZÉÈÊËÀÂÄÙÛÜÔÖÎÏÇa-zéèêëàâäùûüôöîïç\.\-]+(?:\s+[A-ZÉÈÊËÀÂÄÙÛÜÔÖÎÏÇa-zéèêëàâäùûüôöîïç\.\-]+){0,2})" +) + +# "Rédigé par" en pied de page CRH +REDIGE_PAR_PATTERN = regex.compile( + r"Rédigé par\s*:?\s*(.+?)(?:\n|$)" +) + +# "Liste des destinataires:" suivi de noms +DESTINATAIRE_PATTERN = regex.compile( + r"(?:Madame|Monsieur|DR\.?|Dr\.?)\s+([A-ZÉÈÊËÀÂÄÙÛÜÔÖÎÏÇ][A-ZÉÈÊËÀÂÄÙÛÜÔÖÎÏÇa-zéèêëàâäùûüôöîïç\s\.\-]+?)(?:\n|$)" +) + +# Noms d'auteurs dans Trackare : "Note d'évolution Prénom NOM DD/MM/YYYY" +NOTE_AUTHOR_DATE_PATTERN = regex.compile( + r"(?:Note d'évolution|Note IDE|Histoire de la maladie|Conclusion Obs\.?\s*médicales?)\s+" + r"(?:DR\.?\s+)?" + r"([A-ZÉÈÊËÀÂÄÙÛÜÔÖÎÏÇa-zéèêëàâäùûüôöîïç\.\-]+(?:\s+[A-ZÉÈÊËÀÂÄÙÛÜÔÖÎÏÇa-zéèêëàâäùûüôöîïç\.\-]+)+)" + r"\s+\d{2}/\d{2}/\d{4}", +) + +# Noms d'auteurs Trackare sans date immédiate : "Note IDE Prénom NOM texte..." +# Le nom est toujours un Prénom (Capitalized) suivi d'un NOM (ALL CAPS) +NOTE_AUTHOR_PATTERN = regex.compile( + r"(?:Note d'évolution|Note IDE|Histoire de la maladie|Conclusion Obs\.?\s*médicales?)\s+" + r"(?:DR\.?\s+)?" + r"([A-ZÉÈÊËÀÂÄÙÛÜÔÖÎÏÇ][a-zéèêëàâäùûüôöîïç]+\s+[A-ZÉÈÊËÀÂÄÙÛÜÔÖÎÏÇ][A-ZÉÈÊËÀÂÄÙÛÜÔÖÎÏÇ\-]{2,})" +) + +# Footer Trackare : "Patient: NOM PRENOM - Date de naissance: ..." +FOOTER_PATIENT_PATTERN = regex.compile( + r"Patient\s*:\s*([A-ZÉÈÊËÀÂÄÙÛÜÔÖÎÏÇ][A-ZÉÈÊËÀÂÄÙÛÜÔÖÎÏÇa-zéèêëàâäùûüôöîïç\s\-]+?)\s*-\s*Date de naissance" +) + +# "Médecin traitant" block +MEDECIN_TRAITANT_PATTERN = regex.compile( + r"Médecin traitant\s*\n\s*(?:Nom\s+Adresse\s+.*\n)?\s*(?:DR\.?\s+)?(.+?)(?:\s+(?:Lotissement|Rue|Avenue|\d{5}))", + regex.IGNORECASE, +) + +# "Médecin courant:" +MEDECIN_COURANT_PATTERN = regex.compile( + r"Médecin courant\s*:\s*(?:DR\.?\s+)?([A-ZÉÈÊËÀÂÄÙÛÜÔÖÎÏÇa-zéèêëàâäùûüôöîïç\.\-]+(?:\s+[A-ZÉÈÊËÀÂÄÙÛÜÔÖÎÏÇa-zéèêëàâäùûüôöîïç\.\-]+)*)" +) + +# "Médecin de la prise en charge médicale NOM" +MEDECIN_PEC_PATTERN = regex.compile( + r"(?:Médecin de (?:la )?(?:prise en charge|décision)\s+médicale)\s+([A-ZÉÈÊËÀÂÄÙÛÜÔÖÎÏÇa-zéèêëàâäùûüôöîïç\.\-]+(?:\s+[A-ZÉÈÊËÀÂÄÙÛÜÔÖÎÏÇa-zéèêëàâäùûüôöîïç\.\-]+)*)" +) + +# IAO +IAO_PATTERN = regex.compile( + r"IAO\s+([A-ZÉÈÊËÀÂÄÙÛÜÔÖÎÏÇa-zéèêëàâäùûüôöîïç\.\-]+(?:\s+[A-ZÉÈÊËÀÂÄÙÛÜÔÖÎÏÇa-zéèêëàâäùûüôöîïç\.\-]+)*)" +) + +# Cadre / personnel nommé dans l'en-tête CRH +STAFF_NAME_PATTERN = regex.compile( + r"(?:Mme|M\.)\s+([A-ZÉÈÊËÀÂÄÙÛÜÔÖÎÏÇ][A-Za-zéèêëàâäùûüôöîïç\.\-]+\s+[A-ZÉÈÊËÀÂÄÙÛÜÔÖÎÏÇ][A-Za-zéèêëàâäùûüôöîïç\.\-]+)" +) + +# Lieu de naissance +LIEU_NAISSANCE_PATTERN = regex.compile( + r"Lieu de naissance\s*:\s*(.+?)(?:\n|$)" +) + +# Auteurs de prescription dans Trackare +PRESCRIPTION_AUTHOR_PATTERN = regex.compile( + r"(?:Presc\.\s*de\s*Sortie|Normal|Signé|Arrêté|Réalisé)\s+([A-ZÉÈÊËÀÂÄÙÛÜÔÖÎÏÇ][a-zéèêëàâäùûüôöîïç]+(?:\s+[A-ZÉÈÊËÀÂÄÙÛÜÔÖÎÏÇ][A-Za-zéèêëàâäùûüôöîïç\-]+)+)" +) + + +def get_all_name_patterns(): + """Retourne la liste des patterns qui capturent des noms de personnes.""" + return [ + PATIENT_NAME_PATTERN, + CIVILITE_NAME_PATTERN, + DR_NAME_PATTERN, + REDIGE_PAR_PATTERN, + NOTE_AUTHOR_DATE_PATTERN, + NOTE_AUTHOR_PATTERN, + FOOTER_PATIENT_PATTERN, + CRH_FOOTER_PATIENT_PATTERN, + MEDECIN_TRAITANT_PATTERN, + MEDECIN_COURANT_PATTERN, + MEDECIN_PEC_PATTERN, + IAO_PATTERN, + STAFF_NAME_PATTERN, + DESTINATAIRE_PATTERN, + PRESCRIPTION_AUTHOR_PATTERN, + ] diff --git a/src/config.py b/src/config.py new file mode 100644 index 0000000..083ed3a --- /dev/null +++ b/src/config.py @@ -0,0 +1,99 @@ +"""Configuration globale et modèles de données pour le pipeline T2A.""" + +from __future__ import annotations + +from pathlib import Path +from typing import Optional + +from pydantic import BaseModel, Field + + +# --- Chemins --- + +BASE_DIR = Path(__file__).resolve().parent.parent +INPUT_DIR = BASE_DIR / "input" +OUTPUT_DIR = BASE_DIR / "output" +ANONYMIZED_DIR = OUTPUT_DIR / "anonymized" +STRUCTURED_DIR = OUTPUT_DIR / "structured" +REPORTS_DIR = OUTPUT_DIR / "reports" + +for d in (INPUT_DIR, ANONYMIZED_DIR, STRUCTURED_DIR, REPORTS_DIR): + d.mkdir(parents=True, exist_ok=True) + + +# --- Configuration anonymisation --- + +KEEP_ESTABLISHMENT_NAME = True +NER_MODEL = "Jean-Baptiste/camembert-ner" +NER_CONFIDENCE_THRESHOLD = 0.80 + + +# --- Modèles de données CIM-10 --- + + +class Sejour(BaseModel): + sexe: Optional[str] = None + age: Optional[int] = None + date_entree: Optional[str] = None + date_sortie: Optional[str] = None + duree_sejour: Optional[int] = None + mode_entree: Optional[str] = None + mode_sortie: Optional[str] = None + imc: Optional[float] = None + poids: Optional[float] = None + taille: Optional[float] = None + + +class Diagnostic(BaseModel): + texte: str + cim10_suggestion: Optional[str] = None + + +class ActeCCAM(BaseModel): + texte: str + code_ccam_suggestion: Optional[str] = None + date: Optional[str] = None + + +class Traitement(BaseModel): + medicament: str + posologie: Optional[str] = None + code_atc: Optional[str] = None + + +class BiologieCle(BaseModel): + test: str + valeur: Optional[str] = None + anomalie: Optional[bool] = None + + +class Imagerie(BaseModel): + type: str + conclusion: Optional[str] = None + score: Optional[str] = None + + +class DossierMedical(BaseModel): + source_file: str = "" + document_type: str = "" + sejour: Sejour = Field(default_factory=Sejour) + diagnostic_principal: Optional[Diagnostic] = None + diagnostics_associes: list[Diagnostic] = Field(default_factory=list) + actes_ccam: list[ActeCCAM] = Field(default_factory=list) + antecedents: list[str] = Field(default_factory=list) + traitements_sortie: list[Traitement] = Field(default_factory=list) + biologie_cle: list[BiologieCle] = Field(default_factory=list) + imagerie: list[Imagerie] = Field(default_factory=list) + complications: list[str] = Field(default_factory=list) + + +# --- Rapport d'anonymisation --- + + +class AnonymizationReport(BaseModel): + source_file: str + total_replacements: int = 0 + regex_replacements: int = 0 + ner_replacements: int = 0 + sweep_replacements: int = 0 + entities_found: list[dict] = Field(default_factory=list) diff --git a/src/extraction/__init__.py b/src/extraction/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/src/extraction/crh_parser.py b/src/extraction/crh_parser.py new file mode 100644 index 0000000..0445faf --- /dev/null +++ b/src/extraction/crh_parser.py @@ -0,0 +1,129 @@ +"""Parsing des Comptes Rendus d'Hospitalisation (CRH).""" + +from __future__ import annotations + +import re + + +def parse_crh(text: str) -> dict: + """Parse un CRH et retourne les sections structurées.""" + result: dict = { + "type": "crh", + "patient": {}, + "sejour": {}, + "medecins": [], + "contenu_medical": "", + "sections": {}, + } + + _extract_patient_info(text, result) + _extract_sejour_info(text, result) + _extract_medecins(text, result) + _extract_medical_content(text, result) + + return result + + +def _extract_patient_info(text: str, result: dict) -> None: + """Extrait les informations patient du CRH.""" + # "MME NARBAIS AUDREY" ou "M. NOM PRENOM" + m = re.search( + r"(?:MME|M\.|MR)\s+([A-ZÉÈÊËÀÂÄÙÛÜÔÖÎÏÇ][A-ZÉÈÊËÀÂÄÙÛÜÔÖÎÏÇa-zéèêëàâäùûüôöîïç\- ]+)", + text[:2000], + ) + if m: + result["patient"]["nom_complet"] = m.group(1).strip() + + # Adresse sous le nom patient — capturer les lignes entre le nom et le CP+Ville + addr_match = re.search( + r"(?:MME|M\.|MR|Madame|Monsieur)\s+[A-ZÉÈÊËÀÂ][A-ZÉÈÊËÀÂa-zéèêëàâ\s\-]+\n((?:.*\n){1,4}?\d{5}\s+[A-Z][A-Z\s\-]+)", + text[:3000], + ) + if addr_match: + result["patient"]["adresse"] = addr_match.group(1).strip() + + # "née le DD/MM/YYYY" ou "né le DD/MM/YYYY" + m = re.search(r"n[ée]+\s+le\s+(\d{2}/\d{2}/\d{4})", text) + if m: + result["patient"]["date_naissance"] = m.group(1) + + # Sexe depuis le titre + if re.search(r"\bMME\b", text[:2000]): + result["patient"]["sexe"] = "F" + elif re.search(r"\b(?:M\.|MR)\b", text[:2000]): + result["patient"]["sexe"] = "M" + + # "Votre patiente" / "Votre patient" + if "patiente" in text[:3000].lower(): + result["patient"]["sexe"] = "F" + elif "patient" in text[:3000].lower(): + result["patient"].setdefault("sexe", "M") + + +def _extract_sejour_info(text: str, result: dict) -> None: + """Extrait les dates et motif de séjour.""" + # "du DD/MM/YYYY au DD/MM/YYYY" + m = re.search( + r"du\s+(\d{2}/\d{2}/\d{4})\s+au\s+(\d{2}/\d{2}/\d{4})", text + ) + if m: + result["sejour"]["date_entree"] = m.group(1) + result["sejour"]["date_sortie"] = m.group(2) + + # "pour le motif suivant:" ou "pour le motif suivant :\n..." + m = re.search( + r"pour\s+le\s+motif\s+suivant\s*[:\s]*\n?(.*?)(?:\n\n|\.\s+[A-Z])", + text, + re.DOTALL, + ) + if m: + result["sejour"]["motif"] = m.group(1).strip() + + +def _extract_medecins(text: str, result: dict) -> None: + """Extrait les noms de médecins mentionnés.""" + # "Dr NOM" ou "DR NOM" ou "Dr. NOM" ou "Docteur NOM" ou "Dr F. NOM" + for m in re.finditer( + r"(?:Dr\.?|DR\.?|Docteur)\s+(?:[A-Z]\.\s+)?([A-ZÉÈÊËÀÂ][A-ZÉÈÊËÀÂa-zéèêëàâ\-]+(?:\s+[A-ZÉÈÊËÀÂ][A-ZÉÈÊËÀÂa-zéèêëàâ\-]+)?)", + text, + ): + name = m.group(1).strip() + if name not in result["medecins"] and len(name) > 2: + result["medecins"].append(name) + + +def _extract_medical_content(text: str, result: dict) -> None: + """Extrait le contenu médical principal.""" + # Chercher après "Mon cher confrère," et les infos d'hospitalisation + m = re.search( + r"(?:motif\s+suivant\s*[:\s]*\n?)(.*?)(?:Rédigé par|Cordialement|Confraternellement|Dr\s+\w+\s*$)", + text, + re.DOTALL, + ) + if m: + result["contenu_medical"] = m.group(1).strip() + else: + # Fallback : prendre tout après "Mon cher confrère" + m = re.search( + r"Mon cher confrère,?\s*\n(.*?)(?:Rédigé par|$)", + text, + re.DOTALL, + ) + if m: + result["contenu_medical"] = m.group(1).strip() + + # Sections spécifiques + section_patterns = [ + ("motif_hospitalisation", r"(?:motif\s+(?:d'hospitalisation|suivant))\s*[:\s]*\n?(.*?)(?=\n\s*(?:Antécédents|Histoire|Examen|Au total|Devenir|TTT)|$)"), + ("antecedents", r"(?:Antécédents?)\s*[:\s]*\n?(.*?)(?=\n\s*(?:Histoire|Examen|Traitement|Au total|Devenir)|$)"), + ("histoire_maladie", r"(?:Histoire de la maladie)\s*[:\s]*\n?(.*?)(?=\n\s*(?:Examen|Biologie|Au total|Devenir)|$)"), + ("examen_clinique", r"(?:Examen clinique)\s*[:\s]*\n?(.*?)(?=\n\s*(?:Biologie|Imagerie|Au total|Devenir)|$)"), + ("conclusion", r"(?:Au total|Conclusion)\s*[:\s]*\n?(.*?)(?=\n\s*(?:Devenir|TTT|Traitement)|$)"), + ("traitement_sortie", r"(?:TTT de sortie|Traitement de sortie)\s*[:\s]*\n?(.*?)(?=\n\s*(?:Devenir|Rédigé|Cordialement)|$)"), + ("devenir", r"(?:Devenir)\s*[:\s]*\n?(.*?)(?=\n\s*(?:TTT|Traitement|Rédigé|Cordialement)|$)"), + ] + + for key, pattern in section_patterns: + m = re.search(pattern, text, re.DOTALL | re.IGNORECASE) + if m: + result["sections"][key] = m.group(1).strip() diff --git a/src/extraction/document_classifier.py b/src/extraction/document_classifier.py new file mode 100644 index 0000000..c0de561 --- /dev/null +++ b/src/extraction/document_classifier.py @@ -0,0 +1,45 @@ +"""Détection du type de document : CRH vs Trackare.""" + +from __future__ import annotations + + +def classify(text: str) -> str: + """Classifie un document extrait en CRH ou Trackare. + + Retourne "crh" ou "trackare". + """ + text_lower = text[:3000].lower() + + trackare_markers = [ + "dossier patient", + "détails des patients", + "détails épisode", + "liste des contacts", + "notes paramédicales", + "signes vitaux", + "traitements médicamenteux", + "observations médicales", + ] + trackare_score = sum(1 for m in trackare_markers if m in text_lower) + + crh_markers = [ + "mon cher confrère", + "cher confrère", + "compte rendu d'hospitalisation", + "compte-rendu", + "service de gastro", + "pôle spécialités", + "votre patient", + ] + crh_score = sum(1 for m in crh_markers if m in text_lower) + + if trackare_score >= 2: + return "trackare" + if crh_score >= 2: + return "crh" + + # Heuristique : Trackare contient des tableaux avec IPP + if "ipp:" in text_lower or "episode no:" in text_lower: + return "trackare" + + return "crh" diff --git a/src/extraction/pdf_extractor.py b/src/extraction/pdf_extractor.py new file mode 100644 index 0000000..547e8cc --- /dev/null +++ b/src/extraction/pdf_extractor.py @@ -0,0 +1,36 @@ +"""Extraction de texte et tableaux depuis les PDF via pdfplumber.""" + +from __future__ import annotations + +from pathlib import Path + +import pdfplumber + + +def extract_text(pdf_path: str | Path) -> str: + """Extrait le texte de toutes les pages d'un PDF.""" + pages_text: list[str] = [] + with pdfplumber.open(pdf_path) as pdf: + for page in pdf.pages: + text = page.extract_text() or "" + pages_text.append(text) + return "\n\n".join(pages_text) + + +def extract_pages(pdf_path: str | Path) -> list[str]: + """Extrait le texte page par page.""" + pages: list[str] = [] + with pdfplumber.open(pdf_path) as pdf: + for page in pdf.pages: + pages.append(page.extract_text() or "") + return pages + + +def extract_tables(pdf_path: str | Path) -> list[list[list[str | None]]]: + """Extrait tous les tableaux détectés dans le PDF.""" + all_tables: list[list[list[str | None]]] = [] + with pdfplumber.open(pdf_path) as pdf: + for page in pdf.pages: + tables = page.extract_tables() or [] + all_tables.extend(tables) + return all_tables diff --git a/src/extraction/trackare_parser.py b/src/extraction/trackare_parser.py new file mode 100644 index 0000000..f03af49 --- /dev/null +++ b/src/extraction/trackare_parser.py @@ -0,0 +1,419 @@ +"""Parsing des exports Trackare (dossier patient complet).""" + +from __future__ import annotations + +import re + + +def parse_trackare(text: str) -> dict: + """Parse un export Trackare et retourne les sections structurées.""" + result: dict = { + "type": "trackare", + "patient": {}, + "sejour": {}, + "contacts": [], + "medecins": [], + "urgences": {}, + "observations_medicales": [], + "notes_paramedicales": [], + "signes_vitaux": {}, + "diagnostics": [], + "traitements": [], + "contenu_medical": "", + } + + _extract_patient_info(text, result) + _extract_sejour_info(text, result) + _extract_contacts(text, result) + _extract_medecins(text, result) + _extract_urgences(text, result) + _extract_observations(text, result) + _extract_notes_param(text, result) + _extract_diagnostics(text, result) + _extract_traitements(text, result) + _extract_vitals(text, result) + _build_medical_content(result) + + return result + + +def _extract_patient_info(text: str, result: dict) -> None: + """Extrait les informations du bloc 'Détails des patients'.""" + # Nom de naissance + m = re.search(r"Nom de naissance:\s*(\S+)", text) + if m: + result["patient"]["nom_naissance"] = m.group(1).strip() + + # Nom et Prénom + m = re.search(r"Nom et Prénom:\s*(.+?)(?:\s+Date de naissance|\n)", text) + if m: + result["patient"]["nom_prenom"] = m.group(1).strip() + + # IPP + m = re.search(r"IPP:\s*(\d+)", text) + if m: + result["patient"]["ipp"] = m.group(1) + + # Date de naissance + m = re.search(r"Date de naissance:\s*(\d{2}/\d{2}/\d{4})", text) + if m: + result["patient"]["date_naissance"] = m.group(1) + + # Sexe + m = re.search(r"Sexe:\s*(\S+)", text) + if m: + sexe_raw = m.group(1).strip().lower() + result["patient"]["sexe"] = "F" if "fém" in sexe_raw else "M" + + # Lieu de naissance + m = re.search(r"Lieu de naissance:\s*(.+?)(?:\n|$)", text) + if m: + result["patient"]["lieu_naissance"] = m.group(1).strip() + + # Adresse + m = re.search(r"Adresse:\s*(.+?)(?:\s+Ville de résidence|\n)", text) + if m: + result["patient"]["adresse"] = m.group(1).strip() + + # Code postal et ville + m = re.search(r"Code Postal:\s*(\d{5})", text) + if m: + result["patient"]["code_postal"] = m.group(1) + m = re.search(r"Ville de résidence:\s*(.+?)(?:\n|$)", text) + if m: + result["patient"]["ville"] = m.group(1).strip() + + # Taille, Poids, IMC (footer) + m = re.search(r"Taille:\s*(\d+)\s*cm", text) + if m: + result["patient"]["taille_cm"] = int(m.group(1)) + m = re.search(r"Poids:\s*([\d.]+)\s*kg", text) + if m: + result["patient"]["poids_kg"] = float(m.group(1)) + m = re.search(r"IMC:\s*([\d.]+)", text) + if m: + result["patient"]["imc"] = float(m.group(1)) + + +def _extract_sejour_info(text: str, result: dict) -> None: + """Extrait les détails de l'épisode.""" + m = re.search(r"Episode No:\s*(\d+)", text) + if m: + result["sejour"]["episode"] = m.group(1) + + m = re.search(r"Date d'admission:\s*(\d{2}/\d{2}/\d{4})", text) + if m: + result["sejour"]["date_entree"] = m.group(1) + + m = re.search(r"Heure d'admission:\s*(\d{2}:\d{2})", text) + if m: + result["sejour"]["heure_entree"] = m.group(1) + + m = re.search(r"Date de sortie:\s*(\d{2}/\d{2}/\d{4})", text) + if m: + result["sejour"]["date_sortie"] = m.group(1) + + m = re.search(r"Heure de sortie:\s*(\d{2}:\d{2})", text) + if m: + result["sejour"]["heure_sortie"] = m.group(1) + + m = re.search(r"Localisation:\s*(.+?)(?:\s+Médecin courant|\n)", text) + if m: + result["sejour"]["service"] = m.group(1).strip() + + m = re.search(r"Médecin courant:\s*(.+?)(?:\n|$)", text) + if m: + result["sejour"]["medecin_courant"] = m.group(1).strip() + + +def _extract_contacts(text: str, result: dict) -> None: + """Extrait la liste des contacts.""" + # Bloc "Liste des contacts" + contact_block = re.search( + r"Liste des contacts\n(.*?)(?=Passage aux Urgences|Signes Vitaux|Observations médicales)", + text, + re.DOTALL, + ) + if not contact_block: + return + + block = contact_block.group(1) + # Chaque ligne de contact contient relation, nom, prénom, tél + for line in block.split("\n"): + line = line.strip() + if not line or line.startswith("Type de contact") or line.startswith("Tél"): + continue + # Chercher les noms et téléphones + tel_match = re.search(r"(\d{2}[.\-\s]\d{2}[.\-\s]\d{2}[.\-\s]\d{2}[.\-\s]\d{2})", line) + if tel_match or re.search(r"(?:Epoux|Époux|Épouse|Conjoint|Père|Mère|Fils|Fille|Frère|Soeur)", line, re.IGNORECASE): + result["contacts"].append(line) + + +def _extract_medecins(text: str, result: dict) -> None: + """Extrait les noms de médecins/soignants.""" + seen: set[str] = set() + + def _add(name: str) -> None: + name = _clean_person_name(name) + if name and len(name) > 2 and name.lower() not in seen: + seen.add(name.lower()) + result["medecins"].append(name) + + # "DR. Prénom NOM" ou "Dr NOM" ou "Docteur NOM Prénom" + for m in re.finditer( + r"(?:DR\.?|Dr\.?|Docteur)\s+([A-ZÉÈÊËÀÂa-zéèêëàâ\.\-]+(?:\s+[A-ZÉÈÊËÀÂ][A-ZÉÈÊËÀÂa-zéèêëàâ\-]+){0,2})", + text, + ): + _add(m.group(1)) + + # Auteurs d'observations : "Note d'évolution NOM Prénom DD/MM/YYYY" + # ou multi-ligne "Note IDE Prénom\nNOM DD/MM/YYYY" + for m in re.finditer( + r"(?:Note d'évolution|Note IDE|Histoire de la maladie|Conclusion Obs\.?\s*médicales?)\s+" + r"(?:DR\.?\s+)?" + r"([A-ZÉÈÊËÀÂa-zéèêëàâ\.\-]+(?:[\s\n]+[A-ZÉÈÊËÀÂa-zéèêëàâ\.\-]+)*?)" + r"\s+\d{2}/\d{2}/\d{4}", + text, + ): + _add(m.group(1)) + + # Médecin de prise en charge / décision médicale + for m in re.finditer( + r"(?:Médecin de (?:la )?(?:prise en charge|décision)\s+médicale)\s+" + r"([A-ZÉÈÊËÀÂ][A-ZÉÈÊËÀÂa-zéèêëàâ\.\-]+(?:\s+[A-ZÉÈÊËÀÂa-zéèêëàâ\.\-]+){0,2})", + text, + ): + _add(m.group(1)) + + # IAO NOM Prénom + for m in re.finditer( + r"IAO\s+([A-ZÉÈÊËÀÂ][A-ZÉÈÊËÀÂa-zéèêëàâ\.\-]+(?:\s+[A-ZÉÈÊËÀÂa-zéèêëàâ\.\-]+){0,2})", + text, + ): + _add(m.group(1)) + + # Prénom seul sur la ligne avant "DD/MM/YYYY...Note IDE...\nNOM HH:MM" + # Ex: "Argitxu 02/03/2023\nNote IDE ...\nHIRIGOYEN 14:05" + # ou "Stephanie 27/02/2023 TDM fait et à voir\nNote IDE\nCONSTANTIN 08:54" + for m in re.finditer( + r"([A-ZÉÈÊËÀÂ][a-zéèêëàâäùûüôöîïç]+)\s+\d{2}/\d{2}/\d{4}[^\n]*\n\s*Note IDE[^\n]*\n\s*([A-ZÉÈÊËÀÂ][A-ZÉÈÊËÀÂa-zéèêëàâ\-]+)\s+\d{2}:\d{2}", + text, + ): + prenom = m.group(1) + nom = m.group(2) + _add(f"{prenom} {nom}") + + +# Mots qui ne sont pas des noms de personnes +_NOT_NAMES = { + "non", "pas", "une", "des", "les", "par", "sur", "pour", "dans", + "avec", "sans", "qui", "que", "est", "sont", "date", "heure", + "cholecystectomie", "cholécystectomie", "cholangiographie", + "complication", "vasculaire", "nécessaire", "donc", "note", + "douleurs", "absence", "douleur", "lotissement", "priorité", + "prescriptions", "technique", "alimentaire", "signé", "réalisé", + "selles", "covid", "devenir", "algique", "normal", "regime", + "reprise", "biprofenid", "orale", "gelule", "comprime", + "glyc", "inj", "lipase", "protéines", "ionogramme", + "créatinine", "glucose", "num", "crp", "ta", "bilirubine", + "tp", "tca", "bh", "bs", "sortie", "transfert", +} + + +def _clean_person_name(raw: str) -> str: + """Nettoie un nom extrait en supprimant le texte parasite.""" + name = re.sub(r"\n+", " ", raw).strip() + parts = name.split() + clean: list[str] = [] + for part in parts: + p = part.strip(".-") + if not p: + continue + if p.lower() in _NOT_NAMES: + break + # Un mot-nom : commence par une majuscule + if re.match(r"^[A-ZÉÈÊËÀÂÄÙÛÜÔÖÎÏÇ]", p): + clean.append(p) + else: + break + result = " ".join(clean).strip() + # Rejeter si un seul mot de 1-2 lettres (initiale) + if len(result) <= 2: + return "" + return result + + +def _extract_urgences(text: str, result: dict) -> None: + """Extrait les données du passage aux urgences.""" + urg_block = re.search( + r"Passage aux Urgences\n(.*?)(?=Signes Vitaux|Observations médicales|Antécédents)", + text, + re.DOTALL, + ) + if not urg_block: + return + + block = urg_block.group(1) + + m = re.search(r"Mode de transport.*?:\s*(.+)", block) + if m: + result["urgences"]["mode_transport"] = m.group(1).strip() + + m = re.search(r"Mode d'entrée\s+(.+)", block) + if m: + result["urgences"]["mode_entree"] = m.group(1).strip() + + m = re.search(r"Priorité\s+(Priorité \d)", block) + if m: + result["urgences"]["priorite"] = m.group(1) + + # Motifs de prise en charge + motifs = re.findall( + r"Motif de prise en charge\s+(.+?)(?=\n(?:Observ\.|Médecin|Date|IAO))", + block, + re.DOTALL, + ) + if motifs: + result["urgences"]["motifs"] = [ + line.strip() + for motif in motifs + for line in motif.split("\n") + if line.strip() + ] + + +def _extract_observations(text: str, result: dict) -> None: + """Extrait les observations médicales.""" + obs_block = re.search( + r"Observations médicales\n(.*?)(?=Notes paramédicales|Surveillance Psychiatrie|Traitements médicamenteux|$)", + text, + re.DOTALL, + ) + if not obs_block: + return + + block = obs_block.group(1) + + # Découper par type d'observation + entries = re.split( + r"(Note d'évolution|Conclusion Obs\.\s*médicales|Histoire de la maladie)", + block, + ) + + i = 1 + while i < len(entries) - 1: + obs_type = entries[i].strip() + content = entries[i + 1].strip() + + # Extraire auteur et date + m = re.match( + r"(?:DR\.?\s+)?([A-ZÉÈÊËÀÂa-zéèêëàâ\.\-]+(?:\s+[A-ZÉÈÊËÀÂa-zéèêëàâ\.\-]+)*)\s+(\d{2}/\d{2}/\d{4})\s+(\d{2}:\d{2})\s*(.*)", + content, + re.DOTALL, + ) + if m: + result["observations_medicales"].append({ + "type": obs_type, + "auteur": m.group(1).strip(), + "date": m.group(2), + "heure": m.group(3), + "contenu": m.group(4).strip(), + }) + else: + result["observations_medicales"].append({ + "type": obs_type, + "contenu": content, + }) + i += 2 + + +def _extract_notes_param(text: str, result: dict) -> None: + """Extrait les notes paramédicales.""" + notes_block = re.search( + r"Notes paramédicales\n(.*?)(?=Traitements médicamenteux|Surveillance|$)", + text, + re.DOTALL, + ) + if not notes_block: + return + + block = notes_block.group(1) + for m in re.finditer( + r"Note IDE\s+([A-Za-zéèêëàâäùûüôöîïçÉÈÊËÀÂÄÙÛÜÔÖÎÏÇ\.\-\s]+?)\s+(\d{2}/\d{2}/\d{4})\s+(\d{2}:\d{2})\s+(.*?)(?=Note IDE|$)", + block, + re.DOTALL, + ): + result["notes_paramedicales"].append({ + "auteur": m.group(1).strip(), + "date": m.group(2), + "heure": m.group(3), + "contenu": m.group(4).strip(), + }) + + +def _extract_diagnostics(text: str, result: dict) -> None: + """Extrait les diagnostics codés.""" + # "Principal actif CODE DESCRIPTION" + for m in re.finditer( + r"(Principal|Associé|Significatif)\s+(actif|inactif)\s+([A-Z]\d{2}(?:\.\d{1,2})?)\s+(.+?)(?:\s+\[.*?\])?\s+\d{2}/\d{2}/\d{4}", + text, + ): + result["diagnostics"].append({ + "type": m.group(1), + "statut": m.group(2), + "code_cim10": m.group(3), + "libelle": m.group(4).strip(), + }) + + +def _extract_traitements(text: str, result: dict) -> None: + """Extrait les traitements médicamenteux.""" + ttt_block = re.search( + r"Traitements médicamenteux\n(.*?)$", + text, + re.DOTALL, + ) + if not ttt_block: + return + + block = ttt_block.group(1) + # Chercher les noms de médicaments (en majuscules) + for m in re.finditer( + r"([A-ZÉÈÊËÀÂ][A-ZÉÈÊËÀÂ0-9\s\-/%.,'`]+(?:MG|ML|SOL|INJ|CPR|GEL|AMP|POCHE)[A-ZÉÈÊËÀÂ0-9\s\-/%.,'`\(\)\[\]]*)\s+([\d\s]+\s*(?:mg|G|GEL|CPR|AMP|ML)?)\s*[-–]\s*(.+?)(?=\n[A-Z]|\Z)", + block, + re.DOTALL, + ): + result["traitements"].append({ + "medicament": m.group(1).strip(), + "dose": m.group(2).strip(), + "frequence": m.group(3).strip().split("\n")[0], + }) + + +def _extract_vitals(text: str, result: dict) -> None: + """Extrait les données anthropométriques clés.""" + m = re.search(r"Taille \[cm\]\s+([\d.]+)", text) + if m: + result["signes_vitaux"]["taille_cm"] = float(m.group(1)) + m = re.search(r"Poids \[kg\]\s+([\d.]+)", text) + if m: + result["signes_vitaux"]["poids_kg"] = float(m.group(1)) + m = re.search(r"Indice\s*\n?\s*de masse\s+([\d.]+)", text) + if m: + result["signes_vitaux"]["imc"] = float(m.group(1)) + + +def _build_medical_content(result: dict) -> None: + """Construit le texte médical complet à partir des observations.""" + parts: list[str] = [] + + if result["urgences"].get("motifs"): + parts.append("Motifs: " + ", ".join(result["urgences"]["motifs"])) + + for obs in result["observations_medicales"]: + parts.append(obs.get("contenu", "")) + + for note in result["notes_paramedicales"]: + parts.append(note.get("contenu", "")) + + result["contenu_medical"] = "\n\n".join(parts) diff --git a/src/main.py b/src/main.py new file mode 100644 index 0000000..51739c3 --- /dev/null +++ b/src/main.py @@ -0,0 +1,184 @@ +"""CLI + orchestrateur du pipeline d'anonymisation et extraction CIM-10.""" + +from __future__ import annotations + +import argparse +import json +import logging +import sys +from pathlib import Path + +from .anonymization.anonymizer import Anonymizer +from .config import ANONYMIZED_DIR, REPORTS_DIR, STRUCTURED_DIR, AnonymizationReport, DossierMedical +from .extraction.document_classifier import classify +from .extraction.crh_parser import parse_crh +from .extraction.pdf_extractor import extract_text +from .extraction.trackare_parser import parse_trackare +from .medical.cim10_extractor import extract_medical_info + +logging.basicConfig( + level=logging.INFO, + format="%(asctime)s [%(levelname)s] %(name)s: %(message)s", +) +logger = logging.getLogger(__name__) + +# Flag global pour désactiver edsnlp +_use_edsnlp = True + + +def process_pdf(pdf_path: Path) -> tuple[str, DossierMedical, AnonymizationReport]: + """Traite un PDF : extraction → parsing → anonymisation → extraction CIM-10.""" + logger.info("Traitement de %s", pdf_path.name) + + # 1. Extraction texte + raw_text = extract_text(pdf_path) + logger.info(" Texte extrait : %d caractères", len(raw_text)) + + # 2. Classification + doc_type = classify(raw_text) + logger.info(" Type de document : %s", doc_type) + + # 3. Parsing + if doc_type == "trackare": + parsed = parse_trackare(raw_text) + else: + parsed = parse_crh(raw_text) + + # 4. Anonymisation + anonymizer = Anonymizer(parsed_data=parsed) + anonymized_text = anonymizer.anonymize(raw_text) + report = anonymizer.report + report.source_file = pdf_path.name + logger.info( + " Anonymisation : %d remplacements (regex=%d, ner=%d, sweep=%d)", + report.total_replacements, + report.regex_replacements, + report.ner_replacements, + report.sweep_replacements, + ) + + # 5. Analyse edsnlp (optionnelle) + edsnlp_result = None + if _use_edsnlp: + edsnlp_result = _run_edsnlp(anonymized_text) + + # 6. Extraction médicale CIM-10 + dossier = extract_medical_info(parsed, anonymized_text, edsnlp_result) + dossier.source_file = pdf_path.name + dossier.document_type = doc_type + logger.info(" DP : %s", dossier.diagnostic_principal) + logger.info(" DAS : %d, Actes : %d", len(dossier.diagnostics_associes), len(dossier.actes_ccam)) + + return anonymized_text, dossier, report + + +def _run_edsnlp(text: str): + """Exécute l'analyse edsnlp avec fallback gracieux.""" + try: + from .medical.edsnlp_pipeline import analyze, is_available + if not is_available(): + logger.info(" edsnlp non disponible, utilisation du mode regex seul") + return None + result = analyze(text) + logger.info( + " edsnlp : %d CIM-10, %d médicaments, %d dates", + len(result.cim10_entities), + len(result.drug_entities), + len(result.date_entities), + ) + return result + except Exception: + logger.warning(" edsnlp : erreur lors de l'analyse, fallback regex", exc_info=True) + return None + + +def write_outputs( + stem: str, + anonymized_text: str, + dossier: DossierMedical, + report: AnonymizationReport, +) -> None: + """Écrit les fichiers de sortie.""" + # Texte anonymisé + anon_path = ANONYMIZED_DIR / f"{stem}_anonymized.txt" + anon_path.write_text(anonymized_text, encoding="utf-8") + logger.info(" → %s", anon_path) + + # JSON structuré + json_path = STRUCTURED_DIR / f"{stem}_cim10.json" + json_path.write_text( + dossier.model_dump_json(indent=2, exclude_none=True), + encoding="utf-8", + ) + logger.info(" → %s", json_path) + + # Rapport d'anonymisation + report_path = REPORTS_DIR / f"{stem}_report.json" + report_path.write_text( + report.model_dump_json(indent=2), + encoding="utf-8", + ) + logger.info(" → %s", report_path) + + +def main(input_path: str | None = None) -> None: + """Point d'entrée principal.""" + global _use_edsnlp + + parser = argparse.ArgumentParser( + description="Anonymisation de documents médicaux PDF et extraction CIM-10", + ) + parser.add_argument( + "input", + nargs="?", + default=input_path or "input/", + help="Chemin vers un PDF ou un dossier de PDFs (défaut: input/)", + ) + parser.add_argument( + "--no-ner", + action="store_true", + help="Désactiver la phase NER (plus rapide, moins précis)", + ) + parser.add_argument( + "--no-edsnlp", + action="store_true", + help="Désactiver l'analyse edsnlp (mode regex seul)", + ) + args = parser.parse_args() + + if args.no_ner: + # Monkey-patch pour désactiver NER + from .anonymization import ner_anonymizer + ner_anonymizer.extract_person_entities = lambda text: [] + + if args.no_edsnlp: + _use_edsnlp = False + + input_p = Path(args.input) + if input_p.is_file(): + pdfs = [input_p] + elif input_p.is_dir(): + pdfs = sorted(input_p.glob("*.pdf")) + else: + logger.error("Chemin introuvable : %s", input_p) + sys.exit(1) + + if not pdfs: + logger.warning("Aucun PDF trouvé dans %s", input_p) + sys.exit(0) + + logger.info("Traitement de %d PDF(s)...", len(pdfs)) + + for pdf_path in pdfs: + try: + anonymized_text, dossier, report = process_pdf(pdf_path) + stem = pdf_path.stem.replace(" ", "_") + write_outputs(stem, anonymized_text, dossier, report) + except Exception: + logger.exception("Erreur lors du traitement de %s", pdf_path.name) + + logger.info("Terminé.") + + +if __name__ == "__main__": + main() diff --git a/src/medical/__init__.py b/src/medical/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/src/medical/cim10_extractor.py b/src/medical/cim10_extractor.py new file mode 100644 index 0000000..b8adc85 --- /dev/null +++ b/src/medical/cim10_extractor.py @@ -0,0 +1,606 @@ +"""Extraction d'informations médicales structurées pour le codage CIM-10.""" + +from __future__ import annotations + +import re +from datetime import datetime +from typing import Optional + +from ..config import ( + ActeCCAM, + BiologieCle, + Diagnostic, + DossierMedical, + Imagerie, + Sejour, + Traitement, +) + +try: + from .edsnlp_pipeline import EdsnlpResult +except ImportError: + EdsnlpResult = None # type: ignore[assignment,misc] + +# Mapping diagnostics fréquents → codes CIM-10 +CIM10_MAP: dict[str, str] = { + # Pancréatite + "pancréatite aiguë biliaire": "K85.1", + "pancréatite aigue biliaire": "K85.1", + "pancréatite aiguë lithiasique": "K85.1", + "pancréatite aigue lithiasique": "K85.1", + "pancréatite aiguë": "K85.9", + "pancréatite aigue": "K85.9", + "pancréatite": "K85.9", + # Lithiases biliaires + "lithiase cholédoque": "K80.5", + "lithiase du cholédoque": "K80.5", + "calcul des canaux biliaires": "K80.5", + "lithiase vésiculaire": "K80.2", + "lithiases vésiculaires": "K80.2", + "vésicule lithiasique": "K80.2", + "colique hépatique": "K80.2", + # Cholécystite + "cholécystite aiguë": "K81.0", + "cholecystite aigue": "K81.0", + "angiocholite": "K83.0", + # Obésité + "obésité": "E66.0", + "obesite": "E66.0", + "surpoids": "E66.0", + # Réactions médicamenteuses + "éruption médicamenteuse": "L27.0", + "eruption medicamenteuse": "L27.0", + "éruption cutanée médicamenteuse": "L27.0", + "toxidermie": "L27.0", + "réaction au tramadol": "L27.0", + "allergie médicamenteuse": "T88.7", + # Douleur + "douleur abdominale": "R10.4", + "douleur hypochondre droit": "R10.1", + # Ictère + "ictère": "R17", + "jaunisse": "R17", + # HTA + "hypertension artérielle": "I10", + "hta": "I10", + # Diabète + "diabète type 2": "E11.9", + "diabète de type 2": "E11.9", + "diabète type 1": "E10.9", +} + +# Mapping actes → codes CCAM +CCAM_MAP: dict[str, str] = { + "cholécystectomie": "HMFC004", + "cholecystectomie": "HMFC004", + "cholécystectomie par cœlioscopie": "HMFC004", + "cholecystectomie par coelioscopie": "HMFC004", + "cholangiographie": "HHHE002", + "cholangiographie peropératoire": "HHHE002", + "cpre": "HHHE002", + "sphinctérotomie endoscopique": "HHHE003", + "scanner abdominal": "ZCQK002", + "tdm abdominal": "ZCQK002", + "échographie abdominale": "ZCQJ001", + "echo abdominale": "ZCQJ001", + "irm abdominale": "ZCQN001", +} + + +def extract_medical_info( + parsed_data: dict, + anonymized_text: str, + edsnlp_result: Optional[EdsnlpResult] = None, +) -> DossierMedical: + """Extrait les informations médicales structurées depuis les données parsées et le texte.""" + dossier = DossierMedical() + dossier.document_type = parsed_data.get("type", "") + + _extract_sejour(parsed_data, dossier) + _extract_diagnostics(parsed_data, anonymized_text, dossier, edsnlp_result) + _extract_actes(anonymized_text, dossier) + _extract_antecedents(anonymized_text, dossier) + _extract_traitements(parsed_data, anonymized_text, dossier, edsnlp_result) + _extract_biologie(anonymized_text, dossier) + _extract_imagerie(anonymized_text, dossier) + _extract_complications(anonymized_text, dossier, edsnlp_result) + + return dossier + + +def _extract_sejour(parsed: dict, dossier: DossierMedical) -> None: + """Extrait les informations de séjour.""" + patient = parsed.get("patient", {}) + sejour_data = parsed.get("sejour", {}) + + dossier.sejour = Sejour( + sexe=patient.get("sexe"), + date_entree=sejour_data.get("date_entree"), + date_sortie=sejour_data.get("date_sortie"), + mode_entree=parsed.get("urgences", {}).get("mode_entree"), + ) + + # Calcul de l'âge à partir de la date de naissance et de la date d'entrée + dob = patient.get("date_naissance") + date_entree = sejour_data.get("date_entree") + if dob and date_entree: + try: + dob_dt = datetime.strptime(dob, "%d/%m/%Y") + entree_dt = datetime.strptime(date_entree, "%d/%m/%Y") + age = entree_dt.year - dob_dt.year + if (entree_dt.month, entree_dt.day) < (dob_dt.month, dob_dt.day): + age -= 1 + dossier.sejour.age = age + except ValueError: + pass + + # Durée de séjour + if sejour_data.get("date_entree") and sejour_data.get("date_sortie"): + try: + d1 = datetime.strptime(sejour_data["date_entree"], "%d/%m/%Y") + d2 = datetime.strptime(sejour_data["date_sortie"], "%d/%m/%Y") + dossier.sejour.duree_sejour = (d2 - d1).days + except ValueError: + pass + + # IMC, poids, taille + vitals = parsed.get("signes_vitaux", {}) + if vitals.get("imc"): + dossier.sejour.imc = vitals["imc"] + elif patient.get("imc"): + dossier.sejour.imc = patient["imc"] + + if vitals.get("poids_kg"): + dossier.sejour.poids = vitals["poids_kg"] + elif patient.get("poids_kg"): + dossier.sejour.poids = patient["poids_kg"] + + if vitals.get("taille_cm"): + dossier.sejour.taille = vitals["taille_cm"] + elif patient.get("taille_cm"): + dossier.sejour.taille = patient["taille_cm"] + + +def _extract_diagnostics( + parsed: dict, + text: str, + dossier: DossierMedical, + edsnlp_result: Optional[EdsnlpResult] = None, +) -> None: + """Extrait le diagnostic principal et les diagnostics associés.""" + text_lower = text.lower() + + # Diagnostics codés depuis Trackare (prioritaires) + for diag in parsed.get("diagnostics", []): + d = Diagnostic( + texte=diag.get("libelle", ""), + cim10_suggestion=diag.get("code_cim10"), + ) + if diag.get("type", "").lower() == "principal": + dossier.diagnostic_principal = d + else: + dossier.diagnostics_associes.append(d) + + # Extraction du texte "Au total:" ou conclusion + conclusion = "" + m = re.search( + r"Au total\s*[::]?\s*(.*?)(?=\n\s*(?:Devenir|TTT|Sortie|$))", + text, + re.DOTALL | re.IGNORECASE, + ) + if m: + conclusion = m.group(1).strip() + + # Enrichissement via edsnlp (CIM-10) + edsnlp_codes: dict[str, str] = {} + if edsnlp_result: + for ent in edsnlp_result.cim10_entities: + if not ent.negation and not ent.hypothese: + edsnlp_codes[ent.code] = ent.texte + + # Si pas de DP depuis le codage, chercher dans le texte + if not dossier.diagnostic_principal: + # D'abord essayer le fallback regex (plus précis pour les patterns spécifiques) + dp = _find_diagnostic_principal(text_lower, conclusion) + if dp: + dossier.diagnostic_principal = dp + elif edsnlp_codes: + # Utiliser la première entité CIM-10 edsnlp comme DP + code, texte = next(iter(edsnlp_codes.items())) + dossier.diagnostic_principal = Diagnostic( + texte=texte.capitalize(), cim10_suggestion=code, + ) + + # Diagnostics associés depuis le texte (regex) + das = _find_diagnostics_associes(text_lower, conclusion, dossier) + dossier.diagnostics_associes.extend(das) + + # Enrichissement DAS depuis edsnlp + if edsnlp_result: + existing_codes = set() + if dossier.diagnostic_principal: + existing_codes.add(dossier.diagnostic_principal.cim10_suggestion) + for d in dossier.diagnostics_associes: + existing_codes.add(d.cim10_suggestion) + + for ent in edsnlp_result.cim10_entities: + if ent.negation or ent.hypothese: + continue + if ent.code not in existing_codes: + dossier.diagnostics_associes.append(Diagnostic( + texte=ent.texte.capitalize(), + cim10_suggestion=ent.code, + )) + existing_codes.add(ent.code) + + +def _find_diagnostic_principal(text_lower: str, conclusion: str) -> Diagnostic | None: + """Trouve le diagnostic principal dans le texte.""" + conclusion_lower = conclusion.lower() + + # Chercher dans la conclusion d'abord + for terme, code in CIM10_MAP.items(): + if terme in conclusion_lower: + return Diagnostic(texte=terme.capitalize(), cim10_suggestion=code) + + # Patterns courants pour le DP + dp_patterns = [ + r"pancréatite\s+aigu[eë]\s+(?:d'origine\s+)?lithiasique", + r"pancréatite\s+aigu[eë]\s+biliaire", + r"pancréatite\s+aigu[eë]", + ] + for pat in dp_patterns: + if re.search(pat, text_lower): + matched = re.search(pat, text_lower).group(0) + code = _lookup_cim10(matched) + return Diagnostic(texte=matched.capitalize(), cim10_suggestion=code) + + return None + + +def _find_diagnostics_associes( + text_lower: str, conclusion: str, dossier: DossierMedical +) -> list[Diagnostic]: + """Trouve les diagnostics associés.""" + das: list[Diagnostic] = [] + existing_codes = set() + if dossier.diagnostic_principal: + existing_codes.add(dossier.diagnostic_principal.cim10_suggestion) + for d in dossier.diagnostics_associes: + existing_codes.add(d.cim10_suggestion) + + # Lithiase cholédoque + if re.search(r"lithiase\s+(?:du\s+)?(?:bas\s+)?cholédoque", text_lower): + if "K80.5" not in existing_codes: + das.append(Diagnostic(texte="Lithiase du cholédoque", cim10_suggestion="K80.5")) + existing_codes.add("K80.5") + + # Éruption médicamenteuse + if re.search(r"éruption\s+cutanée|eruption\s+cutanée|toxidermie|réaction\s+au\s+tramadol", text_lower): + if "L27.0" not in existing_codes: + das.append(Diagnostic(texte="Éruption cutanée médicamenteuse", cim10_suggestion="L27.0")) + existing_codes.add("L27.0") + + # Obésité (IMC >= 30) + if re.search(r"imc\s*[:=]?\s*(\d{2,3}[.,]\d+)", text_lower): + m = re.search(r"imc\s*[:=]?\s*(\d{2,3}[.,]\d+)", text_lower) + if m: + imc_val = float(m.group(1).replace(",", ".")) + if imc_val >= 30 and "E66.0" not in existing_codes: + das.append(Diagnostic(texte=f"Obésité (IMC {imc_val})", cim10_suggestion="E66.0")) + existing_codes.add("E66.0") + + # Lithiases vésiculaires + if re.search(r"vésicule\s+lithiasique|lithiases?\s+vésiculaire", text_lower): + if "K80.2" not in existing_codes: + das.append(Diagnostic(texte="Lithiase vésiculaire", cim10_suggestion="K80.2")) + existing_codes.add("K80.2") + + return das + + +def _extract_actes(text: str, dossier: DossierMedical) -> None: + """Extrait les actes CCAM.""" + text_lower = text.lower() + + # Cholécystectomie par cœlioscopie + if re.search(r"chol[ée]cystectomie\s+par\s+c[oœ][ea]lioscopie", text_lower): + date = _find_act_date(text, r"chol[ée]cystectomie") + dossier.actes_ccam.append(ActeCCAM( + texte="Cholécystectomie par cœlioscopie", + code_ccam_suggestion="HMFC004", + date=date, + )) + elif re.search(r"chol[ée]cystectomie|cholecystectomie", text_lower): + date = _find_act_date(text, r"chol[ée]cystectomie|cholecystectomie") + dossier.actes_ccam.append(ActeCCAM( + texte="Cholécystectomie", + code_ccam_suggestion="HMFC004", + date=date, + )) + + # Cholangiographie + if re.search(r"cholangiographie", text_lower): + date = _find_act_date(text, r"cholangiographie") + dossier.actes_ccam.append(ActeCCAM( + texte="Cholangiographie peropératoire", + code_ccam_suggestion="HHHE002", + date=date, + )) + + # TDM + if re.search(r"(?:tdm|scanner|tomodensitométrie)", text_lower): + date = _find_act_date(text, r"(?:TDM|scanner)") + dossier.actes_ccam.append(ActeCCAM( + texte="TDM abdominal", + code_ccam_suggestion="ZCQK002", + date=date, + )) + + +def _extract_antecedents(text: str, dossier: DossierMedical) -> None: + """Extrait les antécédents.""" + m = re.search( + r"Antécédents?\s*[::]?\s*\n?(.*?)(?=\n\s*(?:Traitements?\s*[::]|Allergie|Histoire de la maladie|Examen clinique|\n\n))", + text, + re.DOTALL | re.IGNORECASE, + ) + if m: + block = m.group(1).strip() + for line in block.split("\n"): + line = line.strip().lstrip("- •") + # Filtrer les lignes non pertinentes + if (line and len(line) > 5 and line != "0" + and not re.match(r"^\d", line) + and "Item de" not in line + and "surveillance" not in line.lower() + and "Température" not in line + and "Signes Vitaux" not in line + and "Pouls" not in line + and "Type de note" not in line + and "Aucune donnée" not in line + and "renseignée" not in line + and "habitudes de vie" not in line + and "Systolique" not in line + and "Diastolique" not in line + and "Saturation" not in line): + dossier.antecedents.append(line) + + +def _extract_traitements( + parsed: dict, + text: str, + dossier: DossierMedical, + edsnlp_result: Optional[EdsnlpResult] = None, +) -> None: + """Extrait les traitements de sortie.""" + # Construire un index des médicaments edsnlp avec codes ATC + drug_atc: dict[str, str] = {} + if edsnlp_result: + for drug in edsnlp_result.drug_entities: + if not drug.negation and drug.code_atc: + drug_atc[drug.texte.lower()] = drug.code_atc + + # Depuis le texte — section "TTT de sortie" (limiter à quelques lignes) + m = re.search( + r"(?:TTT|Traitement)\s+de\s+sortie\s*[::]?\s*\n?(.*?)(?=\n\s*(?:Devenir|Rédigé|Cordialement|Patient:|Episode|Le \d{2}/\d{2}|\n\n)|$)", + text, + re.DOTALL | re.IGNORECASE, + ) + if m: + block = m.group(1).strip() + lines = block.split("\n") + for line in lines[:10]: # Limiter à 10 lignes max + line = line.strip().lstrip("- •") + if not line or len(line) <= 2: + continue + # Ignorer les footers et lignes non-médicament + if re.match(r"^(Patient|Episode|Le \d|Page|V\d)", line): + break + med = line + poso = None + # Séparer médicament et posologie + poso_match = re.search(r"\s+(si besoin|matin|soir|midi|\d+\s*(?:mg|cp|gel).*)", line, re.IGNORECASE) + if poso_match: + med = line[:poso_match.start()].strip() + poso = poso_match.group(1).strip() + # Chercher le code ATC via edsnlp + code_atc = _match_drug_atc(med, drug_atc) + dossier.traitements_sortie.append(Traitement( + medicament=med, + posologie=poso, + code_atc=code_atc, + )) + + # Si rien trouvé, chercher les prescriptions "Presc. de Sortie" + if not dossier.traitements_sortie: + for m_presc in re.finditer( + r"([A-ZÉÈÊËÀÂ][A-ZÉÈÊËÀÂ0-9\s\-/%.]+?)(?:\s+\d+\s*(?:mg|G|CPR|GEL))?.*?Presc\.\s*de\s*Sortie", + text, + ): + med = m_presc.group(1).strip() + if len(med) > 3: + code_atc = _match_drug_atc(med, drug_atc) + dossier.traitements_sortie.append(Traitement( + medicament=med, code_atc=code_atc, + )) + + +def _match_drug_atc(med_name: str, drug_atc: dict[str, str]) -> Optional[str]: + """Cherche un code ATC correspondant au médicament dans les résultats edsnlp.""" + if not drug_atc: + return None + med_lower = med_name.lower().strip() + # Correspondance exacte + if med_lower in drug_atc: + return drug_atc[med_lower] + # Correspondance partielle : le nom edsnlp est contenu dans le nom du médicament + for drug_text, atc in drug_atc.items(): + if drug_text in med_lower or med_lower in drug_text: + return atc + return None + + +def _extract_biologie(text: str, dossier: DossierMedical) -> None: + """Extrait les résultats biologiques clés.""" + bio_patterns = [ + (r"[Ll]ipas[ée]mie\s*(?:[àa=:])?\s*(\d+)", "Lipasémie", None), + (r"CRP\s*[=:à]?\s*(\d+(?:[.,]\d+)?)", "CRP", None), + (r"ASAT\s*[=:à]?\s*([\d.,]+)\s*(?:N|U/L)?", "ASAT", None), + (r"ALAT\s*[=:à]?\s*([\d.,]+)\s*(?:N|U/L)?", "ALAT", None), + (r"GGT\s*[=:à]?\s*(\d+)\s*(?:U/L)?", "GGT", None), + (r"PAL\s*[=:à]?\s*(\d+)\s*(?:U/L)?", "PAL", None), + (r"[Bb]ilirubine\s+(?:totale\s+)?[àa=:]\s*(\d+)\s*(?:µmol/L)?", "Bilirubine totale", None), + (r"troponine\s+(négative|positive|normale)", "Troponine", None), + ] + + for pattern, test_name, _ in bio_patterns: + m = re.search(pattern, text) + if m: + value = m.group(1) + anomalie = _is_abnormal(test_name, value) + dossier.biologie_cle.append(BiologieCle( + test=test_name, + valeur=value, + anomalie=anomalie, + )) + + +def _extract_imagerie(text: str, dossier: DossierMedical) -> None: + """Extrait les résultats d'imagerie.""" + # TDM + tdm_match = re.search( + r"(?:TDM|[Ss]canner|tomodensitométrie).*?(?:retrouve|montre|objective)\s*[::]?\s*(.*?)(?=\n\s*(?:Cholécystectomie|Au total|Devenir|\n\n))", + text, + re.DOTALL | re.IGNORECASE, + ) + if tdm_match: + conclusion = tdm_match.group(1).strip() + # Score de Balthazar + score = None + m = re.search(r"[Bb]althazar\s*(?:[àa=:])?\s*(\d+|[A-E])", text) + if m: + score = f"Balthazar {m.group(1)}" + dossier.imagerie.append(Imagerie( + type="TDM abdominal", + conclusion=conclusion[:500], + score=score, + )) + + # Échographie + echo_match = re.search( + r"(?:[ée]cho(?:graphie)?)\s*.*?(?:retrouve|montre|objective)\s*[::]?\s*(.*?)(?=\n\n)", + text, + re.DOTALL | re.IGNORECASE, + ) + if echo_match: + dossier.imagerie.append(Imagerie( + type="Échographie", + conclusion=echo_match.group(1).strip()[:500], + )) + + +def _extract_complications( + text: str, + dossier: DossierMedical, + edsnlp_result: Optional[EdsnlpResult] = None, +) -> None: + """Extrait les complications mentionnées.""" + text_lower = text.lower() + + # Termes de négation détectés par edsnlp pour chaque entité + edsnlp_negated_terms: set[str] = set() + if edsnlp_result: + for ent in edsnlp_result.cim10_entities: + if ent.negation: + edsnlp_negated_terms.add(ent.texte.lower()) + + complication_terms = [ + "éruption cutanée", + "eruption cutanée", + "fièvre", + "infection", + "hémorragie", + "hématome", + "abcès", + "fistule", + "iléus", + "occlusion", + ] + + for term in complication_terms: + if term in text_lower: + # Vérifier la négation via edsnlp d'abord + if edsnlp_result and _is_negated_by_edsnlp(term, edsnlp_negated_terms): + continue + # Fallback regex pour la négation + pattern = rf"(?:pas de|sans|absence de|aucun[e]?)\s+{re.escape(term)}" + if not re.search(pattern, text_lower): + dossier.complications.append(term.capitalize()) + + +def _is_negated_by_edsnlp(term: str, negated_terms: set[str]) -> bool: + """Vérifie si un terme est nié selon edsnlp.""" + term_lower = term.lower() + for neg_term in negated_terms: + if term_lower in neg_term or neg_term in term_lower: + return True + return False + + +def _find_act_date(text: str, act_pattern: str) -> str | None: + """Trouve la date associée à un acte.""" + # Chercher "acte le DD/MM" ou "acte le DD/MM/YYYY" + m = re.search( + rf"{act_pattern}.*?(?:le\s+)?(\d{{2}}/\d{{2}}(?:/\d{{4}})?)", + text, + re.IGNORECASE, + ) + if m: + return m.group(1) + + # Chercher dans la ligne d'observation juste avant + m = re.search( + rf"(\d{{2}}/\d{{2}}/\d{{4}}).*?{act_pattern}", + text, + re.IGNORECASE, + ) + if m: + return m.group(1) + return None + + +def _lookup_cim10(text: str) -> str | None: + """Cherche un code CIM-10 pour un texte donné.""" + text_lower = text.lower().strip() + for terme, code in CIM10_MAP.items(): + if terme in text_lower: + return code + return None + + +def _is_abnormal(test: str, value: str) -> bool | None: + """Détermine si un résultat biologique est anormal.""" + try: + val = float(value.replace(",", ".")) + except (ValueError, AttributeError): + if value.lower() in ("négative", "negative", "normale", "normal"): + return False + if value.lower() in ("positive", "positif", "élevée", "elevee"): + return True + return None + + normals: dict[str, tuple[float, float]] = { + "Lipasémie": (0, 60), + "CRP": (0, 5), + "ASAT": (0, 40), + "ALAT": (0, 40), + "GGT": (0, 60), + "PAL": (0, 150), + "Bilirubine totale": (0, 17), + } + + if test in normals: + lo, hi = normals[test] + return val > hi or val < lo + return None diff --git a/src/medical/edsnlp_pipeline.py b/src/medical/edsnlp_pipeline.py new file mode 100644 index 0000000..d5737a1 --- /dev/null +++ b/src/medical/edsnlp_pipeline.py @@ -0,0 +1,140 @@ +"""Pipeline edsnlp pour l'extraction médicale (CIM-10, médicaments, négation).""" + +from __future__ import annotations + +import logging +from dataclasses import dataclass, field +from typing import Optional + +logger = logging.getLogger(__name__) + +_nlp = None +_available = None + + +@dataclass +class CIM10Entity: + texte: str + code: str + negation: bool = False + hypothese: bool = False + + +@dataclass +class DrugEntity: + texte: str + code_atc: Optional[str] = None + negation: bool = False + + +@dataclass +class DateEntity: + texte: str + value: Optional[str] = None + + +@dataclass +class EdsnlpResult: + cim10_entities: list[CIM10Entity] = field(default_factory=list) + drug_entities: list[DrugEntity] = field(default_factory=list) + date_entities: list[DateEntity] = field(default_factory=list) + + +def is_available() -> bool: + """Vérifie si edsnlp est installé et utilisable.""" + global _available + if _available is not None: + return _available + try: + import edsnlp # noqa: F401 + _available = True + except ImportError: + _available = False + return _available + + +def get_pipeline(): + """Retourne le pipeline edsnlp (singleton lazy-loaded).""" + global _nlp + if _nlp is not None: + return _nlp + + if not is_available(): + raise RuntimeError("edsnlp n'est pas installé") + + import edsnlp + + logger.info("Initialisation du pipeline edsnlp...") + nlp = edsnlp.blank("eds") + + nlp.add_pipe("eds.normalizer") + nlp.add_pipe("eds.sentences") + nlp.add_pipe("eds.cim10", config=dict(attr="NORM", term_matcher="simstring")) + nlp.add_pipe("eds.drugs", config=dict(attr="NORM", term_matcher="exact")) + nlp.add_pipe("eds.negation") + nlp.add_pipe("eds.hypothesis") + nlp.add_pipe("eds.dates") + + _nlp = nlp + logger.info("Pipeline edsnlp initialisé avec succès") + return _nlp + + +def analyze(text: str) -> EdsnlpResult: + """Analyse un texte médical avec edsnlp. + + Retourne les entités CIM-10, médicaments et dates détectées. + """ + result = EdsnlpResult() + + if not is_available(): + return result + + try: + nlp = get_pipeline() + doc = nlp(text) + except Exception: + logger.exception("Erreur lors de l'analyse edsnlp") + return result + + for ent in doc.ents: + negation = getattr(ent._, "negation", False) or False + hypothese = getattr(ent._, "hypothesis", False) or False + + if ent.label_ == "cim10": + code = ent.kb_id_ or "" + if code: + result.cim10_entities.append(CIM10Entity( + texte=ent.text, + code=code, + negation=negation, + hypothese=hypothese, + )) + elif ent.label_ == "drug": + code_atc = ent.kb_id_ or None + result.drug_entities.append(DrugEntity( + texte=ent.text, + code_atc=code_atc, + negation=negation, + )) + + # Dates + for span in doc.spans.get("dates", []): + date_value = None + if hasattr(span._, "date"): + date_obj = span._.date + if date_obj is not None: + date_value = str(date_obj) + result.date_entities.append(DateEntity( + texte=span.text, + value=date_value, + )) + + return result + + +def reset(): + """Réinitialise le pipeline (utile pour les tests).""" + global _nlp, _available + _nlp = None + _available = None diff --git a/tests/__init__.py b/tests/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/tests/test_anonymization.py b/tests/test_anonymization.py new file mode 100644 index 0000000..22fbfec --- /dev/null +++ b/tests/test_anonymization.py @@ -0,0 +1,197 @@ +"""Tests pour le module d'anonymisation.""" + +import pytest + +from src.anonymization.entity_registry import EntityRegistry +from src.anonymization.regex_patterns import ( + CRH_FOOTER_IPP_EPISODE, + CRH_FOOTER_PATIENT_PATTERN, + DATE_NAISSANCE_PATTERN, + DR_NAME_PATTERN, + EMAIL_PATTERN, + EPISODE_PATTERN, + FOOTER_PATIENT_PATTERN, + IPP_PATTERN, + NOTE_AUTHOR_PATTERN, + PHONE_PATTERN, + RPPS_PATTERN, +) + + +class TestRegexPatterns: + def test_ipp_with_colon(self): + m = IPP_PATTERN.search("IPP: 01306172") + assert m is not None + assert m.group(1) == "01306172" + + def test_ipp_without_colon(self): + m = IPP_PATTERN.search("IPP 01306172") + assert m is not None + assert m.group(1) == "01306172" + + def test_ipp_in_parentheses(self): + m = IPP_PATTERN.search("(01306172 )") + assert m is not None + assert m.group(2) == "01306172" + + def test_episode_no(self): + m = EPISODE_PATTERN.search("Episode No: 23042753") + assert m is not None + assert m.group(1) == "23042753" + + def test_episode_n_degree(self): + m = EPISODE_PATTERN.search("N° Episode 23042753") + assert m is not None + assert m.group(2) == "23042753" + + def test_phone_dots(self): + m = PHONE_PATTERN.search("06.25.39.26.82") + assert m is not None + assert m.group(0) == "06.25.39.26.82" + + def test_phone_spaces(self): + m = PHONE_PATTERN.search("05 59 44 35 35") + assert m is not None + + def test_email(self): + m = EMAIL_PATTERN.search("faudemar@ch-cotebasque.fr") + assert m is not None + assert m.group(0) == "faudemar@ch-cotebasque.fr" + + def test_rpps(self): + m = RPPS_PATTERN.search("RPPS : 10100532760") + assert m is not None + assert m.group(1) == "10100532760" + + def test_date_naissance_nee_le(self): + m = DATE_NAISSANCE_PATTERN.search("née le 23/02/1980") + assert m is not None + assert m.group(1) == "23/02/1980" + + def test_date_naissance_ne_e_le(self): + m = DATE_NAISSANCE_PATTERN.search("Né(e) le 23/02/1980") + assert m is not None + assert m.group(1) == "23/02/1980" + + def test_date_naissance_field(self): + m = DATE_NAISSANCE_PATTERN.search("Date de naissance: 23/02/1980") + assert m is not None + assert m.group(1) == "23/02/1980" + + def test_dr_name(self): + m = DR_NAME_PATTERN.search("Dr F. AUDEMAR") + assert m is not None + assert "AUDEMAR" in m.group(1) + + def test_dr_name_docteur(self): + m = DR_NAME_PATTERN.search("Docteur AUDEMAR Franck") + assert m is not None + assert "AUDEMAR" in m.group(1) + + def test_note_author(self): + m = NOTE_AUTHOR_PATTERN.search("Note IDE Annie GUIRESSE Non algique") + assert m is not None + assert m.group(1) == "Annie GUIRESSE" + + def test_footer_patient_trackare(self): + m = FOOTER_PATIENT_PATTERN.search( + "Patient: CLIER NARBAIS AUDREY - Date de naissance: 23/02/1980" + ) + assert m is not None + assert "CLIER" in m.group(1) + + def test_crh_footer_patient(self): + m = CRH_FOOTER_PATIENT_PATTERN.search( + "Patient(e) : CLIER AUDREY NARBAIS Né(e) le 23/02/1980" + ) + assert m is not None + assert "CLIER" in m.group(1) + + def test_crh_footer_ipp_episode(self): + m = CRH_FOOTER_IPP_EPISODE.search( + "IPP 01306172 / N° Episode 23042753 (MEDECINE GASTRO B2 HC)" + ) + assert m is not None + assert m.group(1) == "01306172" + assert m.group(2) == "23042753" + + +class TestEntityRegistry: + def test_register_returns_pseudo(self): + reg = EntityRegistry() + pseudo = reg.register("Jean Dupont", "patient") + assert pseudo == "[PATIENT_1]" + + def test_register_same_entity_returns_same(self): + reg = EntityRegistry() + p1 = reg.register("Jean Dupont", "patient") + p2 = reg.register("Jean Dupont", "patient") + assert p1 == p2 + + def test_register_case_insensitive(self): + reg = EntityRegistry() + p1 = reg.register("Jean DUPONT", "patient") + p2 = reg.register("jean dupont", "patient") + assert p1 == p2 + + def test_register_different_categories(self): + reg = EntityRegistry() + p1 = reg.register("Dupont", "patient") + p2 = reg.register("Martin", "medecin") + assert p1 == "[PATIENT_1]" + assert p2 == "[MEDECIN_1]" + + def test_get_replacement(self): + reg = EntityRegistry() + reg.register("Jean Dupont", "patient") + assert reg.get_replacement("jean dupont") == "[PATIENT_1]" + assert reg.get_replacement("inconnu") is None + + +class TestAnonymizer: + def test_anonymize_basic(self): + from src.anonymization.anonymizer import Anonymizer + + parsed = { + "patient": {"nom_prenom": "DUPONT Jean", "nom_naissance": "DUPONT"}, + "medecins": ["MARTIN Pierre"], + "contacts": [], + } + anonymizer = Anonymizer(parsed_data=parsed) + text = "Le patient DUPONT Jean a été vu par Dr MARTIN Pierre." + result = anonymizer.anonymize(text) + + assert "DUPONT" not in result + assert "MARTIN" not in result + assert "[PATIENT" in result or "[MEDECIN" in result + + def test_preserves_medical_content(self): + from src.anonymization.anonymizer import Anonymizer + + anonymizer = Anonymizer(parsed_data={"patient": {}, "medecins": [], "contacts": []}) + text = "Pancréatite aiguë biliaire. Cholécystectomie par cœlioscopie. IMC 34.37." + result = anonymizer.anonymize(text) + + assert "Pancréatite" in result + assert "Cholécystectomie" in result + assert "IMC" in result + + def test_anonymize_phone(self): + from src.anonymization.anonymizer import Anonymizer + + anonymizer = Anonymizer(parsed_data={"patient": {}, "medecins": [], "contacts": []}) + text = "Appeler le 06.25.39.26.82 pour le rendez-vous." + result = anonymizer.anonymize(text) + + assert "06.25.39.26.82" not in result + assert "[TEL" in result + + def test_anonymize_email(self): + from src.anonymization.anonymizer import Anonymizer + + anonymizer = Anonymizer(parsed_data={"patient": {}, "medecins": [], "contacts": []}) + text = "Contact: faudemar@ch-cotebasque.fr" + result = anonymizer.anonymize(text) + + assert "faudemar@ch-cotebasque.fr" not in result + assert "[EMAIL" in result diff --git a/tests/test_extraction.py b/tests/test_extraction.py new file mode 100644 index 0000000..25c3440 --- /dev/null +++ b/tests/test_extraction.py @@ -0,0 +1,126 @@ +"""Tests pour le module d'extraction.""" + +import pytest + +from src.extraction.document_classifier import classify +from src.extraction.crh_parser import parse_crh +from src.extraction.trackare_parser import parse_trackare, _clean_person_name + + +class TestDocumentClassifier: + def test_classify_trackare(self): + text = """CENTRE HOSPITALIER COTE BASQUE +Dossier Patient +Détails des patients +Nom de naissance: CLIER IPP: 01306172 +Détails épisode +Episode No: 23042753 +Signes Vitaux""" + assert classify(text) == "trackare" + + def test_classify_crh(self): + text = """N° Finess CENTRE HOSPITALIER COTE BASQUE +Pôle Spécialités Médicales +Service de Gastro-Entérologie +Mon cher confrère, +Votre patiente a été hospitalisée""" + assert classify(text) == "crh" + + def test_classify_trackare_by_ipp(self): + text = "IPP: 12345678 Episode No: 87654321" + assert classify(text) == "trackare" + + +class TestCRHParser: + def test_parse_patient_info(self): + text = """MME NARBAIS AUDREY +MAISON IRREXELAIA +64430 ST ETIENNE DE BAIGORRY + +Mon cher confrère, +Votre patiente NARBAIS Audrey née le 23/02/1980 a été hospitalisée +du 25/02/2023 au 03/03/2023 pour le motif suivant: +Pancréatite aiguë lithiasique""" + result = parse_crh(text) + + assert result["patient"]["nom_complet"] == "NARBAIS AUDREY" + assert result["patient"]["sexe"] == "F" + assert result["patient"]["date_naissance"] == "23/02/1980" + + def test_parse_sejour(self): + text = """Votre patiente née le 23/02/1980 a été hospitalisée +du 25/02/2023 au 03/03/2023 pour le motif suivant: +Pancréatite aiguë""" + result = parse_crh(text) + + assert result["sejour"]["date_entree"] == "25/02/2023" + assert result["sejour"]["date_sortie"] == "03/03/2023" + + def test_parse_medecins(self): + text = "Dr PUJOS. Dr F. AUDEMAR. Docteur DUTREY Sarah." + result = parse_crh(text) + + assert any("PUJOS" in m for m in result["medecins"]) + assert any("AUDEMAR" in m for m in result["medecins"]) + + +class TestTrackareParser: + def test_parse_patient_info(self): + text = """Nom de naissance: CLIER IPP: 01306172 +Nom et Prénom: NARBAIS AUDREY Date de naissance: 23/02/1980 +Sexe: Féminin Lieu de naissance: CHAMPIGNY SUR MARNE +Adresse: MAISON IRREXELAIA QUARTIER AUZO TTIPI Ville de résidence: ST ETIENNE DE BAIGORRY +Code Postal: 64430 +Episode No: 23042753 +Date d'admission: 25/02/2023 Heure d'admission: 03:07 +Date de sortie: 03/03/2023 +Taille: 162 cm - Poids: 90.2 kg - IMC: 34.370""" + result = parse_trackare(text) + + assert result["patient"]["nom_naissance"] == "CLIER" + assert result["patient"]["nom_prenom"] == "NARBAIS AUDREY" + assert result["patient"]["ipp"] == "01306172" + assert result["patient"]["sexe"] == "F" + assert result["patient"]["date_naissance"] == "23/02/1980" + assert result["patient"]["imc"] == 34.370 + assert result["sejour"]["episode"] == "23042753" + assert result["sejour"]["date_entree"] == "25/02/2023" + + def test_parse_diagnostics(self): + text = """Diagnostic aux urgences +Type Etat Code Date +Principal actif K80.5 Calcul des canaux biliaires (sans angiocholite ni cholécystite) [CMA2] 25/02/2023 05:27""" + result = parse_trackare(text) + + assert len(result["diagnostics"]) >= 1 + assert result["diagnostics"][0]["code_cim10"] == "K80.5" + assert result["diagnostics"][0]["type"] == "Principal" + + def test_parse_vitals(self): + text = """Poids/Taille +Taille [cm] 162,00 +Poids [kg] 90,20 +Indice +de masse 34.370""" + result = parse_trackare(text) + + assert result["signes_vitaux"]["taille_cm"] == 162.0 + assert result["signes_vitaux"]["poids_kg"] >= 90.0 + assert result["signes_vitaux"]["imc"] == 34.370 + + +class TestCleanPersonName: + def test_clean_simple(self): + assert _clean_person_name("Sarah DUTREY") == "Sarah DUTREY" + + def test_clean_with_noise(self): + assert _clean_person_name("Sarah DUTREY une complication") == "Sarah DUTREY" + + def test_clean_multiline(self): + assert _clean_person_name("Sarah\nDUTREY") == "Sarah DUTREY" + + def test_clean_medical_term(self): + assert _clean_person_name("Bilirubine") == "" + + def test_clean_empty(self): + assert _clean_person_name("") == "" diff --git a/tests/test_integration.py b/tests/test_integration.py new file mode 100644 index 0000000..77cf135 --- /dev/null +++ b/tests/test_integration.py @@ -0,0 +1,124 @@ +"""Tests d'intégration end-to-end sur les PDFs réels.""" + +import json +from pathlib import Path + +import pytest + +from src.config import INPUT_DIR, ANONYMIZED_DIR, STRUCTURED_DIR +from src.main import process_pdf + + +# Skip si les PDFs ne sont pas disponibles +CRH_PDF = INPUT_DIR / "CRH 23042753.pdf" +TRACKARE_PDF = INPUT_DIR / "trackare-01306172-23042753_01306172_23042753.pdf" + +needs_pdfs = pytest.mark.skipif( + not CRH_PDF.exists() or not TRACKARE_PDF.exists(), + reason="PDFs de test non disponibles dans input/", +) + + +# Données personnelles connues à vérifier +PATIENT_PII = [ + "NARBAIS", "CLIER", "AUDREY", "01306172", "23042753", + "23/02/1980", "IRREXELAIA", "BAIGORRY", "06.25.39.26.82", +] + +SOIGNANT_NAMES = [ + "DUTREY", "MENDIBOURE", "PUJOS", "AUDEMAR", "MELLIN", + "GUIRESSE", "GOYTINO", "SERRE", "NOVION", +] + + +@needs_pdfs +class TestCRHIntegration: + @pytest.fixture(autouse=True) + def setup(self): + self.anonymized, self.dossier, self.report = process_pdf(CRH_PDF) + + def test_no_patient_pii(self): + text_upper = self.anonymized.upper() + for pii in PATIENT_PII: + assert pii.upper() not in text_upper, f"PII trouvé : {pii}" + + def test_medical_content_preserved(self): + text_lower = self.anonymized.lower() + for term in ["pancréatite", "cholécystectomie", "cholangiographie", "lithiase"]: + assert term in text_lower, f"Terme médical manquant : {term}" + + def test_diagnostic_principal(self): + dp = self.dossier.diagnostic_principal + assert dp is not None + assert dp.cim10_suggestion == "K85.1" + + def test_diagnostics_associes(self): + codes = {d.cim10_suggestion for d in self.dossier.diagnostics_associes} + assert "K80.5" in codes or "K80.2" in codes + + def test_sejour(self): + s = self.dossier.sejour + assert s.sexe == "F" + assert s.age == 43 + assert s.date_entree == "25/02/2023" + assert s.date_sortie == "03/03/2023" + assert s.duree_sejour == 6 + + def test_traitements_have_optional_atc(self): + """Vérifie que les traitements ont le champ code_atc (peut être None).""" + for t in self.dossier.traitements_sortie: + assert hasattr(t, "code_atc") + + +@needs_pdfs +class TestTrackareIntegration: + @pytest.fixture(autouse=True) + def setup(self): + self.anonymized, self.dossier, self.report = process_pdf(TRACKARE_PDF) + + def test_no_patient_pii(self): + text_upper = self.anonymized.upper() + for pii in PATIENT_PII: + assert pii.upper() not in text_upper, f"PII trouvé : {pii}" + + def test_no_soignant_names(self): + # Ignorer "selles" qui contient "SELLE" + text = self.anonymized + for name in SOIGNANT_NAMES: + # Chercher le nom comme mot complet + import re + pattern = re.compile(r"\b" + re.escape(name) + r"\b", re.IGNORECASE) + matches = pattern.findall(text) + assert len(matches) == 0, f"Nom soignant trouvé : {name} ({len(matches)} occurrences)" + + def test_medical_content_preserved(self): + text_lower = self.anonymized.lower() + for term in ["pancréatite", "cholécystectomie", "morphine", "paracétamol"]: + assert term in text_lower, f"Terme médical manquant : {term}" + + def test_diagnostic_principal(self): + dp = self.dossier.diagnostic_principal + assert dp is not None + assert dp.cim10_suggestion in ("K80.5", "K85.1") + + def test_sejour_with_vitals(self): + s = self.dossier.sejour + assert s.sexe == "F" + assert s.age == 43 + assert s.imc is not None + assert s.imc > 30 + assert s.poids is not None + assert s.taille is not None + + def test_biologie(self): + tests = {b.test for b in self.dossier.biologie_cle} + assert "Lipasémie" in tests + assert "CRP" in tests + # Lipasémie doit être anormale + for b in self.dossier.biologie_cle: + if b.test == "Lipasémie": + assert b.anomalie is True + + def test_report_counts(self): + assert self.report.total_replacements > 100 + assert self.report.regex_replacements > 50 diff --git a/tests/test_medical.py b/tests/test_medical.py new file mode 100644 index 0000000..2d89be1 --- /dev/null +++ b/tests/test_medical.py @@ -0,0 +1,238 @@ +"""Tests pour le module d'extraction médicale CIM-10.""" + +import pytest + +from src.config import DossierMedical, Diagnostic +from src.medical.cim10_extractor import ( + extract_medical_info, + _lookup_cim10, + _is_abnormal, +) + + +class TestCIM10Lookup: + def test_pancréatite_lithiasique(self): + assert _lookup_cim10("pancréatite aiguë lithiasique") == "K85.1" + + def test_lithiase_choledoque(self): + assert _lookup_cim10("lithiase du cholédoque") == "K80.5" + + def test_eruption_medicamenteuse(self): + assert _lookup_cim10("éruption médicamenteuse") == "L27.0" + + def test_obesite(self): + assert _lookup_cim10("obésité") == "E66.0" + + def test_unknown(self): + assert _lookup_cim10("grippe") is None + + +class TestIsAbnormal: + def test_lipasemie_high(self): + assert _is_abnormal("Lipasémie", "6000") is True + + def test_crp_normal(self): + assert _is_abnormal("CRP", "3") is False + + def test_crp_high(self): + assert _is_abnormal("CRP", "12") is True + + def test_troponine_negative(self): + assert _is_abnormal("Troponine", "négative") is False + + def test_unknown_test(self): + assert _is_abnormal("TestInconnu", "42") is None + + +class TestExtractMedicalInfo: + def test_extract_from_trackare(self): + parsed = { + "type": "trackare", + "patient": { + "sexe": "F", + "date_naissance": "23/02/1980", + "imc": 34.37, + "poids_kg": 90.2, + "taille_cm": 162, + }, + "sejour": { + "date_entree": "25/02/2023", + "date_sortie": "03/03/2023", + }, + "urgences": {"mode_entree": "Urgences"}, + "diagnostics": [ + { + "type": "Principal", + "statut": "actif", + "code_cim10": "K80.5", + "libelle": "Calcul des canaux biliaires", + } + ], + "signes_vitaux": {"imc": 34.37, "poids_kg": 90.2, "taille_cm": 162}, + } + text = """Pancréatite aiguë lithiasique. +Cholécystectomie par cœlioscopie le 01/03. +Cholangiographie retrouvant une lithiase du bas cholédoque. +TDM à J3 retrouve : Absence de signe de gravité. Score de Balthazar à 0. +Éruption cutanée érythémateuse. Réaction au tramadol. +IMC: 34.370 +TTT de sortie : +Paracétamol et Acupan si besoin +Cétirizine + +Devenir : sortie le 03/03.""" + + dossier = extract_medical_info(parsed, text) + + # Séjour + assert dossier.sejour.sexe == "F" + assert dossier.sejour.age == 43 + assert dossier.sejour.duree_sejour == 6 + assert dossier.sejour.imc == 34.37 + + # DP + assert dossier.diagnostic_principal is not None + assert dossier.diagnostic_principal.cim10_suggestion == "K80.5" + + # DAS + codes = {d.cim10_suggestion for d in dossier.diagnostics_associes} + assert "L27.0" in codes # Éruption médicamenteuse + assert "E66.0" in codes # Obésité + + # Actes + acte_codes = {a.code_ccam_suggestion for a in dossier.actes_ccam} + assert "HMFC004" in acte_codes # Cholécystectomie + assert "ZCQK002" in acte_codes # TDM + + # Traitements + meds = [t.medicament for t in dossier.traitements_sortie] + assert any("Paracétamol" in m for m in meds) + assert any("Cétirizine" in m for m in meds) + + # Bio + tests = {b.test for b in dossier.biologie_cle} + assert "Troponine" not in tests # pas dans ce texte minimal + + # Imagerie + assert len(dossier.imagerie) >= 1 + assert any("Balthazar" in (i.score or "") for i in dossier.imagerie) + + # Complications + assert any("cutanée" in c.lower() for c in dossier.complications) + + def test_extract_without_edsnlp(self): + """Vérifie que l'extraction fonctionne sans résultat edsnlp.""" + parsed = { + "type": "crh", + "patient": {"sexe": "M"}, + "sejour": {}, + "diagnostics": [], + } + text = "Pancréatite aiguë biliaire.\nTTT de sortie :\nParacétamol 1g matin et soir\n\nDevenir : retour." + + dossier = extract_medical_info(parsed, text, edsnlp_result=None) + assert dossier.diagnostic_principal is not None + assert dossier.diagnostic_principal.cim10_suggestion == "K85.1" + assert len(dossier.traitements_sortie) >= 1 + + def test_extract_with_edsnlp_result(self): + """Vérifie que les résultats edsnlp enrichissent les diagnostics.""" + from src.medical.edsnlp_pipeline import EdsnlpResult, CIM10Entity, DrugEntity + + parsed = { + "type": "crh", + "patient": {"sexe": "M"}, + "sejour": {}, + "diagnostics": [], + } + text = "Patient admis pour douleur abdominale." + + edsnlp_result = EdsnlpResult( + cim10_entities=[ + CIM10Entity(texte="douleur abdominale", code="R10.4", negation=False), + ], + drug_entities=[], + ) + + dossier = extract_medical_info(parsed, text, edsnlp_result=edsnlp_result) + # Le DP devrait être trouvé via edsnlp + assert dossier.diagnostic_principal is not None + assert dossier.diagnostic_principal.cim10_suggestion == "R10.4" + + def test_negated_edsnlp_entities_ignored(self): + """Vérifie que les entités niées par edsnlp ne sont pas retenues.""" + from src.medical.edsnlp_pipeline import EdsnlpResult, CIM10Entity + + parsed = { + "type": "crh", + "patient": {"sexe": "M"}, + "sejour": {}, + "diagnostics": [], + } + text = "Pas de fièvre. Patient en bon état." + + edsnlp_result = EdsnlpResult( + cim10_entities=[ + CIM10Entity(texte="fièvre", code="R50.9", negation=True), + ], + ) + + dossier = extract_medical_info(parsed, text, edsnlp_result=edsnlp_result) + # L'entité niée ne doit pas apparaître comme diagnostic + all_codes = set() + if dossier.diagnostic_principal: + all_codes.add(dossier.diagnostic_principal.cim10_suggestion) + for d in dossier.diagnostics_associes: + all_codes.add(d.cim10_suggestion) + assert "R50.9" not in all_codes + + def test_drug_atc_enrichment(self): + """Vérifie que les codes ATC edsnlp sont ajoutés aux traitements.""" + from src.medical.edsnlp_pipeline import EdsnlpResult, DrugEntity + + parsed = { + "type": "crh", + "patient": {"sexe": "M"}, + "sejour": {}, + "diagnostics": [], + } + text = "TTT de sortie :\nParacétamol 1g matin\n\nDevenir : retour." + + edsnlp_result = EdsnlpResult( + drug_entities=[ + DrugEntity(texte="Paracétamol", code_atc="N02BE01", negation=False), + ], + ) + + dossier = extract_medical_info(parsed, text, edsnlp_result=edsnlp_result) + assert len(dossier.traitements_sortie) >= 1 + paracetamol = next( + (t for t in dossier.traitements_sortie if "Paracétamol" in t.medicament), None + ) + assert paracetamol is not None + assert paracetamol.code_atc == "N02BE01" + + def test_edsnlp_negation_for_complications(self): + """Vérifie que la négation edsnlp filtre les complications.""" + from src.medical.edsnlp_pipeline import EdsnlpResult, CIM10Entity + + parsed = { + "type": "crh", + "patient": {"sexe": "M"}, + "sejour": {}, + "diagnostics": [], + } + text = "Pas de fièvre ni d'infection. Bonne évolution." + + edsnlp_result = EdsnlpResult( + cim10_entities=[ + CIM10Entity(texte="fièvre", code="R50.9", negation=True), + CIM10Entity(texte="infection", code="A49.9", negation=True), + ], + ) + + dossier = extract_medical_info(parsed, text, edsnlp_result=edsnlp_result) + # Fièvre et infection sont niées, ne doivent pas apparaître dans complications + complication_terms = [c.lower() for c in dossier.complications] + assert "fièvre" not in complication_terms + assert "infection" not in complication_terms