# Proveedores de prueba configurables Servicio Java 21 independiente, sin dependencias Maven ni base de datos. Responde por HTTP y permite cambiar desde Postman cuerpo, código HTTP y demora sin reiniciar. Solo datos sintéticos. No consulta ningún proveedor real. ## Levantar en server02 Desde la raíz del repositorio, agregar a `.env`: ```dotenv MOCK_ADMIN_TOKEN=elige-un-token-para-administrar-el-mock MOCK_BIND_ADDRESS=0.0.0.0 MOCK_PORT=8788 ``` El token es exclusivo del mock, no es un JWT de Keycloak. La publicación del puerto en 0.0.0.0 permite acceso desde Postman en tu red de demo. ```bash docker compose -f compose.yaml -f compose.mock.yaml up -d --build providers-mock docker compose -f compose.yaml -f compose.mock.yaml ps ``` Esperar estado **healthy**. Esta POC usa HTTP: no requiere certificados ni cambios en la validación SSL de Postman. Importar [Providers-Mock.postman_collection.json](Providers-Mock.postman_collection.json). Configurar `mockAdminToken` con el mismo valor de `.env`. La variable `mockUrl` ya apunta a `http://server02:8788`. Ejecutar las peticiones individualmente: cada configuración reemplaza a la anterior, no son escenarios en secuencia. ## Configurar manualmente Ejemplo: cliente inexistente. ```http PUT http://server02:8788/__admin/clientes_consulta Authorization: Bearer TU_TOKEN_DEL_MOCK X-Mock-Status: 200 X-Mock-Delay-Ms: 0 Content-Type: application/json {"found": false} ``` Después, `POST /clientes_consulta` devolverá ese JSON. Los valores iniciales son: | Proveedor | Ruta | Respuesta inicial | |---|---|---| | CLIENTES_CONSULTA | /clientes_consulta | 200, found=true, customerId sintético | | BURO_CONSULTA | /buro_consulta | 200, score=71, consultationId sintético | | DOCUMENTO_VALIDA | /documento_valida | 200, status=VALID, reasonCodes=[] | | DOCUMENTS_METADATA | /documents_metadata | 404 hasta configurar los metadatos | Para cada ruta, `PUT /__admin/` configura y `GET /__admin/` consulta. GET administrativo devuelve 200 y el cuerpo configurado; sus cabeceras `X-Mock-Status`, `X-Mock-Delay-Ms` y `X-Mock-Calls` muestran el código del proveedor, la demora y el contador de llamadas. Las consultas administrativas no incrementan el contador ni sufren la demora. Los endpoints de proveedor son POST sin JWT. - Para fallo técnico: X-Mock-Status=503 y un cuerpo de error sintético. - Para timeout: X-Mock-Delay-Ms=7000; las rutas de demo tienen timeout de 5000 ms. - Para restaurar: volver a enviar PUT con status=200 y delay=0. - Para scoring: editar el número score (71, 70, 61 o 60). - Para documento inválido: `{"status":"INVALID","reasonCodes":["EXPIRED"]}`. - También acepta texto/JSON incorrecto deliberadamente para comprobar el rechazo por contrato del orquestador. No aplica validación de negocio al cuerpo ficticio. Los PUT devuelven `{"saved":true}` con HTTP 200, aunque el proveedor se haya configurado con 503. Status admite 200..599 excepto 204/205/304; demora 0..60000 ms; cuerpos de hasta 256 KiB. Omisión de cabeceras restablece status=200 y delay=0. ## Conectar el orquestador El archivo base `compose.yaml` conserva un solo servicio. La combinación con `compose.mock.yaml` añade el mock a `microsipNet` y selecciona catálogo/rutas sin sobrescribir `config/`. Activa el perfil `demo-mock` junto al perfil configurado (por defecto postgres96). Ese perfil permite HTTP únicamente hacia el nombre `providers-mock` y puerto 8788. Sin ese perfil se mantiene el requisito HTTPS normal; local/test conserva su excepción previa para loopback. Antes de habilitar la demo, configurar en `.env` REQUEST_API_ENABLED=true, WORKER_ENABLED=true y, para administrar flujos, FLOW_ADMIN_ENABLED=true y ADMIN_BUSINESS_SCOPES. Se requieren el usuario DB de runtime restringido y las credenciales separadas de migración descritos en [SECURITY.md](../../specs/SECURITY.md). Los JWT siguen procediendo de tu Keycloak. Este servicio no genera tokens JWT ni crea tipos, flujos, solicitudes o documentos automáticamente. Aplicar en el entorno de demo: ```bash docker compose -f compose.yaml -f compose.mock.yaml up -d --build ``` El orquestador espera a que el mock esté healthy. No se cambian JAVA_TOOL_OPTIONS ni truststores. Si ya habías levantado la versión HTTPS, reconstruir y recrear ambos servicios con el comando anterior y reimportar la colección Postman. Los antiguos volúmenes de certificados quedan sin uso; mock-data conserva las respuestas. No se borran volúmenes automáticamente. Para COMPRA: configurar cliente encontrado, crear/activar el flujo de compra, crear solicitud, enviar ASIGNAR_CLIENTE, consultar ejecución hasta SUCCEEDED, refrescar revisión y enviar CONFIRMAR_COMPRA. Para probar cliente no encontrado, usar otra solicitud o la que sigue CREADA, con una clave de evento nueva. Repetir la misma clave reproduce la aceptación anterior, no fuerza otra consulta. ## Metadatos documentales y límites La colección incluye un PUT de metadatos: completar documentId, requestId, businessScope y documentType con los de la solicitud. Los campos de propiedad, MIME, tamaño, checksum y scanStatus=CLEAN son respuestas sintéticas, no un análisis real de archivos. No hay carga ni almacenamiento de documentos personales. La respuesta es global por endpoint: no se selecciona por cliente, documento, perfil ni clave idempotente. Todos los perfiles DOCUMENTO_VALIDA comparten la respuesta. Para probar varios documentos, configurar el correspondiente antes de cada evento y esperar a que termine antes de cambiarlo. Una llamada en curso conserva la respuesta que leyó al comenzar; las siguientes usan la configuración nueva. Esto incluye reintentos automáticos del worker. Las respuestas sobreviven a reinicios en el volumen mock-data; los contadores se reinician. El token administrativo se conserva, pero esta POC usa HTTP sin cifrado dentro de la red de pruebas. No se registran cuerpos ni tokens. No se simulan efectos externos de escritura ni deduplicación de un proveedor: las integraciones de esta demo son READ_ONLY. ## Validación local sin Docker Con Python 3 y JAVA_HOME apuntando a JDK 21: ```bash python demo/providers-mock/test_mock.py ``` Compila el servidor y prueba HTTP real, autorización administrativa, cliente encontrado/no encontrado, status/demora, persistencia tras reinicio, scoring, documentos y respuestas malformadas. No usa PostgreSQL ni proveedores externos. No equivale a ejecutar el Compose ni cerrar T16.