Compare commits

...

23 Commits

Author SHA1 Message Date
bff3c6b947 clean 2026-02-09 22:40:12 +01:00
739aae0357 . 2026-02-09 22:34:08 +01:00
fd37fac283 . 2026-02-09 22:22:14 +01:00
2df128a4d7 . 2026-02-09 22:15:00 +01:00
9321a33c1b .ignore 2026-02-09 22:08:27 +01:00
c80f19c537 .ignore 2026-02-09 21:58:47 +01:00
f1761dce8c . 2026-02-09 21:56:33 +01:00
8ef3392e4d igonre log 2026-02-09 18:44:54 +01:00
c7b1e348a2 ingnore exe 2026-02-09 18:41:38 +01:00
aac259da42 Just other executable file for dashboard, which is not related to the 6-month visit. It is used for testing the dashboard without the 6-month visit data. 2026-02-09 17:14:40 +01:00
cffbd7e8fa Script head comment 2026-02-09 02:37:17 +01:00
d83291831c Patient context 2026-02-04 01:53:35 +01:00
0e842eb0fb 6_Month_Visit using POST API 2026-02-03 20:54:54 +01:00
8478604103 6 month visit - Completness rate 2026-01-30 23:06:35 +01:00
57821a06cc Config Questionnaires Suivi à 6 mois 2026-01-30 19:07:04 +01:00
664dd7f2a0 Run update 2026-01-13 12:42:13 +01:00
8922cdc54b Config - New Label 2026-01-02 20:20:27 +01:00
84d45502de new exe 2025-12-29 19:04:24 +01:00
212e73330c Mapping update 2025-12-29 19:01:07 +01:00
33ef399500 test nouveau domaine gitea 2025-12-18 01:23:25 +01:00
864d7c4cd4 Changement de pwd 2025-12-15 20:57:16 +01:00
9c7230d573 ignore nul 2025-12-15 13:39:16 +01:00
23f139561d ignore nul 2025-12-15 13:38:21 +01:00
15 changed files with 199 additions and 450727 deletions

7
.gitignore vendored
View File

@@ -193,4 +193,11 @@ Reports History/
Script History/
Endobest Reporting/
jsons history/
nul
# Ignore all json, exe, log and xlsx files
*.json
*.exe
*.log
/*.xlsx
!eb_org_center_mapping.xlsx

Binary file not shown.

View File

Binary file not shown.

View File

@@ -6,7 +6,7 @@
# containing all patient data, with 100% configurable fields defined in an Excel configuration file. All fields (patient
# identification, inclusion data, clinical records, test requests, and questionnaire responses) are externalized and can be
# configured without any code modification. The configuration supports multiple data sources (questionnaires, records,
# inclusions, requests), custom functions for business logic (conditional fields, data transformations, pattern matching),
# inclusions, requests, visits), custom functions for business logic (conditional fields, data transformations, pattern matching),
# field dependencies and conditions, value transformations (labels, templates), and multi-line field definitions for complex
# calculations. Organization names are enriched with center identifiers using a configurable mapping table, enabling seamless
# integration with center-based reporting workflows. It employs multithreading with configurable worker pools to parallelize
@@ -56,6 +56,8 @@ from eb_dashboard_constants import (
GDD_URL,
ERROR_MAX_RETRY,
WAIT_BEFORE_RETRY,
WAIT_BEFORE_NEW_BATCH_OF_RETRIES,
MAX_BATCHS_OF_RETRIES,
MAX_THREADS,
RC_ENDOBEST_PROTOCOL_ID,
RC_ENDOBEST_EXCLUDED_CENTERS,
@@ -73,6 +75,7 @@ from eb_dashboard_constants import (
API_RC_SEARCH_INCLUSIONS_ENDPOINT,
API_RC_GET_RECORD_BY_PATIENT_ENDPOINT,
API_RC_GET_SURVEYS_ENDPOINT,
API_RC_SEARCH_VISITS_ENDPOINT,
API_GDD_GET_REQUEST_BY_TUBE_ID_ENDPOINT
)
@@ -80,8 +83,11 @@ from eb_dashboard_constants import (
from eb_dashboard_utils import (
get_nested_value,
get_httpx_client,
clear_httpx_client,
get_thread_position,
get_config_path
get_config_path,
thread_local_storage,
run_with_context
)
from eb_dashboard_quality_checks import (
backup_output_files,
@@ -115,6 +121,7 @@ _token_refresh_lock = threading.Lock()
_threads_list_lock = threading.Lock()
global_pbar = None
_global_pbar_lock = threading.Lock()
_user_interaction_lock = threading.Lock()
# Global variables (mutable, set at runtime - not constants)
inclusions_mapping_config = []
@@ -171,9 +178,11 @@ def new_token():
return
except httpx.RequestError as exc:
logging.warning(f"Refresh Token Error (Attempt {attempt + 1}) : {exc}")
clear_httpx_client()
except httpx.HTTPStatusError as exc:
logging.warning(
f"Refresh Token Error (Attempt {attempt + 1}) : {exc.response.status_code} for Url {exc.request.url}")
clear_httpx_client()
finally:
if attempt < ERROR_MAX_RETRY - 1:
sleep(WAIT_BEFORE_RETRY)
@@ -186,19 +195,62 @@ def api_call_with_retry(func):
@functools.wraps(func)
def wrapper(*args, **kwargs):
func_name = func.__name__
total_attempts = 0
batch_count = 1
while True:
for attempt in range(ERROR_MAX_RETRY):
total_attempts += 1
try:
return func(*args, **kwargs)
except (httpx.RequestError, httpx.HTTPStatusError) as exc:
logging.warning(f"Error in {func_name} (Attempt {attempt + 1}/{ERROR_MAX_RETRY}): {exc}")
logging.warning(f"Error in {func_name} (Attempt {total_attempts}): {exc}")
# Refresh the thread-local client if an error occurs
# to avoid potential pool corruption or stale connections
clear_httpx_client()
if isinstance(exc, httpx.HTTPStatusError) and exc.response.status_code == 401:
logging.info(f"Token expired for {func_name}. Refreshing token.")
new_token()
if attempt < ERROR_MAX_RETRY - 1:
sleep(WAIT_BEFORE_RETRY)
else:
# Max retries reached for this batch
if batch_count < MAX_BATCHS_OF_RETRIES:
logging.warning(f"Batch {batch_count}/{MAX_BATCHS_OF_RETRIES} failed for {func_name}. "
f"Waiting {WAIT_BEFORE_NEW_BATCH_OF_RETRIES}s before automatic retry batch.")
batch_count += 1
sleep(WAIT_BEFORE_NEW_BATCH_OF_RETRIES)
break # Exit for loop to restart batch in while True
else:
# All automatic batches exhausted, ask the user
with _user_interaction_lock:
console.print(f"\n[bold red]Persistent error in {func_name} after {batch_count} batches ({total_attempts} attempts).[/bold red]")
console.print(f"[red]Exception: {exc}[/red]")
logging.critical(f"Persistent error in {func_name} after {ERROR_MAX_RETRY} attempts.")
raise httpx.RequestError(message=f"Persistent error in {func_name}")
choice = questionary.select(
f"What would you like to do for {func_name}?",
choices=[
"Retry (try another batch of retries)",
"Ignore (return None and continue)",
"Stop script (critical error)"
]
).ask()
if choice == "Retry (try another batch of retries)":
logging.info(f"User chose to retry {func_name}. Restarting batch sequence.")
batch_count = 1 # Reset batch counter for the next interactive round
break # Exit for loop to restart batch in while True
elif choice == "Ignore (return None and continue)":
# Retrieve context if available
ctx = getattr(thread_local_storage, "current_patient_context", {"id": "Unknown", "pseudo": "Unknown"})
logging.warning(f"[IGNORE] User opted to skip {func_name} for Patient {ctx['id']} ({ctx['pseudo']}). Error: {exc}")
return None
else:
logging.critical(f"User chose to stop script after persistent error in {func_name}.")
raise httpx.RequestError(message=f"Persistent error in {func_name} (stopped by user)")
return wrapper
@@ -347,6 +399,9 @@ def load_inclusions_mapping_config():
elif source_id_raw == "request":
field_config["source_type"] = "request"
field_config["source_value"] = None
elif source_id_raw == "6_month_visit":
field_config["source_type"] = "6_month_visit"
field_config["source_value"] = None
else:
field_config["source_type"] = None
field_config["source_value"] = source_id_raw
@@ -442,23 +497,29 @@ def load_organizations_mapping_config():
def _find_questionnaire_by_id(qcm_dict, qcm_id):
"""Finds a questionnaire by ID (direct dictionary lookup)."""
if not isinstance(qcm_dict, dict):
return None
qcm_data = qcm_dict.get(qcm_id)
return qcm_data.get("answers") if qcm_data else None
def _find_questionnaire_by_name(qcm_dict, name):
"""Finds a questionnaire by name (sequential search, returns first match)."""
for qcm_data in qcm_dict.values():
if get_nested_value(qcm_data, ["questionnaire", "name"]) == name:
return qcm_data.get("answers")
if not isinstance(qcm_dict, dict):
return None
for qcm in qcm_dict.values():
if get_nested_value(qcm, ["questionnaire", "name"]) == name:
return qcm.get("answers")
return None
def _find_questionnaire_by_category(qcm_dict, category):
"""Finds a questionnaire by category (sequential search, returns first match)."""
for qcm_data in qcm_dict.values():
if get_nested_value(qcm_data, ["questionnaire", "category"]) == category:
return qcm_data.get("answers")
if not isinstance(qcm_dict, dict):
return None
for qcm in qcm_dict.values():
if get_nested_value(qcm, ["questionnaire", "category"]) == category:
return qcm.get("answers")
return None
@@ -684,7 +745,7 @@ def _execute_custom_function(function_name, args, output_inclusion):
return f"$$$$ Unknown Custom Function: {function_name}"
def process_inclusions_mapping(output_inclusion, inclusion_data, record_data, request_data, all_questionnaires):
def process_inclusions_mapping(output_inclusion, inclusion_data, record_data, request_data, all_questionnaires, six_month_visit_data):
"""Processes and adds the inclusions mapping fields to the inclusion dictionary."""
for field in inclusions_mapping_config:
field_name = field["field_name"]
@@ -722,9 +783,18 @@ def process_inclusions_mapping(output_inclusion, inclusion_data, record_data, re
final_value = get_nested_value(inclusion_data, field_path, default="undefined")
elif source_type == "request":
final_value = get_nested_value(request_data, field_path, default="undefined")
elif source_type == "6_month_visit":
final_value = get_nested_value(six_month_visit_data, field_path, default="undefined")
else:
final_value = f"$$$$ Unknown Source Type: {source_type}"
# If the source data itself is missing (e.g., 6-month visit not created), log a warning but continue
if final_value == "$$$$ No Data":
patient_id = inclusion_data.get("id", "Unknown")
pseudo = inclusion_data.get("pseudo", "Unknown")
logging.warning(f"No '{source_type}' data source found for Patient {patient_id} / {pseudo} (Field: {field_name})")
final_value = "undefined"
# Post-processing: Apply true_if_any and value_labels transformations (for all sources)
if final_value not in ["undefined", "$$$$ No Data"]:
# Check if any value matches
@@ -843,6 +913,24 @@ def get_request_by_tube_id(tube_id):
return response.json()
@api_call_with_retry
def search_visit_by_pseudo_and_order(pseudo, order):
"""Searches for a visit by patient pseudo and visit order."""
client = get_httpx_client()
client.base_url = RC_URL
response = client.post(API_RC_SEARCH_VISITS_ENDPOINT,
headers={"Authorization": f"Bearer {access_token}"},
json={"visitOrder": order, "keywords": pseudo},
timeout=API_TIMEOUT)
response.raise_for_status()
resp_json = response.json()
if isinstance(resp_json, dict):
data = resp_json.get("data")
if isinstance(data, list) and len(data) > 0:
return data[0]
return None
@api_call_with_retry
def get_all_questionnaires_by_patient(patient_id, record_data):
"""Fetches all questionnaires for a patient with a single API call."""
@@ -855,8 +943,15 @@ def get_all_questionnaires_by_patient(patient_id, record_data):
}
# Extract blockedQcmVersions from record (same logic as get_questionnaire_answers)
if record_data is None:
all_blocked_versions = []
else:
all_blocked_versions = get_nested_value(record_data, path=["record", "protocol_inclusions", 0, "blockedQcmVersions"],
default=[])
# Ensure it's a list even if get_nested_value returns "$$$$ No Data"
if all_blocked_versions == "$$$$ No Data":
all_blocked_versions = []
if all_blocked_versions:
payload["blockedQcmVersions"] = all_blocked_versions
@@ -1030,33 +1125,50 @@ def _process_inclusion_data(inclusion, organization):
"""Processes a single inclusion record and returns a dictionary."""
organization_id = organization["id"]
patient_id = get_nested_value(inclusion, path=["id"])
pseudo = get_nested_value(inclusion, path=["pseudo"], default="Unknown")
# Set thread-local context for detailed error logging in decorators
ctx = {"id": patient_id, "pseudo": pseudo}
thread_local_storage.current_patient_context = ctx
# Initialize empty output structure
output_inclusion = {}
# --- Prepare all data sources ---
# Prepare inclusion_data: enrich inclusion with organization info
# 1. Launch Visit Search asynchronously (it's slow, ~5s)
# We use run_with_context to pass the patient identity to the new thread
visit_future = subtasks_thread_pool.submit(run_with_context, search_visit_by_pseudo_and_order, ctx, pseudo, 2)
# 2. Prepare inclusion_data: enrich inclusion with organization info
inclusion_data = dict(inclusion)
inclusion_data["organization_id"] = organization_id
inclusion_data["organization_name"] = organization["name"]
if "Center_Name" in organization:
inclusion_data["center_name"] = organization["Center_Name"]
# Prepare record_data
# 3. Prepare record_data (sequential as it's often needed for questionnaires)
record_data = get_record_by_patient_id(patient_id, organization_id)
# Get tube_id for request
# 4. Get tube_id for request and launch in parallel with questionnaires
tube_id = get_nested_value(record_data, path=["record", "clinicResearchData", 0, "requestMetaData", "tubeId"], default="undefined")
# Launch in parallel: request and questionnaires
request_future = subtasks_thread_pool.submit(get_request_by_tube_id, tube_id)
request_future = subtasks_thread_pool.submit(run_with_context, get_request_by_tube_id, ctx, tube_id)
all_questionnaires = get_all_questionnaires_by_patient(patient_id, record_data)
# Wait for request to complete
# --- Synchronize all asynchronous tasks ---
try:
request_data = request_future.result()
except Exception as e:
logging.error(f"Error fetching request data for patient {patient_id}: {e}")
request_data = None
try:
six_month_visit_data = visit_future.result()
except Exception as e:
logging.error(f"Error searching 6-month visit for patient {pseudo}: {e}")
six_month_visit_data = None
# --- Process all fields from configuration ---
process_inclusions_mapping(output_inclusion, inclusion_data, record_data, request_data, all_questionnaires)
process_inclusions_mapping(output_inclusion, inclusion_data, record_data, request_data, all_questionnaires, six_month_visit_data)
return output_inclusion

View File

@@ -50,10 +50,10 @@ ORG_CENTER_MAPPING_TABLE_NAME = "Org_Center_Mapping"
IAM_URL = "https://api-auth.ziwig-connect.com"
RC_URL = "https://api-hcp.ziwig-connect.com"
GDD_URL = "https://api-lab.ziwig-connect.com"
RC_APP_ID = "pbrrA765$bP3beiuyuiyhiuy!agxagx"
RC_APP_ID = "602aea51-cdb2-4f73-ac99-fd84050dc393"
DEFAULT_USER_NAME = "ziwig-invest2@yopmail.com"
DEFAULT_PASSWORD = "pbrrA765$bP3beiuyuiyhiuy!agx"
DEFAULT_PASSWORD = "pbrrA765$bP3beiuyuiyhiuy!agxagx"
# ============================================================================
# RESEARCH PROTOCOL CONFIGURATION
@@ -81,6 +81,7 @@ API_RC_INCLUSION_STATISTICS_ENDPOINT = "/api/inclusions/inclusion-statistics"
API_RC_SEARCH_INCLUSIONS_ENDPOINT = "/api/inclusions/search"
API_RC_GET_RECORD_BY_PATIENT_ENDPOINT = "/api/records/byPatient"
API_RC_GET_SURVEYS_ENDPOINT = "/api/surveys/filter/with-answers"
API_RC_SEARCH_VISITS_ENDPOINT = "/api/visits/visits/search"
# GDD (Lab/Diagnostic) endpoints
API_GDD_GET_REQUEST_BY_TUBE_ID_ENDPOINT = "/api/requests/by-tube-id"
@@ -90,8 +91,10 @@ API_GDD_GET_REQUEST_BY_TUBE_ID_ENDPOINT = "/api/requests/by-tube-id"
# ============================================================================
ERROR_MAX_RETRY = 10
WAIT_BEFORE_RETRY = 0.5
MAX_THREADS = 20
WAIT_BEFORE_RETRY = 1
WAIT_BEFORE_NEW_BATCH_OF_RETRIES = 20
MAX_BATCHS_OF_RETRIES = 3
MAX_THREADS = 40
# Excel operation retry parameters (for handling transient xlwings/Excel failures)
# Applies to: SaveAs, Range.Select(), and other COM operations that can fail transiently on Excel 2013

View File

@@ -21,9 +21,21 @@ from eb_dashboard_constants import CONFIG_FOLDER_NAME
# ============================================================================
# GLOBAL VARIABLES (managed by main module)
# ============================================================================
thread_local_storage = threading.local()
def run_with_context(func, context, *args, **kwargs):
"""
Wrapper to set thread-local context before running a function in a new thread.
Useful for ThreadPoolExecutor where context is lost.
"""
thread_local_storage.current_patient_context = context
return func(*args, **kwargs)
# These will be set/accessed from the main module
httpx_clients = {}
_clients_lock = threading.Lock()
threads_list = []
_threads_list_lock = threading.Lock()
@@ -34,21 +46,39 @@ _threads_list_lock = threading.Lock()
def get_httpx_client() -> httpx.Client:
"""
Get or create thread-local HTTP client with keep-alive enabled.
Each thread gets its own httpx.Client instance to avoid connection conflicts.
Keep-alive connections improve performance by reusing TCP connections.
Get or create thread-local HTTP client.
Keep-alive is disabled to avoid stale connections with load balancers.
"""
global httpx_clients
thread_id = threading.get_ident()
with _clients_lock:
if thread_id not in httpx_clients:
# Create client with keep-alive headers and connection pooling
# Create client with keep-alive disabled
httpx_clients[thread_id] = httpx.Client(
headers={"Connection": "keep-alive"},
limits=httpx.Limits(max_keepalive_connections=20, max_connections=100)
headers={"Connection": "close"}, # Explicitly request closing
limits=httpx.Limits(max_keepalive_connections=0, max_connections=100)
)
return httpx_clients[thread_id]
def clear_httpx_client():
"""
Removes the current thread's client from the cache.
Ensures a fresh client (and socket pool) will be created on the next call.
"""
global httpx_clients
thread_id = threading.get_ident()
with _clients_lock:
if thread_id in httpx_clients:
try:
# Close the client before removing it
httpx_clients[thread_id].close()
except:
pass
del httpx_clients[thread_id]
def get_thread_position():
"""
Get the position of the current thread in the threads list.

Binary file not shown.

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@@ -1,659 +0,0 @@
[
{
"id": "5703b3d6-e415-40b0-90ea-b168835fd720",
"name": "HOPITAL PRIVE NATECIA",
"Center_Name": "Hôpital Privé Natécia",
"patients_count": 169,
"preincluded_count": 2,
"included_count": 167,
"prematurely_terminated_count": 0
},
{
"id": "5e6d7afa-6532-495f-a84a-34f644aeaa0f",
"name": "CLINIQUE BELLEDONNE",
"Center_Name": "Clinique Belledonne",
"patients_count": 157,
"preincluded_count": 5,
"included_count": 151,
"prematurely_terminated_count": 1
},
{
"id": "026a6d39-552f-44b9-8a2d-1ecd705f9e08",
"name": "HOPITAL AMERICAIN",
"Center_Name": "Hôpital Américain de Paris",
"patients_count": 156,
"preincluded_count": 3,
"included_count": 153,
"prematurely_terminated_count": 0
},
{
"id": "1de71a30-840b-4c4b-84fc-281ce1b4a5e1",
"name": "SANTE ATLANTIQUE",
"Center_Name": "Clinique Santé Atlantique",
"patients_count": 154,
"preincluded_count": 0,
"included_count": 154,
"prematurely_terminated_count": 0
},
{
"id": "bf0f96c1-8bbc-4f2c-b360-4a5b27995a12",
"name": "SA CLINIQUE TIVOLI-DUCOS",
"Center_Name": "Clinique TIVOLI",
"patients_count": 150,
"preincluded_count": 2,
"included_count": 148,
"prematurely_terminated_count": 0
},
{
"id": "aba63d11-0dd7-40e8-a652-384c311bb358",
"name": "HOPITAL LYON SUD - HOSPICES CIVILS DE LYON",
"Center_Name": "Hôpital Lyon Sud - Hospices Civils de Lyon",
"patients_count": 127,
"preincluded_count": 0,
"included_count": 127,
"prematurely_terminated_count": 0
},
{
"id": "8488229d-f426-4bdd-923c-f638041b223c",
"name": "HOPITAL JEANNE DE FLANDRE DU CHU DE LILLE",
"Center_Name": "CHU de Lille - Hôpital Jeanne de Flandre",
"patients_count": 91,
"preincluded_count": 1,
"included_count": 90,
"prematurely_terminated_count": 0
},
{
"id": "31665f8d-0f46-44dc-931f-e3aed8879965",
"name": "HOPITAL MAISON BLANCHE CHU REIMS",
"Center_Name": "CHU de Reims - Hôpital Maison Blanche",
"patients_count": 88,
"preincluded_count": 0,
"included_count": 88,
"prematurely_terminated_count": 0
},
{
"id": "b77b301c-10fa-4eca-bb5b-51506766e158",
"name": "HOPITAL CHARLES NICOLLE CHU ROUEN",
"Center_Name": "CHU de Rouen Normandie - Hôpital Charles-Nicolle",
"patients_count": 84,
"preincluded_count": 1,
"included_count": 83,
"prematurely_terminated_count": 0
},
{
"id": "743d0a1a-7edf-4fe6-9d65-0c14363f2153",
"name": "CENTRE HOSPITALIER UNIVERSITAIRE JEAN MINJOZ BESANCON",
"Center_Name": "CHU Jean Minjoz Besançon - Pôle Mère-Femme",
"patients_count": 80,
"preincluded_count": 0,
"included_count": 80,
"prematurely_terminated_count": 0
},
{
"id": "855d7aab-9736-40b7-b9ff-dcc6438890ef",
"name": "HOPITAL CROIX-ROUSSE - HOSPICES CIVILS DE LYON",
"Center_Name": "Hôpital Croix-Rousse - Hospices Civils de Lyon",
"patients_count": 63,
"preincluded_count": 2,
"included_count": 60,
"prematurely_terminated_count": 1
},
{
"id": "74a05936-8fb6-4662-8e95-fd1c91621bf2",
"name": "GHU APHP SORBONNE UNIVERSITE SITE TENON",
"Center_Name": "GHU APHP - Hôpital Tenon",
"patients_count": 62,
"preincluded_count": 9,
"included_count": 53,
"prematurely_terminated_count": 0
},
{
"id": "006740fa-696c-4ffb-8b77-7a60d0e23617",
"name": "HOPITAL PRIVÉ LE BOIS",
"Center_Name": "Hôpital Privé le Bois - Lille",
"patients_count": 60,
"preincluded_count": 1,
"included_count": 59,
"prematurely_terminated_count": 0
},
{
"id": "76d2ebcd-5482-4c5d-8221-c94d1de7261e",
"name": "CENTRE HOSPITALIER ANNECY-GENEVOIS SITE ANNECY",
"Center_Name": "CH Annecy Genevois Site dAnnecy",
"patients_count": 59,
"preincluded_count": 1,
"included_count": 58,
"prematurely_terminated_count": 0
},
{
"id": "a4b3dfea-1220-4987-b287-f58fde1d0ee5",
"name": "CENTRE HOSPITALIER UNIVERSITAIRE COTE DE NACRE",
"Center_Name": "CHU de Caen",
"patients_count": 58,
"preincluded_count": 0,
"included_count": 58,
"prematurely_terminated_count": 0
},
{
"id": "4aef30cb-778b-409a-b6e2-898bfd91c850",
"name": "CENTRE HOSPITALIER GENERAL DE VALENCIENNES",
"Center_Name": "CH de Valenciennes",
"patients_count": 55,
"preincluded_count": 3,
"included_count": 52,
"prematurely_terminated_count": 0
},
{
"id": "f7d3526b-18d6-43af-b52c-5ca23bac798e",
"name": "CENTRE HOSPITALIER REGIONAL D ANGERS",
"Center_Name": "CHR dAngers",
"patients_count": 50,
"preincluded_count": 0,
"included_count": 50,
"prematurely_terminated_count": 0
},
{
"id": "d17ddcc4-64db-4cf5-83c5-146f9a060254",
"name": "CENTRE HOSPITALIER DE CALAIS.",
"Center_Name": "CH de Calais",
"patients_count": 42,
"preincluded_count": 0,
"included_count": 42,
"prematurely_terminated_count": 0
},
{
"id": "1fd6c63b-d909-45d8-8c70-ecb12501c1d1",
"name": "HOPITAL DE HAUTEPIERRE",
"Center_Name": "CHRU Strasbourg - Hôpital de Hautepierre",
"patients_count": 41,
"preincluded_count": 9,
"included_count": 32,
"prematurely_terminated_count": 0
},
{
"id": "f6665185-b1ae-4847-a378-652d35158cee",
"name": "CLINIQUE BELHARRA",
"Center_Name": "Clinique Belharra",
"patients_count": 40,
"preincluded_count": 0,
"included_count": 40,
"prematurely_terminated_count": 0
},
{
"id": "fe25553c-4894-4291-b303-c19d2a1c6f0f",
"name": "CHU SITE FELIX GUYON (SAINT DENIS)",
"Center_Name": "CHU la Réunion - Site Félix Guyon (SAINT DENIS)",
"patients_count": 39,
"preincluded_count": 6,
"included_count": 33,
"prematurely_terminated_count": 0
},
{
"id": "12daafee-970b-4781-9121-994d06e3a766",
"name": "CHU DE NICE HOPITAL DE L'ARCHET",
"Center_Name": "CHU Nice Archet",
"patients_count": 38,
"preincluded_count": 0,
"included_count": 38,
"prematurely_terminated_count": 0
},
{
"id": "f07a7374-d731-4fcf-86e9-2f36e5faf342",
"name": "CHU MONTPELLIER HOPITAL ARNAUD DE VILLENEUVE",
"Center_Name": "CHU Montpellier - Hôpital Arnaud de Villeneuve",
"patients_count": 36,
"preincluded_count": 0,
"included_count": 36,
"prematurely_terminated_count": 0
},
{
"id": "9c64545a-b622-4ef9-be0f-f5cc21b9cd66",
"name": "HOPITAL NORD - CHU DE GRENOBLE ALPES",
"Center_Name": "CHU de Grenoble - Hôpital Nord",
"patients_count": 36,
"preincluded_count": 0,
"included_count": 35,
"prematurely_terminated_count": 1
},
{
"id": "b0ba921e-e24a-41c2-b769-a2aa108cdd58",
"name": "CENTRE HOSPITALIER LES ESCARTONS A BRIANCON",
"Center_Name": "CH des Escartons de Briançon",
"patients_count": 32,
"preincluded_count": 1,
"included_count": 31,
"prematurely_terminated_count": 0
},
{
"id": "b5f30dc5-da3f-4f8b-9a39-33f0fefb7196",
"name": "SCM RX TOULOUSE CLINIQUE PASTEUR",
"Center_Name": "Clinique Pasteur Toulouse",
"patients_count": 32,
"preincluded_count": 2,
"included_count": 30,
"prematurely_terminated_count": 0
},
{
"id": "c03b88b5-3cd2-4336-9048-19c239baf5ec",
"name": "CHRU DE RENNES SITE HOPITAL SUD",
"Center_Name": "CHU Rennes",
"patients_count": 31,
"preincluded_count": 1,
"included_count": 30,
"prematurely_terminated_count": 0
},
{
"id": "817429dd-0d7c-4df9-ad70-2f19c205e05a",
"name": "CENTRE HOSPITALIER - FALCONAJA - BASTIA",
"Center_Name": "CH Bastia",
"patients_count": 29,
"preincluded_count": 4,
"included_count": 25,
"prematurely_terminated_count": 0
},
{
"id": "4f943b00-9306-418a-a853-1d97dff71172",
"name": "HOPITAL EUROPEEN",
"Center_Name": "Hôpital Européen Marseille",
"patients_count": 28,
"preincluded_count": 0,
"included_count": 28,
"prematurely_terminated_count": 0
},
{
"id": "002312ec-69fb-4582-9e8f-7c266e5479d2",
"name": "HOPITAL NORD - CHU DE SAINT-ETIENNE",
"Center_Name": "CHU de Saint-Étienne - Hôpital Nord",
"patients_count": 27,
"preincluded_count": 0,
"included_count": 27,
"prematurely_terminated_count": 0
},
{
"id": "0ce39aac-6b5a-418b-8430-c4432e6cd78f",
"name": "HOPITAL DE RANGUEIL CHU TOULOUSE",
"Center_Name": "CHU de Toulouse - Hôpital Rangueil",
"patients_count": 24,
"preincluded_count": 1,
"included_count": 23,
"prematurely_terminated_count": 0
},
{
"id": "8ef8564e-836c-4c03-b4ec-8e28fa76c3c0",
"name": "HOPITAL ESTAING - CHU CLERMONT-FERRAND",
"Center_Name": "CHU Clermont-Ferrand - Site Estaing",
"patients_count": 22,
"preincluded_count": 1,
"included_count": 21,
"prematurely_terminated_count": 0
},
{
"id": "546f981f-6f7d-40c8-9b97-a1a3c46e6674",
"name": "GROUPE HOSPITALIER DE LA REGION DE MULHOUSE ET SUD ALSACE",
"Center_Name": "GHR Mulhouse Sud Alsace",
"patients_count": 20,
"preincluded_count": 0,
"included_count": 20,
"prematurely_terminated_count": 0
},
{
"id": "eb9c561d-37b6-485c-b351-9e19515cb98d",
"name": "GROUPE HOSPITALIER PELLEGRIN - CHU",
"Center_Name": "CHU de Bordeaux - GH Pellegrin",
"patients_count": 20,
"preincluded_count": 0,
"included_count": 20,
"prematurely_terminated_count": 0
},
{
"id": "d1ef2ced-0206-4725-a08c-454d71e823ec",
"name": "HOPITAL DE LA MERE ET DE L'ENFANT",
"Center_Name": "CHU Limoges - Hôpital de la Mère et de l'Enfant",
"patients_count": 20,
"preincluded_count": 0,
"included_count": 20,
"prematurely_terminated_count": 0
},
{
"id": "7f43a297-b156-4fec-8ecf-d8d008b1a1d2",
"name": "HOPITAL PRIVE DIJON BOURGOGNE",
"Center_Name": "Centre Evidens - Hôpital privé Dijon Bourgogne",
"patients_count": 19,
"preincluded_count": 4,
"included_count": 14,
"prematurely_terminated_count": 0
},
{
"id": "d767fcd0-3f4c-4cdf-9cda-b829156d2f95",
"name": "HOPITAL PRIVE SUD CORSE",
"Center_Name": "Hôpital Privé Sud Corse",
"patients_count": 18,
"preincluded_count": 0,
"included_count": 18,
"prematurely_terminated_count": 0
},
{
"id": "58d5b536-b326-4713-9137-bb6f852df0be",
"name": "CENTRE HOSPITALIER METROPOLE SAVOIE - CHAMBERY NH",
"Center_Name": "CH Métropole Savoie - Site Chambéry",
"patients_count": 16,
"preincluded_count": 0,
"included_count": 16,
"prematurely_terminated_count": 0
},
{
"id": "454313d9-c624-43de-a8e3-84989d526403",
"name": "CLINIQUE MUTUALISTE LA SAGESSE RENNES",
"Center_Name": "Clinique la Sagesse - Rennes",
"patients_count": 15,
"preincluded_count": 0,
"included_count": 15,
"prematurely_terminated_count": 0
},
{
"id": "d981c078-189e-4831-a063-778733f7e582",
"name": "HOPITAL FOCH",
"Center_Name": "Hôpital Foch",
"patients_count": 15,
"preincluded_count": 1,
"included_count": 12,
"prematurely_terminated_count": 0
},
{
"id": "b4b35661-87c8-4333-bfb1-3ce4f1c77565",
"name": "CENTRE HOSPITALIER REGIONAL UNIVERSITAIRE BRETONNEAU",
"Center_Name": "CHRU Bretonneau",
"patients_count": 14,
"preincluded_count": 2,
"included_count": 12,
"prematurely_terminated_count": 0
},
{
"id": "940c8425-fe53-45ac-a750-3e195df990e3",
"name": "HOPITAL PRIVE D'EURE ET LOIR",
"Center_Name": "Hôpital Privé d'Eure et Loir",
"patients_count": 14,
"preincluded_count": 1,
"included_count": 13,
"prematurely_terminated_count": 0
},
{
"id": "98cbbefe-920a-495a-981d-02093bd2253d",
"name": "CHU LA MILETRIE",
"Center_Name": "CHU de Poitiers La Miletrie",
"patients_count": 13,
"preincluded_count": 2,
"included_count": 11,
"prematurely_terminated_count": 0
},
{
"id": "38e9ef8a-5073-471a-a3df-14d834db2d12",
"name": "GHBS-SITE HÔPITAL DU SCORFF",
"Center_Name": "Groupe Hospitalier Bretagne Sud Lorient - GHBS - Lorient (SCORFF)",
"patients_count": 13,
"preincluded_count": 0,
"included_count": 13,
"prematurely_terminated_count": 0
},
{
"id": "6316db1a-4a90-4e45-a518-0095d63f7c36",
"name": "HOPITAL LE BOCAGE CHRU DIJON",
"Center_Name": "CHU Dijon",
"patients_count": 12,
"preincluded_count": 1,
"included_count": 11,
"prematurely_terminated_count": 0
},
{
"id": "f790c171-9523-48b6-a246-fdb26628eb6c",
"name": "CHRU NANCY - MATERNITE",
"Center_Name": "CHRU de Nancy - Maternité",
"patients_count": 11,
"preincluded_count": 1,
"included_count": 10,
"prematurely_terminated_count": 0
},
{
"id": "7b8c5362-7c7a-4d93-8b12-58b8e56020d1",
"name": "HOPITAL JACQUES MONOD CH LE HAVRE",
"Center_Name": "GH du Havre - Hôpital Jacques Monod",
"patients_count": 11,
"preincluded_count": 0,
"included_count": 11,
"prematurely_terminated_count": 0
},
{
"id": "6953af68-e30e-437f-93cf-19ed0932c350",
"name": "CHRU D'ORLEANS - HOPITAL DE LA SOURCE",
"Center_Name": "CHU d'Orléans",
"patients_count": 10,
"preincluded_count": 3,
"included_count": 7,
"prematurely_terminated_count": 0
},
{
"id": "f13560a8-3bf6-4322-bdae-332ee3bf0366",
"name": "POLYCLINIQUE JEAN VILLAR",
"Center_Name": "Polyclinique Jean Villar",
"patients_count": 10,
"preincluded_count": 0,
"included_count": 10,
"prematurely_terminated_count": 0
},
{
"id": "da67fb6e-2ccc-4994-8fde-cc2ee2a8e9ca",
"name": "GHU AP-HP UNIVERSITE PARIS SACLAY SITE KREMLIN BICETRE",
"Center_Name": "GHU APHP - Hôpital Bicêtre",
"patients_count": 9,
"preincluded_count": 0,
"included_count": 4,
"prematurely_terminated_count": 0
},
{
"id": "56f427f0-be35-493b-8049-46b747c0105e",
"name": "CHU AMIENS SUD",
"Center_Name": "CHU Amiens Sud",
"patients_count": 7,
"preincluded_count": 3,
"included_count": 4,
"prematurely_terminated_count": 0
},
{
"id": "f784ee6f-27b5-4afe-ba23-4f839d96535c",
"name": "APHM HOPITAL NORD",
"Center_Name": "APHM Hôpital Nord",
"patients_count": 5,
"preincluded_count": 0,
"included_count": 5,
"prematurely_terminated_count": 0
},
{
"id": "1ac60b10-08de-4639-9a49-67167f85844e",
"name": "CENTRE HOSPITALIER DE LENS",
"Center_Name": "CH de Lens",
"patients_count": 5,
"preincluded_count": 2,
"included_count": 3,
"prematurely_terminated_count": 0
},
{
"id": "9ba321be-65d0-4767-9865-a547905e647e",
"name": "HOPITAL DE LA CROIX SAINT SIMON",
"Center_Name": "GH Diaconesses Croix Saint-Simon",
"patients_count": 5,
"preincluded_count": 1,
"included_count": 4,
"prematurely_terminated_count": 0
},
{
"id": "cab5b1e9-d93a-46eb-ae35-a449ea719c65",
"name": "GRAND HOSP EST FRANCILIEN MARNE LA VALLEE SITE JOSSIGNY",
"Center_Name": "Grand Hôpital de l'Est Francilien - Site de Marne-la-Vallée",
"patients_count": 4,
"preincluded_count": 2,
"included_count": 2,
"prematurely_terminated_count": 0
},
{
"id": "96519108-b0b2-4a5f-999f-cccc4e4059c9",
"name": "CHU DE NANTES SITE HOTEL DIEU HOPITAL MERE ENFANT",
"Center_Name": "CHU de Nantes - Site Hôtel Dieu Hôpital Mère Enfant",
"patients_count": 3,
"preincluded_count": 0,
"included_count": 3,
"prematurely_terminated_count": 0
},
{
"id": "fe7548b7-75a1-4e13-97a9-6dc865b04b25",
"name": "CHU SITE SUD ( SAINT PIERRE)",
"Center_Name": "CHU la Réunion - Site Sud (SAINT PIERRE)",
"patients_count": 3,
"preincluded_count": 0,
"included_count": 3,
"prematurely_terminated_count": 0
},
{
"id": "e68c76de-33e8-49e3-978d-c5fb408e7fd5",
"name": "CLINIQUE AXIUM",
"Center_Name": "Clinique Axium",
"patients_count": 3,
"preincluded_count": 0,
"included_count": 3,
"prematurely_terminated_count": 0
},
{
"id": "af09eaa0-7e08-48e3-990c-24ca2fbc3fdc",
"name": "SCP GYNECOLOGIE RIVE GAUCHE",
"Center_Name": "SCP Gynécologie Clinique Rive Gauche",
"patients_count": 3,
"preincluded_count": 0,
"included_count": 3,
"prematurely_terminated_count": 0
},
{
"id": "0466558d-077c-4a51-9d25-2e15e00fabaf",
"name": "CENTRE HOSPITALIER DE CANNES SIMONE VEIL",
"Center_Name": "CH de Cannes Simone Veil",
"patients_count": 2,
"preincluded_count": 0,
"included_count": 2,
"prematurely_terminated_count": 0
},
{
"id": "13306b61-7ea6-4d60-b89c-b0df2d9d1605",
"name": "CENTRE HOSPITALIER VICTOR PROVO ROUBAIX",
"Center_Name": "CH Victor Provo Roubaix",
"patients_count": 2,
"preincluded_count": 0,
"included_count": 2,
"prematurely_terminated_count": 0
},
{
"id": "8c27716f-edfe-4a4e-9189-09f39cc64395",
"name": "CHI DE MONT DE MARSAN ET DU PAYS DES SOURCES",
"Center_Name": "CHI Mont de Marsan",
"patients_count": 2,
"preincluded_count": 0,
"included_count": 2,
"prematurely_terminated_count": 0
},
{
"id": "b74c365a-fc63-4763-b57d-abb609debd3b",
"name": "CTRE HOSPITALIER INTERCOMMUNAL POISSY ST GERMAIN SITE POISSY",
"Center_Name": "CHI Poissy St Germain en Laye - Site Poissy",
"patients_count": 2,
"preincluded_count": 0,
"included_count": 2,
"prematurely_terminated_count": 0
},
{
"id": "4d271322-7945-42e8-801b-a3b25fc570be",
"name": "GROUPE HOSPITALIER PARIS SAINT JOSEPH",
"Center_Name": "Groupe Hospitalier Paris Saint-Joseph",
"patients_count": 2,
"preincluded_count": 0,
"included_count": 2,
"prematurely_terminated_count": 0
},
{
"id": "aa3e8684-07e0-45d9-9cee-144df2e4b430",
"name": "CENTRE HOSPITALIER DE PAU",
"Center_Name": "CH de Pau",
"patients_count": 1,
"preincluded_count": 0,
"included_count": 1,
"prematurely_terminated_count": 0
},
{
"id": "d82d64eb-a1cf-4635-a99f-23def12c7cb5",
"name": "CHRU BREST SITE HOPITAL MORVAN",
"Center_Name": "CHRU Brest - Site Hôpital Morvan",
"patients_count": 1,
"preincluded_count": 0,
"included_count": 1,
"prematurely_terminated_count": 0
},
{
"id": "a47dc8c0-dfea-4a4c-9bcc-1370616ff9c8",
"name": "CHU DE MARTINIQUE SITE MFME",
"Center_Name": "CHU de Martinique - Site MFME",
"patients_count": 1,
"preincluded_count": 0,
"included_count": 1,
"prematurely_terminated_count": 0
},
{
"id": "384d3b28-f33e-43a6-9043-394aa88aead7",
"name": "CLINIQUE BOUCHARD",
"Center_Name": "Clinique Bouchard - Marseille",
"patients_count": 1,
"preincluded_count": 0,
"included_count": 1,
"prematurely_terminated_count": 0
},
{
"id": "0f78459f-b598-4faa-81a1-085a439e8c0e",
"name": "HOPITAUX PRIVES ROUENNAIS MATHILDE",
"Center_Name": "Hôpitaux Privés Rouennais - Mathilde",
"patients_count": 1,
"preincluded_count": 1,
"included_count": 0,
"prematurely_terminated_count": 0
},
{
"id": "2ba1f179-425e-4d88-97a7-88a097e639ab",
"name": "CENTRE HOSPITALIER DE CAYENNE",
"Center_Name": "CHU de Guyane - Site de Cayenne",
"patients_count": 0,
"preincluded_count": 0,
"included_count": 0,
"prematurely_terminated_count": 0
},
{
"id": "3e8887e1-7608-40a6-b6f5-87c6fa5a0bd0",
"name": "CENTRE HOSPITALIER DE VERSAILLES ANDRE MIGNOT",
"Center_Name": "CH de Versailles",
"patients_count": 0,
"preincluded_count": 0,
"included_count": 0,
"prematurely_terminated_count": 0
},
{
"id": "6af3784d-5d57-47c3-b924-0d13008ebd88",
"name": "CENTRE HOSPITALIER UNIVERSITAIRE DE POINTE-A-PITRE",
"Center_Name": "CHU de Guadeloupe - Pointe-à-Pitre",
"patients_count": 0,
"preincluded_count": 0,
"included_count": 0,
"prematurely_terminated_count": 0
},
{
"id": "dacc94bd-89b0-4cc4-b334-f684360abbe5",
"name": "HOPITAL PRIVE D ANTONY",
"Center_Name": "Hôpital Privé d'Antony",
"patients_count": 0,
"preincluded_count": 0,
"included_count": 0,
"prematurely_terminated_count": 0
}
]

View File

@@ -1,659 +0,0 @@
[
{
"id": "5703b3d6-e415-40b0-90ea-b168835fd720",
"name": "HOPITAL PRIVE NATECIA",
"Center_Name": "Hôpital Privé Natécia",
"patients_count": 169,
"preincluded_count": 2,
"included_count": 167,
"prematurely_terminated_count": 0
},
{
"id": "5e6d7afa-6532-495f-a84a-34f644aeaa0f",
"name": "CLINIQUE BELLEDONNE",
"Center_Name": "Clinique Belledonne",
"patients_count": 157,
"preincluded_count": 5,
"included_count": 151,
"prematurely_terminated_count": 1
},
{
"id": "026a6d39-552f-44b9-8a2d-1ecd705f9e08",
"name": "HOPITAL AMERICAIN",
"Center_Name": "Hôpital Américain de Paris",
"patients_count": 156,
"preincluded_count": 3,
"included_count": 153,
"prematurely_terminated_count": 0
},
{
"id": "1de71a30-840b-4c4b-84fc-281ce1b4a5e1",
"name": "SANTE ATLANTIQUE",
"Center_Name": "Clinique Santé Atlantique",
"patients_count": 154,
"preincluded_count": 0,
"included_count": 154,
"prematurely_terminated_count": 0
},
{
"id": "bf0f96c1-8bbc-4f2c-b360-4a5b27995a12",
"name": "SA CLINIQUE TIVOLI-DUCOS",
"Center_Name": "Clinique TIVOLI",
"patients_count": 150,
"preincluded_count": 2,
"included_count": 148,
"prematurely_terminated_count": 0
},
{
"id": "aba63d11-0dd7-40e8-a652-384c311bb358",
"name": "HOPITAL LYON SUD - HOSPICES CIVILS DE LYON",
"Center_Name": "Hôpital Lyon Sud - Hospices Civils de Lyon",
"patients_count": 127,
"preincluded_count": 0,
"included_count": 127,
"prematurely_terminated_count": 0
},
{
"id": "8488229d-f426-4bdd-923c-f638041b223c",
"name": "HOPITAL JEANNE DE FLANDRE DU CHU DE LILLE",
"Center_Name": "CHU de Lille - Hôpital Jeanne de Flandre",
"patients_count": 91,
"preincluded_count": 1,
"included_count": 90,
"prematurely_terminated_count": 0
},
{
"id": "31665f8d-0f46-44dc-931f-e3aed8879965",
"name": "HOPITAL MAISON BLANCHE CHU REIMS",
"Center_Name": "CHU de Reims - Hôpital Maison Blanche",
"patients_count": 86,
"preincluded_count": 0,
"included_count": 86,
"prematurely_terminated_count": 0
},
{
"id": "b77b301c-10fa-4eca-bb5b-51506766e158",
"name": "HOPITAL CHARLES NICOLLE CHU ROUEN",
"Center_Name": "CHU de Rouen Normandie - Hôpital Charles-Nicolle",
"patients_count": 84,
"preincluded_count": 1,
"included_count": 83,
"prematurely_terminated_count": 0
},
{
"id": "743d0a1a-7edf-4fe6-9d65-0c14363f2153",
"name": "CENTRE HOSPITALIER UNIVERSITAIRE JEAN MINJOZ BESANCON",
"Center_Name": "CHU Jean Minjoz Besançon - Pôle Mère-Femme",
"patients_count": 80,
"preincluded_count": 0,
"included_count": 80,
"prematurely_terminated_count": 0
},
{
"id": "855d7aab-9736-40b7-b9ff-dcc6438890ef",
"name": "HOPITAL CROIX-ROUSSE - HOSPICES CIVILS DE LYON",
"Center_Name": "Hôpital Croix-Rousse - Hospices Civils de Lyon",
"patients_count": 63,
"preincluded_count": 2,
"included_count": 60,
"prematurely_terminated_count": 1
},
{
"id": "74a05936-8fb6-4662-8e95-fd1c91621bf2",
"name": "GHU APHP SORBONNE UNIVERSITE SITE TENON",
"Center_Name": "GHU APHP - Hôpital Tenon",
"patients_count": 62,
"preincluded_count": 9,
"included_count": 53,
"prematurely_terminated_count": 0
},
{
"id": "006740fa-696c-4ffb-8b77-7a60d0e23617",
"name": "HOPITAL PRIVÉ LE BOIS",
"Center_Name": "Hôpital Privé le Bois - Lille",
"patients_count": 60,
"preincluded_count": 1,
"included_count": 59,
"prematurely_terminated_count": 0
},
{
"id": "76d2ebcd-5482-4c5d-8221-c94d1de7261e",
"name": "CENTRE HOSPITALIER ANNECY-GENEVOIS SITE ANNECY",
"Center_Name": "CH Annecy Genevois Site dAnnecy",
"patients_count": 59,
"preincluded_count": 1,
"included_count": 58,
"prematurely_terminated_count": 0
},
{
"id": "a4b3dfea-1220-4987-b287-f58fde1d0ee5",
"name": "CENTRE HOSPITALIER UNIVERSITAIRE COTE DE NACRE",
"Center_Name": "CHU de Caen",
"patients_count": 58,
"preincluded_count": 0,
"included_count": 58,
"prematurely_terminated_count": 0
},
{
"id": "4aef30cb-778b-409a-b6e2-898bfd91c850",
"name": "CENTRE HOSPITALIER GENERAL DE VALENCIENNES",
"Center_Name": "CH de Valenciennes",
"patients_count": 55,
"preincluded_count": 3,
"included_count": 52,
"prematurely_terminated_count": 0
},
{
"id": "f7d3526b-18d6-43af-b52c-5ca23bac798e",
"name": "CENTRE HOSPITALIER REGIONAL D ANGERS",
"Center_Name": "CHR dAngers",
"patients_count": 50,
"preincluded_count": 0,
"included_count": 50,
"prematurely_terminated_count": 0
},
{
"id": "d17ddcc4-64db-4cf5-83c5-146f9a060254",
"name": "CENTRE HOSPITALIER DE CALAIS.",
"Center_Name": "CH de Calais",
"patients_count": 42,
"preincluded_count": 0,
"included_count": 42,
"prematurely_terminated_count": 0
},
{
"id": "f6665185-b1ae-4847-a378-652d35158cee",
"name": "CLINIQUE BELHARRA",
"Center_Name": "Clinique Belharra",
"patients_count": 40,
"preincluded_count": 0,
"included_count": 40,
"prematurely_terminated_count": 0
},
{
"id": "fe25553c-4894-4291-b303-c19d2a1c6f0f",
"name": "CHU SITE FELIX GUYON (SAINT DENIS)",
"Center_Name": "CHU la Réunion - Site Félix Guyon (SAINT DENIS)",
"patients_count": 39,
"preincluded_count": 6,
"included_count": 33,
"prematurely_terminated_count": 0
},
{
"id": "1fd6c63b-d909-45d8-8c70-ecb12501c1d1",
"name": "HOPITAL DE HAUTEPIERRE",
"Center_Name": "CHRU Strasbourg - Hôpital de Hautepierre",
"patients_count": 39,
"preincluded_count": 8,
"included_count": 31,
"prematurely_terminated_count": 0
},
{
"id": "12daafee-970b-4781-9121-994d06e3a766",
"name": "CHU DE NICE HOPITAL DE L'ARCHET",
"Center_Name": "CHU Nice Archet",
"patients_count": 38,
"preincluded_count": 0,
"included_count": 38,
"prematurely_terminated_count": 0
},
{
"id": "f07a7374-d731-4fcf-86e9-2f36e5faf342",
"name": "CHU MONTPELLIER HOPITAL ARNAUD DE VILLENEUVE",
"Center_Name": "CHU Montpellier - Hôpital Arnaud de Villeneuve",
"patients_count": 36,
"preincluded_count": 0,
"included_count": 36,
"prematurely_terminated_count": 0
},
{
"id": "9c64545a-b622-4ef9-be0f-f5cc21b9cd66",
"name": "HOPITAL NORD - CHU DE GRENOBLE ALPES",
"Center_Name": "CHU de Grenoble - Hôpital Nord",
"patients_count": 36,
"preincluded_count": 0,
"included_count": 35,
"prematurely_terminated_count": 1
},
{
"id": "b0ba921e-e24a-41c2-b769-a2aa108cdd58",
"name": "CENTRE HOSPITALIER LES ESCARTONS A BRIANCON",
"Center_Name": "CH des Escartons de Briançon",
"patients_count": 32,
"preincluded_count": 1,
"included_count": 31,
"prematurely_terminated_count": 0
},
{
"id": "b5f30dc5-da3f-4f8b-9a39-33f0fefb7196",
"name": "SCM RX TOULOUSE CLINIQUE PASTEUR",
"Center_Name": "Clinique Pasteur Toulouse",
"patients_count": 32,
"preincluded_count": 2,
"included_count": 30,
"prematurely_terminated_count": 0
},
{
"id": "c03b88b5-3cd2-4336-9048-19c239baf5ec",
"name": "CHRU DE RENNES SITE HOPITAL SUD",
"Center_Name": "CHU Rennes",
"patients_count": 31,
"preincluded_count": 1,
"included_count": 30,
"prematurely_terminated_count": 0
},
{
"id": "817429dd-0d7c-4df9-ad70-2f19c205e05a",
"name": "CENTRE HOSPITALIER - FALCONAJA - BASTIA",
"Center_Name": "CH Bastia",
"patients_count": 29,
"preincluded_count": 4,
"included_count": 25,
"prematurely_terminated_count": 0
},
{
"id": "4f943b00-9306-418a-a853-1d97dff71172",
"name": "HOPITAL EUROPEEN",
"Center_Name": "Hôpital Européen Marseille",
"patients_count": 28,
"preincluded_count": 0,
"included_count": 28,
"prematurely_terminated_count": 0
},
{
"id": "002312ec-69fb-4582-9e8f-7c266e5479d2",
"name": "HOPITAL NORD - CHU DE SAINT-ETIENNE",
"Center_Name": "CHU de Saint-Étienne - Hôpital Nord",
"patients_count": 27,
"preincluded_count": 0,
"included_count": 27,
"prematurely_terminated_count": 0
},
{
"id": "0ce39aac-6b5a-418b-8430-c4432e6cd78f",
"name": "HOPITAL DE RANGUEIL CHU TOULOUSE",
"Center_Name": "CHU de Toulouse - Hôpital Rangueil",
"patients_count": 24,
"preincluded_count": 1,
"included_count": 23,
"prematurely_terminated_count": 0
},
{
"id": "8ef8564e-836c-4c03-b4ec-8e28fa76c3c0",
"name": "HOPITAL ESTAING - CHU CLERMONT-FERRAND",
"Center_Name": "CHU Clermont-Ferrand - Site Estaing",
"patients_count": 22,
"preincluded_count": 1,
"included_count": 21,
"prematurely_terminated_count": 0
},
{
"id": "546f981f-6f7d-40c8-9b97-a1a3c46e6674",
"name": "GROUPE HOSPITALIER DE LA REGION DE MULHOUSE ET SUD ALSACE",
"Center_Name": "GHR Mulhouse Sud Alsace",
"patients_count": 20,
"preincluded_count": 0,
"included_count": 20,
"prematurely_terminated_count": 0
},
{
"id": "eb9c561d-37b6-485c-b351-9e19515cb98d",
"name": "GROUPE HOSPITALIER PELLEGRIN - CHU",
"Center_Name": "CHU de Bordeaux - GH Pellegrin",
"patients_count": 20,
"preincluded_count": 0,
"included_count": 20,
"prematurely_terminated_count": 0
},
{
"id": "d1ef2ced-0206-4725-a08c-454d71e823ec",
"name": "HOPITAL DE LA MERE ET DE L'ENFANT",
"Center_Name": "CHU Limoges - Hôpital de la Mère et de l'Enfant",
"patients_count": 20,
"preincluded_count": 0,
"included_count": 20,
"prematurely_terminated_count": 0
},
{
"id": "7f43a297-b156-4fec-8ecf-d8d008b1a1d2",
"name": "HOPITAL PRIVE DIJON BOURGOGNE",
"Center_Name": "Centre Evidens - Hôpital privé Dijon Bourgogne",
"patients_count": 19,
"preincluded_count": 4,
"included_count": 14,
"prematurely_terminated_count": 0
},
{
"id": "d767fcd0-3f4c-4cdf-9cda-b829156d2f95",
"name": "HOPITAL PRIVE SUD CORSE",
"Center_Name": "Hôpital Privé Sud Corse",
"patients_count": 18,
"preincluded_count": 0,
"included_count": 18,
"prematurely_terminated_count": 0
},
{
"id": "58d5b536-b326-4713-9137-bb6f852df0be",
"name": "CENTRE HOSPITALIER METROPOLE SAVOIE - CHAMBERY NH",
"Center_Name": "CH Métropole Savoie - Site Chambéry",
"patients_count": 16,
"preincluded_count": 0,
"included_count": 16,
"prematurely_terminated_count": 0
},
{
"id": "454313d9-c624-43de-a8e3-84989d526403",
"name": "CLINIQUE MUTUALISTE LA SAGESSE RENNES",
"Center_Name": "Clinique la Sagesse - Rennes",
"patients_count": 15,
"preincluded_count": 0,
"included_count": 15,
"prematurely_terminated_count": 0
},
{
"id": "d981c078-189e-4831-a063-778733f7e582",
"name": "HOPITAL FOCH",
"Center_Name": "Hôpital Foch",
"patients_count": 15,
"preincluded_count": 1,
"included_count": 12,
"prematurely_terminated_count": 0
},
{
"id": "b4b35661-87c8-4333-bfb1-3ce4f1c77565",
"name": "CENTRE HOSPITALIER REGIONAL UNIVERSITAIRE BRETONNEAU",
"Center_Name": "CHRU Bretonneau",
"patients_count": 14,
"preincluded_count": 2,
"included_count": 12,
"prematurely_terminated_count": 0
},
{
"id": "940c8425-fe53-45ac-a750-3e195df990e3",
"name": "HOPITAL PRIVE D'EURE ET LOIR",
"Center_Name": "Hôpital Privé d'Eure et Loir",
"patients_count": 14,
"preincluded_count": 1,
"included_count": 13,
"prematurely_terminated_count": 0
},
{
"id": "98cbbefe-920a-495a-981d-02093bd2253d",
"name": "CHU LA MILETRIE",
"Center_Name": "CHU de Poitiers La Miletrie",
"patients_count": 13,
"preincluded_count": 2,
"included_count": 11,
"prematurely_terminated_count": 0
},
{
"id": "38e9ef8a-5073-471a-a3df-14d834db2d12",
"name": "GHBS-SITE HÔPITAL DU SCORFF",
"Center_Name": "Groupe Hospitalier Bretagne Sud Lorient - GHBS - Lorient (SCORFF)",
"patients_count": 13,
"preincluded_count": 0,
"included_count": 13,
"prematurely_terminated_count": 0
},
{
"id": "6316db1a-4a90-4e45-a518-0095d63f7c36",
"name": "HOPITAL LE BOCAGE CHRU DIJON",
"Center_Name": "CHU Dijon",
"patients_count": 12,
"preincluded_count": 1,
"included_count": 11,
"prematurely_terminated_count": 0
},
{
"id": "f790c171-9523-48b6-a246-fdb26628eb6c",
"name": "CHRU NANCY - MATERNITE",
"Center_Name": "CHRU de Nancy - Maternité",
"patients_count": 11,
"preincluded_count": 1,
"included_count": 10,
"prematurely_terminated_count": 0
},
{
"id": "7b8c5362-7c7a-4d93-8b12-58b8e56020d1",
"name": "HOPITAL JACQUES MONOD CH LE HAVRE",
"Center_Name": "GH du Havre - Hôpital Jacques Monod",
"patients_count": 11,
"preincluded_count": 0,
"included_count": 11,
"prematurely_terminated_count": 0
},
{
"id": "6953af68-e30e-437f-93cf-19ed0932c350",
"name": "CHRU D'ORLEANS - HOPITAL DE LA SOURCE",
"Center_Name": "CHU d'Orléans",
"patients_count": 10,
"preincluded_count": 3,
"included_count": 7,
"prematurely_terminated_count": 0
},
{
"id": "f13560a8-3bf6-4322-bdae-332ee3bf0366",
"name": "POLYCLINIQUE JEAN VILLAR",
"Center_Name": "Polyclinique Jean Villar",
"patients_count": 10,
"preincluded_count": 0,
"included_count": 10,
"prematurely_terminated_count": 0
},
{
"id": "da67fb6e-2ccc-4994-8fde-cc2ee2a8e9ca",
"name": "GHU AP-HP UNIVERSITE PARIS SACLAY SITE KREMLIN BICETRE",
"Center_Name": "GHU APHP - Hôpital Bicêtre",
"patients_count": 9,
"preincluded_count": 0,
"included_count": 4,
"prematurely_terminated_count": 0
},
{
"id": "56f427f0-be35-493b-8049-46b747c0105e",
"name": "CHU AMIENS SUD",
"Center_Name": "CHU Amiens Sud",
"patients_count": 7,
"preincluded_count": 3,
"included_count": 4,
"prematurely_terminated_count": 0
},
{
"id": "f784ee6f-27b5-4afe-ba23-4f839d96535c",
"name": "APHM HOPITAL NORD",
"Center_Name": "APHM Hôpital Nord",
"patients_count": 5,
"preincluded_count": 0,
"included_count": 5,
"prematurely_terminated_count": 0
},
{
"id": "1ac60b10-08de-4639-9a49-67167f85844e",
"name": "CENTRE HOSPITALIER DE LENS",
"Center_Name": "CH de Lens",
"patients_count": 5,
"preincluded_count": 2,
"included_count": 3,
"prematurely_terminated_count": 0
},
{
"id": "9ba321be-65d0-4767-9865-a547905e647e",
"name": "HOPITAL DE LA CROIX SAINT SIMON",
"Center_Name": "GH Diaconesses Croix Saint-Simon",
"patients_count": 5,
"preincluded_count": 1,
"included_count": 4,
"prematurely_terminated_count": 0
},
{
"id": "cab5b1e9-d93a-46eb-ae35-a449ea719c65",
"name": "GRAND HOSP EST FRANCILIEN MARNE LA VALLEE SITE JOSSIGNY",
"Center_Name": "Grand Hôpital de l'Est Francilien - Site de Marne-la-Vallée",
"patients_count": 4,
"preincluded_count": 2,
"included_count": 2,
"prematurely_terminated_count": 0
},
{
"id": "96519108-b0b2-4a5f-999f-cccc4e4059c9",
"name": "CHU DE NANTES SITE HOTEL DIEU HOPITAL MERE ENFANT",
"Center_Name": "CHU de Nantes - Site Hôtel Dieu Hôpital Mère Enfant",
"patients_count": 3,
"preincluded_count": 0,
"included_count": 3,
"prematurely_terminated_count": 0
},
{
"id": "fe7548b7-75a1-4e13-97a9-6dc865b04b25",
"name": "CHU SITE SUD ( SAINT PIERRE)",
"Center_Name": "CHU la Réunion - Site Sud (SAINT PIERRE)",
"patients_count": 3,
"preincluded_count": 0,
"included_count": 3,
"prematurely_terminated_count": 0
},
{
"id": "e68c76de-33e8-49e3-978d-c5fb408e7fd5",
"name": "CLINIQUE AXIUM",
"Center_Name": "Clinique Axium",
"patients_count": 3,
"preincluded_count": 0,
"included_count": 3,
"prematurely_terminated_count": 0
},
{
"id": "af09eaa0-7e08-48e3-990c-24ca2fbc3fdc",
"name": "SCP GYNECOLOGIE RIVE GAUCHE",
"Center_Name": "SCP Gynécologie Clinique Rive Gauche",
"patients_count": 3,
"preincluded_count": 0,
"included_count": 3,
"prematurely_terminated_count": 0
},
{
"id": "0466558d-077c-4a51-9d25-2e15e00fabaf",
"name": "CENTRE HOSPITALIER DE CANNES SIMONE VEIL",
"Center_Name": "CH de Cannes Simone Veil",
"patients_count": 2,
"preincluded_count": 0,
"included_count": 2,
"prematurely_terminated_count": 0
},
{
"id": "13306b61-7ea6-4d60-b89c-b0df2d9d1605",
"name": "CENTRE HOSPITALIER VICTOR PROVO ROUBAIX",
"Center_Name": "CH Victor Provo Roubaix",
"patients_count": 2,
"preincluded_count": 0,
"included_count": 2,
"prematurely_terminated_count": 0
},
{
"id": "8c27716f-edfe-4a4e-9189-09f39cc64395",
"name": "CHI DE MONT DE MARSAN ET DU PAYS DES SOURCES",
"Center_Name": "CHI Mont de Marsan",
"patients_count": 2,
"preincluded_count": 0,
"included_count": 2,
"prematurely_terminated_count": 0
},
{
"id": "b74c365a-fc63-4763-b57d-abb609debd3b",
"name": "CTRE HOSPITALIER INTERCOMMUNAL POISSY ST GERMAIN SITE POISSY",
"Center_Name": "CHI Poissy St Germain en Laye - Site Poissy",
"patients_count": 2,
"preincluded_count": 0,
"included_count": 2,
"prematurely_terminated_count": 0
},
{
"id": "4d271322-7945-42e8-801b-a3b25fc570be",
"name": "GROUPE HOSPITALIER PARIS SAINT JOSEPH",
"Center_Name": "Groupe Hospitalier Paris Saint-Joseph",
"patients_count": 2,
"preincluded_count": 0,
"included_count": 2,
"prematurely_terminated_count": 0
},
{
"id": "aa3e8684-07e0-45d9-9cee-144df2e4b430",
"name": "CENTRE HOSPITALIER DE PAU",
"Center_Name": "CH de Pau",
"patients_count": 1,
"preincluded_count": 0,
"included_count": 1,
"prematurely_terminated_count": 0
},
{
"id": "d82d64eb-a1cf-4635-a99f-23def12c7cb5",
"name": "CHRU BREST SITE HOPITAL MORVAN",
"Center_Name": "CHRU Brest - Site Hôpital Morvan",
"patients_count": 1,
"preincluded_count": 0,
"included_count": 1,
"prematurely_terminated_count": 0
},
{
"id": "a47dc8c0-dfea-4a4c-9bcc-1370616ff9c8",
"name": "CHU DE MARTINIQUE SITE MFME",
"Center_Name": "CHU de Martinique - Site MFME",
"patients_count": 1,
"preincluded_count": 0,
"included_count": 1,
"prematurely_terminated_count": 0
},
{
"id": "384d3b28-f33e-43a6-9043-394aa88aead7",
"name": "CLINIQUE BOUCHARD",
"Center_Name": "Clinique Bouchard - Marseille",
"patients_count": 1,
"preincluded_count": 0,
"included_count": 1,
"prematurely_terminated_count": 0
},
{
"id": "0f78459f-b598-4faa-81a1-085a439e8c0e",
"name": "HOPITAUX PRIVES ROUENNAIS MATHILDE",
"Center_Name": "Hôpitaux Privés Rouennais - Mathilde",
"patients_count": 1,
"preincluded_count": 1,
"included_count": 0,
"prematurely_terminated_count": 0
},
{
"id": "2ba1f179-425e-4d88-97a7-88a097e639ab",
"name": "CENTRE HOSPITALIER DE CAYENNE",
"Center_Name": "CHU de Guyane - Site de Cayenne",
"patients_count": 0,
"preincluded_count": 0,
"included_count": 0,
"prematurely_terminated_count": 0
},
{
"id": "3e8887e1-7608-40a6-b6f5-87c6fa5a0bd0",
"name": "CENTRE HOSPITALIER DE VERSAILLES ANDRE MIGNOT",
"Center_Name": "CH de Versailles",
"patients_count": 0,
"preincluded_count": 0,
"included_count": 0,
"prematurely_terminated_count": 0
},
{
"id": "6af3784d-5d57-47c3-b924-0d13008ebd88",
"name": "CENTRE HOSPITALIER UNIVERSITAIRE DE POINTE-A-PITRE",
"Center_Name": "CHU de Guadeloupe - Pointe-à-Pitre",
"patients_count": 0,
"preincluded_count": 0,
"included_count": 0,
"prematurely_terminated_count": 0
},
{
"id": "dacc94bd-89b0-4cc4-b334-f684360abbe5",
"name": "HOPITAL PRIVE D ANTONY",
"Center_Name": "Hôpital Privé d'Antony",
"patients_count": 0,
"preincluded_count": 0,
"included_count": 0,
"prematurely_terminated_count": 0
}
]