Expedientes¶
19 endpoints para gestion de expedientes.
Todos los endpoints usan la base URL https://gateway.your-domain.com/api/v1 y requieren los headers X-API-Key y X-User-ID salvo que se indique lo contrario.
Lectura¶
Buscar expedientes¶
Busca expedientes con filtros opcionales. Soporta paginacion.
Parametros query:
| Parametro | Tipo | Default | Descripcion |
|---|---|---|---|
page |
int | 1 |
Numero de pagina |
page_size |
int | 20 |
Resultados por pagina (max 100) |
search |
string | - | Busca por case_number o reference |
status |
string | - | Filtrar por estado: active, inactive, archived |
date_filter |
string | - | Filtrar por fecha: hoy, ayer, ultimos_7_dias, ultimos_30_dias |
sector_filter |
string | - | Filtrar por UN sector: acronimo exacto (ej. HAC), DEPT#SECTOR (ej. HAC#PRIV) o UUID. Si no resuelve a un sector activo, o trae comas, responde 400 (desde el 06/10/2026, ver Cambios de la API) |
Ejemplo:
curl -X GET "https://gateway.your-domain.com/api/v1/cases/search?search=habilitacion&status=active&page=1&page_size=10" \
-H "X-API-Key: tu-api-key" \
-H "X-User-ID: 550e8400-e29b-41d4-a716-446655440000"
Respuesta 200 OK:
{
"cases": [
{
"case_id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
"case_number": "EE-2025-00001-SMG-ADGEN",
"reference": "Habilitacion comercial",
"status": "active"
}
],
"total": 1,
"page": 1,
"page_size": 10
}
Detalle de expediente¶
Devuelve la informacion completa de un expediente.
Parametros path:
| Parametro | Tipo | Descripcion |
|---|---|---|
case_id |
UUID | Identificador del expediente |
Parametros query:
| Parametro | Tipo | Default | Descripcion |
|---|---|---|---|
include_documents |
bool | false |
Incluir documentos vinculados en la respuesta |
X-User-ID es obligatorio
Este endpoint exige X-User-ID. Si se omite, la API responde 401 y no
devuelve datos: no existe ningun modo de consulta que saltee la validacion
de permisos.
Ejemplo:
curl -X GET "https://gateway.your-domain.com/api/v1/cases/a1b2c3d4-e5f6-7890-abcd-ef1234567890?include_documents=true" \
-H "X-API-Key: tu-api-key" \
-H "X-User-ID: 550e8400-e29b-41d4-a716-446655440000"
Respuesta 200 OK:
{
"case_id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
"case_number": "EE-2025-00001-SMG-ADGEN",
"reference": "Habilitacion comercial",
"status": "active",
"created_at": "2025-06-15T10:30:00Z",
"current_sector": {
"sector_id": "b2c3d4e5-f6a7-8901-bcde-f12345678901",
"name": "Administracion General",
"acronym": "ADGEN"
},
"documents": [
{
"document_id": "c3d4e5f6-a7b8-9012-cdef-123456789012",
"document_number": "IF-2025-00012-SMG-ADGEN",
"reference": "Informe tecnico",
"status": "signed"
}
]
}
Errores:
| Codigo | Descripcion |
|---|---|
404 |
Expediente no encontrado |
403 |
Sin permisos para ver el expediente |
Buscar por numero exacto¶
Busca un expediente por su numero exacto.
Parametros path:
| Parametro | Tipo | Descripcion |
|---|---|---|
case_number |
string | Numero del expediente (ej: EE-2025-00001-SMG-ADGEN) |
Ejemplo:
curl -X GET "https://gateway.your-domain.com/api/v1/cases/number/EE-2025-00001-SMG-ADGEN" \
-H "X-API-Key: tu-api-key" \
-H "X-User-ID: 550e8400-e29b-41d4-a716-446655440000"
Respuesta 200 OK: el expediente viene envuelto en case, junto con
found y total.
{
"case": {
"id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
"case_number": "EE-2025-00001-SMG-ADGEN",
"reference": "Habilitacion comercial",
"last_modified_at": "2025-06-15T10:30:00Z",
"case_type": { "name": "Habilitacion Comercial", "acronym": "HABI" },
"access_reason": "PUBLIC_SEARCH",
"admin_sector": {
"acronym": "ADGEN#PRIV",
"department": "Administracion General",
"sector_color": "#6C3483"
},
"assigned_sectors": [],
"is_reserved": false,
"status": "active",
"is_creating": false
},
"found": true,
"total": 1
}
| Campo | Que significa |
|---|---|
access_reason |
Por que este usuario puede ver el expediente: ADMINSECTOR (es de su sector), ASSIGNEDSECTOR (se lo asignaron), PUBLIC_SEARCH (lo alcanzo por el permiso de busqueda global, ver abajo), RESERVED_NUMBER_MATCH (reservado: solo se confirma que existe) |
is_reserved |
El expediente es de un tipo reservado: no se expone su contenido aunque se conozca el numero |
is_creating |
Todavia espera su caratula (ver Crear expediente) |
Errores:
| Codigo | Descripcion |
|---|---|
404 |
No existe o el usuario no tiene permiso para verlo (misma respuesta a proposito: no revela si existe) |
Visibilidad y busqueda global¶
Un usuario no ve todos los expedientes del municipio. El listado
(GET /cases/search) devuelve solo los de sus sectores: los que administra y los
que le asignaron.
La busqueda por numero exacto es la unica excepcion, y esta gobernada por dos permisos de la ficha del usuario, que se administran por usuario desde el BackOffice y vienen desactivados por defecto:
| Permiso | Habilita |
|---|---|
can_global_search_cases |
Recuperar por numero exacto un expediente de cualquier sector |
can_global_search_documents |
Lo mismo para documentos |
Con el permiso activo, GET /cases/number/{n} devuelve el expediente con
access_reason: "PUBLIC_SEARCH" aunque no pertenezca a los sectores del usuario.
Sin el permiso, responde 404.
Es un permiso de BUSQUEDA, no de listado
Aunque el usuario lo tenga activo, el listado sigue mostrando solo sus
sectores: el permiso amplia el alcance unicamente cuando se busca un
numero exacto. Por eso es normal que un expediente que GET /cases/number/
devuelve no aparezca en GET /cases/search.
Si exponés la consulta por numero al publico, filtra vos
El caso de uso tipico de un portal municipal —"consulta tu expediente
ingresando el numero"— se vuelve riesgoso si la API Key esta asociada a un
usuario con can_global_search_cases activo: cualquier vecino que pruebe
numeros correlativos veria expedientes ajenos, incluidos sus PDFs.
Para ese caso, una de dos:
- usar una API Key asociada a un usuario sin el permiso global, o
- filtrar en el portal por
access_reasony mostrar solo lo que corresponda.
Los expedientes reservados nunca se exponen por esta via: con el numero
exacto solo se confirma que existen (access_reason:
"RESERVED_NUMBER_MATCH", sin reference ni sectores), para poder
proponerles un documento.
Historial de movimientos¶
Devuelve el historial completo de movimientos (transferencias, asignaciones, etc.) de un expediente.
Parametros path:
| Parametro | Tipo | Descripcion |
|---|---|---|
case_id |
UUID | Identificador del expediente |
Ejemplo:
curl -X GET "https://gateway.your-domain.com/api/v1/cases/a1b2c3d4-e5f6-7890-abcd-ef1234567890/history" \
-H "X-API-Key: tu-api-key" \
-H "X-User-ID: 550e8400-e29b-41d4-a716-446655440000"
Respuesta 200 OK:
{
"movements": [
{
"movement_id": "d4e5f6a7-b8c9-0123-defa-234567890123",
"movement_type": "transfer",
"from_sector": "Administracion General",
"to_sector": "Obras Publicas",
"reason": "Requiere evaluacion tecnica",
"created_by": "Juan Perez",
"created_at": "2025-06-20T14:15:00Z"
},
{
"movement_id": "e5f6a7b8-c9d0-1234-efab-345678901234",
"movement_type": "creation",
"from_sector": null,
"to_sector": "Administracion General",
"reason": "Creacion del expediente",
"created_by": "Maria Garcia",
"created_at": "2025-06-15T10:30:00Z"
}
]
}
Errores:
| Codigo | Descripcion |
|---|---|
404 |
Expediente no encontrado |
Documentos del expediente¶
Devuelve todos los documentos vinculados a un expediente.
Parametros path:
| Parametro | Tipo | Descripcion |
|---|---|---|
case_id |
UUID | Identificador del expediente |
X-User-ID es obligatorio
Este endpoint exige X-User-ID. Si se omite, la API responde 401 y no
devuelve datos: los documentos siempre se filtran por los permisos de
visibilidad del usuario.
Ejemplo:
curl -X GET "https://gateway.your-domain.com/api/v1/cases/a1b2c3d4-e5f6-7890-abcd-ef1234567890/documents" \
-H "X-API-Key: tu-api-key" \
-H "X-User-ID: 550e8400-e29b-41d4-a716-446655440000"
Respuesta 200 OK:
{
"documents": [
{
"document_id": "c3d4e5f6-a7b8-9012-cdef-123456789012",
"document_number": "IF-2025-00012-SMG-ADGEN",
"document_type": "INF",
"reference": "Informe tecnico sobre habilitacion",
"status": "signed",
"created_at": "2025-06-16T09:00:00Z"
},
{
"document_id": "f6a7b8c9-d0e1-2345-fgab-456789012345",
"document_number": null,
"document_type": "DICT",
"reference": "Dictamen legal",
"status": "draft",
"created_at": "2025-06-18T11:30:00Z"
}
]
}
Errores:
| Codigo | Descripcion |
|---|---|
404 |
Expediente no encontrado |
Permisos del usuario¶
Devuelve los permisos que el usuario actual tiene sobre el expediente.
Parametros path:
| Parametro | Tipo | Descripcion |
|---|---|---|
case_id |
UUID | Identificador del expediente |
Ejemplo:
curl -X GET "https://gateway.your-domain.com/api/v1/cases/a1b2c3d4-e5f6-7890-abcd-ef1234567890/permissions" \
-H "X-API-Key: tu-api-key" \
-H "X-User-ID: 550e8400-e29b-41d4-a716-446655440000"
Respuesta 200 OK:
{
"can_view": true,
"can_transfer": true,
"can_assign": true,
"can_archive": true,
"can_link_documents": true,
"can_create_movements": true,
"can_subsanar": true,
"ownership_level": "owner",
"is_creating": false
}
| Campo | Que habilita |
|---|---|
can_view |
Ver el expediente. Es el unico que sigue en true mientras el expediente se esta creando |
can_transfer |
POST /cases/{id}/transfer |
can_assign |
Asignar el expediente a un sector o usuario |
can_archive |
Archivar el expediente |
can_link_documents |
POST /cases/{id}/documents/link y .../propose |
can_create_movements |
Generar movimientos (pases) |
can_subsanar |
Subsanar un documento del expediente |
ownership_level |
owner, participant o creator: de donde sale el acceso |
is_creating |
true mientras el expediente espera su caratula (ver mas abajo) |
Errores:
| Codigo | Descripcion |
|---|---|
404 |
Expediente no encontrado |
Los seis permisos de escritura se apagan mientras el expediente se crea
Si is_creating es true, los seis can_* de escritura vienen en false
y can_view sigue en true: el expediente se puede mostrar, lo que no
se puede todavia es operarlo.
Eso no es falta de permisos del usuario — es transitorio y dura lo que
tarde la caratula (GDI-436/GDI-470). Para saber cuando termino, reconsultar
este mismo endpoint hasta que is_creating sea false: la señal esta en la
misma respuesta, no hace falta pollear otra cosa.
Preparar asignacion¶
Devuelve la lista de sectores y usuarios disponibles para asignar el expediente. Usar antes de llamar al endpoint de asignacion.
Parametros path:
| Parametro | Tipo | Descripcion |
|---|---|---|
case_id |
UUID | Identificador del expediente |
Ejemplo:
curl -X GET "https://gateway.your-domain.com/api/v1/cases/a1b2c3d4-e5f6-7890-abcd-ef1234567890/prepare-assignment" \
-H "X-API-Key: tu-api-key" \
-H "X-User-ID: 550e8400-e29b-41d4-a716-446655440000"
Respuesta 200 OK:
{
"available_sectors": [
{
"sector_id": "b2c3d4e5-f6a7-8901-bcde-f12345678901",
"name": "Administracion General",
"acronym": "ADGEN",
"users": [
{
"user_id": "550e8400-e29b-41d4-a716-446655440000",
"full_name": "Juan Perez",
"email": "juan.perez@municipio.gob.ar"
}
]
}
]
}
Errores:
| Codigo | Descripcion |
|---|---|
404 |
Expediente no encontrado |
403 |
Sin permisos para asignar este expediente |
Preparar transferencia¶
Devuelve los sectores disponibles para transferir el expediente. Usar antes de llamar al endpoint de transferencia.
Parametros path:
| Parametro | Tipo | Descripcion |
|---|---|---|
case_id |
UUID | Identificador del expediente |
Ejemplo:
curl -X GET "https://gateway.your-domain.com/api/v1/cases/a1b2c3d4-e5f6-7890-abcd-ef1234567890/prepare-transfer" \
-H "X-API-Key: tu-api-key" \
-H "X-User-ID: 550e8400-e29b-41d4-a716-446655440000"
Respuesta 200 OK:
{
"available_sectors": [
{
"sector_id": "c3d4e5f6-a7b8-9012-cdef-123456789012",
"name": "Obras Publicas",
"acronym": "OBPUB"
},
{
"sector_id": "d4e5f6a7-b8c9-0123-defa-234567890123",
"name": "Hacienda",
"acronym": "HAC"
}
]
}
Errores:
| Codigo | Descripcion |
|---|---|
404 |
Expediente no encontrado |
403 |
Sin permisos para transferir este expediente |
Usuarios de un sector¶
Devuelve la lista de usuarios que pertenecen a un sector determinado.
Parametros path:
| Parametro | Tipo | Descripcion |
|---|---|---|
sector_id |
UUID | Identificador del sector |
Ejemplo:
curl -X GET "https://gateway.your-domain.com/api/v1/cases/sectors/b2c3d4e5-f6a7-8901-bcde-f12345678901/users" \
-H "X-API-Key: tu-api-key" \
-H "X-User-ID: 550e8400-e29b-41d4-a716-446655440000"
Respuesta 200 OK:
{
"users": [
{
"user_id": "550e8400-e29b-41d4-a716-446655440000",
"full_name": "Juan Perez",
"email": "juan.perez@municipio.gob.ar",
"role": "director"
},
{
"user_id": "660f9511-f3ac-52e5-b827-557766551111",
"full_name": "Ana Lopez",
"email": "ana.lopez@municipio.gob.ar",
"role": "empleado"
}
]
}
Errores:
| Codigo | Descripcion |
|---|---|
404 |
Sector no encontrado |
Operaciones¶
Crear expediente¶
Crea un nuevo expediente a partir de una plantilla.
Body (JSON):
| Campo | Tipo | Requerido | Descripcion |
|---|---|---|---|
case_template_id |
UUID | Si | ID de la plantilla de expediente |
reference |
string | Si | Descripcion o referencia del expediente |
owner_sector_id |
UUID | No | Sector propietario (por defecto, el sector del usuario) |
Ejemplo:
curl -X POST "https://gateway.your-domain.com/api/v1/cases/" \
-H "X-API-Key: tu-api-key" \
-H "X-User-ID: 550e8400-e29b-41d4-a716-446655440000" \
-H "Content-Type: application/json" \
-d '{
"case_template_id": "f1e2d3c4-b5a6-7890-fedc-ba0987654321",
"reference": "Habilitacion comercial - Panaderia San Martin"
}'
Respuesta 201 Created:
{
"success": true,
"case_id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
"case_number": "EE-2025-00042-SMG-ADGEN",
"status": "creating",
"cover": {
"status": "queued",
"session_id": "9d3b50dc-8959-41df-bb71-bc0b8bd457e4",
"poll_url": "/signing/async-poll/9d3b50dc-8959-41df-bb71-bc0b8bd457e4"
},
"message": "Expediente creado exitosamente"
}
Errores:
| Codigo | Descripcion |
|---|---|
400 |
Datos invalidos o campos requeridos faltantes |
404 |
Plantilla no encontrada |
El expediente nace creating: su numero ya es definitivo, su caratula todavia no
El case_number se reserva dentro del request y no cambia nunca. El
PDF de la caratula (CAEX) lo genera un worker unos segundos despues
(GDI-436), y recien cuando sale, el expediente pasa a active.
Mientras status sea "creating", sobre ESE expediente:
POST /cases/{id}/documents/linkyPOST /cases/{id}/documents/proposeresponden409("El expediente todavía se está creando...").GET /cases/{id}/permissionsdevuelve los seiscan_*de escritura enfalseconis_creating: true, perocan_viewsigue entrue: el expediente se puede mostrar, lo que no se puede es operarlo. No es falta de permisos del usuario -- es transitorio (GDI-470).
Como saber cuando termino (cualquiera de las dos, la primera es la mas simple):
- Reconsultar
GET /cases/{id}oGET /cases/{id}/permissionshasta queis_creatingseafalse. No hace falta pollear nada aparte. - Pollear el
poll_urldelcoverhastasigned-- mismos estados que la firma asincronica (queued | processing | signed | failed | expired).
poll_url viene sin el prefijo del Gateway
El valor que devuelve es /signing/async-poll/{session_id}, sin
/api/v1. Concatenado tal cual al host del Gateway da 404: hay que
pedirlo como {host}/api/v1/signing/async-poll/{session_id}.
Con el kill-switch
CASE_COVER_ASYNC_ENABLED=false, status llega en "active" y
session_id/poll_url en null: no hay nada que esperar.
Si la caratula falla, el expediente no se pierde ni cambia de numero: queda esperandola y la cola reintenta.
Obtener plantillas
Para listar las plantillas disponibles, usar GET /api/v1/system/case-templates antes de crear un expediente.
Transferir expediente¶
Transfiere un expediente a otro sector.
Parametros path:
| Parametro | Tipo | Descripcion |
|---|---|---|
case_id |
UUID | Identificador del expediente |
Body (JSON):
| Campo | Tipo | Requerido | Descripcion |
|---|---|---|---|
target_sector_id |
UUID | Si | Sector destino |
reason |
string | Si | Motivo de la transferencia |
assigned_user_id |
UUID | No | Usuario especifico en el sector destino |
create_official_doc |
bool | No | Crear documento oficial de transferencia (default false) |
Ejemplo:
curl -X POST "https://gateway.your-domain.com/api/v1/cases/a1b2c3d4-e5f6-7890-abcd-ef1234567890/transfer" \
-H "X-API-Key: tu-api-key" \
-H "X-User-ID: 550e8400-e29b-41d4-a716-446655440000" \
-H "Content-Type: application/json" \
-d '{
"target_sector_id": "c3d4e5f6-a7b8-9012-cdef-123456789012",
"reason": "Requiere evaluacion tecnica del area de Obras Publicas"
}'
Respuesta 200 OK:
{
"message": "Case transferred successfully",
"movement_id": "d4e5f6a7-b8c9-0123-defa-234567890123",
"from_sector": "Administracion General",
"to_sector": "Obras Publicas"
}
Errores:
| Codigo | Descripcion |
|---|---|
403 |
Sin permisos para transferir |
404 |
Expediente o sector destino no encontrado |
400 |
Sector destino invalido o expediente no transferible |
409 |
El expediente todavia se esta creando (falta su caratula): transitorio, reintentar en unos segundos (GDI-436) |
422 |
El expediente no esta activo por otro motivo (p. ej. archivado): esto NO se resuelve esperando |
Preparar antes de transferir
Usar GET /api/v1/cases/{case_id}/prepare-transfer para obtener la lista de sectores disponibles antes de ejecutar la transferencia.
Asignar expediente¶
Asigna un expediente a un usuario en un sector especifico.
Parametros path:
| Parametro | Tipo | Descripcion |
|---|---|---|
case_id |
UUID | Identificador del expediente |
Body (JSON):
| Campo | Tipo | Requerido | Descripcion |
|---|---|---|---|
target_sector_id |
UUID | Si | Sector destino |
reason |
string | Si | Motivo de la asignacion (5-500 caracteres) |
assigned_user_id |
UUID | No | Usuario especifico al que se asigna |
create_official_doc |
bool | No | Crear documento oficial de asignacion |
Ejemplo:
curl -X POST "https://gateway.your-domain.com/api/v1/cases/a1b2c3d4-e5f6-7890-abcd-ef1234567890/assign" \
-H "X-API-Key: tu-api-key" \
-H "X-User-ID: 550e8400-e29b-41d4-a716-446655440000" \
-H "Content-Type: application/json" \
-d '{
"target_sector_id": "b2c3d4e5-f6a7-8901-bcde-f12345678901",
"reason": "Asignado para revision de documentacion adjunta",
"assigned_user_id": "660f9511-f3ac-52e5-b827-557766551111"
}'
Respuesta 200 OK:
{
"message": "Case assigned successfully",
"movement_id": "e5f6a7b8-c9d0-1234-efab-345678901234",
"assigned_to": "Ana Lopez",
"sector": "Administracion General"
}
Errores:
| Codigo | Descripcion |
|---|---|
400 |
Motivo demasiado corto (minimo 5 caracteres) o demasiado largo (maximo 500) |
403 |
Sin permisos para asignar |
404 |
Expediente, sector o usuario no encontrado |
Cerrar asignacion¶
Cierra una asignacion activa sobre un expediente.
Parametros path:
| Parametro | Tipo | Descripcion |
|---|---|---|
case_id |
UUID | Identificador del expediente |
Body (JSON):
| Campo | Tipo | Requerido | Descripcion |
|---|---|---|---|
movement_id |
UUID | Si | ID del movimiento de asignacion a cerrar |
reason |
string | Si | Motivo del cierre (5-500 caracteres) |
Ejemplo:
curl -X POST "https://gateway.your-domain.com/api/v1/cases/a1b2c3d4-e5f6-7890-abcd-ef1234567890/close-assign" \
-H "X-API-Key: tu-api-key" \
-H "X-User-ID: 550e8400-e29b-41d4-a716-446655440000" \
-H "Content-Type: application/json" \
-d '{
"movement_id": "e5f6a7b8-c9d0-1234-efab-345678901234",
"reason": "Revision completada, documentacion conforme"
}'
Respuesta 200 OK:
{
"message": "Assignment closed successfully",
"movement_id": "e5f6a7b8-c9d0-1234-efab-345678901234"
}
Errores:
| Codigo | Descripcion |
|---|---|
400 |
Motivo invalido o movimiento no es una asignacion activa |
403 |
Sin permisos para cerrar la asignacion |
404 |
Expediente o movimiento no encontrado |
Responsables¶
Listar responsables¶
Lista los responsables activos de un expediente.
Respuesta 200 OK: Lista de responsables con user_id, type (ADMIN o ADDITIONAL), sector_id, added_at.
Errores:
| Codigo | Descripcion |
|---|---|
403 |
Sin permisos para ver este expediente |
404 |
Expediente no encontrado |
Agregar responsable¶
Agrega un responsable al expediente.
Body (JSON):
| Campo | Tipo | Requerido | Descripcion |
|---|---|---|---|
user_id |
UUID | Si | Usuario a agregar |
type |
string | Si | ADMIN o ADDITIONAL |
sector_id |
UUID | Si | Sector del usuario |
reason |
string | No | Motivo (default: "Asignacion de responsable") |
Errores:
| Codigo | Descripcion |
|---|---|
400 |
Datos invalidos |
403 |
Sin permisos para modificar este expediente |
404 |
Expediente no encontrado |
Quitar responsable¶
Quita un responsable del expediente (soft delete).
Parametros path:
| Parametro | Tipo | Descripcion |
|---|---|---|
case_id |
UUID | Identificador del expediente |
responsible_id |
UUID | ID del registro en case_responsibles |
Parametros query (opcional):
| Parametro | Tipo | Descripcion |
|---|---|---|
reason |
string | Motivo de remocion |
Errores:
| Codigo | Descripcion |
|---|---|
403 |
Sin permisos para modificar este expediente |
404 |
Responsable o expediente no encontrado |
Subsanacion¶
Subsanar documento oficial¶
Subsana un documento oficial erroneo en el expediente. Desactiva el documento erroneo y vincula el documento que justifica la subsanacion. Solo usuarios ADMIN del expediente pueden ejecutarlo.
Body (JSON):
| Campo | Tipo | Requerido | Descripcion |
|---|---|---|---|
official_document_id_erroneo |
UUID | Si | Documento a desactivar |
official_document_id_justifica |
UUID | Si | Documento correcto que justifica |
Errores:
| Codigo | Descripcion |
|---|---|
400 |
Los dos IDs son identicos, o campos faltantes |
403 |
El usuario no tiene rol ADMIN sobre el expediente |
404 |
Expediente o documento no encontrado |
Movimientos¶
Movimientos del expediente¶
Lista plana de movimientos de un expediente. A diferencia de /history, no incluye analisis IA ni resumen narrativo.
Respuesta 200 OK:
{
"success": true,
"data": {
"movements": [...],
"total": 5
},
"message": "Movimientos obtenidos exitosamente"
}
Errores:
| Codigo | Descripcion |
|---|---|
401 |
Usuario invalido o inactivo en el schema |
404 |
Expediente no encontrado o sin permisos |