> ## Documentation Index
> Fetch the complete documentation index at: https://docs.fhiron.cl/llms.txt
> Use this file to discover all available pages before exploring further.

# Sandbox

> Servidor FHIR® R4 dedicado con pacientes chilenos sintéticos para integrar y probar sin tocar datos reales.

Sandbox provisiona una **instancia FHIR R4 dedicada** con datos sintéticos chilenos: Encounters con `class` v3-ActCode, MedicationRequests con códigos TFC/ATC, Conditions CIE-10, Observations LOINC, identificadores nacionales bajo el NamingSystem oficial, comunas DEIS. Cada tenant tiene su propia partición aislada; ningún otro cliente ve tus datos. El reset borra todo en segundos cuando terminas una prueba.

## Cuándo usarlo

* Integrar un cliente FHIR sin contaminar datos reales ni esperar a que el EHR de producción esté disponible.
* Probar workflows que escriben recursos: `POST`, `PUT`, `DELETE` sin riesgo.
* Generar fixtures de tests automatizados que necesiten un servidor FHIR real respondiendo.

## Flujo

```mermaid theme={null}
sequenceDiagram
    autonumber
    participant Dev as App en desarrollo
    participant Dashboard
    participant Sandbox as Sandbox FHIR R4

    Dev->>Dashboard: Provisionar instancia
    Dashboard->>Sandbox: Crear partition aislada<br/>+ pacientes chilenos sintéticos
    activate Sandbox
    Sandbox-->>Dashboard: URL + API key
    Dashboard-->>Dev: Credenciales

    Note over Dev,Sandbox: La app cliente integra contra el Sandbox<br/>como contra cualquier servidor FHIR R4

    Dev->>Sandbox: GET /MedicationRequest?subject=Patient/123
    Sandbox-->>Dev: Bundle (intent=order, TFC + ATC)

    Dev->>Sandbox: POST /Encounter<br/>(class AMB, status finished)
    Sandbox-->>Dev: 201 Created

    Dev->>Sandbox: GET /Encounter/{id}
    Sandbox-->>Dev: Encounter persistido con establecimiento DEIS

    Note over Dev,Sandbox: Cuando termina la prueba
    Dev->>Sandbox: Reset
    Sandbox-->>Dev: Instancia limpia
    deactivate Sandbox
```

## Dataset

La instancia se provisiona con:

* **Encounters** con `class` v3-ActCode (AMB · IMP · EMER · HH), `status` del ValueSet `encounter-status`, `period` ISO-8601 y `serviceProvider` apuntando a un establecimiento DEIS.
* **MedicationRequests** con `intent`, `category`, código TFC + cross-reference ATC, ruta y frecuencia bien formadas.
* **Conditions** con códigos CIE-10 y `clinicalStatus` / `verificationStatus` del binding required.
* **Observations** con LOINC, unidades UCUM y `effectiveDateTime` con zona horaria.
* **Coverages** apuntando a payor sintéticos (`Organization`) con tipo de cobertura mapeado a TFC.
* **Patients y Practitioners** con identificadores bajo el NamingSystem oficial del Registro Civil y `address.city` del decreto 817 (DEIS).
* **Perfiles CL Core** aplicados (`CorePacienteCl`, `CorePrestadorCl`, `EncounterCL`, etc.) cuando corresponde.

El dataset se puede recargar (`fill-pool`) o regenerar desde cero con `reset`.

## Aislamiento

Cada tenant recibe una partition única. La URL y la API key son específicas a esa partition. No hay contaminación cruzada entre tenants: los recursos de otro cliente no son visibles ni accesibles aunque conozcas su URL.

## Acceso

Sandbox se provisiona desde el dashboard:

[**fhiron.cl/dashboard/sandbox**](https://fhiron.cl/dashboard/sandbox)

El estado de la instancia (`provisioning_status`), el contador de pacientes y la fecha del último reset están visibles en el panel.

## Operaciones

| Operación | Qué hace                                                                             |
| --------- | ------------------------------------------------------------------------------------ |
| Provision | Crea la partition + semillas iniciales. Una vez por tenant.                          |
| Fill pool | Agrega más pacientes sintéticos sin borrar los existentes.                           |
| Reset     | Borra todos los recursos y regenera el dataset desde cero. En segundos.              |
| Status    | Devuelve URL, API key, contador de pacientes, fechas de provisioning y último reset. |
