cturkieh/france-data-mcp

cturkieh/france-data-mcp

от cturkieh
Перекрёстная проверка 13 французских реестров (INSEE, FINESS, RPPS, DVF) в одном MCP-сервере. Выявляет скрытые закрытия SIRET, оценивает потенциал недвижимости по DVF и PLU, анализирует здравоохран...

france-data-mcp

MCP TypeScript qui croise et réconcilie 13 référentiels publics français (INSEE SIRENE, IRIS & Melodi, FINESS DREES, RPPS / Annuaire Santé ANS, Annuaire Santé Ameli, Centres de Santé CNAM, DVF / DGFiP, Sit@del / SDES, PLU via apicarto, IGN Géoplateforme, geo.api.gouv.fr & Recherche Entreprises DINUM). Détecte les SIRET fermés invisibles côté DREES, distingue site vs groupe, croise l'offre de soins avec la démographie au quartier, évalue le potentiel immobilier d'un site (prix DVF €/m², permis de construire, zones AU du PLU), expose la fraîcheur de chaque source.

License: MIT CI MCP npm smithery badge

🇫🇷 Documentation principale en français. English version →


Installation

Option 1 — URL distante (claude.ai, Claude Code, Cursor)

https://france-data-mcp.vercel.app/mcp

Client Config
claude.ai Settings → Connectors → Add custom connector → URL ci-dessus
Claude Code ~/.claude.jsonmcpServers{ "type": "http", "url": "..." }
Cursor ~/.cursor/mcp.json → même configuration
autocomplete_communeтолько чтениеидемпотентныйвнешний мир

Поиск французских коммун по названию, почтовому индексу или коду INSEE. Идеально для автодополнения. Источник: geo.api.gouv.fr (DINUM/Etalab). Требуется хотя бы один из параметров: `nom`, `codePostal`, `code`. Допустимые псевдонимы: `q`/`query`/`search` → `nom`, `codepostal`/`postal_code` → `codePostal`, `code_insee`/`insee` → `code`.

Поиск французских коммун по названию, почтовому индексу или коду INSEE. Идеально для автодополнения. Источник: geo.api.gouv.fr (DINUM/Etalab). Требуется хотя бы один из параметров: `nom`, `codePostal`, `code`. Допустимые псевдонимы: `q`/`query`/`search` → `nom`, `codepostal`/`postal_code` → `codePostal`, `code_insee`/`insee` → `code`.

Параметры

  • nomstring

    Recherche par nom (autocomplétion). Ex: "Villeneuve d'Ascq", "Lyon".

  • codePostalstring

    Code postal exact (5 chiffres). Ex: "59650".

  • codestring

    Code INSEE exact (5 caractères). Ex: "59009".

  • limitnumber

    Nombre max de résultats (1-30, défaut 10).

  • boostPopulationboolean

    Trier par population décroissante. Recommandé pour les noms ambigus (ex: 'Charleville').

centres_sante_by_finessтолько чтениеидемпотентныйвнешний мир

Возвращает детали Центра здоровья (CDS) по номеру FINESS. Отличие от `etablissement_by_finess`: показывает **carte_vitale**, **APCV** и **специальности, практикуемые на месте** (Приложение A CNAM). Возвращает `LookupResult` с дискриминатором `found`. `found: true` — полный payload CDS (название организации, accepte_carte_vitale/apcv, specialites.codes/libelles по стандарту, тип учреждения 124/125, адрес, координаты центроида коммуны, телефон). `found: false` — `{found: false, key, lookupStatus: 'not_found', message}`, когда номер FINESS указывает на структуру не-CDS (больница, дом престарелых, лаборатория) или на совсем новый CDS (задержка CNAM ~1 неделя). Источник: Annuaire santé Ameli, Assurance Maladie (еженедельная синхронизация CNAM, обязательное упоминание L.1461-2 CSP). Для структур не-CDS используйте `etablissement_by_finess`. Допустимые псевдонимы: `numFiness`/`finess`/`etab_finess` → `num_finess`.

Возвращает детали Центра здоровья (CDS) по номеру FINESS. Отличие от `etablissement_by_finess`: показывает **carte_vitale**, **APCV** и **специальности, практикуемые на месте** (Приложение A CNAM). Возвращает `LookupResult` с дискриминатором `found`. `found: true` — полный payload CDS (название организации, accepte_carte_vitale/apcv, specialites.codes/libelles по стандарту, тип учреждения 124/125, адрес, координаты центроида коммуны, телефон). `found: false` — `{found: false, key, lookupStatus: 'not_found', message}`, когда номер FINESS указывает на структуру не-CDS (больница, дом престарелых, лаборатория) или на совсем новый CDS (задержка CNAM ~1 неделя). Источник: Annuaire santé Ameli, Assurance Maladie (еженедельная синхронизация CNAM, обязательное упоминание L.1461-2 CSP). Для структур не-CDS используйте `etablissement_by_finess`. Допустимые псевдонимы: `numFiness`/`finess`/`etab_finess` → `num_finess`.

Параметры

  • num_finessstringобязательный

    Numéro FINESS exact 9 chiffres. Ex: '750000123'.

  • include_freshnessboolean

    Si true, ajoute un champ `data_freshness` au payload (dans `query_metadata` si présent, sinon à la racine) listant la dernière ingestion réussie par source (FINESS, Ameli, RPPS, CDS) avec `staleness_days`. Opt-in pour ne pas alourdir les payloads par défaut. Cache 5min côté serveur — coût négligeable.

centres_sante_in_radiusтолько чтениеидемпотентныйвнешний мир

Ищет Центры здоровья (CDS) в географическом радиусе (PostGIS ST_DWithin). Источник: справочник здравоохранения Ameli, Assurance Maladie (обязательное упоминание L.1461-2 CSP — еженедельная синхронизация CNAM). Отличие от `etablissements_finess_in_radius` с фильтром famille=124: возвращает **carte_vitale**, **APCV**, **специальности, осуществляемые на месте** (Приложение A номенклатуры CNAM, ~70 кодов). CDS = амбулаторные некоммерческие структуры, регулируемые L.6323-1 CSP (ассоциации, взаимные общества, муниципалитеты, больницы). Объём — около 3 тыс. по Франции. Фильтры: - `specialite_codes` : массив из Приложения A (например, ['01'] общая медицина, ['53'] стоматология). Match any-of — возвращает CDS, которые осуществляют ХОТЯ БЫ ОДНУ из запрошенных специальностей. - `accepte_carte_vitale` : true / false / опущено. Практически все CDS принимают CV → фильтр в основном полезен при `false` для проверок. - `type_etab_codes` : ['124'] стандартный CDS, ['125'] стоматологический CDS (устаревший CNAM, постепенно исчезает). Координаты = центроид коммуны (~3 км в среднем) — для точного адреса переключайтесь через `etab_finess`, возвращаемый с `etablissement_by_finess`. Часы работы / тарифы / сектор 1/2 ОТСУТСТВУЮТ (убраны из нового справочника CNAM после 2025 года). Допустимые псевдонимы: `radius`/`radius_meters` → `radius_km`, `latitude`/`longitude` → `lat`/`lon`.

Ищет Центры здоровья (CDS) в географическом радиусе (PostGIS ST_DWithin). Источник: справочник здравоохранения Ameli, Assurance Maladie (обязательное упоминание L.1461-2 CSP — еженедельная синхронизация CNAM). Отличие от `etablissements_finess_in_radius` с фильтром famille=124: возвращает **carte_vitale**, **APCV**, **специальности, осуществляемые на месте** (Приложение A номенклатуры CNAM, ~70 кодов). CDS = амбулаторные некоммерческие структуры, регулируемые L.6323-1 CSP (ассоциации, взаимные общества, муниципалитеты, больницы). Объём — около 3 тыс. по Франции. Фильтры: - `specialite_codes` : массив из Приложения A (например, ['01'] общая медицина, ['53'] стоматология). Match any-of — возвращает CDS, которые осуществляют ХОТЯ БЫ ОДНУ из запрошенных специальностей. - `accepte_carte_vitale` : true / false / опущено. Практически все CDS принимают CV → фильтр в основном полезен при `false` для проверок. - `type_etab_codes` : ['124'] стандартный CDS, ['125'] стоматологический CDS (устаревший CNAM, постепенно исчезает). Координаты = центроид коммуны (~3 км в среднем) — для точного адреса переключайтесь через `etab_finess`, возвращаемый с `etablissement_by_finess`. Часы работы / тарифы / сектор 1/2 ОТСУТСТВУЮТ (убраны из нового справочника CNAM после 2025 года). Допустимые псевдонимы: `radius`/`radius_meters` → `radius_km`, `latitude`/`longitude` → `lat`/`lon`.

Параметры

  • lonnumberобязательный

    Longitude du centre (WGS84). Ex: 2.317 (Paris).

  • latnumberобязательный

    Latitude du centre (WGS84). Ex: 48.872 (Paris).

  • radius_kmnumber

    Rayon en km (0.1-50, défaut 5).

  • specialite_codesstring[]

    Codes spécialité CNAM Annexe A (ex: ['01'] médecine générale, ['53'] chirurgien-dentiste). Match any-of. Vide = pas de filtre spécialité.

  • accepte_carte_vitaleboolean

    Filtre par acceptation carte Vitale. true = uniquement CDS qui acceptent CV, false = uniquement ceux qui ne l'acceptent pas. Omis = pas de filtre.

  • type_etab_codesstring[]

    Codes type établissement Annexe B : ['124'] CDS standard (défaut implicite), ['125'] CDS dentaire deprecated. Vide = tous types.

  • limitnumber

    Nombre max de résultats (1-500, défaut 100).

  • include_freshnessboolean

    Si true, ajoute un champ `data_freshness` au payload (dans `query_metadata` si présent, sinon à la racine) listant la dernière ingestion réussie par source (FINESS, Ameli, RPPS, CDS) avec `staleness_days`. Opt-in pour ne pas alourdir les payloads par défaut. Cache 5min côté serveur — coût négligeable.

compare_adresse_cnam_vs_finessтолько чтениеидемпотентныйвнешний мир

Сравнивает адрес центра здоровья со стороны CNAM (Справочник здоровья Ameli) и FINESS DREES для одного номера finess. Сырой примитив БЕЗ бизнес-интерпретации — возвращает оба адреса, `score_dice` (0..1, информативный; `null`, если нечего сравнивать, потому что `finess_absent`) и `statut`. Вызывающий код решает, что делать с расхождением. Польза: зафиксировать переезд, который распространился в одном источнике, но пока нет в другом (например, CNAM '5 RUE DE L'ARQUEBUSE AUTUN' vs FINESS '15 BD BERNARD GIBERSTEIN AUTUN' для одного FINESS). Аналог `compare_raison_sociale_finess_vs_rpps` для центров здоровья. **Статус** (присутствует только при `found: true`): - `match`: адреса строго совпадают после нормализации - `match_after_abbreviation_normalization`: совпадают после раскрытия сокращений типов улиц во французском (R/RUE, BD/BOULEVARD, AV/AVENUE…) — ТОТ ЖЕ адрес, просто разная запись сокращений в DREES и CNAM, НЕ переезд - `divergent_after_normalization`: адреса действительно разные (переезд не синхронизирован между источниками) - `finess_absent`: центр здоровья есть в CNAM, но номера finess нет в FINESS DREES (задержка двухнедельной синхронизации) Формат: объект `LookupResult`, различаемый по полю `found`. Если номер finess НЕ является центром здоровья CNAM, инструмент возвращает `{found: false, lookupStatus: 'not_found', message}` (используйте `etablissement_by_finess` для учреждения, не являющегося CDS).

Сравнивает адрес центра здоровья со стороны CNAM (Справочник здоровья Ameli) и FINESS DREES для одного номера finess. Сырой примитив БЕЗ бизнес-интерпретации — возвращает оба адреса, `score_dice` (0..1, информативный; `null`, если нечего сравнивать, потому что `finess_absent`) и `statut`. Вызывающий код решает, что делать с расхождением. Польза: зафиксировать переезд, который распространился в одном источнике, но пока нет в другом (например, CNAM '5 RUE DE L'ARQUEBUSE AUTUN' vs FINESS '15 BD BERNARD GIBERSTEIN AUTUN' для одного FINESS). Аналог `compare_raison_sociale_finess_vs_rpps` для центров здоровья. **Статус** (присутствует только при `found: true`): - `match`: адреса строго совпадают после нормализации - `match_after_abbreviation_normalization`: совпадают после раскрытия сокращений типов улиц во французском (R/RUE, BD/BOULEVARD, AV/AVENUE…) — ТОТ ЖЕ адрес, просто разная запись сокращений в DREES и CNAM, НЕ переезд - `divergent_after_normalization`: адреса действительно разные (переезд не синхронизирован между источниками) - `finess_absent`: центр здоровья есть в CNAM, но номера finess нет в FINESS DREES (задержка двухнедельной синхронизации) Формат: объект `LookupResult`, различаемый по полю `found`. Если номер finess НЕ является центром здоровья CNAM, инструмент возвращает `{found: false, lookupStatus: 'not_found', message}` (используйте `etablissement_by_finess` для учреждения, не являющегося CDS).

Параметры

  • num_finessstringобязательный

    Numéro FINESS exact (9 chiffres).

compare_raison_sociale_finess_vs_rppsтолько чтениеидемпотентныйвнешний мир

Сравнивает наименование (raison sociale) из FINESS DREES с данными RPPS / Annuaire Santé ANS для одного и того же num_finess. Примитивная функция БЕЗ бизнес-интерпретации — возвращает только два значения + статус сравнения. Вызывающий код сам решает, что делать с расхождением. Зачем это нужно: RPPS часто быстрее отражает ребрендинги после слияний и поглощений, чем FINESS DREES (например, купленная лаборатория остаётся 'DIAGNOVIE' в DREES, хотя в ANS она уже 'BIOGROUP NORD'). Этот инструмент показывает фактическое расхождение; он НЕ СООБЩАЕТ, кто кого купил (это основано на знании торговых марок, которое не является публичным). **Возвращаемый статус** (поле `statut` присутствует только при `found: true`): - `exact_match`: FINESS и хотя бы один RPPS строго совпадают после нормализации. - `divergent_after_normalization`: ни один RPPS не совпадает с FINESS — реальное расхождение. - `rpps_absent`: ни один RPPS не заявлял этот FINESS (невозможно установить соответствие). Формат: объект `LookupResult`, различаемый по полю `found`. Когда `num_finess` отсутствует в FINESS DREES, инструмент возвращает `{found: false, lookupStatus: 'not_found', message, ...}` — поле `statut` в этом случае НЕ ПЕРЕДАЁТСЯ.

Сравнивает наименование (raison sociale) из FINESS DREES с данными RPPS / Annuaire Santé ANS для одного и того же num_finess. Примитивная функция БЕЗ бизнес-интерпретации — возвращает только два значения + статус сравнения. Вызывающий код сам решает, что делать с расхождением. Зачем это нужно: RPPS часто быстрее отражает ребрендинги после слияний и поглощений, чем FINESS DREES (например, купленная лаборатория остаётся 'DIAGNOVIE' в DREES, хотя в ANS она уже 'BIOGROUP NORD'). Этот инструмент показывает фактическое расхождение; он НЕ СООБЩАЕТ, кто кого купил (это основано на знании торговых марок, которое не является публичным). **Возвращаемый статус** (поле `statut` присутствует только при `found: true`): - `exact_match`: FINESS и хотя бы один RPPS строго совпадают после нормализации. - `divergent_after_normalization`: ни один RPPS не совпадает с FINESS — реальное расхождение. - `rpps_absent`: ни один RPPS не заявлял этот FINESS (невозможно установить соответствие). Формат: объект `LookupResult`, различаемый по полю `found`. Когда `num_finess` отсутствует в FINESS DREES, инструмент возвращает `{found: false, lookupStatus: 'not_found', message, ...}` — поле `statut` в этом случае НЕ ПЕРЕДАЁТСЯ.

Параметры

  • num_finessstringобязательный

    Numéro FINESS exact (9 chiffres).

cout_foncierтолько чтениеидемпотентныйвнешний мир

Стоимость земли в зоне (точка + радиус): медианная цена за м² ЖИЛОЙ застройки — только дома + квартиры, НЕ коммерческие/профессиональные помещения (+ квартили p25/p75), объём продаж, охватываемый период. Источник DGFiP DVF (реальные продажи с геолокацией). Для профессионального помещения (лаборатория, кабинет) эта жилая цена — ПРИБЛИЗИТЕЛЬНЫЙ ОРИЕНТИР, а не цена коммерческого помещения. ИНФОРМАЦИЯ для бизнес-кейса размещения — НЕ ВНОСИТЬ в заметку о привлекательности: стоимость установки отличается от рыночного потенциала.

Стоимость земли в зоне (точка + радиус): медианная цена за м² ЖИЛОЙ застройки — только дома + квартиры, НЕ коммерческие/профессиональные помещения (+ квартили p25/p75), объём продаж, охватываемый период. Источник DGFiP DVF (реальные продажи с геолокацией). Для профессионального помещения (лаборатория, кабинет) эта жилая цена — ПРИБЛИЗИТЕЛЬНЫЙ ОРИЕНТИР, а не цена коммерческого помещения. ИНФОРМАЦИЯ для бизнес-кейса размещения — НЕ ВНОСИТЬ в заметку о привлекательности: стоимость установки отличается от рыночного потенциала.

Параметры

  • latnumberобязательный

    Latitude du centre (WGS84).

  • lonnumberобязательный

    Longitude du centre (WGS84).

  • rayon_kmnumber

    Rayon en km (0.1-10, défaut 3).

data_freshnessтолько чтениевнешний мир

Возвращает свежесть загруженных дампов данных на стороне сервера: FINESS DREES (раз в два месяца), Annuaire Santé Ameli (еженедельно), RPPS / Annuaire Santé ANS (ежемесячно), Centres de Santé CNAM (еженедельно). Для каждого источника: `last_success_at` (ISO timestamp), `last_success_row_count`, `last_attempt_at`, `last_attempt_status`, `staleness_days` (дней с последней успешной загрузки), `cadence_hint` (ожидаемая периодичность со стороны редактора). Типичное использование: перед территориальным аудитом или временным анализом вызывающий этот инструмент проверяет, актуальны ли данные. `staleness_days > 90` для FINESS — тревога (последняя синхронизация DREES пропущена), `> 14` для Ameli — тревога (сломан еженедельный job), `> 45` для RPPS — тревога (сломан ежемесячный job), `> 14` для CDS — тревога (сломан еженедельный job). Источники LIVE (DINUM Recherche Entreprises, INSEE SIRENE V3.11, ANS FHIR live) здесь НЕ перечислены, так как у них нет цикла загрузки — их свежесть определяется вышестоящими API (live, ~секунды). Кеш сервера: 5 минут. Стоимость: в худшем случае 1 SELECT по `ingest_log` (иначе попадание в кеш).

Возвращает свежесть загруженных дампов данных на стороне сервера: FINESS DREES (раз в два месяца), Annuaire Santé Ameli (еженедельно), RPPS / Annuaire Santé ANS (ежемесячно), Centres de Santé CNAM (еженедельно). Для каждого источника: `last_success_at` (ISO timestamp), `last_success_row_count`, `last_attempt_at`, `last_attempt_status`, `staleness_days` (дней с последней успешной загрузки), `cadence_hint` (ожидаемая периодичность со стороны редактора). Типичное использование: перед территориальным аудитом или временным анализом вызывающий этот инструмент проверяет, актуальны ли данные. `staleness_days > 90` для FINESS — тревога (последняя синхронизация DREES пропущена), `> 14` для Ameli — тревога (сломан еженедельный job), `> 45` для RPPS — тревога (сломан ежемесячный job), `> 14` для CDS — тревога (сломан еженедельный job). Источники LIVE (DINUM Recherche Entreprises, INSEE SIRENE V3.11, ANS FHIR live) здесь НЕ перечислены, так как у них нет цикла загрузки — их свежесть определяется вышестоящими API (live, ~секунды). Кеш сервера: 5 минут. Стоимость: в худшем случае 1 SELECT по `ingest_log` (иначе попадание в кеш).

Параметры

Без параметров.

densite_santeтолько чтениеидемпотентныйвнешний мир

Плотность на 100 000 жителей — `cible: professionnels` (RPPS) ИЛИ `cible: etablissements` (FINESS). Уровень **департамент** (`code_dept`) ИЛИ **коммуна** (`code_insee` / `nom_commune`). Обязателен ровно один scope из трёх. Скрещиваем счёт (RPPS или FINESS) и INSEE Melodi (муниципальное население PMUN, перепись 2023). **cible='professionnels'** (RPPS) — методология DREES по умолчанию: врачи (`profession_code='10'`) в активной практике (mode_exercice L, S, M), без студентов. Фильтры: `profession_code` (60 — медсестра, 21 — фармацевт, 50 — акушерка…), `savoir_faire_code` (например 'SM04' — Кардиология, 'SM02' — Анестезиология-реанимация; смотри `lister_nomenclature` справочника rpps_savoir_faire), `mode_exercice_codes` (['L'] — только частнопрактикующие). **cible='etablissements'** (FINESS) — `famille` ОБЯЗАТЕЛЬНО: лаборатория, аптека, дом престарелых, MCO, SSR, психиатрия, диализ, визуализация, HAD, MSP/CPTS, помощь детям-инвалидам, помощь взрослым-инвалидам, аддиктология, PMI, профилактика_здоровья и т.д. Без семьи коэффициент смешал бы лаборатории/больницы/дома престарелых — бессмыслица. **Условная семантика `code_dept`**: один = scope расчёта (весь департамент); в паре с `nom_commune` = подсказка для разрешения ИСКЛЮЧИТЕЛЬНО (фильтрует омонимы), расчёт всё равно идёт по разрешённой коммуне. Париж/Марсель/Лион: плотность по `code_insee` НЕДОСТУПНА (RPPS/FINESS привязаны к округам, INSEE даёт население только для целой коммуны) → RangeError; используй `code_dept` (75, 13, 69). `compare_national: true` добавляет плотность по всей Франции (включая ДОМ) + разница в % (положительная — переизбыток, отрицательная — дефицит). Псевдонимы: `dept`/`departement` → `code_dept`, `codeInsee`/`insee` → `code_insee`. НЕ возвращает никакой профессиональной интерпретации (нет порога «медицинская пустыня» в автоматическом режиме). Категория по умолчанию: Гражданские (C, ~97 % — частнопрактикующие, работники частного сектора, контрактные больничные). Opt-in: `include_agents_publics: true` добавляет Государственных служащих (M, ~0.3 % — штатные PH, ARS, CNAM, Национальное образование, PMI, военные SSA);…

Плотность на 100 000 жителей — `cible: professionnels` (RPPS) ИЛИ `cible: etablissements` (FINESS). Уровень **департамент** (`code_dept`) ИЛИ **коммуна** (`code_insee` / `nom_commune`). Обязателен ровно один scope из трёх. Скрещиваем счёт (RPPS или FINESS) и INSEE Melodi (муниципальное население PMUN, перепись 2023). **cible='professionnels'** (RPPS) — методология DREES по умолчанию: врачи (`profession_code='10'`) в активной практике (mode_exercice L, S, M), без студентов. Фильтры: `profession_code` (60 — медсестра, 21 — фармацевт, 50 — акушерка…), `savoir_faire_code` (например 'SM04' — Кардиология, 'SM02' — Анестезиология-реанимация; смотри `lister_nomenclature` справочника rpps_savoir_faire), `mode_exercice_codes` (['L'] — только частнопрактикующие). **cible='etablissements'** (FINESS) — `famille` ОБЯЗАТЕЛЬНО: лаборатория, аптека, дом престарелых, MCO, SSR, психиатрия, диализ, визуализация, HAD, MSP/CPTS, помощь детям-инвалидам, помощь взрослым-инвалидам, аддиктология, PMI, профилактика_здоровья и т.д. Без семьи коэффициент смешал бы лаборатории/больницы/дома престарелых — бессмыслица. **Условная семантика `code_dept`**: один = scope расчёта (весь департамент); в паре с `nom_commune` = подсказка для разрешения ИСКЛЮЧИТЕЛЬНО (фильтрует омонимы), расчёт всё равно идёт по разрешённой коммуне. Париж/Марсель/Лион: плотность по `code_insee` НЕДОСТУПНА (RPPS/FINESS привязаны к округам, INSEE даёт население только для целой коммуны) → RangeError; используй `code_dept` (75, 13, 69). `compare_national: true` добавляет плотность по всей Франции (включая ДОМ) + разница в % (положительная — переизбыток, отрицательная — дефицит). Псевдонимы: `dept`/`departement` → `code_dept`, `codeInsee`/`insee` → `code_insee`. НЕ возвращает никакой профессиональной интерпретации (нет порога «медицинская пустыня» в автоматическом режиме). Категория по умолчанию: Гражданские (C, ~97 % — частнопрактикующие, работники частного сектора, контрактные больничные). Opt-in: `include_agents_publics: true` добавляет Государственных служащих (M, ~0.3 % — штатные PH, ARS, CNAM, Национальное образование, PMI, военные SSA);…

Параметры

  • cibleenumобязательный

    `professionnels` = densité de PS (RPPS, filtres profession_code/savoir_faire_code/mode_exercice_codes) ; `etablissements` = densité d'établissements (FINESS, `famille` obligatoire).

    professionnelsetablissements
  • code_deptstring

    Code INSEE du département 2-3 caractères. Ex: "75" Paris, "59" Nord, "2A" Corse-du-Sud, "971" Guadeloupe. Sémantique conditionnelle : seul = scope dept entier ; combiné avec `nom_commune` = hint resolver pour désambiguer les homonymes. XOR avec `code_insee`.

  • code_inseestring

    Code INSEE de la commune 5 caractères. Ex: "59009" Villeneuve-d'Ascq, "33063" Bordeaux, "2A004" Ajaccio. Paris/Lyon/Marseille NON supporté au niveau commune (densité indisponible — voir description) : utiliser code_dept. XOR avec `code_dept` et `nom_commune`.

  • nom_communestring

    Nom officiel de commune (alternative à `code_insee`). Ex: "Lille", "Villeneuve-d'Ascq". Le serveur résout en interne via geo.api.gouv.fr. Combinable avec `code_dept` comme hint de désambiguïsation pour homonymes (ex "Saint-Martin" + dept "65"). XOR avec `code_insee`.

  • famillestring

    cible='etablissements' UNIQUEMENT (obligatoire) : famille FINESS à compter (labo, pharmacie, ehpad, mco, ssr, psychiatrie, dialyse, imagerie, had, msp_cpts, handicap_enfants, handicap_adultes, addictologie, pmi, prevention_sante, etc.).

  • profession_codestring

    cible='professionnels' UNIQUEMENT : code profession ANS (TRE_R94). Default '10' (Médecin). Ex : '60' Infirmier, '21' Pharmacien, '50' Sage-femme, '40' Chirurgien-dentiste, '70' Masseur-kinésithérapeute.

  • savoir_faire_codestring

    cible='professionnels' UNIQUEMENT : code spécialité (savoir_faire). Pertinent surtout pour profession_code=10 (médecin). Ex : 'SM04' Cardiologie, 'SM15' Dermatologie et vénéréologie, 'SM02' Anesthésie-réanimation, 'SM26' Médecine générale. Voir lister_nomenclature(referentiel:'rpps_savoir_faire') pour la liste exhaustive.

  • mode_exercice_codesstring[]

    cible='professionnels' UNIQUEMENT : codes mode_exercice ANS à inclure. Default ['L','S','M'] (libéral + salarié + mixte = activité régulière DREES). Passer ['L'] pour libéraux seuls. Codes mode_exercice ANS : L libéral, S salarié, M mixte, R remplaçant, B bénévole, A autre.

  • compare_nationalboolean

    Ajoute le calcul France entière + écart relatif en % (recommandé pour qualifier 'sous-doté'/'sur-doté').

  • include_etudiantsboolean
  • include_agents_publicsboolean
dynamique_immobiliereтолько чтениеидемпотентныйвнешний мир

Динамика недвижимости и потенциал роста зоны (точка + радиус). Объединяет 3 официальных источника: разрешения на строительство (Sit@del/SDES, ячейка КОММУНА — недавно разрешённые/начатые жилые помещения → ожидаемые жители), зоны AU из PLU (Géoportail de l'Urbanisme/IGN — будущие зарезервированные кварталы, геолокализованные), продажи участков под застройку (DGFiP DVF, геолокализованные). Выход в 2 регистра: 'note' = ОБЪЁМ (разрешённые/начатые жилые помещения, количество и непосредственность зон AU) — для скоринга потенциала; 'info' = затрагиваемые кварталы (с названиями), ожидаемые жители, ориентировочные цены (контекст, вне скоринга). В плотном городе разрешения-коммуны неточны → опираться на зоны AU + участки (геолокализованные). Прибрежная/изолированная точка без коммуны при обратном геокодировании → `couverture.permis`='indisponible:commune_introuvable' и `meta.code_commune`=null, НО зоны AU + участки остаются (расчёт по радиусу) — инструмент никогда из-за этого не падает. 'geojson' = полигоны зон AU для карты. Источники: SDES, IGN/GPU, DGFiP.

Динамика недвижимости и потенциал роста зоны (точка + радиус). Объединяет 3 официальных источника: разрешения на строительство (Sit@del/SDES, ячейка КОММУНА — недавно разрешённые/начатые жилые помещения → ожидаемые жители), зоны AU из PLU (Géoportail de l'Urbanisme/IGN — будущие зарезервированные кварталы, геолокализованные), продажи участков под застройку (DGFiP DVF, геолокализованные). Выход в 2 регистра: 'note' = ОБЪЁМ (разрешённые/начатые жилые помещения, количество и непосредственность зон AU) — для скоринга потенциала; 'info' = затрагиваемые кварталы (с названиями), ожидаемые жители, ориентировочные цены (контекст, вне скоринга). В плотном городе разрешения-коммуны неточны → опираться на зоны AU + участки (геолокализованные). Прибрежная/изолированная точка без коммуны при обратном геокодировании → `couverture.permis`='indisponible:commune_introuvable' и `meta.code_commune`=null, НО зоны AU + участки остаются (расчёт по радиусу) — инструмент никогда из-за этого не падает. 'geojson' = полигоны зон AU для карты. Источники: SDES, IGN/GPU, DGFiP.

Параметры

  • latnumberобязательный

    Latitude du centre (WGS84).

  • lonnumberобязательный

    Longitude du centre (WGS84).

  • rayon_kmnumber

    Rayon en km (0.1-10, défaut 3).

enrichir_concurrentsтолько чтениеидемпотентныйвнешний мир

Глубокое исследование топ-конкурентов (V0.23). Для каждого FINESS: активный статус + размер команды + недавняя история (inspect_site), сигнал M&A — текущий ребрендинг — (сравнить юридическое наименование FINESS vs RPPS), головная группа (entreprise_by_siren: Biogroup/Cerballiance/… + `est_grand_groupe`). Жёсткий лимит `max=3` (inspect_site ~7 K токенов/вызов — НИКОГДА 10+). Флаг `couverture` ДЛЯ КАЖДОГО конкурента (`"ok"` | `"partiel:<причина>"`): сбой у одного конкурента не отменяет остальных. Обычно вызывается на `concurrents.top[0..2].finess`, возвращённых `panorama_implantation_complet`. Источники: FINESS/ANS, RPPS/ANS, SIRENE/DINUM.

Глубокое исследование топ-конкурентов (V0.23). Для каждого FINESS: активный статус + размер команды + недавняя история (inspect_site), сигнал M&A — текущий ребрендинг — (сравнить юридическое наименование FINESS vs RPPS), головная группа (entreprise_by_siren: Biogroup/Cerballiance/… + `est_grand_groupe`). Жёсткий лимит `max=3` (inspect_site ~7 K токенов/вызов — НИКОГДА 10+). Флаг `couverture` ДЛЯ КАЖДОГО конкурента (`"ok"` | `"partiel:<причина>"`): сбой у одного конкурента не отменяет остальных. Обычно вызывается на `concurrents.top[0..2].finess`, возвращённых `panorama_implantation_complet`. Источники: FINESS/ANS, RPPS/ANS, SIRENE/DINUM.

Параметры

  • finessstring[]обязательный

    Numéros FINESS à enquêter (typiquement le top 3 concurrents par distance).

  • maxnumber

    Cap dur du nombre de concurrents enquêtés. Défaut 3.

entreprise_by_sirenтолько чтениеидемпотентныйвнешний мир

Получает детали французской компании по SIREN (9 цифр): наименование, NAF, финансовая история, руководители, филиалы. Источник: DINUM Recherche Entreprises. **Формат ответа**: объект `LookupResult`, различаемый по полю `found`. - `found: true` — компания возвращается плоским списком (поля `siren`, `nomComplet`, `etablissements`, `enrichmentStatus`, …) - `found: false` — `{ found: false, key, lookupStatus: 'not_found' | 'ambiguous', message }`. `not_found`: SIREN не проиндексирован DINUM (часто частичная публикация INSEE — компания всё ещё может существовать в SIRENE). `ambiguous`: регрессия API, о которой нужно сообщить. ⚠️ Когда `found: true`, список `etablissements` может быть обрезан. Поле `nombreEtablissements` (подсчёт SIRENE) отражает реальное общее количество. **Читайте `enrichmentStatus`**, чтобы узнать, полный ли список: - `success`: `etablissements` содержит все адреса - `partial`: часть адресов отсутствует (несколько департаментов или NAF, отличный от головного) — см. `enrichmentWarning` - `failed`: обогащение не удалось (лимит запросов, сбой API) — указан только головной офис - `not_attempted`: компания с одним адресом или отсутствуют данные SIRENE Для полного перечисления по нескольким департаментам используйте `entreprises_in_radius` по географической зоне. Стоимость: 1 или 2 вызова API DINUM на один запуск (фактический лимит запросов ~1 req/s).

Получает детали французской компании по SIREN (9 цифр): наименование, NAF, финансовая история, руководители, филиалы. Источник: DINUM Recherche Entreprises. **Формат ответа**: объект `LookupResult`, различаемый по полю `found`. - `found: true` — компания возвращается плоским списком (поля `siren`, `nomComplet`, `etablissements`, `enrichmentStatus`, …) - `found: false` — `{ found: false, key, lookupStatus: 'not_found' | 'ambiguous', message }`. `not_found`: SIREN не проиндексирован DINUM (часто частичная публикация INSEE — компания всё ещё может существовать в SIRENE). `ambiguous`: регрессия API, о которой нужно сообщить. ⚠️ Когда `found: true`, список `etablissements` может быть обрезан. Поле `nombreEtablissements` (подсчёт SIRENE) отражает реальное общее количество. **Читайте `enrichmentStatus`**, чтобы узнать, полный ли список: - `success`: `etablissements` содержит все адреса - `partial`: часть адресов отсутствует (несколько департаментов или NAF, отличный от головного) — см. `enrichmentWarning` - `failed`: обогащение не удалось (лимит запросов, сбой API) — указан только головной офис - `not_attempted`: компания с одним адресом или отсутствуют данные SIRENE Для полного перечисления по нескольким департаментам используйте `entreprises_in_radius` по географической зоне. Стоимость: 1 или 2 вызова API DINUM на один запуск (фактический лимит запросов ~1 req/s).

Параметры

  • sirenstringобязательный

    SIREN exact, 9 chiffres.

entreprises_in_radiusтолько чтениеидемпотентныйвнешний мир

Поиск французских компаний с фильтрами по коду NAF, почтовому индексу, департаменту или географическому радиусу. Охватывает все секторы (здравоохранение через коды NAF 8690B, 4773Z, 8710A, 8621Z и т.д.). Источник: DINUM Recherche Entreprises (SIRENE + RNE). Возвращает оборот, руководителей, диапазоны численности сотрудников и даты создания. Два ИСКЛЮЧИТЕЛЬНЫХ режима (разные эндпоинты DINUM): (1) по близости — `lat`+`lon`+`radiusKm` (опционально + `naf`), нативно разрешается через `/near_point`; (2) административный — `q` (свободный текст) и/или `naf` + `codePostal`/`departement`, через `/search`. Поиск по близости НЕ поддерживает `q` и `codePostal`/`departement` (комбинация отклоняется с явной ошибкой: выберите один режим). `radiusKm` ограничен 50 км. **Сокращение payload (V0.13)**: `includeDirigeants: false` вырезает список руководителей RNE из каждой компании — полезно при массовом перечислении (Geo Intel), где руководители не используются, а группы типа Biogroup могут выводить их по 20+ на сущность (бесполезное раздувание). По умолчанию `true` для сохранения контракта V0.12 (строгая обратная совместимость).

Поиск французских компаний с фильтрами по коду NAF, почтовому индексу, департаменту или географическому радиусу. Охватывает все секторы (здравоохранение через коды NAF 8690B, 4773Z, 8710A, 8621Z и т.д.). Источник: DINUM Recherche Entreprises (SIRENE + RNE). Возвращает оборот, руководителей, диапазоны численности сотрудников и даты создания. Два ИСКЛЮЧИТЕЛЬНЫХ режима (разные эндпоинты DINUM): (1) по близости — `lat`+`lon`+`radiusKm` (опционально + `naf`), нативно разрешается через `/near_point`; (2) административный — `q` (свободный текст) и/или `naf` + `codePostal`/`departement`, через `/search`. Поиск по близости НЕ поддерживает `q` и `codePostal`/`departement` (комбинация отклоняется с явной ошибкой: выберите один режим). `radiusKm` ограничен 50 км. **Сокращение payload (V0.13)**: `includeDirigeants: false` вырезает список руководителей RNE из каждой компании — полезно при массовом перечислении (Geo Intel), где руководители не используются, а группы типа Biogroup могут выводить их по 20+ на сущность (бесполезное раздувание). По умолчанию `true` для сохранения контракта V0.12 (строгая обратная совместимость).

Параметры

  • nafstring

    Code NAF principal (ex: '8690B' = labos, '4773Z' = pharmacies, '8710A' = EHPAD, '8621Z' = MG).

  • qstring

    Recherche textuelle libre (raison sociale, dirigeant…).

  • lonnumber

    Longitude du centre du cercle de recherche.

  • latnumber

    Latitude du centre du cercle de recherche.

  • radiusKmnumber

    Rayon en km (1-50).

  • codePostalstring

    Filtre alternatif : code postal exact.

  • departementstring

    Filtre alternatif : code département.

  • perPagenumber

    Résultats par page (1-25, défaut 10).

  • pagenumber

    Page (1-indexed).

  • includeDirigeantsboolean

    Inclure la liste des dirigeants RNE dans chaque entreprise (défaut true). `false` strip `dirigeants: []` côté handler — utile en énumération volume où les dirigeants ne sont pas exploités (économie de tokens, groupes type Biogroup peuvent lister 20+ dirigeants par entité).

etablissement_by_finessтолько чтениеидемпотентныйвнешний мир

Получает полные сведения о медицинском учреждении по номеру FINESS (9 цифр): наименование, категорию + семейство, полный адрес (улица + индекс + город + код INSEE + департамент), координаты GPS, телефон. Возвращает объект `LookupResult`, дискриминируемый по полю `found`. `found: true` → поля FINESS в плоской структуре. `found: false` → `{ found: false, key, lookupStatus: 'not_found', message }`. Справочник DREES отстаёт от реальности на 1–2 месяца: для новых структур (недавние CPTS, MSP на этапе согласования) сверяйтесь с данными ARS / Service Public. Источник: FINESS / DREES. Примечание: поле `email` всегда `null` (не раскрывается публичным FINESS). Примечание: `raison_sociale` берётся из дампа DREES, который сокращает длинные названия (~38 символов макс., например 'CERBALLIANCE HA' вместо 'CERBALLIANCE HAZEBROUCK'). Для полного юридического названия сверяйтесь через SIREN/SIRET (entreprise_by_siren / etablissement_by_siret).

Получает полные сведения о медицинском учреждении по номеру FINESS (9 цифр): наименование, категорию + семейство, полный адрес (улица + индекс + город + код INSEE + департамент), координаты GPS, телефон. Возвращает объект `LookupResult`, дискриминируемый по полю `found`. `found: true` → поля FINESS в плоской структуре. `found: false` → `{ found: false, key, lookupStatus: 'not_found', message }`. Справочник DREES отстаёт от реальности на 1–2 месяца: для новых структур (недавние CPTS, MSP на этапе согласования) сверяйтесь с данными ARS / Service Public. Источник: FINESS / DREES. Примечание: поле `email` всегда `null` (не раскрывается публичным FINESS). Примечание: `raison_sociale` берётся из дампа DREES, который сокращает длинные названия (~38 символов макс., например 'CERBALLIANCE HA' вместо 'CERBALLIANCE HAZEBROUCK'). Для полного юридического названия сверяйтесь через SIREN/SIRET (entreprise_by_siren / etablissement_by_siret).

Параметры

  • num_finessstringобязательный

    Numéro FINESS exact (9 chiffres).

  • include_freshnessboolean

    Si true, ajoute un champ `data_freshness` au payload (dans `query_metadata` si présent, sinon à la racine) listant la dernière ingestion réussie par source (FINESS, Ameli, RPPS, CDS) avec `staleness_days`. Opt-in pour ne pas alourdir les payloads par défaut. Cache 5min côté serveur — coût négligeable.

etablissement_by_siretтолько чтениеидемпотентныйвнешний мир

Получает детали организации по SIRET (14 цифр) через API SIRENE INSEE V3.11: наименование юридического лица, коммерческое обозначение, код NAF организации, даты создания/закрытия, статус (активна/закрыта), полный адрес, диапазон численности сотрудников. Источник: SIRENE INSEE V3.11 (api.insee.fr). **Формат ответа**: объект `LookupResult`, дискриминируемый по полю `found`. - `found: true` → плоский объект организации (`siret`, `siren`, `actif`, `dateFermeture`, `enseigne`, `adresse`, …) - `found: false` → `{ found: false, key, lookupStatus: 'not_found', message }`. Типичные случаи: ключ `INSEE_SIRENE_API_KEY` не настроен на стороне сервера (явное сообщение), SIRET не существует в SIRENE, частичная публикация данных INSEE. ⚠️ Отличие от `entreprise_by_siren`: этот инструмент возвращает ОДНУ конкретную организацию (одно место), а `entreprise_by_siren` возвращает юридическое лицо + список его организаций. Чтобы определить закрытую организацию, которая всё ещё числится активной в FINESS, смотрите `actif: false` + `dateFermeture`. **Нет координат**: эндпоинт INSEE `/siret/<siret>` не возвращает GPS-координаты. Для геолокации объединяйте с `geocode_adresse` на стороне вызывающего кода или используйте `entreprises_in_radius`. Ограничение запросов INSEE: 30 запросов в минуту (повторная попытка после ожидания обрабатывается на стороне сервера).

Получает детали организации по SIRET (14 цифр) через API SIRENE INSEE V3.11: наименование юридического лица, коммерческое обозначение, код NAF организации, даты создания/закрытия, статус (активна/закрыта), полный адрес, диапазон численности сотрудников. Источник: SIRENE INSEE V3.11 (api.insee.fr). **Формат ответа**: объект `LookupResult`, дискриминируемый по полю `found`. - `found: true` → плоский объект организации (`siret`, `siren`, `actif`, `dateFermeture`, `enseigne`, `adresse`, …) - `found: false` → `{ found: false, key, lookupStatus: 'not_found', message }`. Типичные случаи: ключ `INSEE_SIRENE_API_KEY` не настроен на стороне сервера (явное сообщение), SIRET не существует в SIRENE, частичная публикация данных INSEE. ⚠️ Отличие от `entreprise_by_siren`: этот инструмент возвращает ОДНУ конкретную организацию (одно место), а `entreprise_by_siren` возвращает юридическое лицо + список его организаций. Чтобы определить закрытую организацию, которая всё ещё числится активной в FINESS, смотрите `actif: false` + `dateFermeture`. **Нет координат**: эндпоинт INSEE `/siret/<siret>` не возвращает GPS-координаты. Для геолокации объединяйте с `geocode_adresse` на стороне вызывающего кода или используйте `entreprises_in_radius`. Ограничение запросов INSEE: 30 запросов в минуту (повторная попытка после ожидания обрабатывается на стороне сервера).

Параметры

  • siretstringобязательный

    SIRET exact, 14 chiffres.

etablissements_finess_by_categorieтолько чтениеидемпотентныйвнешний мир

Список учреждений FINESS по категории, с опциональным фильтром по департаменту или коммуне. Без радиуса — для полного перечисления административной зоны. 24 доступные категории: mco, ssr, sld, had, psychiatrie, dialyse, ambulatoire, labo, imagerie, pharmacie, msp_cpts, ehpad, residence_autonomie, senior_accompagnement, ssiad, aide_domicile, handicap_enfants, handicap_adultes, addictologie, enfance_protection, pmi, hebergement_social, prevention_sante, groupement. V0.19.0: принимает `nom_commune` (строка) как альтернативу `code_insee` (разрешается через geo.api.gouv.fr). Строгое XOR — передавать ЛИБО `departement`, ЛИБО `code_insee`, ЛИБО `nom_commune` (можно комбинировать с `departement`, который тогда действует как подсказка для устранения неоднозначности для омонимов типа "Saint-Martin"). Без параметра зона = вся Франция (допускается). Источник: FINESS / DREES. Примечание: поле `email` всегда `null` (не раскрывается публичным FINESS). Примечание: `raison_sociale` берется из дампа DREES, который сокращает длинные названия (~38 символов макс., например 'CERBALLIANCE HA' вместо 'CERBALLIANCE HAZEBROUCK'). Для полного юридического названия делайте перекрестную проверку через SIREN/SIRET (entreprise_by_siren / etablissement_by_siret). Важно: фильтр `familles` учитывает учреждения по их *основной* категории FINESS. Деятельность, размещенная на площадке другой категории (например, лабораторный корпус больницы при `famille=labo`), не учитывается — см. поле `perimetre` ответа. Категория `imagerie` чаще всего возвращает 0 результатов (FINESS не учитывает кабинеты лучевой диагностики).

Список учреждений FINESS по категории, с опциональным фильтром по департаменту или коммуне. Без радиуса — для полного перечисления административной зоны. 24 доступные категории: mco, ssr, sld, had, psychiatrie, dialyse, ambulatoire, labo, imagerie, pharmacie, msp_cpts, ehpad, residence_autonomie, senior_accompagnement, ssiad, aide_domicile, handicap_enfants, handicap_adultes, addictologie, enfance_protection, pmi, hebergement_social, prevention_sante, groupement. V0.19.0: принимает `nom_commune` (строка) как альтернативу `code_insee` (разрешается через geo.api.gouv.fr). Строгое XOR — передавать ЛИБО `departement`, ЛИБО `code_insee`, ЛИБО `nom_commune` (можно комбинировать с `departement`, который тогда действует как подсказка для устранения неоднозначности для омонимов типа "Saint-Martin"). Без параметра зона = вся Франция (допускается). Источник: FINESS / DREES. Примечание: поле `email` всегда `null` (не раскрывается публичным FINESS). Примечание: `raison_sociale` берется из дампа DREES, который сокращает длинные названия (~38 символов макс., например 'CERBALLIANCE HA' вместо 'CERBALLIANCE HAZEBROUCK'). Для полного юридического названия делайте перекрестную проверку через SIREN/SIRET (entreprise_by_siren / etablissement_by_siret). Важно: фильтр `familles` учитывает учреждения по их *основной* категории FINESS. Деятельность, размещенная на площадке другой категории (например, лабораторный корпус больницы при `famille=labo`), не учитывается — см. поле `perimetre` ответа. Категория `imagerie` чаще всего возвращает 0 результатов (FINESS не учитывает кабинеты лучевой диагностики).

Параметры

  • categorieenumобязательный

    Famille FINESS recherchée (24 valeurs disponibles, voir enum).

    mcossrsldhadpsychiatriedialyseambulatoirelaboimageriepharmaciemsp_cptsehpadresidence_autonomiesenior_accompagnementssiadaide_domicilehandicap_enfantshandicap_adultesaddictologieenfance_protectionpmihebergement_socialprevention_santegroupement
  • departementstring

    Code département INSEE (ex: '75', '2A', '2B', '971'). Métropole 2 caractères (Corse '2A'/'2B', pas '20'), DOM/TOM 3 caractères. Optionnel. Combinable avec `nom_commune` comme hint resolver (filtre les homonymes), sinon XOR strict avec `code_insee` et `nom_commune`.

  • code_inseestring

    Code INSEE de commune (5 caractères). Optionnel. XOR strict avec `departement` et `nom_commune`.

  • nom_communestring

    Nom officiel de commune (alternative à `code_insee`, V0.19). Ex: "Lille", "Saint-Étienne". Le serveur résout en interne via geo.api.gouv.fr. Si ambigu (ex "Saint-Martin" → 5 villes), retourne une erreur structurée avec candidates. Combinable avec `departement` comme hint de désambiguïsation. Abréviations type "St-Martin" non reconnues — utiliser le nom officiel complet.

  • limitnumber

    Nombre max de résultats (1-500, défaut 100).

  • include_freshnessboolean

    Si true, ajoute un champ `data_freshness` au payload (dans `query_metadata` si présent, sinon à la racine) listant la dernière ingestion réussie par source (FINESS, Ameli, RPPS, CDS) avec `staleness_days`. Opt-in pour ne pas alourdir les payloads par défaut. Cache 5min côté serveur — coût négligeable.

etablissements_finess_in_radiusтолько чтениеидемпотентныйвнешний мир

Поиск медицинских учреждений FINESS в географическом радиусе (PostGIS ST_DWithin). Фильтруется по семействам. Доступно 24 значения: mco, ssr, sld, had, psychiatrie, dialyse, ambulatoire, labo, imagerie, pharmacie, msp_cpts, ehpad, residence_autonomie, senior_accompagnement, ssiad, aide_domicile, handicap_enfants, handicap_adultes, addictologie, enfance_protection, pmi, hebergement_social, prevention_sante, groupement. Источник: FINESS / DREES (дамп CSV, загруженный локально). Примечание: поле `email` всегда `null` (не раскрывается публичным FINESS). Примечание: `raison_sociale` берётся из дампа DREES, который сокращает длинные названия (~38 символов макс., например 'CERBALLIANCE HA' вместо 'CERBALLIANCE HAZEBROUCK'). Для полного юридического названия — перекрёстная проверка через SIREN/SIRET (entreprise_by_siren / etablissement_by_siret). Важно: фильтр `familles` считает учреждения по их *основной* категории FINESS. Деятельность, размещённая на площадке другой категории (например, лаборатория в больнице при `famille=labo`), не учитывается — смотрите поле `perimetre` в ответе. Семейство `imagerie` чаще всего возвращает 0 результатов (FINESS не перечисляет кабинеты визуализации).

Поиск медицинских учреждений FINESS в географическом радиусе (PostGIS ST_DWithin). Фильтруется по семействам. Доступно 24 значения: mco, ssr, sld, had, psychiatrie, dialyse, ambulatoire, labo, imagerie, pharmacie, msp_cpts, ehpad, residence_autonomie, senior_accompagnement, ssiad, aide_domicile, handicap_enfants, handicap_adultes, addictologie, enfance_protection, pmi, hebergement_social, prevention_sante, groupement. Источник: FINESS / DREES (дамп CSV, загруженный локально). Примечание: поле `email` всегда `null` (не раскрывается публичным FINESS). Примечание: `raison_sociale` берётся из дампа DREES, который сокращает длинные названия (~38 символов макс., например 'CERBALLIANCE HA' вместо 'CERBALLIANCE HAZEBROUCK'). Для полного юридического названия — перекрёстная проверка через SIREN/SIRET (entreprise_by_siren / etablissement_by_siret). Важно: фильтр `familles` считает учреждения по их *основной* категории FINESS. Деятельность, размещённая на площадке другой категории (например, лаборатория в больнице при `famille=labo`), не учитывается — смотрите поле `perimetre` в ответе. Семейство `imagerie` чаще всего возвращает 0 результатов (FINESS не перечисляет кабинеты визуализации).

Параметры

  • lonnumberобязательный

    Longitude du centre (WGS84).

  • latnumberобязательный

    Latitude du centre (WGS84).

  • radius_kmnumber

    Rayon en km (0.1-50, défaut 5).

  • famillesstring[]

    Familles FINESS à inclure (24 valeurs disponibles, voir enum). Si omis, toutes catégories.

  • limitnumber

    Nombre max de résultats (1-500, défaut 100).

  • include_freshnessboolean

    Si true, ajoute un champ `data_freshness` au payload (dans `query_metadata` si présent, sinon à la racine) listant la dernière ingestion réussie par source (FINESS, Ameli, RPPS, CDS) avec `staleness_days`. Opt-in pour ne pas alourdir les payloads par défaut. Cache 5min côté serveur — coût négligeable.

finess_sirene_coverage_in_radiusтолько чтениеидемпотентныйвнешний мир

Сравнивает покрытие реестра FINESS DREES (физические площадки, аккредитованные как LBM/аптеки/и т.д.) с реестром SIRENE DINUM (физические SIRET, активные по целевому NAF) в географическом радиусе. Метрика: отношение сайтов FINESS к SIRET SIRENE. Помогает выявить завышение данных FINESS (сайты ещё числятся, но SIRET закрыты) или занижение данных DREES (сайты SIRENE не аккредитованы FINESS). Включает явную методологию + предостережения. V0.13.2: если `familles` не передан, область FINESS автоматически выводится из целевого NAF (гарантирует согласованное отношение — иначе `finess_sites` смешало бы все семейства, расположенные в радиусе). Сопоставление FINESS↔SIRET управляется через активность NAF↔семейство (пример: Hôpital Franco-Britannique: IFSI и лаборатория на 4 rue Kléber больше не путаются). Источник: FINESS DREES + DINUM Recherche Entreprises + SIRENE INSEE.

Сравнивает покрытие реестра FINESS DREES (физические площадки, аккредитованные как LBM/аптеки/и т.д.) с реестром SIRENE DINUM (физические SIRET, активные по целевому NAF) в географическом радиусе. Метрика: отношение сайтов FINESS к SIRET SIRENE. Помогает выявить завышение данных FINESS (сайты ещё числятся, но SIRET закрыты) или занижение данных DREES (сайты SIRENE не аккредитованы FINESS). Включает явную методологию + предостережения. V0.13.2: если `familles` не передан, область FINESS автоматически выводится из целевого NAF (гарантирует согласованное отношение — иначе `finess_sites` смешало бы все семейства, расположенные в радиусе). Сопоставление FINESS↔SIRET управляется через активность NAF↔семейство (пример: Hôpital Franco-Britannique: IFSI и лаборатория на 4 rue Kléber больше не путаются). Источник: FINESS DREES + DINUM Recherche Entreprises + SIRENE INSEE.

Параметры

  • lonnumberобязательный

    Longitude WGS84 du centre de la zone.

  • latnumberобязательный

    Latitude WGS84 du centre de la zone.

  • radius_kmnumber

    Rayon de la zone en km (0.1-50, défaut 5).

  • nafstringобязательный

    Code NAF SIRENE à comparer (ex: '8690B' labos d'analyses médicales, '4773Z' pharmacies, '8621Z' médecine générale).

  • famillesstring[]

    Familles FINESS à inclure côté DREES. V0.13.2 : si omis, auto-dérivé du NAF cible via la table naf-finess-mapping (ex: naf=8690B → familles=[labo] ; naf=8610Z → multi-familles hospitalières). Passer explicitement si vous voulez restreindre davantage le scope. Valeurs : mco, ssr, sld, had, psychiatrie, dialyse, ambulatoire, labo, imagerie, pharmacie, msp_cpts, ehpad, residence_autonomie, senior_accompagnement, ssiad, aide_domicile, handicap_enfants, handicap_adultes, addictologie, enfance_protection, pmi, hebergement_social, prevention_sante, groupement.

  • max_unites_legalesnumber

    Nombre maximum d'unités légales DINUM à déplier (1-25, défaut 10). Au-delà : truncated_unites_legales=true.

geocode_adresseтолько чтениеидемпотентныйвнешний мир

Геокодирует французский адрес в GPS-координаты. Источник: IGN Géoplateforme (data.geopf.fr). Точность до номера дома. Поле `score` (0-1) оценивает надёжность совпадения: >= 0.8 — надёжно, < 0.5 — сомнительное совпадение (часто это fallback на улицу или населённый пункт, не связанный с запрошенным адресом). Булево поле `confidence_low` принимает значение `true` в таком случае: НЕ ИСПОЛЬЗУЙТЕ `point` для принятия решения, когда `confidence_low: true`. Поле `type` также указывает на детализацию (housenumber > street > locality > municipality).

Геокодирует французский адрес в GPS-координаты. Источник: IGN Géoplateforme (data.geopf.fr). Точность до номера дома. Поле `score` (0-1) оценивает надёжность совпадения: >= 0.8 — надёжно, < 0.5 — сомнительное совпадение (часто это fallback на улицу или населённый пункт, не связанный с запрошенным адресом). Булево поле `confidence_low` принимает значение `true` в таком случае: НЕ ИСПОЛЬЗУЙТЕ `point` для принятия решения, когда `confidence_low: true`. Поле `type` также указывает на детализацию (housenumber > street > locality > municipality).

Параметры

  • adressestringобязательный

    Adresse complète à géocoder.

  • codePostalstring

    Optionnel — limiter le résultat à un code postal pour désambiguïser.

  • codeCommunestring

    Optionnel — limiter au code INSEE de commune.

get_commune_by_codeтолько чтениеидемпотентныйвнешний мир

Получает город по его коду INSEE. Возвращает объект `LookupResult`, различаемый по полю `found`. `found: true` → поля города развернуты (nom, codesPostaux, centre…). `found: false` → `{ found: false, key, lookupStatus: 'not_found', message }`, направляющий к `autocomplete_commune` для устранения неоднозначности. Принимаемые псевдонимы: `code_insee`/`codeInsee`/`insee` → `code`.

Получает город по его коду INSEE. Возвращает объект `LookupResult`, различаемый по полю `found`. `found: true` → поля города развернуты (nom, codesPostaux, centre…). `found: false` → `{ found: false, key, lookupStatus: 'not_found', message }`, направляющий к `autocomplete_commune` для устранения неоднозначности. Принимаемые псевдонимы: `code_insee`/`codeInsee`/`insee` → `code`.

Параметры

  • codestringобязательный

    Code INSEE 5 caractères. Ex: "75056" Paris, "59009" Villeneuve-d'Ascq, "2A004" Ajaccio.

historique_etablissementтолько чтениеидемпотентныйвнешний мир

Восстанавливает полную временную линию учреждения здравоохранения (открытия, закрытия, смены кода NAF/вывески) через связку FINESS DREES ↔ resolver SIRET (RPPS + DINUM) ↔ SIRENE INSEE V3.11. Читает полные `periodesEtablissement` для каждого кандидата SIRET. **V0.7.0**: кандидаты SIRET расширены через resolver — теперь включает закрытые SIRET родительского SIREN, совпадающие с адресом FINESS (не видны со стороны RPPS). Позволяет отследить точную дату закрытия участка, даже если FINESS всё ещё числит его активным. Типовое применение: - проследить историю участка после слияния-поглощения; - определить точную дату закрытия SIRET, который FINESS всё ещё показывает активным; - разобраться в каскаде ребрендингов через смену `enseigne1Etablissement` по периодам. Формат: объект `LookupResult`. Если `found: true`, возвращает `finess` (сводка от DREES) + `siret_timelines` (по одной записи на каждый кандидат SIRET с хронологическими `periodes`). Стоимость: 1 RPC FINESS + 1 SELECT rpps + N вызовов DINUM + N вызовов INSEE параллельно (обычно N ≤ 5). Кеш не используется.

Восстанавливает полную временную линию учреждения здравоохранения (открытия, закрытия, смены кода NAF/вывески) через связку FINESS DREES ↔ resolver SIRET (RPPS + DINUM) ↔ SIRENE INSEE V3.11. Читает полные `periodesEtablissement` для каждого кандидата SIRET. **V0.7.0**: кандидаты SIRET расширены через resolver — теперь включает закрытые SIRET родительского SIREN, совпадающие с адресом FINESS (не видны со стороны RPPS). Позволяет отследить точную дату закрытия участка, даже если FINESS всё ещё числит его активным. Типовое применение: - проследить историю участка после слияния-поглощения; - определить точную дату закрытия SIRET, который FINESS всё ещё показывает активным; - разобраться в каскаде ребрендингов через смену `enseigne1Etablissement` по периодам. Формат: объект `LookupResult`. Если `found: true`, возвращает `finess` (сводка от DREES) + `siret_timelines` (по одной записи на каждый кандидат SIRET с хронологическими `periodes`). Стоимость: 1 RPC FINESS + 1 SELECT rpps + N вызовов DINUM + N вызовов INSEE параллельно (обычно N ≤ 5). Кеш не используется.

Параметры

  • num_finessstringобязательный

    Numéro FINESS exact (9 chiffres).

inspect_siteтолько чтениеидемпотентныйвнешний мир

Обзор 360 медицинского учреждения за 1 вызов (V0.10). Естественное продолжение `panorama_sante_territoire` на стороне **сайта**: параллельно агрегирует (a) идентификацию FINESS DREES (наименование, адрес, телефон), (b) административный статус SIRENE через resolver SIRET (вердикты сайта и группы, best_match, исследованные SIREN, dinum_errors, объяснение, удобное для LLM), (c) прикреплённых специалистов через num_finess (ограниченная выборка + флаг `truncated`, если на сайте больше PS: НЕ общее количество), (d) историю INSEE (временная шкала административных периодов по кандидату SIRET). Заменяет 3 отдельных вызова MCP (`verifier_site_actif` + `rpps_dans_etablissement` + `historique_etablissement`) одним. Полезно для: поиска (квалификация сайта перед outreach), территориального аудита (быстрая перекрёстная проверка подозрительного FINESS), пакетного обогащения CRM. **Формат возврата**: объект `LookupResult`. Когда `found: true`, payload с 4 разделами (finess, statut_site, professionnels, historique). Раздел `historique` может быть `available: false`, когда FINESS существует, но не идентифицирован ни один кандидат SIRET (RPPS пуст + DINUM 0 совпадений), в этом случае `message` повторяет сообщение из `historique_etablissement`. Когда `num_finess` отсутствует в FINESS DREES, возвращает `{found: false, lookupStatus: 'not_found', message}`. Стоимость: 3 параллельных подвызова. Кэш PostgreSQL поглощает дублирование FINESS-RPC; переход RPPS→DINUM выполняется дважды (verifier и historique разделяют каскад), дополнительная задержка p95 ≤ 600 мс: приемлемо для агрегатора. Для целевых потребностей (только вердикт, только история) предпочитайте отдельные инструменты. Тяжёлый payload (~7K токенов): передавайте `historique_detail: false` для облегчённого возврата (резюме вместо полных временных шкал SIRENE) при пакетном использовании. Принимаемые псевдонимы: `numFiness`/`finess`/`id` → `num_finess`.

Обзор 360 медицинского учреждения за 1 вызов (V0.10). Естественное продолжение `panorama_sante_territoire` на стороне **сайта**: параллельно агрегирует (a) идентификацию FINESS DREES (наименование, адрес, телефон), (b) административный статус SIRENE через resolver SIRET (вердикты сайта и группы, best_match, исследованные SIREN, dinum_errors, объяснение, удобное для LLM), (c) прикреплённых специалистов через num_finess (ограниченная выборка + флаг `truncated`, если на сайте больше PS: НЕ общее количество), (d) историю INSEE (временная шкала административных периодов по кандидату SIRET). Заменяет 3 отдельных вызова MCP (`verifier_site_actif` + `rpps_dans_etablissement` + `historique_etablissement`) одним. Полезно для: поиска (квалификация сайта перед outreach), территориального аудита (быстрая перекрёстная проверка подозрительного FINESS), пакетного обогащения CRM. **Формат возврата**: объект `LookupResult`. Когда `found: true`, payload с 4 разделами (finess, statut_site, professionnels, historique). Раздел `historique` может быть `available: false`, когда FINESS существует, но не идентифицирован ни один кандидат SIRET (RPPS пуст + DINUM 0 совпадений), в этом случае `message` повторяет сообщение из `historique_etablissement`. Когда `num_finess` отсутствует в FINESS DREES, возвращает `{found: false, lookupStatus: 'not_found', message}`. Стоимость: 3 параллельных подвызова. Кэш PostgreSQL поглощает дублирование FINESS-RPC; переход RPPS→DINUM выполняется дважды (verifier и historique разделяют каскад), дополнительная задержка p95 ≤ 600 мс: приемлемо для агрегатора. Для целевых потребностей (только вердикт, только история) предпочитайте отдельные инструменты. Тяжёлый payload (~7K токенов): передавайте `historique_detail: false` для облегчённого возврата (резюме вместо полных временных шкал SIRENE) при пакетном использовании. Принимаемые псевдонимы: `numFiness`/`finess`/`id` → `num_finess`.

Параметры

  • num_finessstringобязательный

    Numéro FINESS exact 9 chiffres. Ex: '590048997'.

  • rpps_limitinteger

    Nombre max de PS dans `professionnels.sample`. `professionnels.count` = taille du sample (≤ cette borne), pas le total du site ; `truncated: true` signale qu'il y a davantage de PS. Borné [1, 50]. Défaut 10.

  • historique_detailboolean

    Inclure les timelines SIRENE détaillées dans `historique.siret_timelines` (défaut true). `false` = payload allégé (~7K tokens en moins) : `historique` ne porte qu'un `resume` (counts) + un pointeur vers `historique_etablissement`.

lister_nomenclatureтолько чтениеидемпотентныйвнешний мир

Описание номенклатур кодов сервера (единый инструмент с параметром `referentiel`) — вызывать перед фильтрацией другого инструмента, а не гадать коды. ⚠️ 3 номенклатуры РАЗЛИЧНЫ: одно и то же число обозначает разные вещи (например, '10' = врач со стороны ANS, нейрохирург со стороны Ameli). НИКОГДА не передавайте код из одного справочника в параметр другого — фильтр вернёт пустой результат без ошибки. `referentiel`: - `ameli_specialites` — коды `specialite_code` Ameli (частнопрактикующие врачи, работающие по договору с Assurance Maladie / CNAM): нативное название, привязанный `type_ps_code`, количество, `libelle_clarifie` (устраняет неоднозначность общих названий, например «Врач общей практики» = 01/22/23; «Психиатр» = 33/75), `is_libelle_partage`. Для фильтрации `professionnels_in_radius` / `professionnels_par_specialite_dept` (параметр `specialite_code(s)`). - `ameli_types_ps` — коды `type_ps` Ameli: `libelle_source`, `libelle_clarifie` (разрешает неоднозначность кода "2" — всеобъемлющего), количество и `specialites_presentes` (сгруппированные специальности). Лёгкий payload через `include_specialites: false` (→ `nb_specialites`). - `rpps_savoir_faire` — медицинские специальности `savoir_faire_code` RPPS / Annuaire Santé ANS (например, 'SM04' Кардиология). Для фильтрации `densite_sante` (целевые профессионалы) / `professionnels_rpps_*`. Фильтр по `profession_code` (по умолчанию '10' Врач; пустая строка или 'null' = все savoir_faire). Пагинация: `limit` (по умолчанию 50), в ответе отдаются `total` и `truncated`. ОБЛАСТЬ ПРИМЕНЕНИЯ: только частнопрактикующие врачи, работающие по договору. ВНЕ ОБЛАСТИ: исключительно больничные/наёмные врачи, наёмные врачи-биологи в LBM, больничные патологоанатомы, врачи по труду, судебная медицина. Для численности по всем статусам — см. Annuaire Santé ANS (RPPS, esante.gouv.fr) — этот сервер их не покрывает. Источник: Annuaire santé Ameli (Assurance Maladie), обновление еженедельное. Повторное использование согласно ст. L.1461-2 CSP — указывать источник и дату синхронизации.

Описание номенклатур кодов сервера (единый инструмент с параметром `referentiel`) — вызывать перед фильтрацией другого инструмента, а не гадать коды. ⚠️ 3 номенклатуры РАЗЛИЧНЫ: одно и то же число обозначает разные вещи (например, '10' = врач со стороны ANS, нейрохирург со стороны Ameli). НИКОГДА не передавайте код из одного справочника в параметр другого — фильтр вернёт пустой результат без ошибки. `referentiel`: - `ameli_specialites` — коды `specialite_code` Ameli (частнопрактикующие врачи, работающие по договору с Assurance Maladie / CNAM): нативное название, привязанный `type_ps_code`, количество, `libelle_clarifie` (устраняет неоднозначность общих названий, например «Врач общей практики» = 01/22/23; «Психиатр» = 33/75), `is_libelle_partage`. Для фильтрации `professionnels_in_radius` / `professionnels_par_specialite_dept` (параметр `specialite_code(s)`). - `ameli_types_ps` — коды `type_ps` Ameli: `libelle_source`, `libelle_clarifie` (разрешает неоднозначность кода "2" — всеобъемлющего), количество и `specialites_presentes` (сгруппированные специальности). Лёгкий payload через `include_specialites: false` (→ `nb_specialites`). - `rpps_savoir_faire` — медицинские специальности `savoir_faire_code` RPPS / Annuaire Santé ANS (например, 'SM04' Кардиология). Для фильтрации `densite_sante` (целевые профессионалы) / `professionnels_rpps_*`. Фильтр по `profession_code` (по умолчанию '10' Врач; пустая строка или 'null' = все savoir_faire). Пагинация: `limit` (по умолчанию 50), в ответе отдаются `total` и `truncated`. ОБЛАСТЬ ПРИМЕНЕНИЯ: только частнопрактикующие врачи, работающие по договору. ВНЕ ОБЛАСТИ: исключительно больничные/наёмные врачи, наёмные врачи-биологи в LBM, больничные патологоанатомы, врачи по труду, судебная медицина. Для численности по всем статусам — см. Annuaire Santé ANS (RPPS, esante.gouv.fr) — этот сервер их не покрывает. Источник: Annuaire santé Ameli (Assurance Maladie), обновление еженедельное. Повторное использование согласно ст. L.1461-2 CSP — указывать источник и дату синхронизации.

Параметры

  • referentielenumобязательный

    Nomenclature à lister. `ameli_specialites` / `ameli_types_ps` = Ameli (libéraux conventionnés) ; `rpps_savoir_faire` = spécialités médicales ANS/RPPS (nomenclature DISTINCTE).

    ameli_specialitesameli_types_psrpps_savoir_faire
  • limitnumber

    Nombre max de résultats (défaut 50, max 1000). Triés par fréquence décroissante. La réponse expose `total` (effectif réel) et `truncated` — re-appeler avec un `limit` supérieur pour la liste complète.

  • include_freshnessboolean

    Si true, ajoute un champ `data_freshness` au payload (dans `query_metadata` si présent, sinon à la racine) listant la dernière ingestion réussie par source (FINESS, Ameli, RPPS, CDS) avec `staleness_days`. Opt-in pour ne pas alourdir les payloads par défaut. Cache 5min côté serveur — coût négligeable.

  • include_specialitesboolean

    Référentiel `ameli_types_ps` UNIQUEMENT : inclure le sous-tableau `specialites_presentes` détaillé (défaut true). `false` → remplacé par `nb_specialites` (compteur), ~6K tokens économisés.

  • profession_codestring

    Référentiel `rpps_savoir_faire` UNIQUEMENT : code profession ANS (TRE_R94). Défaut '10' (Médecin). String vide ou 'null' = tous savoir_faire, toutes professions.

panorama_implantation_completтолько чтениеидемпотентныйвнешний мир

Исследование размещения лаборатории в 1 вызов (V0.23). Геокодирует целевой адрес, затем агрегирует ПАРАЛЛЕЛЬНО 7 секций: `territoire` (плотности PS муниципальные vs национальные + учреждения), `demande` (демографический профиль БАССЕЙНА — радиус — через profil_iris: возраст, CSP, взвешенный доход), `concurrents` (лаборатории FINESS), `pourvoyeurs` (MCO/EHPAD/SSR/диализ — экосистемные драйверы), `prescripteurs` (врачи RPPS + IDEL Ameli), `cds` (центры здоровья), `referentiels` (качество покрытия FINESS↔SIRENE). Заменяет ~15 индивидуальных вызовов MCP на 1. Возвращает РЕЗЮМЕ (count / top-N / среднее), НИКОГДА не сырые списки. НИКАКОЙ бизнес-интерпретации (никакого 'медицинской пустыни' или вердикта GO/NO-GO) — вызывающий LLM применяет свою сетку. ДЕГРАДАЦИЯ (читай `couverture` — 1 флаг на секцию): `"ok"` | `"partiel:<причина>"` | `"indisponible:<причина>"`. Если источник упал, ЕГО секция помечается флагом, а ОСТАЛЬНОЕ возвращается — затем заполняет пробел через соответствующий унитарный инструмент (etablissements_finess_in_radius, professionnels_rpps_in_radius, densite_sante, centres_sante_in_radius…). Ошибка ПРИВЯЗКИ (геокодирование KO / сомнительный адрес / невыводимый код INSEE) = полное отклонение (RangeError). Внутренние ловушки: Paris/Lyon/Marseille переключены на департамент (`meta.plm_mode=true`); `prescripteurs` выставляет `precis_count` (PS геолоцированы по адресу, а не по центроиду коммуны); `cds` без индивидуального расстояния (центроид коммуны). WORKFLOW: вызывает ЭТОТ инструмент для ЗАПУСКА исследования, затем углубляется в секции `partiel`/`indisponible` через унитарные инструменты, затем `enrichir_concurrents` на топ-3 из `concurrents.top`. Источники: IGN (геокодирование), FINESS DREES, RPPS/ANS, Ameli/CNAM, INSEE/FILOSOFI, SIRENE/DINUM.

Исследование размещения лаборатории в 1 вызов (V0.23). Геокодирует целевой адрес, затем агрегирует ПАРАЛЛЕЛЬНО 7 секций: `territoire` (плотности PS муниципальные vs национальные + учреждения), `demande` (демографический профиль БАССЕЙНА — радиус — через profil_iris: возраст, CSP, взвешенный доход), `concurrents` (лаборатории FINESS), `pourvoyeurs` (MCO/EHPAD/SSR/диализ — экосистемные драйверы), `prescripteurs` (врачи RPPS + IDEL Ameli), `cds` (центры здоровья), `referentiels` (качество покрытия FINESS↔SIRENE). Заменяет ~15 индивидуальных вызовов MCP на 1. Возвращает РЕЗЮМЕ (count / top-N / среднее), НИКОГДА не сырые списки. НИКАКОЙ бизнес-интерпретации (никакого 'медицинской пустыни' или вердикта GO/NO-GO) — вызывающий LLM применяет свою сетку. ДЕГРАДАЦИЯ (читай `couverture` — 1 флаг на секцию): `"ok"` | `"partiel:<причина>"` | `"indisponible:<причина>"`. Если источник упал, ЕГО секция помечается флагом, а ОСТАЛЬНОЕ возвращается — затем заполняет пробел через соответствующий унитарный инструмент (etablissements_finess_in_radius, professionnels_rpps_in_radius, densite_sante, centres_sante_in_radius…). Ошибка ПРИВЯЗКИ (геокодирование KO / сомнительный адрес / невыводимый код INSEE) = полное отклонение (RangeError). Внутренние ловушки: Paris/Lyon/Marseille переключены на департамент (`meta.plm_mode=true`); `prescripteurs` выставляет `precis_count` (PS геолоцированы по адресу, а не по центроиду коммуны); `cds` без индивидуального расстояния (центроид коммуны). WORKFLOW: вызывает ЭТОТ инструмент для ЗАПУСКА исследования, затем углубляется в секции `partiel`/`indisponible` через унитарные инструменты, затем `enrichir_concurrents` на топ-3 из `concurrents.top`. Источники: IGN (геокодирование), FINESS DREES, RPPS/ANS, Ameli/CNAM, INSEE/FILOSOFI, SIRENE/DINUM.

Параметры

  • adressestring

    Adresse cible, géocodée en interne via IGN. Ex: "12 rue Nationale, Lille". XOR avec `point`.

  • pointobject

    Coordonnées { lat, lon } si déjà connues (skip géocodage). Fournir `code_insee` avec.

  • code_inseestring

    Code INSEE commune (avec `point`, quand le géocodage est déjà fait).

  • rayon_kmnumber

    Rayon du bassin de l'étude (km). Défaut 5.

panorama_sante_territoireтолько чтениеидемпотентныйвнешний мир

Панорама здоровья французской коммуны за 1 вызов (V0.9). Агрегирует параллельно: население (INSEE Melodi), плотность врачей + медсестёр + фармацевтов с национальным сравнением (методология DREES), количество учреждений FINESS по категориям (по умолчанию ["labo","pharmacie","ehpad","mco","msp_cpts"]), и блок DEMANDE (V0.22.0 — демографический профиль коммуны, агрегированный по её IRIS: возраст, CSP, семьи, взвешенный доход, для СРАВНЕНИЯ с ПРЕДЛОЖЕНИЕМ выше для помощи в выборе места; `demand: null`, если коммуна вне покрытия IRIS (DOM не обработаны) — для детализации по району или радиусу используйте `profil_iris`). Заменяет 7-10 индивидуальных вызовов MCP одним. Не возвращает НИКАКОЙ бизнес-интерпретации (без автоматической квалификации 'désert médical') — вызывающий LLM применяет свою сетку. V0.19.0: принимает `nom_commune` (строка) как альтернативу `code_insee`. `departement` (V0.19) = подсказка для resolver ТОЛЬКО (панорама не считает по департаменту; один `departement` вызывает явную ошибку). **Смешанная гранулярность**: плотность специалистов и население рассчитываются на уровне **коммуны**; счёт FINESS агрегируется на уровне **департамента**, полученного из кода INSEE (ограничение V0.9 — пока нет RPC count_finess_by_commune). Поле `niveauEtablissements` результата показывает `"departement"` (успех), `"indisponible"` (департамент не выведен, например, усечённый код DOM) — используйте эту информацию, чтобы не путать показатели коммуны и департамента. Париж/Марсель/Лион НЕ поддерживаются: панорама по коммуне зависит от плотности по коммуне, недоступной для этих городов (INSEE публикует население только для целой коммуны, а практикующих врачей RPPS по округам). Код PLM (головная коммуна 75056 или округ) вызывает RangeError. Для этих городов запрашивайте отдельные инструменты на уровне `code_dept` (75/69/13). Принимаемые псевдонимы: `codeInsee`/`insee`/`code` → `code_insee`. Источники: RPPS / Annuaire Santé ANS (ежемесячно), FINESS DREES (раз в две недели), INSEE…

Панорама здоровья французской коммуны за 1 вызов (V0.9). Агрегирует параллельно: население (INSEE Melodi), плотность врачей + медсестёр + фармацевтов с национальным сравнением (методология DREES), количество учреждений FINESS по категориям (по умолчанию ["labo","pharmacie","ehpad","mco","msp_cpts"]), и блок DEMANDE (V0.22.0 — демографический профиль коммуны, агрегированный по её IRIS: возраст, CSP, семьи, взвешенный доход, для СРАВНЕНИЯ с ПРЕДЛОЖЕНИЕМ выше для помощи в выборе места; `demand: null`, если коммуна вне покрытия IRIS (DOM не обработаны) — для детализации по району или радиусу используйте `profil_iris`). Заменяет 7-10 индивидуальных вызовов MCP одним. Не возвращает НИКАКОЙ бизнес-интерпретации (без автоматической квалификации 'désert médical') — вызывающий LLM применяет свою сетку. V0.19.0: принимает `nom_commune` (строка) как альтернативу `code_insee`. `departement` (V0.19) = подсказка для resolver ТОЛЬКО (панорама не считает по департаменту; один `departement` вызывает явную ошибку). **Смешанная гранулярность**: плотность специалистов и население рассчитываются на уровне **коммуны**; счёт FINESS агрегируется на уровне **департамента**, полученного из кода INSEE (ограничение V0.9 — пока нет RPC count_finess_by_commune). Поле `niveauEtablissements` результата показывает `"departement"` (успех), `"indisponible"` (департамент не выведен, например, усечённый код DOM) — используйте эту информацию, чтобы не путать показатели коммуны и департамента. Париж/Марсель/Лион НЕ поддерживаются: панорама по коммуне зависит от плотности по коммуне, недоступной для этих городов (INSEE публикует население только для целой коммуны, а практикующих врачей RPPS по округам). Код PLM (головная коммуна 75056 или округ) вызывает RangeError. Для этих городов запрашивайте отдельные инструменты на уровне `code_dept` (75/69/13). Принимаемые псевдонимы: `codeInsee`/`insee`/`code` → `code_insee`. Источники: RPPS / Annuaire Santé ANS (ежемесячно), FINESS DREES (раз в две недели), INSEE…

Параметры

  • code_inseestring

    Code INSEE de la commune 5 caractères. Ex: "59009" Villeneuve-d'Ascq, "33063" Bordeaux, "2A004" Ajaccio. Paris/Lyon/Marseille NON supporté (voir description). XOR avec `nom_commune`.

  • nom_communestring

    Nom officiel de commune (alternative à `code_insee`, V0.19). Ex: "Lille", "Saint-Étienne". Combinable avec `departement` comme hint de désambiguïsation pour homonymes (ex "Saint-Martin" + dept "65"). Abréviations type "St-Martin" non reconnues.

  • departementstring

    Code département INSEE (V0.19, hint resolver UNIQUEMENT). À utiliser EN COMBINAISON avec `nom_commune` pour désambiguer les homonymes. Seul, lève une erreur (panorama = calcul commune uniquement, utiliser `code_insee` ou `nom_commune`).

  • finess_famillesstring[]

    Familles FINESS à inclure dans le décompte établissements. Default ["labo","pharmacie","ehpad","mco","msp_cpts"]. Passer [] pour omettre le décompte FINESS (renvoie uniquement population + densités PS).

populationтолько чтениеидемпотентныйвнешний мир

Население КОММУНЫ (код INSEE 5 символов), ДЕПАРТАМЕНТА (2-3 символа) ИЛИ внутрикоммунального IRIS (9 символов): детализация определяется автоматически по длине `code`. Возвращает `LookupResult`, различаемый по полю `found`. - IRIS (9 симв., например `751103701` = коммуна `75110` + IRIS `3701`): общая численность населения квартала по переписи 2022 года (поле `population`, брутто-данные), + `libelle`, `code_commune`, `type_iris` (H/A/D/Z). Источник: INSEE RP 2022 (встроенная таблица, гео 01/01/2024). Самый мелкий уровень (квартал) для городов; в малонаселённой зоне коммуна = 1 IRIS (`type_iris` Z, код `COM+0000`). Для подробного демографического профиля квартала или района (возраст, CSP, семьи, доход) используйте `profil_iris`. - Коммуна (5 симв., например `75056` Париж, `13055` Марсель, `2A004` Аяччо): PMUN/PCAP/PTOT. Источник INSEE Melodi (DS_POPULATIONS_REFERENCE). PMUN = юридическая база DREES. Коммуна объединена → `found: false` + указание `autocomplete_commune`. INSEE НЕ публикует округа PLM (75101-75120, 13201-13216, 69381-69389) → используйте основную коммуну или департамент. - Департамент (2-3 симв., например `75`, `59`, `2A`, `971`): Майотта (`976`) ОТСУТСТВУЕТ в Melodi → `lookupNotFound`. Принимаемые псевдонимы: `code_insee`/`codeInsee`/`insee`, `code_dept`/`dept`/`departement`/`code_departement`, `code_iris`/`iris` → `code`.

Население КОММУНЫ (код INSEE 5 символов), ДЕПАРТАМЕНТА (2-3 символа) ИЛИ внутрикоммунального IRIS (9 символов): детализация определяется автоматически по длине `code`. Возвращает `LookupResult`, различаемый по полю `found`. - IRIS (9 симв., например `751103701` = коммуна `75110` + IRIS `3701`): общая численность населения квартала по переписи 2022 года (поле `population`, брутто-данные), + `libelle`, `code_commune`, `type_iris` (H/A/D/Z). Источник: INSEE RP 2022 (встроенная таблица, гео 01/01/2024). Самый мелкий уровень (квартал) для городов; в малонаселённой зоне коммуна = 1 IRIS (`type_iris` Z, код `COM+0000`). Для подробного демографического профиля квартала или района (возраст, CSP, семьи, доход) используйте `profil_iris`. - Коммуна (5 симв., например `75056` Париж, `13055` Марсель, `2A004` Аяччо): PMUN/PCAP/PTOT. Источник INSEE Melodi (DS_POPULATIONS_REFERENCE). PMUN = юридическая база DREES. Коммуна объединена → `found: false` + указание `autocomplete_commune`. INSEE НЕ публикует округа PLM (75101-75120, 13201-13216, 69381-69389) → используйте основную коммуну или департамент. - Департамент (2-3 симв., например `75`, `59`, `2A`, `971`): Майотта (`976`) ОТСУТСТВУЕТ в Melodi → `lookupNotFound`. Принимаемые псевдонимы: `code_insee`/`codeInsee`/`insee`, `code_dept`/`dept`/`departement`/`code_departement`, `code_iris`/`iris` → `code`.

Параметры

  • codestringобязательный

    Code INSEE — 5 caractères = commune (ex "75056"), 2-3 caractères = département (ex "75", "971", "2A"). Granularité auto-détectée par la longueur.

professionnel_by_rppsтолько чтениеидемпотентныйвнешний мир

Получает полную карточку PS по национальному идентификатору (`rpps_id` / IDNPS, 11 или 12 цифр — идентификаторы, выданные с 2020 года, имеют префикс `"81"` = 12 символов; старые идентификаторы = 11 символов). Возвращает N записей, когда PS работает на нескольких площадках (1 на площадку, каждая со своей `geo_precision` — один и тот же PS может, таким образом, иметь точную площадку FINESS и площадку по центроиду коммуны). Каждый геолоцированный результат содержит `geo_precision` ∈ {`"adresse"`, `"etablissement_finess"`, `"centroide_commune"`} — читайте это поле, чтобы оценить надежность `coords` (точные BAN/FINESS до метра против центроида коммуны ~3 км, не различающий внутри коммуны). Автоматический fallback на live API FHIR ANS (`gateway.api.esante.gouv.fr/fhir/v2`), если не найдено в локальной базе (ежемесячный снимок данных с задержкой не более J-30). Поле `source` различает `db` (локальная база) и `ans_fhir` (live). `include_freshness` влияет только на `source: "db"`. Источник: Annuaire Santé, Agence du Numérique en Santé (ANS) — Licence Ouverte v2.0

Получает полную карточку PS по национальному идентификатору (`rpps_id` / IDNPS, 11 или 12 цифр — идентификаторы, выданные с 2020 года, имеют префикс `"81"` = 12 символов; старые идентификаторы = 11 символов). Возвращает N записей, когда PS работает на нескольких площадках (1 на площадку, каждая со своей `geo_precision` — один и тот же PS может, таким образом, иметь точную площадку FINESS и площадку по центроиду коммуны). Каждый геолоцированный результат содержит `geo_precision` ∈ {`"adresse"`, `"etablissement_finess"`, `"centroide_commune"`} — читайте это поле, чтобы оценить надежность `coords` (точные BAN/FINESS до метра против центроида коммуны ~3 км, не различающий внутри коммуны). Автоматический fallback на live API FHIR ANS (`gateway.api.esante.gouv.fr/fhir/v2`), если не найдено в локальной базе (ежемесячный снимок данных с задержкой не более J-30). Поле `source` различает `db` (локальная база) и `ans_fhir` (live). `include_freshness` влияет только на `source: "db"`. Источник: Annuaire Santé, Agence du Numérique en Santé (ANS) — Licence Ouverte v2.0

Параметры

  • rpps_idstringобязательный
  • include_freshnessboolean

    Si true, ajoute un champ `data_freshness` au payload (dans `query_metadata` si présent, sinon à la racine) listant la dernière ingestion réussie par source (FINESS, Ameli, RPPS, CDS) avec `staleness_days`. Opt-in pour ne pas alourdir les payloads par défaut. Cache 5min côté serveur — coût négligeable.

professionnels_in_radiusтолько чтениеидемпотентныйвнешний мир

Поиск либеральных медицинских специалистов, заключивших договор с госстрахом, в заданном географическом радиусе. Гибридная геоточность на основе геокодирования BAN (проект C): ~77% специалистов геолоцированы по точному адресу (улица/здание, `distance_km` с точностью до метра), ~23% остаются на центроиде коммуны (~3 км, запасной вариант для негеокодируемых адресов — ДРОМ, Монако, CEDEX, хутора). Читать `geo_precision` ДЛЯ КАЖДОГО результата — не предполагать единообразную точность. Коды type_ps Ameli, присутствующие в базе (3): '1' — врачи, '2' — средний медперсонал (сборное: медсёстры, кинезитерапевты, акушерки, подологи, логопеды, ортоптисты, IPA), '5' — стоматологи-хирурги. Для точного нацеливания на конкретную профессию (например, только медсёстры, только кинезитерапевты, только подологи) использовать `specialite_codes`, а не `type_ps_codes`, который охватывает более широкий круг. Полный список кодов специальностей доступен через инструмент `lister_nomenclature(referentiel:'ameli_specialites')`. Мульти-сайты: по умолчанию специалист, работающий по N адресам, отображается N раз — используйте `dedupe_by_ps=true`, чтобы сгруппировать по практикующему и перечислить сайты в под-объекте. Расстояние возвращается в км по прямой (гаверсинус PostGIS) — для дорожного расстояния используйте внешний сервис (OSRM, ORS). Каждый геолоцированный специалист несёт `geo_precision` ∈ {`"adresse"`, `"centroide_commune"`}: `"adresse"` = точные координаты BAN, `distance_km` точна, индивидуальное ранжирование надёжно; `"centroide_commune"` = ~3 км, `distance_km` ИДЕНТИЧНА для всех специалистов одной коммуны (не различима внутри коммуны — только фильтр зоны, не для ранжирования/выбора отдельного специалиста). **Параметр `precise_only`** (по умолчанию false): при true исключает специалистов на центроиде коммуны и возвращает только ~77% геокодированных по адресу BAN (`distance_km` точна) — рекомендуется для коротких радиусов (<3 км) и ранжирования внутри коммуны. ГРАНИЦЫ: ТОЛЬКО либералы, заключившие договор. ВНЕ ГРАНИЦ: исключительно больничные/наёмные врачи, наёмные медицинские биологи в LBM, анатомопатологи…

Поиск либеральных медицинских специалистов, заключивших договор с госстрахом, в заданном географическом радиусе. Гибридная геоточность на основе геокодирования BAN (проект C): ~77% специалистов геолоцированы по точному адресу (улица/здание, `distance_km` с точностью до метра), ~23% остаются на центроиде коммуны (~3 км, запасной вариант для негеокодируемых адресов — ДРОМ, Монако, CEDEX, хутора). Читать `geo_precision` ДЛЯ КАЖДОГО результата — не предполагать единообразную точность. Коды type_ps Ameli, присутствующие в базе (3): '1' — врачи, '2' — средний медперсонал (сборное: медсёстры, кинезитерапевты, акушерки, подологи, логопеды, ортоптисты, IPA), '5' — стоматологи-хирурги. Для точного нацеливания на конкретную профессию (например, только медсёстры, только кинезитерапевты, только подологи) использовать `specialite_codes`, а не `type_ps_codes`, который охватывает более широкий круг. Полный список кодов специальностей доступен через инструмент `lister_nomenclature(referentiel:'ameli_specialites')`. Мульти-сайты: по умолчанию специалист, работающий по N адресам, отображается N раз — используйте `dedupe_by_ps=true`, чтобы сгруппировать по практикующему и перечислить сайты в под-объекте. Расстояние возвращается в км по прямой (гаверсинус PostGIS) — для дорожного расстояния используйте внешний сервис (OSRM, ORS). Каждый геолоцированный специалист несёт `geo_precision` ∈ {`"adresse"`, `"centroide_commune"`}: `"adresse"` = точные координаты BAN, `distance_km` точна, индивидуальное ранжирование надёжно; `"centroide_commune"` = ~3 км, `distance_km` ИДЕНТИЧНА для всех специалистов одной коммуны (не различима внутри коммуны — только фильтр зоны, не для ранжирования/выбора отдельного специалиста). **Параметр `precise_only`** (по умолчанию false): при true исключает специалистов на центроиде коммуны и возвращает только ~77% геокодированных по адресу BAN (`distance_km` точна) — рекомендуется для коротких радиусов (<3 км) и ранжирования внутри коммуны. ГРАНИЦЫ: ТОЛЬКО либералы, заключившие договор. ВНЕ ГРАНИЦ: исключительно больничные/наёмные врачи, наёмные медицинские биологи в LBM, анатомопатологи…

Параметры

  • lonnumberобязательный

    Longitude du centre (WGS84).

  • latnumberобязательный

    Latitude du centre (WGS84).

  • radius_kmnumber

    Rayon en km (0.1-50, défaut 5).

  • specialite_codesstring[]

    Liste de codes spécialité Ameli (ex: ['01'] MG, ['03'] cardio). Si omis, toutes spécialités.

  • type_ps_codesstring[]

    Liste de codes type PS Ameli (3 valeurs présentes en base : '1' médecins, '2' auxiliaires médicaux fourre-tout — IDE/kinés/sages-femmes/podologues/orthophonistes/orthoptistes/IPA, '5' chirurgiens-dentistes). Pour cibler une seule profession, préférer `specialite_codes`. Si omis, tous types.

  • limitnumber

    Nombre max de résultats (1-500, défaut 100). Appliqué AVANT déduplication.

  • dedupe_by_psboolean

    Regrouper les entrées par praticien (nom + prénom + code spécialité) et lister chaque adresse d'exercice dans `sites[]`. Défaut false (comportement V0.4 historique : un PS multi-sites = N entrées).

  • precise_onlyboolean

    Si true, exclut les PS au centroïde commune et ne renvoie que ceux géocodés à l'adresse BAN, à `distance_km` exacte (cf. description du tool pour la sémantique complète). Défaut false.

  • include_freshnessboolean

    Si true, ajoute un champ `data_freshness` au payload (dans `query_metadata` si présent, sinon à la racine) listant la dernière ingestion réussie par source (FINESS, Ameli, RPPS, CDS) avec `staleness_days`. Opt-in pour ne pas alourdir les payloads par défaut. Cache 5min côté serveur — coût négligeable.

professionnels_par_specialite_deptтолько чтениеидемпотентныйвнешний мир

Список либеральных (частнопрактикующих) медицинских работников, имеющих договор с французской страховой системой (conventionnés), по департаменту, с опциональными фильтрами по специальности или типу PS. Для административного перечисления — без указания радиуса. Коды type_ps Ameli, присутствующие в базе (3): '1' — врачи, '2' — вспомогательный медицинский персонал (сборное понятие: медсёстры, кинезитерапевты, акушерки, подологи, логопеды, ортоптисты, IPA — медсёстры продвинутой практики), '5' — хирурги-стоматологи. Чтобы нацелиться на конкретную профессию (например, только медсёстры), используйте `specialite_code`, а не `type_ps_code` — он охватывает шире. Полный список кодов специальностей доступен через инструмент `lister_nomenclature(referentiel:'ameli_specialites')`. Пагинация: используйте `offset` для получения следующих страниц, когда `truncated=true`. Мульти-сайты: используйте `dedupe_by_ps=true` для группировки по практикующему врачу. ПЕРИМЕТР: только либеральные специалисты, имеющие договор. ВНЕ ПЕРИМЕТРА: врачи, работающие исключительно в стационаре / по найму, медицинские биологи по найму в LBM, патологоанатомы в стационаре, врачи по труду, судебная медицина. Для численности по всем статусам — смотрите Annuaire Santé ANS (RPPS, esante.gouv.fr); этот сервер их не покрывает. Источник: Annuaire santé Ameli (Assurance Maladie), обновление еженедельно. Повторное использование регулируется ст. L.1461-2 Кодекса общественного здравоохранения — необходимо указывать источник и дату синхронизации.

Список либеральных (частнопрактикующих) медицинских работников, имеющих договор с французской страховой системой (conventionnés), по департаменту, с опциональными фильтрами по специальности или типу PS. Для административного перечисления — без указания радиуса. Коды type_ps Ameli, присутствующие в базе (3): '1' — врачи, '2' — вспомогательный медицинский персонал (сборное понятие: медсёстры, кинезитерапевты, акушерки, подологи, логопеды, ортоптисты, IPA — медсёстры продвинутой практики), '5' — хирурги-стоматологи. Чтобы нацелиться на конкретную профессию (например, только медсёстры), используйте `specialite_code`, а не `type_ps_code` — он охватывает шире. Полный список кодов специальностей доступен через инструмент `lister_nomenclature(referentiel:'ameli_specialites')`. Пагинация: используйте `offset` для получения следующих страниц, когда `truncated=true`. Мульти-сайты: используйте `dedupe_by_ps=true` для группировки по практикующему врачу. ПЕРИМЕТР: только либеральные специалисты, имеющие договор. ВНЕ ПЕРИМЕТРА: врачи, работающие исключительно в стационаре / по найму, медицинские биологи по найму в LBM, патологоанатомы в стационаре, врачи по труду, судебная медицина. Для численности по всем статусам — смотрите Annuaire Santé ANS (RPPS, esante.gouv.fr); этот сервер их не покрывает. Источник: Annuaire santé Ameli (Assurance Maladie), обновление еженедельно. Повторное использование регулируется ст. L.1461-2 Кодекса общественного здравоохранения — необходимо указывать источник и дату синхронизации.

Параметры

  • departementstringобязательный

    Code département INSEE : 2 caractères métropole/Corse ('01'-'95', '2A'/'2B'), 3 caractères DOM ('971'-'978').

  • specialite_codestring

    Code spécialité Ameli (ex: '01' MG, '24' IDE, '26' kiné, '03' cardio). Optionnel. Liste complète via `lister_nomenclature(referentiel:'ameli_specialites')`.

  • type_ps_codestring

    Code type PS Ameli ('1' médecins, '2' auxiliaires médicaux, '5' chirurgiens-dentistes). Optionnel — préférer `specialite_code` pour un ciblage précis. Liste complète via `lister_nomenclature(referentiel:'ameli_types_ps')`.

  • limitnumber

    Nombre max de résultats (1-500, défaut 100). Appliqué AVANT déduplication.

  • offsetnumber

    Décalage de pagination (≥ 0, défaut 0). Combiner avec `limit` pour énumérer un département à fort effectif. Re-paginer tant que `truncated=true`.

  • dedupe_by_psboolean

    Regrouper les entrées par praticien (nom + prénom + code spécialité) et lister chaque adresse d'exercice dans `sites[]`. Défaut false.

  • include_freshnessboolean

    Si true, ajoute un champ `data_freshness` au payload (dans `query_metadata` si présent, sinon à la racine) listant la dernière ingestion réussie par source (FINESS, Ameli, RPPS, CDS) avec `staleness_days`. Opt-in pour ne pas alourdir les payloads par défaut. Cache 5min côté serveur — coût négligeable.

professionnels_rpps_in_radiusтолько чтениеидемпотентныйвнешний мир

Находит PS в радиусе через RPPS (Annuaire Santé ANS — **все статусы**: либералы + наёмные + смешанные + заменяющие; в отличие от `professionnels_in_radius` Ameli = только либералы по договору). **Критический параметр `precise_only`** — По умолчанию `false` (гибридный режим). При `true`: возвращает только PS с точной геолокацией (`distance_km` — точность до метра) — рекомендуется для коротких радиусов (<3 км), ранжирования внутри коммуны, поиска "PS в <500 м от адреса". Каждый результат содержит `geo_precision` ∈: - `"adresse"` — координаты BAN (улица/место/здание), `distance_km` точная. - `"etablissement_finess"` — координаты площадки FINESS (через `num_finess`), `distance_km` точная до площадки. - `"centroide_commune"` — центроид коммуны (~3 км), `distance_km` ОДИНАКОВАЯ для всех PS коммуны — НЕ ИСПОЛЬЗУЙТЕ для индивидуального ранжирования, только как фильтр зоны. Текущее покрытие: ~68,5 % точных, ~31,5 % остаточных `centroide_commune`. Гибридный режим = точные (с точностью до адреса) + центроиды (с точностью до коммуны) объединяются и сортируются глобально по `distance_km`. Фильтры: `profession_codes` (например `["10"]` Врач, `["60"]` Медсестра), `savoir_faire_codes` (узкая специальность DES/DESC), `mode_exercice_codes`. Коды `mode_exercice` ANS: L — либерал, S — наёмный, M — смешанный, R — заменяющий, B — волонтёр, A — прочее. Категория по умолчанию: Гражданские (C, ~97 % — либералы, частные наёмные, контрактники больниц). Opt-in: `include_agents_publics: true` добавляет Госслужащих (M, ~0,3 % — штатные PH, ARS, CNAM, Министерство образования, PMI, военные SSA); `include_etudiants: true` добавляет Студентов (E, ~2,5 % — интерны, экстерны, студенты медсестёр/акушерок). Справка: https://mos.esante.gouv.fr/NOS/TRE_R09-CategorieProfessionnelle/. ВНИМАНИЕ: номенклатуры разные — коды ANS (`profession_code`, `savoir_faire_code`) — это ОТДЕЛЬНАЯ номенклатура от кодов Ameli (`specialite_code`, `type_ps_code`) — одно и то же число обозначает разные вещи (например, '10' = Врач в ANS, Нейрохирург в Ameli). НИКОГДА не передавайте код…

Находит PS в радиусе через RPPS (Annuaire Santé ANS — **все статусы**: либералы + наёмные + смешанные + заменяющие; в отличие от `professionnels_in_radius` Ameli = только либералы по договору). **Критический параметр `precise_only`** — По умолчанию `false` (гибридный режим). При `true`: возвращает только PS с точной геолокацией (`distance_km` — точность до метра) — рекомендуется для коротких радиусов (<3 км), ранжирования внутри коммуны, поиска "PS в <500 м от адреса". Каждый результат содержит `geo_precision` ∈: - `"adresse"` — координаты BAN (улица/место/здание), `distance_km` точная. - `"etablissement_finess"` — координаты площадки FINESS (через `num_finess`), `distance_km` точная до площадки. - `"centroide_commune"` — центроид коммуны (~3 км), `distance_km` ОДИНАКОВАЯ для всех PS коммуны — НЕ ИСПОЛЬЗУЙТЕ для индивидуального ранжирования, только как фильтр зоны. Текущее покрытие: ~68,5 % точных, ~31,5 % остаточных `centroide_commune`. Гибридный режим = точные (с точностью до адреса) + центроиды (с точностью до коммуны) объединяются и сортируются глобально по `distance_km`. Фильтры: `profession_codes` (например `["10"]` Врач, `["60"]` Медсестра), `savoir_faire_codes` (узкая специальность DES/DESC), `mode_exercice_codes`. Коды `mode_exercice` ANS: L — либерал, S — наёмный, M — смешанный, R — заменяющий, B — волонтёр, A — прочее. Категория по умолчанию: Гражданские (C, ~97 % — либералы, частные наёмные, контрактники больниц). Opt-in: `include_agents_publics: true` добавляет Госслужащих (M, ~0,3 % — штатные PH, ARS, CNAM, Министерство образования, PMI, военные SSA); `include_etudiants: true` добавляет Студентов (E, ~2,5 % — интерны, экстерны, студенты медсестёр/акушерок). Справка: https://mos.esante.gouv.fr/NOS/TRE_R09-CategorieProfessionnelle/. ВНИМАНИЕ: номенклатуры разные — коды ANS (`profession_code`, `savoir_faire_code`) — это ОТДЕЛЬНАЯ номенклатура от кодов Ameli (`specialite_code`, `type_ps_code`) — одно и то же число обозначает разные вещи (например, '10' = Врач в ANS, Нейрохирург в Ameli). НИКОГДА не передавайте код…

Параметры

  • centerobjectобязательный

    Centre du cercle de recherche (coordonnées WGS84).

  • radius_kmnumberобязательный

    Rayon en km (0.1-50).

  • profession_codesstring[]

    Codes profession ANS (ex: ['10'] Médecin, ['60'] Infirmier). Si omis, toutes professions.

  • savoir_faire_codesstring[]

    Codes savoir-faire ANS (spécialités fines DES/DESC). Si omis, tous savoir-faire.

  • mode_exercice_codesstring[]

    Codes mode d'exercice ANS (libéral / salarié / mixte). Si omis, tous modes.

  • include_etudiantsboolean
  • include_agents_publicsboolean
  • limitnumber

    Nombre max de résultats retournés (défaut serveur 100).

  • precise_onlyboolean

    Si true, exclut les PS au centroïde commune et ne renvoie que ceux à `distance_km` exacte (cf. description du tool pour la sémantique complète et le seuil d'usage recommandé). Défaut false.

  • include_freshnessboolean

    Si true, ajoute un champ `data_freshness` au payload (dans `query_metadata` si présent, sinon à la racine) listant la dernière ingestion réussie par source (FINESS, Ameli, RPPS, CDS) avec `staleness_days`. Opt-in pour ne pas alourdir les payloads par défaut. Cache 5min côté serveur — coût négligeable.

professionnels_rpps_par_deptтолько чтениеидемпотентныйвнешний мир

Выводит список всех медицинских работников (PS) департамента через RPPS (либералы + наёмные сотрудники). Для либералов, работающих по договору, предпочтительнее `professionnels_par_specialite_dept` (Ameli). Повторная пагинация через `offset`, пока `truncated=true`. Каждый геолокализованный результат содержит `geo_precision` ∈ {`"adresse"`, `"etablissement_finess"`, `"centroide_commune"`} — читайте это поле, чтобы оценить надёжность координат `coords` (точные BAN/FINESS с точностью до метра против центроида коммуны ~3 км, неразличимые внутри коммуны). Опциональные фильтры: `profession_code`, `savoir_faire_code`, `mode_exercice_code`. Категория по умолчанию: Civil (C, ~97 % — либералы, частные наёмные сотрудники, контрактники больниц). Opt-in: `include_agents_publics: true` добавляет государственных служащих (M, ~0,3 % — штатные PH, ARS, CNAM, Министерство образования, PMI, военные медики SSA); `include_etudiants: true` добавляет студентов (E, ~2,5 % — интерны, экстерны, учащиеся медсестёр/акушерок). Справочник: https://mos.esante.gouv.fr/NOS/TRE_R09-CategorieProfessionnelle/. ВНИМАНИЕ: номенклатуры ANS (`profession_code`, `savoir_faire_code`) — это ОТДЕЛЬНАЯ номенклатура от кодов Ameli (`specialite_code`, `type_ps_code`) — одно и то же число обозначает разные вещи (например, '10' = врач по ANS, нейрохирург по Ameli). НИКОГДА не передавайте код Ameli в параметр ANS: фильтр вернёт пустой результат без ошибки. Узнавайте коды ANS через `lister_nomenclature(referentiel:'rpps_savoir_faire')`. Источник: Annuaire Santé, Agence du Numérique en Santé (ANS) — открытая лицензия v2.0.

Выводит список всех медицинских работников (PS) департамента через RPPS (либералы + наёмные сотрудники). Для либералов, работающих по договору, предпочтительнее `professionnels_par_specialite_dept` (Ameli). Повторная пагинация через `offset`, пока `truncated=true`. Каждый геолокализованный результат содержит `geo_precision` ∈ {`"adresse"`, `"etablissement_finess"`, `"centroide_commune"`} — читайте это поле, чтобы оценить надёжность координат `coords` (точные BAN/FINESS с точностью до метра против центроида коммуны ~3 км, неразличимые внутри коммуны). Опциональные фильтры: `profession_code`, `savoir_faire_code`, `mode_exercice_code`. Категория по умолчанию: Civil (C, ~97 % — либералы, частные наёмные сотрудники, контрактники больниц). Opt-in: `include_agents_publics: true` добавляет государственных служащих (M, ~0,3 % — штатные PH, ARS, CNAM, Министерство образования, PMI, военные медики SSA); `include_etudiants: true` добавляет студентов (E, ~2,5 % — интерны, экстерны, учащиеся медсестёр/акушерок). Справочник: https://mos.esante.gouv.fr/NOS/TRE_R09-CategorieProfessionnelle/. ВНИМАНИЕ: номенклатуры ANS (`profession_code`, `savoir_faire_code`) — это ОТДЕЛЬНАЯ номенклатура от кодов Ameli (`specialite_code`, `type_ps_code`) — одно и то же число обозначает разные вещи (например, '10' = врач по ANS, нейрохирург по Ameli). НИКОГДА не передавайте код Ameli в параметр ANS: фильтр вернёт пустой результат без ошибки. Узнавайте коды ANS через `lister_nomenclature(referentiel:'rpps_savoir_faire')`. Источник: Annuaire Santé, Agence du Numérique en Santé (ANS) — открытая лицензия v2.0.

Параметры

  • departementstringобязательный

    Code département INSEE (ex: '75', '2A', '2B', '971'). Métropole 2 caractères (Corse '2A'/'2B', pas '20'), DOM/TOM 3 caractères.

  • profession_codestring

    Code profession ANS (ex: '10' Médecin, '60' Infirmier). Optionnel.

  • savoir_faire_codestring

    Code savoir-faire ANS (spécialité fine DES/DESC). Optionnel.

  • mode_exercice_codestring

    Code mode d'exercice ANS (libéral / salarié / mixte). Optionnel.

  • include_etudiantsboolean
  • include_agents_publicsboolean
  • limitnumber

    Nombre max de résultats par page (défaut serveur 100).

  • offsetnumber

    Offset pour pagination (défaut 0). Re-paginer tant que `truncated=true`.

  • include_freshnessboolean

    Si true, ajoute un champ `data_freshness` au payload (dans `query_metadata` si présent, sinon à la racine) listant la dernière ingestion réussie par source (FINESS, Ameli, RPPS, CDS) avec `staleness_days`. Opt-in pour ne pas alourdir les payloads par défaut. Cache 5min côté serveur — coût négligeable.

profil_irisтолько чтениеидемпотентныйвнешний мир

Профиль демографии на уровне КВАРТАЛА (IRIS) — «спрос» территории (возраст, CSP, семьи, доход), для сопоставления с предложением медицинских услуг при выборе места размещения. Источник: INSEE RP 2022 + FILOSOFI 2021 (импортированные таблицы, гео 01.01.2024). Возвращает `LookupResult`, различаемый по `found`. Вход: РОВНО один из `point` (`lat`+`lon`) ИЛИ `code_iris` (9 символов). `rayon_km` опционально (0 < r ≤ 10) → ДВА режима: - БЕЗ `rayon_km` → профиль одного ÎLOT (~2000 жителей) под точкой / по коду. `mode: "ilot"`, `revenu_median` = реальная медиана островка. - С `rayon_km` → АГРЕГАТ по БАССЕЙНУ = островки, чей ЦЕНТРОИД попадает в круг (каждый островок учитывается 1 раз). `mode: "bassin"`, `population_bassin`, `nb_iris_agreges`, и `revenu_median_pondere` = ПРОКСИ (средневзвешенное по населению медиан покрытых островков — НЕ настоящая медиана бассейна) + `couverture` {`revenu_pct_population`, `iris_revenu_manquants`}, так как FILOSOFI покрывает только коммуны ≥5000 жителей. Доли `age` (part_65_plus/75_plus) и `csp` (руководители, средние специальности, служащие, рабочие, фермеры, ремесленники-торговцы, пенсионеры, прочие) — это отношения по сырым подсчетам (Σ/Σ). Для простого населения коммуны/департамента используйте `population`. `not_found` обоснован, если код отсутствует или точка за пределами метрополии / в море.

Профиль демографии на уровне КВАРТАЛА (IRIS) — «спрос» территории (возраст, CSP, семьи, доход), для сопоставления с предложением медицинских услуг при выборе места размещения. Источник: INSEE RP 2022 + FILOSOFI 2021 (импортированные таблицы, гео 01.01.2024). Возвращает `LookupResult`, различаемый по `found`. Вход: РОВНО один из `point` (`lat`+`lon`) ИЛИ `code_iris` (9 символов). `rayon_km` опционально (0 < r ≤ 10) → ДВА режима: - БЕЗ `rayon_km` → профиль одного ÎLOT (~2000 жителей) под точкой / по коду. `mode: "ilot"`, `revenu_median` = реальная медиана островка. - С `rayon_km` → АГРЕГАТ по БАССЕЙНУ = островки, чей ЦЕНТРОИД попадает в круг (каждый островок учитывается 1 раз). `mode: "bassin"`, `population_bassin`, `nb_iris_agreges`, и `revenu_median_pondere` = ПРОКСИ (средневзвешенное по населению медиан покрытых островков — НЕ настоящая медиана бассейна) + `couverture` {`revenu_pct_population`, `iris_revenu_manquants`}, так как FILOSOFI покрывает только коммуны ≥5000 жителей. Доли `age` (part_65_plus/75_plus) и `csp` (руководители, средние специальности, служащие, рабочие, фермеры, ремесленники-торговцы, пенсионеры, прочие) — это отношения по сырым подсчетам (Σ/Σ). Для простого населения коммуны/департамента используйте `population`. `not_found` обоснован, если код отсутствует или точка за пределами метрополии / в море.

Параметры

  • latnumber

    Latitude du point (mode point).

  • lonnumber

    Longitude du point (mode point).

  • code_irisstring

    Code IRIS 9 caractères (ex `751103701`) — alternatif au point.

  • rayon_kmnumber

    Rayon du bassin en km (0 < r ≤ 10). Absent = profil de l'îlot seul.

reconcilier_finess_sireneтолько чтениеидемпотентныйвнешний мир

Скрещивает FINESS DREES ↔ SIRENE INSEE V3.11 и вычисляет оценку согласованности (Sørensen-Dice на биграммах) для каждого SIRET-кандидата. Полезно для подтверждения/опровержения сопоставления num_finess ↔ SIRET перед поиском или перекрёстной проверкой качества. Логика: 1. Получает FINESS (название организации + адрес с полями) 2. Получает SIRET-кандидаты через таблицу RPPS 3. Для каждого SIRET выполняет lookup SIRENE, затем вычисляет 3 подоценки: - `nom`: Dice по названию организации (FINESS vs SIRENE.uniteLegale) - `adresse`: Dice по полному адресу - `telephone`: бинарно 0/1 (сейчас всегда 0: SIRENE не раскрывает телефон) 4. Общая оценка = взвешивание (nom 0.5, adresse 0.4, tel 0.1) 5. Грубый вердикт: `match` (≥0.8) / `partial` (0.5..0.8) / `mismatch` (<0.5) Алгоритм ПУБЛИЧНЫЙ (Sørensen-Dice известен в литературе с 1948). Никакой добавленной стоимости Unilabs здесь — это открытый примитив. Собственные знания (маппинг вывесок ↔ SELAS) остаются на стороне Geo Intel. Формат: объект `LookupResult`. Когда `found: true`, возвращает `{ num_finess, candidates, skipped }`: - `candidates`: массив, отсортированный по убыванию `score_global` (лучшее совпадение первым) - `skipped`: SIRET-кандидаты, которые НЕ удалось согласовать (lookup SIRENE отвергнут или не найден), с указанием `reason`. Позволяет вызывающей стороне различать 'ни одного SIRET-кандидата не найдено' (`found: false` LookupResult.not_found) и 'N SIRET-кандидатов, но все отвергнуты SIRENE' (`candidates: []` + `skipped: [...]`).

Скрещивает FINESS DREES ↔ SIRENE INSEE V3.11 и вычисляет оценку согласованности (Sørensen-Dice на биграммах) для каждого SIRET-кандидата. Полезно для подтверждения/опровержения сопоставления num_finess ↔ SIRET перед поиском или перекрёстной проверкой качества. Логика: 1. Получает FINESS (название организации + адрес с полями) 2. Получает SIRET-кандидаты через таблицу RPPS 3. Для каждого SIRET выполняет lookup SIRENE, затем вычисляет 3 подоценки: - `nom`: Dice по названию организации (FINESS vs SIRENE.uniteLegale) - `adresse`: Dice по полному адресу - `telephone`: бинарно 0/1 (сейчас всегда 0: SIRENE не раскрывает телефон) 4. Общая оценка = взвешивание (nom 0.5, adresse 0.4, tel 0.1) 5. Грубый вердикт: `match` (≥0.8) / `partial` (0.5..0.8) / `mismatch` (<0.5) Алгоритм ПУБЛИЧНЫЙ (Sørensen-Dice известен в литературе с 1948). Никакой добавленной стоимости Unilabs здесь — это открытый примитив. Собственные знания (маппинг вывесок ↔ SELAS) остаются на стороне Geo Intel. Формат: объект `LookupResult`. Когда `found: true`, возвращает `{ num_finess, candidates, skipped }`: - `candidates`: массив, отсортированный по убыванию `score_global` (лучшее совпадение первым) - `skipped`: SIRET-кандидаты, которые НЕ удалось согласовать (lookup SIRENE отвергнут или не найден), с указанием `reason`. Позволяет вызывающей стороне различать 'ни одного SIRET-кандидата не найдено' (`found: false` LookupResult.not_found) и 'N SIRET-кандидатов, но все отвергнуты SIRENE' (`candidates: []` + `skipped: [...]`).

Параметры

  • num_finessstringобязательный

    Numéro FINESS exact (9 chiffres).

reverse_geocodeтолько чтениеидемпотентныйвнешний мир

Обратное геокодирование: по GPS-координатам находит ближайший адрес. Источник: IGN Géoplateforme. Покрытие только метропольная Франция + DOM: координаты вне зоны (например, Нью-Йорк) или в открытом море возвращают `null` (не ошибка: это отсутствие результата, а не сбой).

Обратное геокодирование: по GPS-координатам находит ближайший адрес. Источник: IGN Géoplateforme. Покрытие только метропольная Франция + DOM: координаты вне зоны (например, Нью-Йорк) или в открытом море возвращают `null` (не ошибка: это отсутствие результата, а не сбой).

Параметры

  • lonnumberобязательный

    Longitude (WGS84).

  • latnumberобязательный

    Latitude (WGS84).

rpps_dans_etablissementтолько чтениеидемпотентныйвнешний мир

Перечисляет PS, привязанных к учреждению FINESS (`num_finess` — 9 цифр). Связка RPPS↔FINESS — отвечает на вопрос «кто работает в этой лаборатории / больнице / клинике?». `mode_exercice` разделяет частнопрактикующих, работающих на месте (по совмещению), и наёмных сотрудников. Покрытие: RPPS показывает эту связь, только если PS сам её заявил; наёмные сотрудники больниц / университетских больниц / клиник покрыты хорошо. Вывод компактный: `coords` и `distance_km` равны `null` (инструмент работает по учреждению, не пространственный — для геолокации используйте `etablissement_by_finess` с `num_finess`). Категория по умолчанию: Civil (C, ~97 % — частнопрактикующие, наёмные работники частного сектора, контрактники в больницах). Opt-in: `include_agents_publics: true` добавляет государственных служащих (M, ~0,3 % — штатные PH, ARS, CNAM, Éducation nationale, PMI, военнослужащие SSA); `include_etudiants: true` добавляет студентов (E, ~2,5 % — интерны, экстерны, учащиеся медсестёр и акушерок). Ссылка: https://mos.esante.gouv.fr/NOS/TRE_R09-CategorieProfessionnelle/. Источник: Annuaire Santé, Agence du Numérique en Santé (ANS) — Licence Ouverte v2.0

Перечисляет PS, привязанных к учреждению FINESS (`num_finess` — 9 цифр). Связка RPPS↔FINESS — отвечает на вопрос «кто работает в этой лаборатории / больнице / клинике?». `mode_exercice` разделяет частнопрактикующих, работающих на месте (по совмещению), и наёмных сотрудников. Покрытие: RPPS показывает эту связь, только если PS сам её заявил; наёмные сотрудники больниц / университетских больниц / клиник покрыты хорошо. Вывод компактный: `coords` и `distance_km` равны `null` (инструмент работает по учреждению, не пространственный — для геолокации используйте `etablissement_by_finess` с `num_finess`). Категория по умолчанию: Civil (C, ~97 % — частнопрактикующие, наёмные работники частного сектора, контрактники в больницах). Opt-in: `include_agents_publics: true` добавляет государственных служащих (M, ~0,3 % — штатные PH, ARS, CNAM, Éducation nationale, PMI, военнослужащие SSA); `include_etudiants: true` добавляет студентов (E, ~2,5 % — интерны, экстерны, учащиеся медсестёр и акушерок). Ссылка: https://mos.esante.gouv.fr/NOS/TRE_R09-CategorieProfessionnelle/. Источник: Annuaire Santé, Agence du Numérique en Santé (ANS) — Licence Ouverte v2.0

Параметры

  • num_finessstringобязательный
  • include_etudiantsboolean
  • include_agents_publicsboolean
  • limitnumber
  • include_freshnessboolean

    Si true, ajoute un champ `data_freshness` au payload (dans `query_metadata` si présent, sinon à la racine) listant la dernière ingestion réussie par source (FINESS, Ameli, RPPS, CDS) avec `staleness_days`. Opt-in pour ne pas alourdir les payloads par défaut. Cache 5min côté serveur — coût négligeable.

rpps_search_by_nameтолько чтениеидемпотентныйвнешний мир

Находит PS по идентификатору (нечеткое сопоставление по триграммам, устойчивое к диакритике/опечаткам). Пример: "Dr Martin à Paris" → `nom: "Martin", departement: "75"`. Поле `nom` обязательно; `prenom` и `departement` уточняют результат. Сортировка по `match_score` ∈ [0..1] по убыванию (оценка триграммы pg_trgm). Оценка <0.5 означает частичную омонимию — вызывающая сторона должна подтвердить. Без `departement` точные омонимы ("Пьер Мартен") получают ВСЕ одинаковую оценку ~1.0 и не разделяются — при распространенной фамилии всегда фильтруйте по департаменту или имени. `truncated: true` = есть ещё результаты (ограничьте запрос, не листайте все). У каждого геолоцированного результата есть `geo_precision` ∈ {`"adresse"`, `"etablissement_finess"`, `"centroide_commune"`} — смотрите это поле, чтобы оценить надежность `coords` (точная координата BAN/FINESS с точностью до метра против центроида муниципалитета ~3 км, в пределах города не различает). Категория по умолчанию: Civil (C, ~97 % — частнопрактикующие, сотрудники частных клиник, контрактники больниц). Опционально: `include_agents_publics: true` добавляет госслужащих (M, ~0,3 % — штатные больничные врачи, ARS, CNAM, Министерство образования, PMI, военные врачи SSA); `include_etudiants: true` добавляет студентов (E, ~2,5 % — интерны, экстерны, учащиеся медсестер/акушерок). Ссылка: https://mos.esante.gouv.fr/NOS/TRE_R09-CategorieProfessionnelle/ Источник: Annuaire Santé, Agence du Numérique en Santé (ANS) — Открытая лицензия v2.0.

Находит PS по идентификатору (нечеткое сопоставление по триграммам, устойчивое к диакритике/опечаткам). Пример: "Dr Martin à Paris" → `nom: "Martin", departement: "75"`. Поле `nom` обязательно; `prenom` и `departement` уточняют результат. Сортировка по `match_score` ∈ [0..1] по убыванию (оценка триграммы pg_trgm). Оценка <0.5 означает частичную омонимию — вызывающая сторона должна подтвердить. Без `departement` точные омонимы ("Пьер Мартен") получают ВСЕ одинаковую оценку ~1.0 и не разделяются — при распространенной фамилии всегда фильтруйте по департаменту или имени. `truncated: true` = есть ещё результаты (ограничьте запрос, не листайте все). У каждого геолоцированного результата есть `geo_precision` ∈ {`"adresse"`, `"etablissement_finess"`, `"centroide_commune"`} — смотрите это поле, чтобы оценить надежность `coords` (точная координата BAN/FINESS с точностью до метра против центроида муниципалитета ~3 км, в пределах города не различает). Категория по умолчанию: Civil (C, ~97 % — частнопрактикующие, сотрудники частных клиник, контрактники больниц). Опционально: `include_agents_publics: true` добавляет госслужащих (M, ~0,3 % — штатные больничные врачи, ARS, CNAM, Министерство образования, PMI, военные врачи SSA); `include_etudiants: true` добавляет студентов (E, ~2,5 % — интерны, экстерны, учащиеся медсестер/акушерок). Ссылка: https://mos.esante.gouv.fr/NOS/TRE_R09-CategorieProfessionnelle/ Источник: Annuaire Santé, Agence du Numérique en Santé (ANS) — Открытая лицензия v2.0.

Параметры

  • nomstringобязательный

    Nom de famille (non vide).

  • prenomstring

    Prénom du PS.

  • departementstring

    Code département INSEE (ex: '75', '2A', '2B', '971'). Métropole 2 caractères (Corse '2A'/'2B', pas '20'), DOM/COM 3 caractères.

  • include_etudiantsboolean
  • include_agents_publicsboolean
  • limitnumber

    Nombre max de résultats (1-500, défaut 100).

  • include_freshnessboolean

    Si true, ajoute un champ `data_freshness` au payload (dans `query_metadata` si présent, sinon à la racine) listant la dernière ingestion réussie par source (FINESS, Ameli, RPPS, CDS) avec `staleness_days`. Opt-in pour ne pas alourdir les payloads par défaut. Cache 5min côté serveur — coût négligeable.

verifier_site_actifтолько чтениеидемпотентныйвнешний мир

Проверяет, активно ли ещё медицинское учреждение FINESS, сверяя FINESS DREES ↔ RPPS (опора SIRET) ↔ DINUM (полный список SIRET для SIREN, включая закрытые). Обнаруживает закрытые SIRET, которые всё ещё числятся активными со стороны FINESS (у DREES задержка 1-2 месяца). **V0.16 — исправление последовательности M&A**: когда сайт сменил эксплуатанта (поглощение), старый закрытый SIRET и новый активный сосуществуют по одному адресу. Resolver теперь отдаёт предпочтение АКТИВНОМУ SIRET, находящемуся в той же локации, что и FINESS (геодезическое расстояние ≤ 100 м, перекалибровка V0.16.1 — геокодирование DREES помещает точку FINESS в десятках метров от реального адреса) — раньше вердикт мог ошибочно быть `ferme`, так как best_match выбирался только по совпадению адресов. Среди соседей по локации приоритет только у активного из ближайшей полосы: активный сосед с другого адреса вердикт не меняет. РЕАЛЬНО закрытый сайт остаётся `ferme` (нет активного SIRET в той же локации). Логика: 1. Поиск FINESS для получения наименования юрлица + адреса + телефона DREES 2. Кандидаты SIRET через resolver: опора RPPS, затем fallback гео DINUM /near_point (получает ВСЕ SIRET вокруг адреса FINESS, активные И закрытые — захватывает нового эксплуатанта, невидимого со стороны RPPS) 3. `best_match` = АКТИВНЫЙ SIRET, co-локализованный с FINESS, если такой есть; иначе лучший кандидат (возможно, закрытый). Co-локализация — это георасстояние, а не текстовое совпадение. 4. **2 отдельных вердикта**: - `verdict_site` (`actif` / `ferme` / `indetermine`): на основе `best_match.actif`. Это вердикт, который важен для территориального аудита. - `verdict_groupe` (`actif` / `ferme` / `indetermine`): на основе административного статуса родительского юрлица (поле `actif` DINUM). Активное юрлицо может спокойно иметь закрытый сайт. **Формат ответа**: объект `LookupResult`, различаемый по `found`. Если `found: true`, полезная нагрузка содержит `finess` (вид DREES), `candidates` (обогащённый список — каждый кандидат содержит `distance_finess_m`), `best_match`,...

Проверяет, активно ли ещё медицинское учреждение FINESS, сверяя FINESS DREES ↔ RPPS (опора SIRET) ↔ DINUM (полный список SIRET для SIREN, включая закрытые). Обнаруживает закрытые SIRET, которые всё ещё числятся активными со стороны FINESS (у DREES задержка 1-2 месяца). **V0.16 — исправление последовательности M&A**: когда сайт сменил эксплуатанта (поглощение), старый закрытый SIRET и новый активный сосуществуют по одному адресу. Resolver теперь отдаёт предпочтение АКТИВНОМУ SIRET, находящемуся в той же локации, что и FINESS (геодезическое расстояние ≤ 100 м, перекалибровка V0.16.1 — геокодирование DREES помещает точку FINESS в десятках метров от реального адреса) — раньше вердикт мог ошибочно быть `ferme`, так как best_match выбирался только по совпадению адресов. Среди соседей по локации приоритет только у активного из ближайшей полосы: активный сосед с другого адреса вердикт не меняет. РЕАЛЬНО закрытый сайт остаётся `ferme` (нет активного SIRET в той же локации). Логика: 1. Поиск FINESS для получения наименования юрлица + адреса + телефона DREES 2. Кандидаты SIRET через resolver: опора RPPS, затем fallback гео DINUM /near_point (получает ВСЕ SIRET вокруг адреса FINESS, активные И закрытые — захватывает нового эксплуатанта, невидимого со стороны RPPS) 3. `best_match` = АКТИВНЫЙ SIRET, co-локализованный с FINESS, если такой есть; иначе лучший кандидат (возможно, закрытый). Co-локализация — это георасстояние, а не текстовое совпадение. 4. **2 отдельных вердикта**: - `verdict_site` (`actif` / `ferme` / `indetermine`): на основе `best_match.actif`. Это вердикт, который важен для территориального аудита. - `verdict_groupe` (`actif` / `ferme` / `indetermine`): на основе административного статуса родительского юрлица (поле `actif` DINUM). Активное юрлицо может спокойно иметь закрытый сайт. **Формат ответа**: объект `LookupResult`, различаемый по `found`. Если `found: true`, полезная нагрузка содержит `finess` (вид DREES), `candidates` (обогащённый список — каждый кандидат содержит `distance_finess_m`), `best_match`,...

Параметры

  • num_finessstringобязательный

    Numéro FINESS exact (9 chiffres).

Другие проверенные MCP-сервера

webdriverio/mcp

webdriverio/mcp

официальный

Управляйте браузерами и мобильными приложениями через WebDriverIO с MCP-сервером. Автоматизируйте Chrome, Firefox, Edge, Safari, iOS и Android: навигация, клики, скриншоты. Оптимален для тестирования.

TypeScript33
flux159/mcp-server-kubernetes

flux159/mcp-server-kubernetes

MCP сервер для подключения к Kubernetes и управления кластером через kubectl и Helm. Выполняет операции с ресурсами, масштабирование, деплой, диагностику и port-forwarding. Полезен разработчикам и ...

TypeScript1460
centralmind/gateway

centralmind/gateway

официальный

CentralMind Gateway за минуты создаёт MCP-сервер или REST API из вашей базы данных для AI-агентов. Поддерживает популярные СУБД, защищает PII, кэширует и мониторит запросы. Ускоряет интеграцию данн...

Go536
line/line-bot-mcp-server

line/line-bot-mcp-server

официальный

MCP-сервер для интеграции AI-агентов с LINE Official Account через Messaging API. Отправляет текстовые и гибкие сообщения, управляет богатыми меню, получает профили пользователей и список подписчик...

TypeScript608
coinpaprika/dexpaprika-mcp

coinpaprika/dexpaprika-mcp

официальный

DexPaprika MCP сервер даёт AI-ассистентам живой доступ к криптовалютным и DEX данным на 33 блокчейнах. Без API-ключа — 14 инструментов для анализа токенов, пулов ликвидности и децентрализованных би...

JavaScript40
public-ui/kolibri

public-ui/kolibri

официальный

KoliBri - библиотека атомарных веб-компонентов для доступного HTML. Расширяет стандарт, не привязана к дизайну, подходит для любых проектов. Упрощает создание семантичных, валидных и доступных инте...

TypeScript273
© Каталог MCP, 2026. Все права защищены.
Проект не аффилирован с Anthropic и любыми упомянутыми продуктами.
Все названия и торговые марки принадлежат их владельцам.
Контакты для связи: hi@mcp-katalog.ru

Лука Никитин