Saltar a contenido

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

GET /api/v1/cases/search

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

GET /api/v1/cases/{case_id}

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

GET /api/v1/cases/number/{case_number}

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_reason y 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

GET /api/v1/cases/{case_id}/history

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

GET /api/v1/cases/{case_id}/documents

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

GET /api/v1/cases/{case_id}/permissions

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

GET /api/v1/cases/{case_id}/prepare-assignment

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

GET /api/v1/cases/{case_id}/prepare-transfer

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

GET /api/v1/cases/sectors/{sector_id}/users

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

POST /api/v1/cases/

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/link y POST /cases/{id}/documents/propose responden 409 ("El expediente todavía se está creando...").
  • GET /cases/{id}/permissions devuelve los seis can_* de escritura en false con is_creating: true, pero can_view sigue en true: 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):

  1. Reconsultar GET /cases/{id} o GET /cases/{id}/permissions hasta que is_creating sea false. No hace falta pollear nada aparte.
  2. Pollear el poll_url del cover hasta signed -- 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

POST /api/v1/cases/{case_id}/transfer

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

POST /api/v1/cases/{case_id}/assign

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

POST /api/v1/cases/{case_id}/close-assign

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

GET /api/v1/cases/{case_id}/responsibles

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

POST /api/v1/cases/{case_id}/responsibles

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

DELETE /api/v1/cases/{case_id}/responsibles/{responsible_id}

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

POST /api/v1/cases/{case_id}/subsanar

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

GET /api/v1/cases/{case_id}/movements

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