Initial commit
This commit is contained in:
186
config/config.example.yaml
Normal file
186
config/config.example.yaml
Normal file
@@ -0,0 +1,186 @@
|
||||
# Configuration exemple pour le Pipeline MCO PMSI
|
||||
# Copier ce fichier vers config/config.yaml et adapter les valeurs
|
||||
|
||||
# Base de données
|
||||
database:
|
||||
url: "postgresql://user:password@localhost:5432/pmsi_db"
|
||||
# Pour SQLite en développement :
|
||||
# url: "sqlite:///data/pmsi_dev.db"
|
||||
echo: false
|
||||
pool_size: 10
|
||||
max_overflow: 20
|
||||
|
||||
# Modèle LLM
|
||||
llm:
|
||||
provider: "ollama" # ollama, vllm, llamacpp
|
||||
base_url: "http://localhost:11434"
|
||||
model_name: "mistral"
|
||||
model_tag: "7b-instruct-v0.2"
|
||||
|
||||
# Paramètres d'inférence
|
||||
inference:
|
||||
temperature: 0.1 # Faible pour reproductibilité
|
||||
top_p: 0.9
|
||||
max_tokens: 2048
|
||||
context_window: 8192
|
||||
|
||||
# Prompts
|
||||
prompts:
|
||||
codeur_version: "v1.0"
|
||||
verificateur_version: "v1.1" # Doit être différent du codeur
|
||||
|
||||
# Embeddings
|
||||
embeddings:
|
||||
model: "sentence-transformers/paraphrase-multilingual-mpnet-base-v2"
|
||||
device: "cpu" # cpu ou cuda
|
||||
batch_size: 32
|
||||
normalize: true
|
||||
|
||||
# Vector store
|
||||
vector_store:
|
||||
type: "faiss" # faiss ou qdrant
|
||||
dimension: 768
|
||||
index_type: "HNSW"
|
||||
|
||||
# Pour Qdrant
|
||||
# url: "http://localhost:6333"
|
||||
# collection_name: "pmsi_referentiels"
|
||||
|
||||
# Recherche RAG
|
||||
rag:
|
||||
# Recherche hybride
|
||||
bm25_weight: 0.3
|
||||
vector_weight: 0.7
|
||||
top_k_retrieval: 50
|
||||
top_k_reranking: 10
|
||||
|
||||
# Reranking
|
||||
reranker_model: "cross-encoder/ms-marco-multilingual-MiniLM-L-12-v2"
|
||||
alphabetic_index_boost: 1.2 # Boost pour résultats de l'index alphabétique
|
||||
|
||||
# Référentiels ATIH
|
||||
referentiels:
|
||||
cim10:
|
||||
version: "2026"
|
||||
file_path: "data/referentiels/cim-10-fr_2026_a_usage_pmsi_version_provisoire_111225.pdf"
|
||||
chunk_size: 500
|
||||
chunk_overlap: 100
|
||||
|
||||
ccam:
|
||||
version: "2025"
|
||||
file_path: "data/referentiels/actualisation_ccam_descriptive_a_usage_pmsi_v4_2025.pdf"
|
||||
chunk_size: 600
|
||||
chunk_overlap: 100
|
||||
|
||||
guide_mco:
|
||||
version: "2026"
|
||||
file_path: "data/referentiels/guide_methodo_mco_2026_version_provisoire.pdf"
|
||||
chunk_size: 800
|
||||
chunk_overlap: 150
|
||||
|
||||
# Fonction de groupage
|
||||
groupage:
|
||||
version: "2026"
|
||||
# Chemin vers la bibliothèque de groupage ATIH
|
||||
library_path: "/opt/atih/groupage/libgroupage.so"
|
||||
|
||||
# Protection des DIP
|
||||
pii:
|
||||
enabled: true
|
||||
detection_method: "hybrid" # hybrid, regex, ner
|
||||
anonymize_exports: true
|
||||
recall_threshold: 0.95 # Préférer les faux positifs
|
||||
|
||||
# Validation PMSI
|
||||
validation:
|
||||
max_questions: 5
|
||||
confidence_threshold_low: 0.5
|
||||
confidence_threshold_high: 0.8
|
||||
|
||||
# Mode conservateur vs agressif
|
||||
mode: "conservative" # conservative ou aggressive
|
||||
|
||||
# Règles de codage
|
||||
rules:
|
||||
version: "v1.0"
|
||||
file_path: "config/rules.yaml"
|
||||
|
||||
# Priorités de sources
|
||||
source_priorities:
|
||||
cr_operatoire: 1
|
||||
cr_medical: 2
|
||||
imagerie: 3
|
||||
biologie: 4
|
||||
courrier: 5
|
||||
|
||||
# Audit et logging
|
||||
audit:
|
||||
enabled: true
|
||||
log_level: "INFO" # DEBUG, INFO, WARNING, ERROR
|
||||
log_file: "logs/pipeline.log"
|
||||
log_format: "json" # json ou text
|
||||
|
||||
# Chiffrement des exports
|
||||
encryption:
|
||||
enabled: true
|
||||
algorithm: "AES-256-GCM"
|
||||
key_file: "config/encryption.key"
|
||||
|
||||
# Performance
|
||||
performance:
|
||||
# Timeouts (en secondes)
|
||||
timeout_mono_document_p50: 20
|
||||
timeout_mono_document_p95: 45
|
||||
timeout_multi_documents_p50: 35
|
||||
timeout_multi_documents_p95: 75
|
||||
|
||||
# Mode résultats partiels
|
||||
partial_results_enabled: true
|
||||
|
||||
# Cache
|
||||
cache_embeddings: true
|
||||
cache_ttl: 3600 # 1 heure
|
||||
|
||||
# Métriques et monitoring
|
||||
monitoring:
|
||||
enabled: true
|
||||
metrics_interval: 60 # secondes
|
||||
|
||||
# Seuils d'alerte
|
||||
thresholds:
|
||||
codes_sans_preuve_max: 0.05 # 5%
|
||||
diagnostics_nies_codes_max: 0.01 # 1%
|
||||
das_fantomes_max: 0.10 # 10%
|
||||
actes_sans_preuve_max: 0.02 # 2%
|
||||
|
||||
# Jeu gold pour validation
|
||||
gold_set:
|
||||
path: "data/gold_set/"
|
||||
min_size: 200
|
||||
specialties: ["chirurgie", "medecine"]
|
||||
|
||||
# Seuils de non-régression
|
||||
regression_thresholds:
|
||||
dp_accuracy_min: 0.70
|
||||
das_precision_min: 0.60
|
||||
das_recall_min: 0.65
|
||||
tim_acceptance_min: 0.50
|
||||
|
||||
# Sécurité
|
||||
security:
|
||||
# Contrôle d'accès
|
||||
rbac_enabled: true
|
||||
|
||||
# Rôles
|
||||
roles:
|
||||
- name: "tim"
|
||||
permissions: ["view", "correct", "validate"]
|
||||
- name: "responsable_dim"
|
||||
permissions: ["view", "correct", "validate", "export", "configure"]
|
||||
- name: "admin"
|
||||
permissions: ["all"]
|
||||
|
||||
# Authentification
|
||||
auth:
|
||||
method: "local" # local, ldap, oauth
|
||||
session_timeout: 3600 # 1 heure
|
||||
46
config/edsnlp_config.yaml
Normal file
46
config/edsnlp_config.yaml
Normal file
@@ -0,0 +1,46 @@
|
||||
# EDS-NLP Configuration
|
||||
# Configuration for EDS-NLP integration in the MCO PMSI coding pipeline
|
||||
|
||||
# Model configuration
|
||||
model_name: "fr_core_news_sm" # spaCy French model
|
||||
|
||||
# Component toggles - enable/disable specific EDS-NLP components
|
||||
enable_sentences: true
|
||||
enable_negation: true
|
||||
enable_hypothesis: true
|
||||
enable_history: true
|
||||
enable_family: true
|
||||
enable_reported_speech: true
|
||||
|
||||
# Performance tuning
|
||||
cache_pipeline: true
|
||||
batch_size: 32
|
||||
max_length: 1000000 # Maximum document length in characters
|
||||
|
||||
# Fallback configuration
|
||||
enable_fallback: true
|
||||
max_failures_before_cooldown: 3
|
||||
cooldown_period_seconds: 300 # 5 minutes
|
||||
|
||||
# Timeout configuration
|
||||
processing_timeout_seconds: 30.0
|
||||
|
||||
# Normalization
|
||||
enable_normalization: true
|
||||
abbreviations_file: "config/medical_abbreviations.json"
|
||||
|
||||
# Entity extraction configuration
|
||||
extract_diagnostics: true
|
||||
extract_medications: true
|
||||
extract_procedures: true
|
||||
extract_dates: true
|
||||
extract_measurements: true
|
||||
|
||||
# Confidence thresholds
|
||||
min_entity_confidence: 0.3
|
||||
min_qualifier_confidence: 0.5
|
||||
|
||||
# Logging configuration
|
||||
log_processing_time: true
|
||||
log_entity_counts: true
|
||||
performance_warning_threshold: 1.0 # seconds
|
||||
191
config/medical_abbreviations.json
Normal file
191
config/medical_abbreviations.json
Normal file
@@ -0,0 +1,191 @@
|
||||
{
|
||||
"comment": "Medical abbreviations dictionary for French clinical terms",
|
||||
"abbreviations": {
|
||||
"avc": "accident vasculaire cérébral",
|
||||
"ait": "accident ischémique transitoire",
|
||||
"irc": "insuffisance rénale chronique",
|
||||
"ira": "insuffisance rénale aiguë",
|
||||
"icc": "insuffisance cardiaque congestive",
|
||||
"ic": "insuffisance cardiaque",
|
||||
"hta": "hypertension artérielle",
|
||||
"bpco": "bronchopneumopathie chronique obstructive",
|
||||
"im": "infarctus du myocarde",
|
||||
"idm": "infarctus du myocarde",
|
||||
"aomi": "artériopathie oblitérante des membres inférieurs",
|
||||
"oap": "œdème aigu du poumon",
|
||||
"ep": "embolie pulmonaire",
|
||||
"tvp": "thrombose veineuse profonde",
|
||||
"fa": "fibrillation auriculaire",
|
||||
"ac/fa": "arythmie complète par fibrillation auriculaire",
|
||||
"rao": "rétention aiguë d'urine",
|
||||
"ivg": "interruption volontaire de grossesse",
|
||||
"img": "interruption médicale de grossesse",
|
||||
"geu": "grossesse extra-utérine",
|
||||
"map": "menace d'accouchement prématuré",
|
||||
"rciu": "retard de croissance intra-utérin",
|
||||
"hta": "hypertension artérielle",
|
||||
"db": "diabète",
|
||||
"dt1": "diabète de type 1",
|
||||
"dt2": "diabète de type 2",
|
||||
"dnid": "diabète non insulino-dépendant",
|
||||
"did": "diabète insulino-dépendant",
|
||||
"mici": "maladie inflammatoire chronique de l'intestin",
|
||||
"rch": "rectocolite hémorragique",
|
||||
"mc": "maladie de crohn",
|
||||
"sep": "sclérose en plaques",
|
||||
"sla": "sclérose latérale amyotrophique",
|
||||
"vhb": "virus de l'hépatite b",
|
||||
"vhc": "virus de l'hépatite c",
|
||||
"vih": "virus de l'immunodéficience humaine",
|
||||
"sida": "syndrome d'immunodéficience acquise",
|
||||
"bk": "bacille de koch",
|
||||
"tbc": "tuberculose",
|
||||
"palu": "paludisme",
|
||||
"covid": "maladie à coronavirus 2019",
|
||||
"sars-cov-2": "coronavirus 2 du syndrome respiratoire aigu sévère",
|
||||
"ecg": "électrocardiogramme",
|
||||
"ecbu": "examen cytobactériologique des urines",
|
||||
"nfs": "numération formule sanguine",
|
||||
"crp": "protéine c réactive",
|
||||
"vs": "vitesse de sédimentation",
|
||||
"ldh": "lactate déshydrogénase",
|
||||
"got": "glutamate oxaloacétate transaminase",
|
||||
"gpt": "glutamate pyruvate transaminase",
|
||||
"alat": "alanine aminotransférase",
|
||||
"asat": "aspartate aminotransférase",
|
||||
"ggt": "gamma-glutamyl transférase",
|
||||
"pal": "phosphatase alcaline",
|
||||
"tp": "taux de prothrombine",
|
||||
"tca": "temps de céphaline activée",
|
||||
"inr": "international normalized ratio",
|
||||
"hb": "hémoglobine",
|
||||
"ht": "hématocrite",
|
||||
"gb": "globules blancs",
|
||||
"gr": "globules rouges",
|
||||
"plt": "plaquettes",
|
||||
"pnn": "polynucléaires neutrophiles",
|
||||
"pne": "polynucléaires éosinophiles",
|
||||
"pnb": "polynucléaires basophiles",
|
||||
"lympho": "lymphocytes",
|
||||
"mono": "monocytes",
|
||||
"na": "sodium",
|
||||
"k": "potassium",
|
||||
"cl": "chlore",
|
||||
"ca": "calcium",
|
||||
"mg": "magnésium",
|
||||
"p": "phosphore",
|
||||
"urée": "urée sanguine",
|
||||
"créat": "créatinine",
|
||||
"dfg": "débit de filtration glomérulaire",
|
||||
"glyc": "glycémie",
|
||||
"hba1c": "hémoglobine glyquée",
|
||||
"chol": "cholestérol",
|
||||
"tg": "triglycérides",
|
||||
"hdl": "high density lipoprotein",
|
||||
"ldl": "low density lipoprotein",
|
||||
"tsh": "thyroid stimulating hormone",
|
||||
"t3": "triiodothyronine",
|
||||
"t4": "thyroxine",
|
||||
"psa": "antigène prostatique spécifique",
|
||||
"cea": "antigène carcino-embryonnaire",
|
||||
"ca 19-9": "antigène carbohydrate 19-9",
|
||||
"ca 15-3": "antigène carbohydrate 15-3",
|
||||
"ca 125": "antigène carbohydrate 125",
|
||||
"afp": "alpha-fœtoprotéine",
|
||||
"bhcg": "bêta-hcg",
|
||||
"ains": "anti-inflammatoire non stéroïdien",
|
||||
"iec": "inhibiteur de l'enzyme de conversion",
|
||||
"ara2": "antagoniste des récepteurs de l'angiotensine 2",
|
||||
"bb": "bêta-bloquant",
|
||||
"inh": "inhibiteur",
|
||||
"atb": "antibiotique",
|
||||
"avk": "anti-vitamine k",
|
||||
"aod": "anticoagulant oral direct",
|
||||
"naco": "nouvel anticoagulant oral",
|
||||
"hbpm": "héparine de bas poids moléculaire",
|
||||
"hnf": "héparine non fractionnée",
|
||||
"aap": "antiagrégant plaquettaire",
|
||||
"ipp": "inhibiteur de la pompe à protons",
|
||||
"irm": "imagerie par résonance magnétique",
|
||||
"tdm": "tomodensitométrie",
|
||||
"pet": "tomographie par émission de positons",
|
||||
"echo": "échographie",
|
||||
"rx": "radiographie",
|
||||
"eeg": "électroencéphalogramme",
|
||||
"emg": "électromyogramme",
|
||||
"eto": "échographie trans-œsophagienne",
|
||||
"ett": "échographie trans-thoracique",
|
||||
"fibro": "fibroscopie",
|
||||
"colo": "coloscopie",
|
||||
"gastro": "gastroscopie",
|
||||
"fogd": "fibroscopie œso-gastro-duodénale",
|
||||
"pl": "ponction lombaire",
|
||||
"pbl": "ponction biopsie hépatique",
|
||||
"ktc": "cathéter central",
|
||||
"vvc": "voie veineuse centrale",
|
||||
"vvp": "voie veineuse périphérique",
|
||||
"sng": "sonde naso-gastrique",
|
||||
"sad": "sonde à demeure",
|
||||
"kt": "cathéter",
|
||||
"drain": "drainage",
|
||||
"vac": "vacuum assisted closure",
|
||||
"o2": "oxygène",
|
||||
"vni": "ventilation non invasive",
|
||||
"vm": "ventilation mécanique",
|
||||
"cpap": "continuous positive airway pressure",
|
||||
"peep": "positive end-expiratory pressure",
|
||||
"fio2": "fraction inspirée en oxygène",
|
||||
"spo2": "saturation pulsée en oxygène",
|
||||
"pao2": "pression artérielle en oxygène",
|
||||
"paco2": "pression artérielle en dioxyde de carbone",
|
||||
"ph": "potentiel hydrogène",
|
||||
"hco3": "bicarbonates",
|
||||
"be": "base excess",
|
||||
"lac": "lactates",
|
||||
"pa": "pression artérielle",
|
||||
"pas": "pression artérielle systolique",
|
||||
"pad": "pression artérielle diastolique",
|
||||
"pam": "pression artérielle moyenne",
|
||||
"fc": "fréquence cardiaque",
|
||||
"fr": "fréquence respiratoire",
|
||||
"t°": "température",
|
||||
"poids": "poids corporel",
|
||||
"taille": "taille",
|
||||
"imc": "indice de masse corporelle",
|
||||
"sc": "surface corporelle",
|
||||
"glasgow": "score de glasgow",
|
||||
"asa": "american society of anesthesiologists",
|
||||
"nyha": "new york heart association",
|
||||
"child": "score de child-pugh",
|
||||
"meld": "model for end-stage liver disease",
|
||||
"apache": "acute physiology and chronic health evaluation",
|
||||
"sofa": "sequential organ failure assessment",
|
||||
"saps": "simplified acute physiology score",
|
||||
"oms": "organisation mondiale de la santé",
|
||||
"ecog": "eastern cooperative oncology group",
|
||||
"karnofsky": "indice de karnofsky",
|
||||
"mmse": "mini mental state examination",
|
||||
"moca": "montreal cognitive assessment",
|
||||
"iadl": "instrumental activities of daily living",
|
||||
"adl": "activities of daily living",
|
||||
"gir": "groupe iso-ressources",
|
||||
"aggir": "autonomie gérontologie groupes iso-ressources",
|
||||
"mna": "mini nutritional assessment",
|
||||
"norton": "échelle de norton",
|
||||
"braden": "échelle de braden",
|
||||
"eva": "échelle visuelle analogique",
|
||||
"en": "échelle numérique",
|
||||
"evs": "échelle verbale simple",
|
||||
"doloplus": "échelle doloplus",
|
||||
"algoplus": "échelle algoplus",
|
||||
"ecpa": "échelle comportementale de la douleur chez la personne âgée",
|
||||
"hamilton": "échelle de hamilton",
|
||||
"madrs": "montgomery-åsberg depression rating scale",
|
||||
"hads": "hospital anxiety and depression scale",
|
||||
"panss": "positive and negative syndrome scale",
|
||||
"bprs": "brief psychiatric rating scale",
|
||||
"ymrs": "young mania rating scale",
|
||||
"cgi": "clinical global impression",
|
||||
"gaf": "global assessment of functioning"
|
||||
}
|
||||
}
|
||||
84
config/rules/aggressive_rules.yaml
Normal file
84
config/rules/aggressive_rules.yaml
Normal file
@@ -0,0 +1,84 @@
|
||||
# Règles de codage PMSI - Mode agressif
|
||||
# Version: 1.0.0
|
||||
|
||||
version: "1.0.0"
|
||||
name: "Règles de codage PMSI - Mode agressif"
|
||||
description: "Jeu de règles avec mode agressif pour maximiser le codage"
|
||||
mode: "agressif"
|
||||
|
||||
rules:
|
||||
# Règles DP - Mode agressif
|
||||
- rule_id: "dp_001"
|
||||
name: "DP obligatoire"
|
||||
description: "Un diagnostic principal doit toujours être présent"
|
||||
category: "dp"
|
||||
condition:
|
||||
type: "required"
|
||||
action: "reject_if_missing"
|
||||
severity: "bloquant"
|
||||
enabled: true
|
||||
|
||||
- rule_id: "dp_002_agg"
|
||||
name: "DP avec confiance minimale réduite"
|
||||
description: "Le DP peut avoir un score de confiance >= 0.5 en mode agressif"
|
||||
category: "dp"
|
||||
condition:
|
||||
min_confidence: 0.5
|
||||
action: "flag_for_review"
|
||||
severity: "info"
|
||||
enabled: true
|
||||
|
||||
# Règles DAS - Mode agressif
|
||||
- rule_id: "das_001_agg"
|
||||
name: "DAS avec preuves assouplies"
|
||||
description: "Les DAS peuvent être proposés avec preuves indirectes"
|
||||
category: "das"
|
||||
condition:
|
||||
min_evidence: 1
|
||||
allow_indirect: true
|
||||
action: "flag_for_review"
|
||||
severity: "info"
|
||||
enabled: true
|
||||
|
||||
- rule_id: "das_002"
|
||||
name: "Limite de DAS étendue"
|
||||
description: "Maximum 30 DAS par séjour en mode agressif"
|
||||
category: "das"
|
||||
condition:
|
||||
max_count: 30
|
||||
action: "reject_excess"
|
||||
severity: "bloquant"
|
||||
enabled: true
|
||||
|
||||
# Règles CCAM
|
||||
- rule_id: "ccam_001"
|
||||
name: "Date CCAM obligatoire"
|
||||
description: "Chaque acte CCAM doit avoir une date de réalisation"
|
||||
category: "ccam"
|
||||
condition:
|
||||
type: "required_date"
|
||||
action: "reject_if_missing"
|
||||
severity: "bloquant"
|
||||
enabled: true
|
||||
|
||||
# Règles de validation - Mode agressif
|
||||
- rule_id: "neg_001"
|
||||
name: "Pas de codes pour faits niés"
|
||||
description: "Les faits cliniques niés ne doivent jamais être codés"
|
||||
category: "validation"
|
||||
condition:
|
||||
qualifier: "nié"
|
||||
action: "reject_code"
|
||||
severity: "bloquant"
|
||||
enabled: true
|
||||
|
||||
- rule_id: "susp_001_agg"
|
||||
name: "DAS possibles pour faits suspectés"
|
||||
description: "Les faits suspectés peuvent être codés comme DAS en mode agressif"
|
||||
category: "validation"
|
||||
condition:
|
||||
qualifier: "suspecté"
|
||||
code_type: "das"
|
||||
action: "allow_with_flag"
|
||||
severity: "info"
|
||||
enabled: true
|
||||
135
config/rules/default_rules.yaml
Normal file
135
config/rules/default_rules.yaml
Normal file
@@ -0,0 +1,135 @@
|
||||
# Règles de codage PMSI par défaut
|
||||
# Version: 1.0.0
|
||||
|
||||
version: "1.0.0"
|
||||
name: "Règles de codage PMSI - Établissement"
|
||||
description: "Jeu de règles de codage pour l'établissement avec mode conservateur"
|
||||
mode: "conservateur"
|
||||
|
||||
rules:
|
||||
# Règles pour le Diagnostic Principal (DP)
|
||||
- rule_id: "dp_001"
|
||||
name: "DP obligatoire"
|
||||
description: "Un diagnostic principal doit toujours être présent"
|
||||
category: "dp"
|
||||
condition:
|
||||
type: "required"
|
||||
action: "reject_if_missing"
|
||||
severity: "bloquant"
|
||||
enabled: true
|
||||
|
||||
- rule_id: "dp_002"
|
||||
name: "DP avec preuves suffisantes"
|
||||
description: "Le DP doit avoir au moins une preuve textuelle"
|
||||
category: "dp"
|
||||
condition:
|
||||
min_evidence: 1
|
||||
action: "reject_if_insufficient"
|
||||
severity: "bloquant"
|
||||
enabled: true
|
||||
|
||||
- rule_id: "dp_003"
|
||||
name: "DP avec confiance minimale"
|
||||
description: "Le DP doit avoir un score de confiance >= 0.7"
|
||||
category: "dp"
|
||||
condition:
|
||||
min_confidence: 0.7
|
||||
action: "flag_for_review"
|
||||
severity: "à_revoir"
|
||||
enabled: true
|
||||
|
||||
# Règles pour les Diagnostics Associés Significatifs (DAS)
|
||||
- rule_id: "das_001"
|
||||
name: "DAS avec preuves"
|
||||
description: "Chaque DAS doit avoir au moins une preuve"
|
||||
category: "das"
|
||||
condition:
|
||||
min_evidence: 1
|
||||
action: "reject_if_insufficient"
|
||||
severity: "à_revoir"
|
||||
enabled: true
|
||||
|
||||
- rule_id: "das_002"
|
||||
name: "Limite de DAS"
|
||||
description: "Maximum 20 DAS par séjour"
|
||||
category: "das"
|
||||
condition:
|
||||
max_count: 20
|
||||
action: "reject_excess"
|
||||
severity: "bloquant"
|
||||
enabled: true
|
||||
|
||||
# Règles pour les actes CCAM
|
||||
- rule_id: "ccam_001"
|
||||
name: "Date CCAM obligatoire"
|
||||
description: "Chaque acte CCAM doit avoir une date de réalisation (règle 2026)"
|
||||
category: "ccam"
|
||||
condition:
|
||||
type: "required_date"
|
||||
action: "reject_if_missing"
|
||||
severity: "bloquant"
|
||||
enabled: true
|
||||
|
||||
- rule_id: "ccam_002"
|
||||
name: "CCAM avec preuve explicite"
|
||||
description: "Les actes CCAM doivent avoir une preuve explicite dans le dossier"
|
||||
category: "ccam"
|
||||
condition:
|
||||
min_evidence: 1
|
||||
explicit: true
|
||||
action: "reject_if_insufficient"
|
||||
severity: "bloquant"
|
||||
enabled: true
|
||||
|
||||
# Règles de validation générale
|
||||
- rule_id: "neg_001"
|
||||
name: "Pas de codes pour faits niés"
|
||||
description: "Les faits cliniques niés ne doivent jamais être codés"
|
||||
category: "validation"
|
||||
condition:
|
||||
qualifier: "nié"
|
||||
action: "reject_code"
|
||||
severity: "bloquant"
|
||||
enabled: true
|
||||
|
||||
- rule_id: "susp_001"
|
||||
name: "Pas de DP pour faits suspectés"
|
||||
description: "Les faits suspectés ne peuvent pas être codés comme DP"
|
||||
category: "validation"
|
||||
condition:
|
||||
qualifier: "suspecté"
|
||||
code_type: "dp"
|
||||
action: "reject_as_dp"
|
||||
severity: "bloquant"
|
||||
enabled: true
|
||||
|
||||
- rule_id: "ant_001"
|
||||
name: "Pas de DP pour antécédents"
|
||||
description: "Les antécédents ne peuvent pas être codés comme DP"
|
||||
category: "validation"
|
||||
condition:
|
||||
temporality: "antécédent"
|
||||
code_type: "dp"
|
||||
action: "reject_as_dp"
|
||||
severity: "bloquant"
|
||||
enabled: true
|
||||
|
||||
- rule_id: "val_001"
|
||||
name: "Cohérence DP/DAS"
|
||||
description: "Le DP ne doit pas être répété dans les DAS"
|
||||
category: "validation"
|
||||
condition:
|
||||
type: "no_duplicate_dp_das"
|
||||
action: "flag_for_review"
|
||||
severity: "à_revoir"
|
||||
enabled: true
|
||||
|
||||
- rule_id: "val_002"
|
||||
name: "Codes obsolètes"
|
||||
description: "Interdire l'utilisation de codes CIM-10 obsolètes"
|
||||
category: "validation"
|
||||
condition:
|
||||
type: "check_obsolete"
|
||||
action: "reject_code"
|
||||
severity: "bloquant"
|
||||
enabled: true
|
||||
Reference in New Issue
Block a user