verifier_site_actif
Cross-reference FINESS, RPPS, and DINUM to verify if a health establishment is still active. Detects closed SIRETs mistakenly listed as active in FINESS.
Instructions
Vérifie si un établissement de santé FINESS est encore en activité en croisant FINESS DREES ↔ RPPS (pivot SIRET) ↔ DINUM (liste complète des SIRET du SIREN, incluant les fermés). Détecte les SIRET fermés encore listés actifs côté FINESS (DREES a 1-2 mois de retard).
V0.16 — fix succession M&A : quand un site a changé d'exploitant (rachat), l'ancien SIRET fermé et le repreneur actif coexistent à la même adresse. Le resolver privilégie désormais le SIRET ACTIF co-localisé avec le FINESS (distance géodésique ≤ 100 m, recalibré V0.16.1 — le géocodage DREES place le point FINESS à plusieurs dizaines de mètres de l'adresse réelle) — avant, le verdict pouvait être ferme à tort, le best_match étant choisi sur la seule ressemblance d'adresse. Parmi les co-localisés, seul l'actif de la bande la plus proche prime : un voisin actif d'une autre adresse ne bascule pas le verdict. Un site RÉELLEMENT fermé reste ferme (aucun SIRET actif co-localisé).
Logique :
Lookup FINESS pour récupérer raison sociale + adresse + téléphone DREES
SIRET candidats via le resolver : pivot RPPS, puis fallback géo DINUM /near_point (récupère TOUS les SIRET autour de l'adresse FINESS, actifs ET fermés — capte le repreneur invisible côté RPPS)
best_match= le SIRET ACTIF co-localisé avec le FINESS s'il en existe un ; sinon le meilleur candidat (possiblement fermé). La co-localisation est une distance géo, pas un score textuel.2 verdicts distincts :
verdict_site(actif/ferme/indetermine) : basé surbest_match.actif. C'est le verdict qui compte pour un audit territorial.verdict_groupe(actif/ferme/indetermine) : basé sur l'état admin de l'UL parente (champactifDINUM). Une UL active peut très bien avoir un site fermé.
Format de retour : objet LookupResult discriminé par found. Quand found: true, le payload contient finess (vue DREES), candidates (liste enrichie — chaque candidat porte distance_finess_m), best_match, sirens_explored, verdict_site, verdict_groupe, succession ({ detected, exploitants_precedents } — les SIRET fermés co-localisés avec le repreneur ; fait brut, le tool ne qualifie PAS de « rachat »), explication. Quand num_finess est absent de FINESS DREES, le tool retourne {found: false, lookupStatus: 'not_found', message, ...}.
Coût : 1 RPC FINESS + 1 SELECT rpps + N appels DINUM (N = nombre de SIREN distincts, typiquement 1). DINUM gère son propre fallback INSEE V3.11 pour les SIREN diffusion partielle.
Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| num_finess | Yes | Numéro FINESS exact (9 chiffres). |
Output Schema
| Name | Required | Description | Default |
|---|---|---|---|
| found | Yes | ||
| lookupStatus | Yes | ||
| key | No | Clé recherchée (SIREN, num_finess, code INSEE, …). | |
| message | No | Explication actionnable quand `found=false` (cause probable + remédiation). |