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__
for attempt in range(ERROR_MAX_RETRY):
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}")
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)
logging.critical(f"Persistent error in {func_name} after {ERROR_MAX_RETRY} attempts.")
raise httpx.RequestError(message=f"Persistent error in {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 {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]")
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)
all_blocked_versions = get_nested_value(record_data, path=["record", "protocol_inclusions", 0, "blockedQcmVersions"],
default=[])
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
request_data = request_future.result()
# --- 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,19 +46,37 @@ _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()
if thread_id not in httpx_clients:
# Create client with keep-alive headers and connection pooling
httpx_clients[thread_id] = httpx.Client(
headers={"Connection": "keep-alive"},
limits=httpx.Limits(max_keepalive_connections=20, max_connections=100)
)
return httpx_clients[thread_id]
with _clients_lock:
if thread_id not in httpx_clients:
# Create client with keep-alive disabled
httpx_clients[thread_id] = httpx.Client(
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():

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
}
]