{"openapi":"3.0.0","paths":{"/api/v1/health":{"get":{"operationId":"SystemController_getHealth[0]_v1","parameters":[],"responses":{"200":{"description":"API operativa."}},"summary":"Verificar estado de la API","tags":["System"]}},"/api/health":{"get":{"operationId":"SystemController_getHealth[1]","parameters":[],"responses":{"200":{"description":"API operativa."}},"summary":"Verificar estado de la API","tags":["System"]}},"/api/v1/version":{"get":{"operationId":"SystemController_getVersion_v1","parameters":[],"responses":{"200":{"description":"Metadatos básicos de la build actual."}},"summary":"Obtener versión y metadatos de build","tags":["System"]}},"/api/v1/results/access":{"post":{"operationId":"PatientAccessController_requestAccess_v1","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RequestPatientAccessDto"}}}},"responses":{"201":{"description":""}},"tags":["PatientAccess"]},"get":{"operationId":"PatientAccessController_verifyAndGetResults_v1","parameters":[{"name":"token","required":true,"in":"query","schema":{"type":"string"}},{"name":"code","required":true,"in":"query","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"tags":["PatientAccess"]}},"/api/v1/auth/login":{"post":{"operationId":"AuthController_login_v1","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AuthLoginDto"}}}},"responses":{"200":{"description":"JWT emitido por la API.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AuthLoginResponseDto"}}}},"401":{"description":"Credenciales inválidas u organización no activa."}},"summary":"Iniciar sesión (Firebase email/password + organización ACTIVE)","tags":["Auth"]}},"/api/v1/auth/apto/exchange":{"post":{"operationId":"AuthController_aptoExchange_v1","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AuthAptoExchangeDto"}}}},"responses":{"200":{"description":"Portal JWT issued for the organization returned by Apto.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AuthLoginResponseDto"}}}},"401":{"description":"Apto code or organization response is invalid, or the organization is not active."}},"summary":"Exchange an Apto login code for a portal JWT","tags":["Auth"]}},"/api/v1/auth/forgot-password":{"post":{"operationId":"AuthController_forgotPassword_v1","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AuthForgotPasswordDto"}}}},"responses":{"200":{"description":"Solicitud aceptada. Si el email corresponde a una organización activa, se enviará un correo de recuperación mediante el servicio de email configurado."},"400":{"description":"Email inválido."}},"summary":"Enviar email de recuperación de contraseña","tags":["Auth"]}},"/api/v1/auth/reset-password/verify":{"post":{"operationId":"AuthController_verifyResetPassword_v1","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AuthResetPasswordVerifyDto"}}}},"responses":{"200":{"description":"Código válido.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AuthResetPasswordVerifyResponseDto"}}}},"400":{"description":"Código inválido o expirado."}},"summary":"Validar código de recuperación de contraseña de Firebase Auth","tags":["Auth"]}},"/api/v1/auth/reset-password":{"post":{"operationId":"AuthController_resetPassword_v1","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AuthResetPasswordDto"}}}},"responses":{"200":{"description":"Contraseña actualizada."},"400":{"description":"Código inválido, expirado o contraseña débil."}},"summary":"Confirmar nueva contraseña con código de recuperación de Firebase Auth","tags":["Auth"]}},"/api/v1/auth/sso/exchange":{"post":{"operationId":"AuthController_ssoExchange_v1","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AuthSsoExchangeDto"}}}},"responses":{"200":{"description":"Portal JWT issued for the organization associated with the SSO token.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AuthLoginResponseDto"}}}},"401":{"description":"SSO token is invalid, expired, or the organization is not active."}},"summary":"Exchange an Apto SSO token for a portal JWT","tags":["Auth"]}},"/api/v1/auth/refresh":{"post":{"operationId":"AuthController_refresh_v1","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AuthRefreshDto"}}}},"responses":{"200":{"description":"New access token and rotated refresh token.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AuthLoginResponseDto"}}}},"401":{"description":"Refresh token is invalid, expired, already used, or the organization is not active."}},"summary":"Exchange a refresh token for a new access token (rotates the refresh token)","tags":["Auth"]}},"/api/v1/auth/register/organization":{"post":{"operationId":"AuthController_registerOrganization_v1","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AuthRegisterOrganizationDto"}}}},"responses":{"201":{"description":"Organización persistida en estado pendiente.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RegisterOrganizationResponseDto"}}}},"400":{"description":"Validación fallida, email o CUIT duplicado, o email del owner ya registrado en Firebase."}},"summary":"Registrar organización (estado inicial PENDING)","tags":["Auth"]}},"/api/v1/organizations":{"get":{"operationId":"OrganizationsController_list_v1","parameters":[{"name":"search","required":false,"in":"query","description":"Búsqueda parcial por nombre o CUIT.","schema":{"type":"string"}},{"name":"status","required":false,"in":"query","description":"Filtrar por estado.","schema":{"type":"string","enum":["PENDING","ACTIVE","SUSPENDED","REJECTED"]}},{"name":"type","required":false,"in":"query","description":"Filtrar por tipo de organización.","schema":{"type":"string","enum":["HOSPITAL","CLINIC","LAB","PLATFORM","OTHER"]}},{"name":"page","required":false,"in":"query","description":"Número de página.","schema":{"minimum":1,"default":1,"type":"number"}},{"name":"limit","required":false,"in":"query","description":"Cantidad de resultados por página.","schema":{"minimum":1,"maximum":100,"default":10,"type":"number"}}],"responses":{"200":{"description":"Listado paginado de organizaciones con conteos agregados.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaginatedOrganizationsResultDto"}}}}},"summary":"Listar organizaciones con filtros y paginación","tags":["Organizaciones"]}},"/api/v1/organizations/provision-laboratory":{"post":{"operationId":"OrganizationsController_provisionLaboratory_v1","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProvisionLaboratoryOrganizationDto"}}}},"responses":{"201":{"description":"Organización provisionada y ApiKey de producción generada con los scopes de laboratorio."},"409":{"description":"taxId/email apuntan a organizaciones distintas."}},"summary":"Provisionar (o reutilizar) la organización LAB de un centro de salud de Apto y emitir su primera ApiKey","tags":["Organizaciones"]}},"/api/v1/organizations/audit":{"get":{"operationId":"OrganizationsController_listAuditLogs_v1","parameters":[{"name":"page","required":false,"in":"query","description":"Número de página.","schema":{"minimum":1,"default":1,"type":"number"}},{"name":"limit","required":false,"in":"query","description":"Cantidad de resultados por página.","schema":{"minimum":1,"maximum":100,"default":25,"type":"number"}},{"name":"organizationId","required":false,"in":"query","description":"Filtrar por organización.","schema":{"minimum":1,"type":"number"}},{"name":"action","required":false,"in":"query","description":"Filtrar por acción.","schema":{"type":"string"}}],"responses":{"200":{"description":"Paginated list of audit log entries."}},"summary":"Global audit log viewer (backoffice)","tags":["Organizaciones"]}},"/api/v1/organizations/dnsisa":{"get":{"operationId":"OrganizationsController_listDnsisaQueue_v1","parameters":[{"name":"page","required":false,"in":"query","description":"Número de página.","schema":{"minimum":1,"default":1,"type":"number"}},{"name":"limit","required":false,"in":"query","description":"Cantidad de resultados por página.","schema":{"minimum":1,"maximum":100,"default":25,"type":"number"}},{"name":"status","required":false,"in":"query","description":"Filtrar por estado.","schema":{"type":"string","enum":["PENDING","PROCESSING","AWAITING_CONFIRMATION","COMPLETE","FAILED","CANCELLED"]}}],"responses":{"200":{"description":"Paginated list of DNSISA queue entries."}},"summary":"DNSISA queue monitor (backoffice)","tags":["Organizaciones"]}},"/api/v1/organizations/dnsisa/{id}/retry":{"post":{"operationId":"OrganizationsController_retryDnsisaEntry_v1","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"number"}}],"responses":{"200":{"description":"Entry marked for immediate retry."},"404":{"description":"Entry not found."}},"summary":"Manually retry a DNSISA queue entry","tags":["Organizaciones"]}},"/api/v1/organizations/{id}":{"get":{"operationId":"OrganizationsController_get_v1","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"number"}}],"responses":{"200":{"description":"Detalle de organización con límites de uso y API keys.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/OrganizationDetailResultDto"}}}},"404":{"description":"Organización no encontrada."}},"summary":"Obtener detalle de organización","tags":["Organizaciones"]}},"/api/v1/organizations/{id}/enable-production":{"post":{"operationId":"OrganizationsController_enableProduction_v1","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"number"}}],"responses":{"200":{"description":"Organización habilitada para producción."},"404":{"description":"Organización no encontrada."}},"summary":"Habilitar acceso productivo de una organización (idempotente)","tags":["Organizaciones"]}},"/api/v1/organizations/{id}/approve":{"post":{"operationId":"OrganizationsController_approve_v1","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"number"}}],"responses":{"200":{"description":"Organización aprobada o ya activa.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/OrganizationActionResultDto"}}}},"404":{"description":"Organización no encontrada."},"409":{"description":"El estado de la organización no permite aprobación."}},"summary":"Aprobar organización PENDING (idempotente si ya está ACTIVE)","tags":["Organizaciones"]}},"/api/v1/organizations/{id}/reject":{"post":{"operationId":"OrganizationsController_reject_v1","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"number"}}],"responses":{"200":{"description":"Organización rechazada o ya rechazada.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/OrganizationActionResultDto"}}}},"404":{"description":"Organización no encontrada."},"409":{"description":"El estado de la organización no permite rechazo."}},"summary":"Rechazar organización PENDING (idempotente si ya está REJECTED)","tags":["Organizaciones"]}},"/api/v1/organizations/{id}/rate-limits":{"patch":{"operationId":"OrganizationsController_updateRateLimits_v1","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"number"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateRateLimitsDto"}}}},"responses":{"200":{"description":"Rate limits actualizados.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateRateLimitsResultDto"}}}},"404":{"description":"Organización no encontrada."}},"summary":"Actualizar rate limits de una organización","tags":["Organizaciones"]}},"/api/v1/organizations/{id}/reactivate":{"post":{"operationId":"OrganizationsController_reactivate_v1","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"number"}}],"responses":{"200":{"description":"Organización reactivada o ya activa.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/OrganizationActionResultDto"}}}},"404":{"description":"Organización no encontrada."},"409":{"description":"El estado de la organización no permite reactivación."}},"summary":"Reactivar organización SUSPENDED (idempotente si ya está ACTIVE)","tags":["Organizaciones"]}},"/api/v1/organizations/{id}/suspend":{"post":{"operationId":"OrganizationsController_suspend_v1","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"number"}}],"responses":{"200":{"description":"Organización suspendida.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/OrganizationActionResultDto"}}}},"404":{"description":"Organización no encontrada."},"409":{"description":"El estado de la organización no permite suspensión."}},"summary":"Suspender organización ACTIVE","tags":["Organizaciones"]}},"/api/v1/organizations/{id}/api-keys/{keyId}/rotate":{"post":{"operationId":"OrganizationsController_rotateApiKey_v1","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"number"}},{"name":"keyId","required":true,"in":"path","schema":{"type":"number"}}],"responses":{"200":{"description":"API Key rotada. El nuevo secret se muestra una sola vez.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GeneratedApiKeyResultDto"}}}},"404":{"description":"API Key no encontrada."},"409":{"description":"La API Key está revocada."}},"summary":"Rotar una API Key de una organización (backoffice)","tags":["Organizaciones"]}},"/api/v1/organizations/{id}/api-keys/laboratory":{"post":{"operationId":"OrganizationsController_createLaboratoryApiKey_v1","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"number"}}],"responses":{"201":{"description":"API Key productiva creada con los scopes de laboratorio. El secret se muestra una sola vez.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/LaboratoryApiKeyResultDto"}}}},"404":{"description":"Organización no encontrada."}},"summary":"Crear una nueva API Key productiva de laboratorio (backoffice)","tags":["Organizaciones"]}},"/api/v1/organizations/{id}/api-keys/osdepym":{"post":{"operationId":"OrganizationsController_createOsdepymApiKey_v1","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"number"}}],"responses":{"200":{"description":"API key productiva nueva, visible una sola vez.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/LaboratoryApiKeyResultDto"}}}},"404":{"description":"Organización no encontrada."}},"summary":"Emitir una API key para sincronizar la configuración OSDEPYM","tags":["Organizaciones"]}},"/api/v1/organizations/{id}/api-keys/{keyId}/revoke":{"post":{"operationId":"OrganizationsController_revokeApiKey_v1","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"number"}},{"name":"keyId","required":true,"in":"path","schema":{"type":"number"}}],"responses":{"200":{"description":"API Key revocada o ya revocada.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiKeyItemDto"}}}},"404":{"description":"API Key no encontrada."}},"summary":"Revocar una API Key de una organización (backoffice)","tags":["Organizaciones"]}},"/api/v1/organizations/internal/dnsisa/process":{"post":{"operationId":"OrganizationsController_processDnsisaQueue_v1","parameters":[],"responses":{"200":{"description":"Queue processing completed."}},"summary":"Process pending DNSISA queue (internal scheduler only)","tags":["Organizaciones"]}},"/api/v1/osdepym-config":{"put":{"operationId":"OsdepymConfigController_upsert_v1","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpsertOsdepymConfigDto"}}}},"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/OsdepymConfigResultDto"}}}}},"security":[{"bearer":[]}],"summary":"Crear o actualizar la configuración OSDEPYM de la organización","tags":["OSDEPYM"]}},"/api/v1/osdepym-config/me":{"get":{"operationId":"OsdepymPortalConfigController_get_v1","parameters":[],"responses":{"200":{"description":"Configuración actual, o null si aún no fue cargada."}},"security":[{"bearer":[]}],"summary":"Leer la configuración OSDEPYM de la organización del portal","tags":["OSDEPYM"]},"put":{"operationId":"OsdepymPortalConfigController_upsert_v1","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpsertOsdepymPortalConfigDto"}}}},"responses":{"200":{"description":"Configuración guardada para la organización autenticada."}},"security":[{"bearer":[]}],"summary":"Guardar la configuración OSDEPYM desde el portal","tags":["OSDEPYM"]}},"/api/v1/api-keys":{"get":{"operationId":"ApiKeysController_list_v1","parameters":[],"responses":{"200":{"description":"Listado de API Keys.","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/ApiKeyItemDto"}}}}}},"security":[{"bearer":[]}],"summary":"Listar API Keys de la organización autenticada","tags":["API Keys"]},"post":{"operationId":"ApiKeysController_create_v1","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateApiKeyDto"}}}},"responses":{"201":{"description":"API Key creada. El secret se muestra una sola vez.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GeneratedApiKeyResultDto"}}}}},"security":[{"bearer":[]}],"summary":"Crear una API Key para la organización autenticada","tags":["API Keys"]}},"/api/v1/api-keys/{id}/rotate":{"post":{"operationId":"ApiKeysController_rotate_v1","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"number"}}],"responses":{"200":{"description":"API Key rotada. El nuevo secret se muestra una sola vez.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GeneratedApiKeyResultDto"}}}},"404":{"description":"API Key no encontrada."},"409":{"description":"La API Key está revocada."}},"security":[{"bearer":[]}],"summary":"Rotar una API Key activa","tags":["API Keys"]}},"/api/v1/api-keys/{id}/revoke":{"post":{"operationId":"ApiKeysController_revoke_v1","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"number"}}],"responses":{"200":{"description":"API Key revocada o ya revocada.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiKeyItemDto"}}}},"404":{"description":"API Key no encontrada."}},"security":[{"bearer":[]}],"summary":"Revocar una API Key","tags":["API Keys"]}},"/api/v1/mi-argentina/ServiceRequest":{"get":{"description":"Contrato de lectura para Mi Argentina. Actualmente usa x-mi-argentina-api-key; el guard podrá reemplazarse por JWT RS512/JWKS sin modificar la respuesta.","operationId":"MiArgentinaController_readServiceRequest_v1","parameters":[{"name":"identifier","required":true,"in":"query","description":"CUIR de 41 dígitos registrado previamente en DNSISA","schema":{"type":"string"}}],"responses":{"200":{"description":""},"502":{"description":"No fue posible conectar con el servicio externo."}},"security":[{"mi-argentina-api-key":[]}],"summary":"Consultar receta de estudio y resultado vigente por CUIR","tags":["Mi Argentina / DNSISA"]}},"/api/v1/mi-argentina/connection":{"post":{"operationId":"MiArgentinaController_testConnection_v1","parameters":[],"responses":{"201":{"description":""},"502":{"description":"No fue posible conectar con el servicio externo."}},"security":[{"mi-argentina-api-key":[]}],"summary":"Probar autenticación y conectividad con Bus Auth","tags":["Mi Argentina / DNSISA"]}},"/api/v1/mi-argentina/prescriptions/by-cuil":{"post":{"operationId":"MiArgentinaController_createByCuil_v1","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreatePrescriptionByCuilDto"}}}},"responses":{"201":{"description":""},"502":{"description":"No fue posible conectar con el servicio externo."}},"security":[{"mi-argentina-api-key":[]}],"summary":"Registrar nueva prescripción por CUIL","tags":["Mi Argentina / DNSISA"]}},"/api/v1/mi-argentina/transactions/{transactionId}":{"get":{"operationId":"MiArgentinaController_getTransaction_v1","parameters":[{"name":"transactionId","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":""},"502":{"description":"No fue posible conectar con el servicio externo."}},"security":[{"mi-argentina-api-key":[]}],"summary":"Consultar estado de una transacción DNSISA","tags":["Mi Argentina / DNSISA"]}},"/api/v1/osdepym-transactions":{"post":{"operationId":"OsdepymTransactionsController_create_v1","parameters":[{"name":"mode","required":false,"in":"query","schema":{"type":"string","enum":["demo","live"]}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateOsdepymTransactionDto"}}}},"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"summary":"Autorizar una transacción OSDEPYM; mode=demo simula y mode=live conecta al portal","tags":["OSDEPYM"]}},"/api/v1/osdepym-transactions/cancel":{"post":{"operationId":"OsdepymTransactionsController_cancel_v1","parameters":[{"name":"mode","required":false,"in":"query","schema":{"type":"string","enum":["demo","live"]}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CancelOsdepymTransactionDto"}}}},"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"summary":"Anular en OSDEPYM un consumo (ticket entero o prácticas); mode=demo simula","tags":["OSDEPYM"]}},"/api/v1/coverages/sync":{"post":{"operationId":"CoveragesController_sync_v1","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CoveragePlanSyncDto"}}}},"responses":{"200":{"description":"Cobertura (y plan, si se envió) sincronizados."}},"summary":"Sincronizar cobertura (y plan) desde Apto Admin","tags":["Coberturas"]}},"/api/v1/coverages":{"get":{"operationId":"CoverageRegistriesController_listCoverages_v1","parameters":[{"name":"x-api-key","in":"header","description":"Clave interna de integración.","required":true,"schema":{"type":"string"}},{"name":"page","required":false,"in":"query","schema":{"minimum":1,"default":1,"type":"number"}},{"name":"limit","required":false,"in":"query","schema":{"minimum":1,"maximum":500,"default":50,"type":"number"}}],"responses":{"200":{"description":"Página de coberturas, incluidas las que no tienen padrón."}},"summary":"Coberturas con su padrón vigente y estado","tags":["Padrones de coberturas"]}},"/api/v1/coverages/{id}/registries":{"get":{"operationId":"CoverageRegistriesController_listVersions_v1","parameters":[{"name":"x-api-key","in":"header","description":"Clave interna de integración.","required":true,"schema":{"type":"string"}},{"name":"id","required":true,"in":"path","schema":{"minimum":1,"type":"number"}},{"name":"page","required":false,"in":"query","schema":{"minimum":1,"default":1,"type":"number"}},{"name":"limit","required":false,"in":"query","schema":{"minimum":1,"maximum":500,"default":50,"type":"number"}}],"responses":{"200":{"description":"Página de versiones con isActive y entriesCount."}},"summary":"Versiones de una cobertura, de más reciente a más antigua","tags":["Padrones de coberturas"]},"post":{"operationId":"CoverageRegistriesController_create_v1","parameters":[{"name":"x-api-key","in":"header","description":"Clave interna de integración.","required":true,"schema":{"type":"string"}},{"name":"id","required":true,"in":"path","schema":{"minimum":1,"type":"number"}}],"requestBody":{"required":false,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateRegistryDto"}}}},"responses":{"201":{"description":"Versión LOADING, isActive false y entriesCount 0."}},"summary":"Abrir un borrador vacío de padrón","tags":["Padrones de coberturas"]}},"/api/v1/coverages/registries/{id}/entries":{"get":{"operationId":"CoverageRegistriesController_listEntries_v1","parameters":[{"name":"x-api-key","in":"header","description":"Clave interna de integración.","required":true,"schema":{"type":"string"}},{"name":"id","required":true,"in":"path","schema":{"minimum":1,"type":"number"}},{"name":"page","required":false,"in":"query","schema":{"minimum":1,"default":1,"type":"number"}},{"name":"limit","required":false,"in":"query","schema":{"minimum":1,"maximum":500,"default":50,"type":"number"}}],"responses":{"200":{"description":"Versión y página de afiliaciones con auditoría."}},"summary":"Datos completos de las afiliaciones de una versión","tags":["Padrones de coberturas"]},"post":{"operationId":"CoverageRegistriesController_addEntries_v1","parameters":[{"name":"x-api-key","in":"header","description":"Clave interna de integración.","required":true,"schema":{"type":"string"}},{"name":"id","required":true,"in":"path","schema":{"minimum":1,"type":"number"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AddRegistryEntriesDto"}}}},"responses":{"200":{"description":"accepted, rejected, totalInRegistry y errors con índices base 0."}},"summary":"Agregar un lote al borrador con resultados por fila","tags":["Padrones de coberturas"]}},"/api/v1/coverages/registries/{id}/activate":{"post":{"operationId":"CoverageRegistriesController_activate_v1","parameters":[{"name":"x-api-key","in":"header","description":"Clave interna de integración.","required":true,"schema":{"type":"string"}},{"name":"id","required":true,"in":"path","schema":{"minimum":1,"type":"number"}}],"responses":{"200":{"description":"Versión READY, isActive true y entriesCount final."}},"summary":"Cerrar y activar un borrador con al menos una afiliación","tags":["Padrones de coberturas"]}},"/api/v1/coverages/registries/{id}":{"delete":{"operationId":"CoverageRegistriesController_delete_v1","parameters":[{"name":"x-api-key","in":"header","description":"Clave interna de integración.","required":true,"schema":{"type":"string"}},{"name":"id","required":true,"in":"path","schema":{"minimum":1,"type":"number"}}],"responses":{"200":{"description":"ID eliminado, cantidad de registros eliminados e ID de la versión activa."}},"summary":"Eliminar una versión y sus datos; recuperar la anterior si era activa","tags":["Padrones de coberturas"]}},"/api/v1/prescriptions":{"post":{"operationId":"PrescriptionsController_create_v1","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreatePrescriptionDto"}}}},"responses":{"201":{"description":""}},"tags":["Prescriptions"]},"get":{"operationId":"PrescriptionsController_list_v1","parameters":[],"responses":{"200":{"description":""}},"tags":["Prescriptions"]}},"/api/v1/prescriptions/available":{"get":{"operationId":"PrescriptionsController_listAvailable_v1","parameters":[],"responses":{"200":{"description":""}},"tags":["Prescriptions"]}},"/api/v1/prescriptions/cuir/{cuir}":{"get":{"operationId":"PrescriptionsController_findByCuir_v1","parameters":[{"name":"cuir","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"tags":["Prescriptions"]}},"/api/v1/prescriptions/{id}":{"get":{"operationId":"PrescriptionsController_findById_v1","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"number"}}],"responses":{"200":{"description":""}},"tags":["Prescriptions"]}},"/api/v1/prescriptions/{id}/publish":{"post":{"operationId":"PrescriptionsController_publish_v1","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"number"}}],"responses":{"200":{"description":""}},"tags":["Prescriptions"]}},"/api/v1/prescriptions/{id}/suspend":{"post":{"operationId":"PrescriptionsController_suspend_v1","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"number"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TransitionPrescriptionDto"}}}},"responses":{"200":{"description":""}},"tags":["Prescriptions"]}},"/api/v1/prescriptions/{id}/items/{cuir}/approve-audit":{"post":{"operationId":"PrescriptionsController_approveAudit_v1","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"number"}},{"name":"cuir","required":true,"in":"path","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TransitionPrescriptionDto"}}}},"responses":{"200":{"description":""}},"tags":["Prescriptions"]}},"/api/v1/prescriptions/{id}/items/{cuir}/reject-audit":{"post":{"operationId":"PrescriptionsController_rejectAudit_v1","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"number"}},{"name":"cuir","required":true,"in":"path","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TransitionPrescriptionDto"}}}},"responses":{"200":{"description":""}},"tags":["Prescriptions"]}},"/api/v1/prescriptions/{id}/cancel":{"post":{"operationId":"PrescriptionsController_cancel_v1","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"number"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TransitionPrescriptionDto"}}}},"responses":{"200":{"description":""}},"tags":["Prescriptions"]}},"/api/v1/internal/prescriptions":{"post":{"operationId":"InternalPrescriptionsController_ingest_v1","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreatePrescriptionDto"}}}},"responses":{"201":{"description":""}},"tags":["InternalPrescriptions"]}},"/api/v1/lab-orders/consume":{"post":{"operationId":"LabOrdersController_consume_v1","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ConsumeItemsDto"}}}},"responses":{"200":{"description":""}},"tags":["LabOrders"]}},"/api/v1/lab-orders/{requisitionId}/items/{cuir}/reverse-consumption":{"post":{"operationId":"LabOrdersController_reverseConsumption_v1","parameters":[{"name":"requisitionId","required":true,"in":"path","schema":{"type":"string"}},{"name":"cuir","required":true,"in":"path","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ReverseConsumptionDto"}}}},"responses":{"200":{"description":""}},"tags":["LabOrders"]}},"/api/v1/lab-results":{"post":{"operationId":"LabResultsController_create_v1","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateLabResultDto"}}}},"responses":{"201":{"description":""}},"tags":["LabResults"]},"get":{"operationId":"LabResultsController_listByItemCuir_v1","parameters":[{"name":"itemCuir","required":true,"in":"query","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"tags":["LabResults"]}},"/api/v1/lab-results/{id}":{"get":{"operationId":"LabResultsController_findById_v1","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"number"}}],"responses":{"200":{"description":""}},"tags":["LabResults"]}},"/api/v1/lab-results/{id}/finalize":{"post":{"operationId":"LabResultsController_finalize_v1","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"number"}}],"responses":{"200":{"description":""}},"tags":["LabResults"]}},"/api/v1/lab-results/{id}/amend":{"post":{"operationId":"LabResultsController_amend_v1","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"number"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AmendLabResultDto"}}}},"responses":{"200":{"description":""}},"tags":["LabResults"]}},"/api/v1/lab-results/{id}/cancel":{"post":{"operationId":"LabResultsController_cancel_v1","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"number"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CancelLabResultDto"}}}},"responses":{"200":{"description":""}},"tags":["LabResults"]}},"/api/v1/sandbox/reset":{"post":{"operationId":"SandboxController_reset_v1","parameters":[],"responses":{"200":{"description":""}},"summary":"Reset sandbox — truncates all sandbox data and seeds a fresh org + API key","tags":["sandbox"]}},"/api/fhir/metadata":{"get":{"operationId":"FhirConformanceController_metadata","parameters":[],"responses":{"200":{"description":""}},"summary":"FHIR R4 CapabilityStatement","tags":["FHIR Conformance"]}},"/api/fhir/StructureDefinition/{id}":{"get":{"operationId":"FhirConformanceController_structureDefinition","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"tags":["FHIR Conformance"]}},"/api/fhir/CodeSystem/{id}":{"get":{"operationId":"FhirConformanceController_codeSystem","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"tags":["FHIR Conformance"]}},"/api/fhir/ValueSet/{id}":{"get":{"operationId":"FhirConformanceController_valueSet","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"tags":["FHIR Conformance"]}},"/api/fhir/ServiceRequest":{"get":{"operationId":"FhirServiceRequestsController_search","parameters":[{"name":"patient:identifier","required":true,"in":"query","schema":{"type":"string"}},{"name":"subject.identifier","required":true,"in":"query","schema":{"type":"string"}},{"name":"category","required":true,"in":"query","schema":{"type":"string"}},{"name":"coverage","required":true,"in":"query","schema":{"type":"string"}},{"name":"subscriberId","required":true,"in":"query","schema":{"type":"string"}},{"name":"insurance","required":true,"in":"query","schema":{"type":"string"}},{"name":"_page","required":true,"in":"query","schema":{"type":"string"}},{"name":"_count","required":true,"in":"query","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"summary":"FHIR search ServiceRequests (prescriptions) — returns Bundle","tags":["FHIR"]}},"/api/fhir/Bundle":{"get":{"operationId":"FhirServiceRequestsController_readBundleByCuir","parameters":[{"name":"identifier","required":true,"in":"query","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"summary":"FHIR read prescription Bundle by item CUIR","tags":["FHIR"]},"post":{"operationId":"FhirServiceRequestsController_createBundle","parameters":[],"responses":{"201":{"description":""}},"summary":"FHIR create prescription via Bundle transaction","tags":["FHIR"]}},"/api/fhir/ServiceRequest/group/{id}":{"get":{"operationId":"FhirServiceRequestsController_readByGroup","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"number"}}],"responses":{"200":{"description":""}},"summary":"FHIR read ServiceRequest Bundle by group id","tags":["FHIR"]}},"/api/fhir/ServiceRequest/{id}/$publish":{"post":{"operationId":"FhirServiceRequestsController_publishDocumented","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"tags":["FHIR"]}},"/api/fhir/ServiceRequest/{id}/$suspend":{"post":{"operationId":"FhirServiceRequestsController_suspendDocumented","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TransitionPrescriptionDto"}}}},"responses":{"200":{"description":""}},"tags":["FHIR"]}},"/api/fhir/ServiceRequest/{id}/$cancel":{"post":{"operationId":"FhirServiceRequestsController_cancelDocumented","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TransitionPrescriptionDto"}}}},"responses":{"200":{"description":""}},"tags":["FHIR"]}},"/api/fhir/DiagnosticReport":{"get":{"operationId":"FhirDiagnosticReportsController_search","parameters":[{"name":"based-on:identifier","required":true,"in":"query","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"summary":"FHIR search DiagnosticReports — returns Bundle","tags":["FHIR"]}},"/api/fhir/DiagnosticReport/{id}":{"get":{"operationId":"FhirDiagnosticReportsController_read","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"summary":"FHIR read DiagnosticReport by id","tags":["FHIR"]}},"/api/fhir/DiagnosticReport/$upload":{"post":{"operationId":"FhirDiagnosticReportsController_upload","parameters":[],"responses":{"201":{"description":""}},"summary":"FHIR $upload — create lab result (DiagnosticReport → DRAFT)","tags":["FHIR"]}},"/api/fhir/DiagnosticReport/{id}/$finalize":{"post":{"operationId":"FhirDiagnosticReportsController_finalize","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"summary":"FHIR $finalize — transition DiagnosticReport to final","tags":["FHIR"]}},"/api/fhir/DiagnosticReport/{id}/$amend":{"post":{"operationId":"FhirDiagnosticReportsController_amend","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"summary":"FHIR $amend — create new sequence superseding current","tags":["FHIR"]}},"/api/fhir/DiagnosticReport/{id}/$cancel":{"post":{"operationId":"FhirDiagnosticReportsController_cancel","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"summary":"FHIR $cancel — cancel DiagnosticReport","tags":["FHIR"]}},"/api/fhir/Task":{"get":{"operationId":"FhirTasksController_search","parameters":[{"name":"patient:identifier","required":true,"in":"query","schema":{"type":"string"}},{"name":"category","required":true,"in":"query","schema":{"type":"string"}},{"name":"coverage","required":true,"in":"query","schema":{"type":"string"}},{"name":"insurance","required":true,"in":"query","schema":{"type":"string"}},{"name":"_page","required":true,"in":"query","schema":{"type":"string"}},{"name":"_count","required":true,"in":"query","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"summary":"FHIR search available Tasks for fulfillment (lab discovery)","tags":["FHIR"]},"post":{"operationId":"FhirTasksController_consume","parameters":[],"responses":{"201":{"description":""}},"summary":"FHIR create Task — consume prescription items","tags":["FHIR"]}},"/api/fhir/Task/{requisitionId}/$reverse":{"post":{"operationId":"FhirTasksController_reverse","parameters":[{"name":"requisitionId","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"summary":"FHIR Task $reverse — reverse consumption for an item","tags":["FHIR"]}}},"info":{"title":"Apto Repo API","description":"Base inicial de la API para desarrollo local y QA.","version":"0.1.0","contact":{}},"tags":[],"servers":[],"components":{"securitySchemes":{"bearer":{"scheme":"bearer","bearerFormat":"JWT","type":"http"},"mi-argentina-api-key":{"type":"apiKey","in":"header","name":"x-mi-argentina-api-key"}},"schemas":{"RequestPatientAccessDto":{"type":"object","properties":{}},"AuthLoginDto":{"type":"object","properties":{"email":{"type":"string","format":"email"},"password":{"type":"string"}},"required":["email","password"]},"AuthLoginResponseDto":{"type":"object","properties":{"accessToken":{"type":"string","description":"API-issued JWT for the portal session."},"refreshToken":{"type":"string","description":"Opaque refresh token. Exchange it at POST /auth/refresh for a new access token; rotates on every use."}},"required":["accessToken","refreshToken"]},"AuthAptoExchangeDto":{"type":"object","properties":{"code":{"type":"string","description":"Short-lived code issued by Apto and validated through GET /auth/organization.","example":"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9..."}},"required":["code"]},"AuthForgotPasswordDto":{"type":"object","properties":{"email":{"type":"string","format":"email"}},"required":["email"]},"AuthResetPasswordVerifyDto":{"type":"object","properties":{"oobCode":{"type":"string","description":"Firebase password reset action code."}},"required":["oobCode"]},"AuthResetPasswordVerifyResponseDto":{"type":"object","properties":{"email":{"type":"string","format":"email"}},"required":["email"]},"AuthResetPasswordDto":{"type":"object","properties":{"oobCode":{"type":"string","description":"Firebase password reset action code."},"password":{"type":"string","minLength":8}},"required":["oobCode","password"]},"AuthSsoExchangeDto":{"type":"object","properties":{"token":{"type":"string","description":"Short-lived SSO token issued by Apto platform (signed with REPO_SSO_SECRET, expires in 2 min)","example":"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9..."}},"required":["token"]},"AuthRefreshDto":{"type":"object","properties":{"refreshToken":{"type":"string","description":"Opaque refresh token issued by login, apto/exchange, sso/exchange, or a previous refresh."}},"required":["refreshToken"]},"AuthRegisterOrganizationOrganizationDto":{"type":"object","properties":{"name":{"type":"string","example":"Hospital Central"},"taxId":{"type":"string","example":"30-12345678-9"},"type":{"type":"string","enum":["HOSPITAL","CLINIC","LAB","PLATFORM","OTHER"],"example":"HOSPITAL"},"email":{"type":"string","description":"Institutional email for the organization."},"m1Code":{"type":"string","description":"Digital platform code, persisted as organizations.m1_code.","example":"AB12","maxLength":4},"phone":{"type":"string","example":"+54 11 1234-5678"},"website":{"type":"string","example":"https://example.org"},"description":{"type":"string"}},"required":["name","taxId","type","email","m1Code"]},"AuthRegisterOrganizationTechnicalContactDto":{"type":"object","properties":{"contactName":{"type":"string"},"contactEmail":{"type":"string"},"contactPhone":{"type":"string"}},"required":["contactName","contactEmail"]},"AuthRegisterOrganizationOwnerDto":{"type":"object","properties":{"email":{"type":"string","description":"Owner email for Firebase email/password account. Also persisted as the organization unique email (login identity)."},"password":{"type":"string","description":"Firebase password (minimum length enforced by Firebase).","minLength":6}},"required":["email","password"]},"AuthRegisterOrganizationLegalDto":{"type":"object","properties":{"acceptedTerms":{"type":"boolean","description":"Must be true to register."},"acceptedPrivacyPolicy":{"type":"boolean","description":"Must be true to register."}},"required":["acceptedTerms","acceptedPrivacyPolicy"]},"AuthRegisterOrganizationDto":{"type":"object","properties":{"organization":{"$ref":"#/components/schemas/AuthRegisterOrganizationOrganizationDto"},"technicalContact":{"$ref":"#/components/schemas/AuthRegisterOrganizationTechnicalContactDto"},"owner":{"$ref":"#/components/schemas/AuthRegisterOrganizationOwnerDto"},"legal":{"$ref":"#/components/schemas/AuthRegisterOrganizationLegalDto"}},"required":["organization","technicalContact","owner","legal"]},"RegisterOrganizationResponseDto":{"type":"object","properties":{"requestId":{"type":"string","description":"Request identifier (matches X-Request-Id when present)."},"status":{"type":"string","description":"Organization onboarding status.","enum":["PENDING"],"example":"PENDING"}},"required":["requestId","status"]},"OrganizationListItemDto":{"type":"object","properties":{"id":{"type":"number","description":"Identificador de la organización.","example":1},"name":{"type":"string","description":"Nombre de la organización.","example":"Hospital Italiano"},"taxId":{"type":"string","description":"CUIT de la organización.","example":"30-12345678-9"},"type":{"type":"string","description":"Tipo de organización.","enum":["HOSPITAL","CLINIC","LAB","PLATFORM","OTHER"],"example":"HOSPITAL"},"status":{"type":"string","description":"Estado de la organización.","enum":["PENDING","ACTIVE","SUSPENDED","REJECTED"],"example":"ACTIVE"},"createdAt":{"format":"date-time","type":"string","description":"Fecha de registro.","example":"2026-03-15T00:00:00.000Z"},"prescriptionsCount":{"type":"number","description":"Cantidad total de recetas.","example":4230},"apiKeysCount":{"type":"number","description":"Cantidad de API keys activas o en rotación.","example":2}},"required":["id","name","taxId","type","status","createdAt","prescriptionsCount","apiKeysCount"]},"PaginatedOrganizationsResultDto":{"type":"object","properties":{"items":{"description":"Organizaciones de la página actual.","type":"array","items":{"$ref":"#/components/schemas/OrganizationListItemDto"}},"page":{"type":"number","description":"Página actual.","example":1},"limit":{"type":"number","description":"Cantidad de resultados por página.","example":10},"total":{"type":"number","description":"Total de organizaciones que coinciden con los filtros.","example":24},"totalPages":{"type":"number","description":"Total de páginas disponibles.","example":3}},"required":["items","page","limit","total","totalPages"]},"ProvisionLaboratoryOrganizationDto":{"type":"object","properties":{"taxId":{"type":"string","example":"30715654039"},"name":{"type":"string","example":"Laboratorio Ejemplo"},"email":{"type":"string","description":"Email institucional del centro de salud."},"ownerName":{"type":"string","example":"Juan Perez","description":"Nombre del usuario que habilitó el módulo en Apto."},"ownerEmail":{"type":"string","description":"Email del usuario que habilitó el módulo en Apto."},"phone":{"type":"string","example":"+54 11 1234-5678"},"website":{"type":"string","example":"https://example.org"},"description":{"type":"string"}},"required":["taxId","name","email","ownerName","ownerEmail"]},"OrganizationDetailApiKeyDto":{"type":"object","properties":{"id":{"type":"number","example":1},"keyPrefix":{"type":"string","example":"ar_live_xKj2aBcD"},"name":{"type":"string","example":"Producción HIS"},"status":{"type":"string","enum":["ACTIVE","ROTATING","REVOKED"],"example":"ACTIVE"},"lastUsedAt":{"type":"object","example":"2026-03-15T10:05:00.000Z","nullable":true}},"required":["id","keyPrefix","name","status","lastUsedAt"]},"OrganizationUsageDataPointDto":{"type":"object","properties":{"date":{"type":"string","example":"2026-06-10"},"requests":{"type":"number","example":390}},"required":["date","requests"]},"OrganizationAuditEntryDto":{"type":"object","properties":{"date":{"type":"string","example":"10/06 14:32"},"action":{"type":"string","example":"CREATE_PRESCRIPTION"},"endpoint":{"type":"string","example":"POST /api/v1/prescriptions"},"status":{"type":"number","example":201}},"required":["date","action","endpoint","status"]},"OrganizationDetailResultDto":{"type":"object","properties":{"id":{"type":"number","description":"Identificador de la organización.","example":123},"name":{"type":"string","description":"Nombre de la organización.","example":"Hospital Italiano"},"taxId":{"type":"string","description":"CUIT de la organización.","example":"30-12345678-9"},"type":{"type":"string","description":"Tipo de organización.","enum":["HOSPITAL","CLINIC","LAB","PLATFORM","OTHER"],"example":"HOSPITAL"},"status":{"type":"string","description":"Estado de la organización.","enum":["PENDING","ACTIVE","SUSPENDED","REJECTED"],"example":"ACTIVE"},"createdAt":{"format":"date-time","type":"string","description":"Fecha de registro.","example":"2026-03-15T10:00:00.000Z"},"institutionalEmail":{"type":"string","description":"Email institucional.","example":"integraciones@hospitalitaliano.org.ar"},"phone":{"type":"object","description":"Teléfono institucional.","example":"+54 11 4959-0200","nullable":true},"website":{"type":"object","description":"Sitio web institucional.","example":"hospitalitaliano.org.ar","nullable":true},"contactName":{"type":"string","description":"Nombre del contacto técnico.","example":"Ing. Carlos Méndez"},"contactEmail":{"type":"string","description":"Email del contacto técnico.","example":"cmendez@hospitalitaliano.org.ar"},"contactPhone":{"type":"object","description":"Teléfono del contacto técnico.","example":"+54 11 4959-0201","nullable":true},"hourlyUsed":{"type":"number","description":"Uso horario actual.","example":782},"hourlyLimit":{"type":"number","description":"Límite horario configurado.","example":1000},"dailyUsed":{"type":"number","description":"Uso diario actual.","example":6430},"dailyLimit":{"type":"number","description":"Límite diario configurado.","example":10000},"apiKeys":{"type":"array","items":{"$ref":"#/components/schemas/OrganizationDetailApiKeyDto"}},"usageData":{"type":"array","items":{"$ref":"#/components/schemas/OrganizationUsageDataPointDto"}},"recentAudit":{"type":"array","items":{"$ref":"#/components/schemas/OrganizationAuditEntryDto"}}},"required":["id","name","taxId","type","status","createdAt","institutionalEmail","phone","website","contactName","contactEmail","contactPhone","hourlyUsed","hourlyLimit","dailyUsed","dailyLimit","apiKeys","usageData","recentAudit"]},"OrganizationActionResultDto":{"type":"object","properties":{"id":{"type":"number","description":"Identificador de la organización.","example":1},"status":{"type":"string","description":"Estado actual de la organización.","enum":["PENDING","ACTIVE","SUSPENDED","REJECTED"],"example":"ACTIVE"},"updatedAt":{"format":"date-time","type":"string","description":"Fecha de última actualización.","example":"2026-03-15T00:00:00.000Z"}},"required":["id","status","updatedAt"]},"UpdateRateLimitsDto":{"type":"object","properties":{"hourlyLimit":{"type":"number","description":"Límite horario de requests.","example":1000},"dailyLimit":{"type":"number","description":"Límite diario de requests.","example":10000}},"required":["hourlyLimit","dailyLimit"]},"UpdateRateLimitsResultDto":{"type":"object","properties":{"id":{"type":"number","example":123},"hourlyLimit":{"type":"number","example":1000},"dailyLimit":{"type":"number","example":10000},"updatedAt":{"format":"date-time","type":"string","example":"2026-06-10T12:00:00.000Z"}},"required":["id","hourlyLimit","dailyLimit","updatedAt"]},"ApiKeyItemDto":{"type":"object","properties":{"id":{"type":"number","example":1},"name":{"type":"string","example":"Producción HIS"},"prefix":{"type":"string","example":"ar_live_xKj2aBcD"},"status":{"type":"string","enum":["ACTIVE","ROTATING","REVOKED"],"example":"ACTIVE"},"scopes":{"example":["prescription:read","lab:read"],"type":"array","items":{"type":"string"}},"environment":{"type":"string","enum":["PRODUCTION","SANDBOX"],"example":"PRODUCTION"},"createdAt":{"format":"date-time","type":"string","example":"2026-06-05T12:30:00.000Z"},"lastUsedAt":{"type":"object","example":null,"nullable":true}},"required":["id","name","prefix","status","scopes","environment","createdAt","lastUsedAt"]},"GeneratedApiKeyResultDto":{"type":"object","properties":{"apiKey":{"$ref":"#/components/schemas/ApiKeyItemDto"},"secret":{"type":"string","description":"Secret completo. Se muestra una sola vez.","example":"ar_live_exampleSecretOnlyShownOnce"}},"required":["apiKey","secret"]},"LaboratoryApiKeyResultDto":{"type":"object","properties":{"apiKey":{"type":"string","description":"Secret completo de la API key. Se muestra una sola vez.","example":"ar_live_exampleSecretOnlyShownOnce"}},"required":["apiKey"]},"UpsertOsdepymConfigDto":{"type":"object","properties":{"cuit":{"type":"string","example":"30999999999"},"providerId":{"type":"number","example":9999},"email":{"type":"string","example":"usuario@prestador.com"}},"required":["cuit","providerId","email"]},"OsdepymConfigResultDto":{"type":"object","properties":{"organizationId":{"type":"number"},"cuit":{"type":"string"},"providerId":{"type":"number"},"email":{"type":"string"},"updatedAt":{"type":"string","format":"date-time"}},"required":["organizationId","cuit","providerId","email","updatedAt"]},"UpsertOsdepymPortalConfigDto":{"type":"object","properties":{"cuit":{"type":"string","example":"30999999999"},"providerId":{"type":"number","example":9999},"email":{"type":"string","example":"usuario@prestador.com"},"enabled":{"type":"boolean","example":true}},"required":["cuit","providerId","email","enabled"]},"CreateApiKeyDto":{"type":"object","properties":{"name":{"type":"string","example":"Producción HIS","maxLength":255},"scopes":{"type":"array","example":["prescription:read","prescription:write"],"items":{"type":"string","enum":["prescription:read","prescription:write","prescription:dispense","lab:read","lab:write","integrations:write"]}},"environment":{"type":"string","example":"SANDBOX","enum":["SANDBOX","PRODUCTION"]}},"required":["name"]},"RefepsProfessionalDto":{"type":"object","properties":{"codigoRefepsProfesional":{"type":"string"},"matriculaProfesional":{"type":"string"},"tipoDocumento":{"type":"string"},"numeroDocumento":{"type":"string"},"nombreProfesional":{"type":"string"},"apellidoProfesional":{"type":"string"},"profesionProfesional":{"type":"string"}}},"CreatePrescriptionByCuilDto":{"type":"object","properties":{"cuir":{"type":"string","minLength":41,"maxLength":41},"fechaCreacion":{"type":"string","example":"21/08/2025 14:30:00"},"cuilPaciente":{"type":"string","minLength":11,"maxLength":11},"refepsProfessional":{"$ref":"#/components/schemas/RefepsProfessionalDto"},"urlRepositorio":{"type":"string"},"fechaInicioVigencia":{"type":"string","example":"21/08/2025"},"fechaFinVigencia":{"type":"string","example":"30/08/2025"}},"required":["cuir","fechaCreacion","cuilPaciente","refepsProfessional","urlRepositorio"]},"OsdepymTransactionPracticeDto":{"type":"object","properties":{"code":{"type":"string","example":"429007"},"quantity":{"type":"number","example":1}},"required":["code","quantity"]},"CreateOsdepymTransactionDto":{"type":"object","properties":{"affiliateNumber":{"type":"string","example":"9999999999900"},"token":{"type":"string","example":"458"},"practices":{"type":"array","items":{"$ref":"#/components/schemas/OsdepymTransactionPracticeDto"}}},"required":["affiliateNumber","token","practices"]},"CancelOsdepymTransactionPracticeDto":{"type":"object","properties":{"index":{"type":"number","example":1},"code":{"type":"string","example":"429007"},"quantity":{"type":"number","example":1}},"required":["index","code"]},"CancelOsdepymTransactionDto":{"type":"object","properties":{"affiliateNumber":{"type":"string","example":"9999999999900"},"ticketNumber":{"type":"string","example":"1234567"},"practices":{"type":"array","items":{"$ref":"#/components/schemas/CancelOsdepymTransactionPracticeDto"}}},"required":["affiliateNumber","ticketNumber"]},"CoveragePlanSyncDto":{"type":"object","properties":{"coverageId":{"type":"number","description":"Id de la cobertura en Apto Admin.","example":12},"coverageName":{"type":"string","description":"Nombre de la cobertura.","example":"OSDE"},"coverageStatus":{"type":"number","description":"Estado de la cobertura (0 = inactivo, 1 = activo).","example":1},"consumptionProvider":{"type":"string","enum":["OSDEPYM"],"nullable":true},"planId":{"type":"number","description":"Id del plan en Apto Admin.","example":210},"planName":{"type":"string","description":"Nombre del plan.","example":"210"},"planStatus":{"type":"number","description":"Estado del plan (0 = inactivo, 1 = activo).","example":1}},"required":["coverageId","coverageName","coverageStatus"]},"CreateRegistryDto":{"type":"object","properties":{"sourceCreatedAt":{"type":"object","format":"date-time","nullable":true}}},"RegistryEntryDto":{"type":"object","properties":{"planName":{"type":"string","maxLength":128},"credentialNumber":{"type":"string","maxLength":64},"docType":{"type":"string","example":"DNI","maxLength":16},"docNumber":{"type":"string","maxLength":32},"validFrom":{"type":"string","example":"2026-09-01","format":"date"},"expiresAt":{"type":"object","example":"2026-12-31","format":"date","nullable":true},"status":{"type":"number","enum":[0,1]}},"required":["planName","credentialNumber","docType","docNumber","validFrom","status"]},"AddRegistryEntriesDto":{"type":"object","properties":{"entries":{"minItems":1,"maxItems":1000,"type":"array","items":{"$ref":"#/components/schemas/RegistryEntryDto"}}},"required":["entries"]},"CreatePrescriptionDto":{"type":"object","properties":{}},"TransitionPrescriptionDto":{"type":"object","properties":{}},"ConsumeItemsDto":{"type":"object","properties":{}},"ReverseConsumptionDto":{"type":"object","properties":{}},"CreateLabResultDto":{"type":"object","properties":{}},"AmendLabResultDto":{"type":"object","properties":{}},"CancelLabResultDto":{"type":"object","properties":{}}}}}