{"openapi":"3.0.0","paths":{"/":{"get":{"operationId":"AppController_getWelcome","parameters":[],"responses":{"200":{"description":"Returns welcome message or HTML page"}},"summary":"API Welcome Message","tags":["Root"]}},"/storage/providers":{"get":{"operationId":"CloudProvidersController_list","parameters":[{"name":"active","required":true,"in":"query","schema":{"type":"boolean"}},{"name":"churchId","required":true,"in":"query","schema":{"type":"number"}}],"responses":{"200":{"description":""}},"security":[{"JWT":[]}],"summary":"List cloud storage providers","tags":["Storage - Cloud Providers"]},"post":{"operationId":"CloudProvidersController_create","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateCloudProviderDto"}}}},"responses":{"201":{"description":""}},"security":[{"JWT":[]}],"summary":"Create cloud provider","tags":["Storage - Cloud Providers"]}},"/storage/providers/{id}":{"get":{"operationId":"CloudProvidersController_getOne","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"number"}}],"responses":{"200":{"description":""}},"security":[{"JWT":[]}],"summary":"Get cloud provider details","tags":["Storage - Cloud Providers"]},"patch":{"operationId":"CloudProvidersController_update","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"number"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateCloudProviderDto"}}}},"responses":{"200":{"description":""}},"security":[{"JWT":[]}],"summary":"Update cloud provider","tags":["Storage - Cloud Providers"]},"delete":{"operationId":"CloudProvidersController_delete","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"number"}}],"responses":{"200":{"description":""}},"security":[{"JWT":[]}],"summary":"Delete cloud provider","tags":["Storage - Cloud Providers"]}},"/storage/providers/{id}/credentials":{"put":{"operationId":"CloudProvidersController_updateCredentials","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"number"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateCredentialsDto"}}}},"responses":{"200":{"description":""}},"security":[{"JWT":[]}],"summary":"Update provider credentials","tags":["Storage - Cloud Providers"]}},"/storage/providers/{id}/test":{"post":{"operationId":"CloudProvidersController_testConnection","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"number"}}],"responses":{"201":{"description":""}},"security":[{"JWT":[]}],"summary":"Test cloud provider connection","tags":["Storage - Cloud Providers"]}},"/storage/providers/{id}/health":{"get":{"operationId":"CloudProvidersController_health","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"number"}}],"responses":{"200":{"description":""}},"security":[{"JWT":[]}],"summary":"Get provider health status","tags":["Storage - Cloud Providers"]}},"/storage/providers/{id}/enable":{"post":{"operationId":"CloudProvidersController_enable","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"number"}}],"responses":{"201":{"description":""}},"security":[{"JWT":[]}],"summary":"Enable cloud provider","tags":["Storage - Cloud Providers"]}},"/storage/providers/{id}/disable":{"post":{"operationId":"CloudProvidersController_disable","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"number"}}],"responses":{"201":{"description":""}},"security":[{"JWT":[]}],"summary":"Disable cloud provider","tags":["Storage - Cloud Providers"]}},"/storage/types":{"get":{"operationId":"StorageTypesController_list","parameters":[],"responses":{"200":{"description":""}},"security":[{"JWT":[]}],"summary":"List storage types","tags":["Storage - Types & Categories"]},"post":{"operationId":"StorageTypesController_create","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateStorageTypeDto"}}}},"responses":{"201":{"description":""}},"security":[{"JWT":[]}],"summary":"Create storage type","tags":["Storage - Types & Categories"]}},"/storage/types/{id}":{"get":{"operationId":"StorageTypesController_getOne","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"number"}}],"responses":{"200":{"description":""}},"security":[{"JWT":[]}],"summary":"Get storage type details","tags":["Storage - Types & Categories"]},"put":{"operationId":"StorageTypesController_update","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"number"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateStorageTypeDto"}}}},"responses":{"200":{"description":""}},"security":[{"JWT":[]}],"summary":"Update storage type","tags":["Storage - Types & Categories"]},"delete":{"operationId":"StorageTypesController_delete","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"number"}}],"responses":{"200":{"description":""}},"security":[{"JWT":[]}],"summary":"Delete storage type","tags":["Storage - Types & Categories"]}},"/storage/categories":{"get":{"operationId":"StorageCategoriesController_list","parameters":[],"responses":{"200":{"description":""}},"security":[{"JWT":[]}],"summary":"List storage categories","tags":["Storage - Types & Categories"]},"post":{"operationId":"StorageCategoriesController_create","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateStorageCategoryDto"}}}},"responses":{"201":{"description":""}},"security":[{"JWT":[]}],"summary":"Create storage category","tags":["Storage - Types & Categories"]}},"/storage/categories/{id}":{"get":{"operationId":"StorageCategoriesController_getOne","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"number"}}],"responses":{"200":{"description":""}},"security":[{"JWT":[]}],"summary":"Get storage category details","tags":["Storage - Types & Categories"]},"put":{"operationId":"StorageCategoriesController_update","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"number"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateStorageCategoryDto"}}}},"responses":{"200":{"description":""}},"security":[{"JWT":[]}],"summary":"Update storage category","tags":["Storage - Types & Categories"]},"delete":{"operationId":"StorageCategoriesController_delete","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"number"}}],"responses":{"200":{"description":""}},"security":[{"JWT":[]}],"summary":"Delete storage category","tags":["Storage - Types & Categories"]}},"/storage/redundancy":{"get":{"operationId":"StorageRedundancyController_list","parameters":[],"responses":{"200":{"description":""}},"security":[{"JWT":[]}],"summary":"List redundancy configurations","tags":["Storage - Redundancy"]},"post":{"operationId":"StorageRedundancyController_create","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateRedundancyConfigDto"}}}},"responses":{"201":{"description":""}},"security":[{"JWT":[]}],"summary":"Create redundancy configuration","tags":["Storage - Redundancy"]}},"/storage/redundancy/type/{typeId}":{"get":{"operationId":"StorageRedundancyController_getByType","parameters":[{"name":"typeId","required":true,"in":"path","schema":{"type":"number"}}],"responses":{"200":{"description":""}},"security":[{"JWT":[]}],"summary":"Get redundancy config for storage type","tags":["Storage - Redundancy"]}},"/storage/redundancy/{id}":{"put":{"operationId":"StorageRedundancyController_update","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"number"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateRedundancyConfigDto"}}}},"responses":{"200":{"description":""}},"security":[{"JWT":[]}],"summary":"Update redundancy configuration","tags":["Storage - Redundancy"]},"delete":{"operationId":"StorageRedundancyController_delete","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"number"}}],"responses":{"200":{"description":""}},"security":[{"JWT":[]}],"summary":"Delete redundancy configuration","tags":["Storage - Redundancy"]}},"/storage/redundancy/{id}/enable":{"post":{"operationId":"StorageRedundancyController_enable","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"number"}}],"responses":{"201":{"description":""}},"security":[{"JWT":[]}],"summary":"Enable redundancy for storage type","tags":["Storage - Redundancy"]}},"/storage/redundancy/{id}/disable":{"post":{"operationId":"StorageRedundancyController_disable","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"number"}}],"responses":{"201":{"description":""}},"security":[{"JWT":[]}],"summary":"Disable redundancy for storage type","tags":["Storage - Redundancy"]}},"/storage/files/upload":{"post":{"operationId":"StorageFilesController_upload","parameters":[],"requestBody":{"required":true,"content":{"multipart/form-data":{"schema":{"type":"object","required":["file","typeId","relatedEntityType","relatedEntityId"],"properties":{"file":{"type":"string","format":"binary"},"typeId":{"type":"integer","description":"Storage type ID"},"relatedEntityType":{"type":"string","description":"Entity type (activity, member, etc.)"},"relatedEntityId":{"type":"integer","description":"Entity ID"},"description":{"type":"string"},"visibility":{"type":"string","enum":["public","private","internal","restricted"]},"metadata":{"type":"object"}}}}}},"responses":{"201":{"description":""}},"security":[{"JWT":[]}],"summary":"Upload a file","tags":["Storage - Files"]}},"/storage/files":{"get":{"operationId":"StorageFilesController_list","parameters":[{"name":"page","required":false,"in":"query","description":"Página","schema":{"default":1,"type":"number"}},{"name":"limit","required":false,"in":"query","description":"Límite por página","schema":{"default":20,"type":"number"}},{"name":"typeId","required":false,"in":"query","description":"Filtrar por tipo de almacenamiento","schema":{"type":"number"}},{"name":"categoryCode","required":false,"in":"query","description":"Filtrar por código de categoría","schema":{"example":"documents","type":"string"}},{"name":"relatedEntityType","required":false,"in":"query","description":"Filtrar por tipo de entidad relacionada","schema":{"type":"string"}},{"name":"relatedEntityId","required":false,"in":"query","description":"Filtrar por ID de entidad relacionada","schema":{"type":"number"}},{"name":"mimeType","required":false,"in":"query","description":"Filtrar por MIME type","schema":{"type":"string"}},{"name":"search","required":false,"in":"query","description":"Búsqueda por nombre de archivo","schema":{"type":"string"}},{"name":"sortBy","required":false,"in":"query","description":"Ordenar por campo","schema":{"default":"createdAt","type":"string"}},{"name":"sortOrder","required":false,"in":"query","description":"Orden","schema":{"default":"DESC","type":"string","enum":["ASC","DESC"]}},{"name":"refresh","required":false,"in":"query","description":"Forzar re-verificación desde el proveedor","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"security":[{"JWT":[]}],"summary":"List files with filters","tags":["Storage - Files"]}},"/storage/files/deleted":{"get":{"operationId":"StorageFilesController_listDeleted","parameters":[{"name":"page","required":false,"in":"query","description":"Página","schema":{"default":1,"type":"number"}},{"name":"limit","required":false,"in":"query","description":"Límite por página","schema":{"default":20,"type":"number"}},{"name":"typeId","required":false,"in":"query","description":"Filtrar por tipo de almacenamiento","schema":{"type":"number"}},{"name":"categoryCode","required":false,"in":"query","description":"Filtrar por código de categoría","schema":{"example":"documents","type":"string"}},{"name":"relatedEntityType","required":false,"in":"query","description":"Filtrar por tipo de entidad relacionada","schema":{"type":"string"}},{"name":"relatedEntityId","required":false,"in":"query","description":"Filtrar por ID de entidad relacionada","schema":{"type":"number"}},{"name":"mimeType","required":false,"in":"query","description":"Filtrar por MIME type","schema":{"type":"string"}},{"name":"search","required":false,"in":"query","description":"Búsqueda por nombre de archivo","schema":{"type":"string"}},{"name":"sortBy","required":false,"in":"query","description":"Ordenar por campo","schema":{"default":"createdAt","type":"string"}},{"name":"sortOrder","required":false,"in":"query","description":"Orden","schema":{"default":"DESC","type":"string","enum":["ASC","DESC"]}},{"name":"refresh","required":false,"in":"query","description":"Forzar re-verificación desde el proveedor","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"security":[{"JWT":[]}],"summary":"List deleted files","tags":["Storage - Files"]}},"/storage/files/broken":{"get":{"operationId":"StorageFilesController_listBroken","parameters":[{"name":"page","required":false,"in":"query","description":"Página","schema":{"default":1,"type":"number"}},{"name":"limit","required":false,"in":"query","description":"Límite por página","schema":{"default":20,"type":"number"}},{"name":"typeId","required":false,"in":"query","description":"Filtrar por tipo de almacenamiento","schema":{"type":"number"}},{"name":"categoryCode","required":false,"in":"query","description":"Filtrar por código de categoría","schema":{"example":"documents","type":"string"}},{"name":"relatedEntityType","required":false,"in":"query","description":"Filtrar por tipo de entidad relacionada","schema":{"type":"string"}},{"name":"relatedEntityId","required":false,"in":"query","description":"Filtrar por ID de entidad relacionada","schema":{"type":"number"}},{"name":"mimeType","required":false,"in":"query","description":"Filtrar por MIME type","schema":{"type":"string"}},{"name":"search","required":false,"in":"query","description":"Búsqueda por nombre de archivo","schema":{"type":"string"}},{"name":"sortBy","required":false,"in":"query","description":"Ordenar por campo","schema":{"default":"createdAt","type":"string"}},{"name":"sortOrder","required":false,"in":"query","description":"Orden","schema":{"default":"DESC","type":"string","enum":["ASC","DESC"]}},{"name":"refresh","required":false,"in":"query","description":"Forzar re-verificación desde el proveedor","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"security":[{"JWT":[]}],"summary":"List broken storage records","tags":["Storage - Files"]}},"/storage/files/integrity/audits":{"get":{"operationId":"StorageFilesController_getIntegrityAuditHistory","parameters":[{"name":"limit","required":true,"in":"query","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"security":[{"JWT":[]}],"summary":"Get visible storage integrity audit history","tags":["Storage - Files"]}},"/storage/files/{id}/integrity":{"get":{"operationId":"StorageFilesController_getIntegrity","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"security":[{"JWT":[]}],"summary":"Check database/storage integrity for a file","tags":["Storage - Files"]}},"/storage/files/{id}":{"get":{"operationId":"StorageFilesController_getOne","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"security":[{"JWT":[]}],"summary":"Get file metadata","tags":["Storage - Files"]},"patch":{"operationId":"StorageFilesController_update","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateFileDto"}}}},"responses":{"200":{"description":""}},"security":[{"JWT":[]}],"summary":"Update file metadata","tags":["Storage - Files"]},"delete":{"operationId":"StorageFilesController_softDelete","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"security":[{"JWT":[]}],"summary":"Soft delete file","tags":["Storage - Files"]}},"/storage/files/{id}/file":{"get":{"operationId":"StorageFilesController_getFile","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":"File content"}},"security":[{"JWT":[]}],"summary":"Download file content","tags":["Storage - Files"]}},"/storage/files/{id}/download":{"get":{"operationId":"StorageFilesController_download","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"security":[{"JWT":[]}],"summary":"Download file as attachment","tags":["Storage - Files"]}},"/storage/files/{id}/url":{"get":{"operationId":"StorageFilesController_getUrl","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"security":[{"JWT":[]}],"summary":"Get file URL","tags":["Storage - Files"]}},"/storage/files/{id}/hard":{"delete":{"operationId":"StorageFilesController_hardDelete","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"security":[{"JWT":[]}],"summary":"Permanently delete file","tags":["Storage - Files"]}},"/storage/files/{id}/restore":{"post":{"operationId":"StorageFilesController_restore","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"201":{"description":""}},"security":[{"JWT":[]}],"summary":"Restore deleted file","tags":["Storage - Files"]}},"/storage/files/{id}/reupload":{"post":{"operationId":"StorageFilesController_reupload","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"multipart/form-data":{"schema":{"type":"object","required":["file"],"properties":{"file":{"type":"string","format":"binary"}}}}}},"responses":{"201":{"description":""}},"security":[{"JWT":[]}],"summary":"Re-upload missing physical file for an existing storage record","tags":["Storage - Files"]}},"/storage/seed/initialize":{"post":{"operationId":"StorageSeedController_initialize","parameters":[],"responses":{"201":{"description":""}},"security":[{"JWT":[]}],"tags":["StorageSeed"]}},"/security/statistics":{"get":{"operationId":"SecurityController_getStatistics","parameters":[],"responses":{"200":{"description":"Statistics retrieved successfully"}},"security":[{"JWT":[]}],"summary":"Get security module statistics","tags":["Security"]}},"/security/users":{"get":{"operationId":"SecurityUsersController_getUsers","parameters":[{"name":"page","required":false,"in":"query","description":"Page number","schema":{"type":"number"}},{"name":"limit","required":false,"in":"query","description":"Items per page","schema":{"type":"number"}},{"name":"search","required":false,"in":"query","description":"Search term (name, email, username)","schema":{"type":"string"}},{"name":"searchTerm","required":false,"in":"query","description":"Alias for search (frontend compatibility)","schema":{"type":"string"}},{"name":"searchBy","required":false,"in":"query","description":"Field to search by (name, email, username, uid, id)","schema":{"type":"string"}},{"name":"uid","required":false,"in":"query","description":"Filter by exact UID","schema":{"type":"string"}},{"name":"id","required":false,"in":"query","description":"Filter by exact ID","schema":{"type":"number"}},{"name":"profileCode","required":false,"in":"query","description":"Filter by profile code","schema":{"type":"number"}},{"name":"church","required":false,"in":"query","description":"Filter by church","schema":{"type":"string"}},{"name":"status","required":false,"in":"query","description":"Filter by active status","schema":{"type":"boolean"}},{"name":"blocked","required":false,"in":"query","description":"Filter by blocked status","schema":{"type":"boolean"}}],"responses":{"200":{"description":"Users retrieved successfully"},"403":{"description":"Forbidden"}},"security":[{"JWT":[]}],"summary":"Get users with pagination and search","tags":["Security Users"]},"post":{"operationId":"SecurityUsersController_createUser","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateUserDto"}}}},"responses":{"201":{"description":"User created successfully"},"400":{"description":"Bad Request"},"409":{"description":"Conflict - Username or email already exists"}},"security":[{"JWT":[]}],"summary":"Create new user","tags":["Security Users"]}},"/security/users/{uid}":{"get":{"operationId":"SecurityUsersController_getUserByUid","parameters":[{"name":"uid","required":true,"in":"path","description":"User UID","schema":{"type":"string"}}],"responses":{"200":{"description":"User found"},"404":{"description":"User not found"}},"security":[{"JWT":[]}],"summary":"Get user by UID","tags":["Security Users"]},"put":{"operationId":"SecurityUsersController_updateUser","parameters":[{"name":"uid","required":true,"in":"path","description":"User UID","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateUserDto"}}}},"responses":{"200":{"description":"User updated successfully"},"403":{"description":"Forbidden"},"404":{"description":"User not found"}},"security":[{"JWT":[]}],"summary":"Update user","tags":["Security Users"]},"delete":{"operationId":"SecurityUsersController_deleteUser","parameters":[{"name":"uid","required":true,"in":"path","description":"User UID","schema":{"type":"string"}}],"responses":{"200":{"description":"User deleted successfully"},"403":{"description":"Cannot delete own account"},"404":{"description":"User not found"}},"security":[{"JWT":[]}],"summary":"Delete user","tags":["Security Users"]}},"/security/users/{uid}/status":{"patch":{"operationId":"SecurityUsersController_changeUserStatus","parameters":[{"name":"uid","required":true,"in":"path","description":"User UID","schema":{"type":"string"}}],"responses":{"200":{"description":"User status changed successfully"},"403":{"description":"Cannot change own status"},"404":{"description":"User not found"}},"security":[{"JWT":[]}],"summary":"Change user status (activate/deactivate)","tags":["Security Users"]}},"/security/users/{uid}/block":{"patch":{"operationId":"SecurityUsersController_blockUser","parameters":[{"name":"uid","required":true,"in":"path","description":"User UID","schema":{"type":"string"}}],"responses":{"200":{"description":"User blocked successfully"}},"security":[{"JWT":[]}],"summary":"Block user","tags":["Security Users"]}},"/security/users/{uid}/unblock":{"patch":{"operationId":"SecurityUsersController_unblockUser","parameters":[{"name":"uid","required":true,"in":"path","description":"User UID","schema":{"type":"string"}}],"responses":{"200":{"description":"User unblocked successfully"}},"security":[{"JWT":[]}],"summary":"Unblock user","tags":["Security Users"]}},"/security/users/check/exists":{"get":{"operationId":"SecurityUsersController_checkUserExists","parameters":[{"name":"field","required":true,"in":"query","description":"Field to check","schema":{"enum":["username","email","uid"],"type":"string"}},{"name":"value","required":true,"in":"query","description":"Value to check","schema":{"type":"string"}}],"responses":{"200":{"description":"Check completed"}},"security":[{"JWT":[]}],"summary":"Check if user exists by field","tags":["Security Users"]}},"/security/profiles":{"get":{"operationId":"ProfilesController_getProfiles","parameters":[{"name":"page","required":false,"in":"query","schema":{"type":"number"}},{"name":"limit","required":false,"in":"query","schema":{"type":"number"}}],"responses":{"200":{"description":""}},"security":[{"JWT":[]}],"summary":"Get all profiles","tags":["Security Profiles"]},"post":{"operationId":"ProfilesController_createProfile","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateProfileDto"}}}},"responses":{"201":{"description":""}},"security":[{"JWT":[]}],"summary":"Create new profile","tags":["Security Profiles"]}},"/security/profiles/{code}":{"get":{"operationId":"ProfilesController_getProfileByCode","parameters":[{"name":"code","required":true,"in":"path","schema":{"type":"number"}}],"responses":{"200":{"description":""}},"security":[{"JWT":[]}],"summary":"Get profile by code","tags":["Security Profiles"]},"put":{"operationId":"ProfilesController_updateProfile","parameters":[{"name":"code","required":true,"in":"path","schema":{"type":"number"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateProfileDto"}}}},"responses":{"200":{"description":""}},"security":[{"JWT":[]}],"summary":"Update profile","tags":["Security Profiles"]},"delete":{"operationId":"ProfilesController_deleteProfile","parameters":[{"name":"code","required":true,"in":"path","schema":{"type":"number"}}],"responses":{"200":{"description":""}},"security":[{"JWT":[]}],"summary":"Delete profile","tags":["Security Profiles"]}},"/security/profiles/{code}/permissions":{"get":{"operationId":"ProfilesController_getPermissionsByProfile","parameters":[{"name":"code","required":true,"in":"path","schema":{"type":"number"}},{"name":"onlyAssigned","required":false,"in":"query","schema":{"type":"boolean"}},{"name":"page","required":false,"in":"query","schema":{"type":"number"}},{"name":"limit","required":false,"in":"query","schema":{"type":"number"}}],"responses":{"200":{"description":""}},"security":[{"JWT":[]}],"summary":"Get permissions by profile","tags":["Security Profiles"]},"post":{"operationId":"ProfilesController_setProfilePermissions","parameters":[{"name":"code","required":true,"in":"path","schema":{"type":"number"}}],"responses":{"201":{"description":""}},"security":[{"JWT":[]}],"summary":"Set permissions for profile","tags":["Security Profiles"]}},"/security/profiles/{code}/status":{"patch":{"operationId":"ProfilesController_changeProfileStatus","parameters":[{"name":"code","required":true,"in":"path","schema":{"type":"number"}}],"responses":{"200":{"description":""}},"security":[{"JWT":[]}],"summary":"Change profile status","tags":["Security Profiles"]}},"/security/permissions":{"get":{"operationId":"PermissionsController_getPermissions","parameters":[{"name":"page","required":false,"in":"query","description":"Page number (default: 1)","schema":{"type":"number"}},{"name":"limit","required":false,"in":"query","description":"Items per page (default: 12)","schema":{"type":"number"}},{"name":"search","required":false,"in":"query","description":"Search term to filter by code or description","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"security":[{"JWT":[]}],"summary":"Get all permissions with optional search","tags":["Security Permissions"]},"post":{"operationId":"PermissionsController_createPermissions","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"array","items":{"type":"string"}}}}},"responses":{"201":{"description":""}},"security":[{"JWT":[]}],"summary":"Create new permissions","tags":["Security Permissions"]}},"/security/permissions/{id}":{"get":{"operationId":"PermissionsController_getPermissionById","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"number"}}],"responses":{"200":{"description":""}},"security":[{"JWT":[]}],"summary":"Get permission by ID","tags":["Security Permissions"]},"put":{"operationId":"PermissionsController_updatePermission","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"number"}}],"responses":{"200":{"description":""}},"security":[{"JWT":[]}],"summary":"Update permission","tags":["Security Permissions"]},"delete":{"operationId":"PermissionsController_deletePermission","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"number"}}],"responses":{"200":{"description":""}},"security":[{"JWT":[]}],"summary":"Delete permission","tags":["Security Permissions"]}},"/catalogs/blood-types":{"get":{"description":"Devuelve tipos ABO/Rh desde los assets privados del modulo de catalogos.","operationId":"CatalogsController_getBloodTypes","parameters":[],"responses":{"200":{"description":"Tipos de sangre obtenidos correctamente.","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/BloodTypeDto"}}}}}},"security":[{"bearer":[]}],"summary":"Obtener catálogo estático de tipos de sangre","tags":["catalogs"]}},"/catalogs/allergies":{"get":{"description":"Devuelve catálogos estáticos para alergias, reacciones, severidad y criticidad.","operationId":"CatalogsController_getAllergyCatalogs","parameters":[],"responses":{"200":{"description":"Catálogos de alergias obtenidos correctamente.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AllergyCatalogsDto"}}}}},"security":[{"bearer":[]}],"summary":"Obtener catálogos de alergias","tags":["catalogs"]}},"/catalogs/allergies/allergens":{"get":{"operationId":"CatalogsController_getAllergens","parameters":[],"responses":{"200":{"description":"Alérgenos obtenidos correctamente.","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/AllergyCatalogOptionDto"}}}}}},"security":[{"bearer":[]}],"summary":"Obtener alérgenos catalogados","tags":["catalogs"]}},"/catalogs/allergies/reactions":{"get":{"operationId":"CatalogsController_getAllergyReactions","parameters":[],"responses":{"200":{"description":"Reacciones obtenidas correctamente.","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/AllergyCatalogOptionDto"}}}}}},"security":[{"bearer":[]}],"summary":"Obtener reacciones de alergias","tags":["catalogs"]}},"/catalogs/member-inactivation-reasons":{"get":{"description":"Devuelve motivos estáticos para desactivar registros de membresía.","operationId":"CatalogsController_getMemberInactivationReasons","parameters":[],"responses":{"200":{"description":"Motivos de inactivación obtenidos correctamente.","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/AllergyCatalogOptionDto"}}}}}},"security":[{"bearer":[]}],"summary":"Obtener motivos de inactivación de miembros","tags":["catalogs"]}},"/catalogs/member-statuses":{"get":{"description":"Devuelve el catálogo técnico vigente para maestro_miembros.STATUS.","operationId":"CatalogsController_getMemberStatuses","parameters":[],"responses":{"200":{"description":"Estados de membresía obtenidos correctamente.","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/AllergyCatalogOptionDto"}}}}}},"security":[{"bearer":[]}],"summary":"Obtener estados de membresía","tags":["catalogs"]}},"/activities":{"post":{"operationId":"ActivitiesController_create","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateActivityDto"}}}},"responses":{"201":{"description":"Activity created successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ActivityResponseDto"}}}},"400":{"description":"Bad request - validation errors"},"401":{"description":"Unauthorized"},"403":{"description":"Forbidden - insufficient permissions"}},"security":[{"bearer":[]}],"summary":"Create a new activity","tags":["Activities"]},"get":{"operationId":"ActivitiesController_findAll","parameters":[{"name":"search","required":false,"in":"query","description":"Search by activity name or description","schema":{"type":"string"}},{"name":"location","required":false,"in":"query","description":"Filter by location","schema":{"type":"string"}},{"name":"activityType","required":false,"in":"query","description":"Filter by activity type","schema":{"type":"string","enum":["1","2","3","4","5","6","7"]}},{"name":"status","required":false,"in":"query","description":"Filter by status","schema":{"example":"1","type":"string"}},{"name":"startDateFrom","required":false,"in":"query","description":"Fecha de inicio desde","schema":{"example":"2025-12-01","type":"string"}},{"name":"startDateTo","required":false,"in":"query","description":"Fecha de inicio hasta","schema":{"example":"2025-12-31","type":"string"}},{"name":"organizingMinistryId","required":false,"in":"query","description":"Filtrar por ministerio organizador","schema":{"type":"number"}},{"name":"responsibleUserId","required":false,"in":"query","description":"Filtrar por responsable","schema":{"type":"number"}},{"name":"hasAvailableQuota","required":false,"in":"query","description":"Filter by availability","schema":{"type":"boolean"}},{"name":"isActive","required":false,"in":"query","description":"Filter by active status","schema":{"type":"boolean"}},{"name":"category","required":false,"in":"query","description":"Filtrar por categoría","schema":{"type":"string"}},{"name":"tag","required":false,"in":"query","description":"Filtrar por tag","schema":{"type":"string"}},{"name":"minCost","required":false,"in":"query","description":"Costo mínimo","schema":{"type":"number"}},{"name":"maxCost","required":false,"in":"query","description":"Costo máximo","schema":{"type":"number"}},{"name":"currency","required":false,"in":"query","description":"Filter by currency","schema":{"enum":["DOP","USD","EUR"],"type":"string"}},{"name":"page","required":false,"in":"query","description":"Page number","schema":{"minimum":1,"example":1,"type":"number"}},{"name":"limit","required":false,"in":"query","description":"Items per page","schema":{"minimum":1,"maximum":100,"example":10,"type":"number"}},{"name":"sortBy","required":false,"in":"query","description":"Campo por el cual ordenar","schema":{"example":"startDate","type":"string"}},{"name":"sortOrder","required":false,"in":"query","description":"Dirección del ordenamiento","schema":{"example":"ASC","type":"string","enum":["ASC","DESC"]}},{"name":"select","required":false,"in":"query","description":"Columnas específicas a retornar (separadas por coma)","schema":{"example":"id,activityName,cost,currency,startDate","type":"string"}}],"responses":{"200":{"description":"Activities retrieved successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaginatedActivitiesResponseDto"}}}}},"security":[{"bearer":[]}],"summary":"Get all activities with filtering and pagination","tags":["Activities"]}},"/activities/reports":{"get":{"operationId":"ActivitiesController_getActivitiesReport","parameters":[{"name":"search","required":false,"in":"query","description":"Buscar por nombre de actividad","schema":{"type":"string"}},{"name":"location","required":false,"in":"query","description":"Filtrar por localidad","schema":{"type":"string"}},{"name":"activityType","required":false,"in":"query","description":"Filtrar por tipo","schema":{"type":"string","enum":["1","2","3","4","5","6","7"]}},{"name":"status","required":false,"in":"query","description":"Filtrar por estado: '0'=Cerrada, '1'=Abierta","schema":{"example":"1","type":"string"}},{"name":"startDateFrom","required":false,"in":"query","description":"Fecha de inicio desde","schema":{"example":"2025-12-01","type":"string"}},{"name":"startDateTo","required":false,"in":"query","description":"Fecha de inicio hasta","schema":{"example":"2025-12-31","type":"string"}},{"name":"organizingMinistryId","required":false,"in":"query","description":"Filtrar por ministerio organizador","schema":{"type":"number"}},{"name":"responsibleUserId","required":false,"in":"query","description":"Filtrar por responsable","schema":{"type":"number"}},{"name":"hasAvailableQuota","required":false,"in":"query","description":"Solo actividades con cupos disponibles","schema":{"type":"boolean"}},{"name":"isActive","required":false,"in":"query","description":"Solo actividades activas","schema":{"type":"boolean"}},{"name":"category","required":false,"in":"query","description":"Filtrar por categoría","schema":{"type":"string"}},{"name":"tag","required":false,"in":"query","description":"Filtrar por tag","schema":{"type":"string"}},{"name":"minCost","required":false,"in":"query","description":"Costo mínimo","schema":{"type":"number"}},{"name":"maxCost","required":false,"in":"query","description":"Costo máximo","schema":{"type":"number"}},{"name":"currency","required":false,"in":"query","description":"Moneda","schema":{"type":"string","enum":["USD","DOP","EUR"]}},{"name":"page","required":false,"in":"query","description":"Número de página para paginación","schema":{"minimum":1,"example":1,"type":"number"}},{"name":"limit","required":false,"in":"query","description":"Cantidad de registros por página","schema":{"minimum":1,"maximum":100,"example":10,"type":"number"}},{"name":"sortBy","required":false,"in":"query","description":"Campo por el cual ordenar","schema":{"example":"startDate","type":"string"}},{"name":"sortOrder","required":false,"in":"query","description":"Dirección del ordenamiento","schema":{"example":"ASC","type":"string","enum":["ASC","DESC"]}},{"name":"select","required":false,"in":"query","description":"Columnas específicas a retornar (separadas por coma)","schema":{"example":"id,activityName,cost,currency,startDate","type":"string"}}],"responses":{"200":{"description":"Activities report generated successfully"}},"security":[{"bearer":[]}],"summary":"Get activities report","tags":["Activities"]}},"/activities/{id}/report/kpis":{"get":{"description":"Returns cached executive KPIs for one activity. Use regenerate=true to recalculate the cached review.","operationId":"ActivitiesController_getActivityInlineKpis","parameters":[{"name":"id","required":true,"in":"path","description":"Activity ID","schema":{"type":"number"}},{"name":"regenerate","required":false,"in":"query","description":"Force KPI recalculation and replace the cached review","schema":{"type":"boolean"}}],"responses":{"200":{"description":"Activity KPIs retrieved successfully"},"404":{"description":"Activity not found"}},"security":[{"bearer":[]}],"summary":"Get inline activity KPIs","tags":["Activities"]}},"/activities/{id}/report/pdf":{"get":{"description":"Generates or retrieves a cached PDF report for the activity. Use regenerate=true to force regeneration.","operationId":"ActivitiesController_getActivityReportPDF","parameters":[{"name":"id","required":true,"in":"path","description":"Activity ID","schema":{"type":"number"}},{"name":"regenerate","required":false,"in":"query","description":"Force regeneration of the PDF report even if cached version exists","schema":{"type":"boolean"}},{"name":"includeParticipants","required":false,"in":"query","description":"Include participants list in the report (default: true)","schema":{"type":"boolean"}},{"name":"includeFinancials","required":false,"in":"query","description":"Include financial summary in the report (default: true)","schema":{"type":"boolean"}},{"name":"download","required":false,"in":"query","description":"Force download instead of inline display (default: false)","schema":{"type":"boolean"}}],"responses":{"200":{"description":"PDF report generated/retrieved successfully","content":{"application/pdf":{"schema":{"type":"string","format":"binary"}}}},"404":{"description":"Activity not found"}},"security":[{"bearer":[]}],"summary":"Get activity report as PDF","tags":["Activities"]}},"/activities/{id}/report/participants/xlsx":{"get":{"description":"Generates an administrative XLSX export with only the participants for the activity.","operationId":"ActivitiesController_getActivityParticipantsXLSX","parameters":[{"name":"id","required":true,"in":"path","description":"Activity ID","schema":{"type":"number"}},{"name":"regenerate","required":false,"in":"query","description":"Force regeneration of the XLSX export even if cached version exists","schema":{"type":"boolean"}}],"responses":{"200":{"description":"Participants XLSX generated successfully","content":{"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet":{"schema":{"type":"string","format":"binary"}}}},"404":{"description":"Activity not found"}},"security":[{"bearer":[]}],"summary":"Export activity participants as XLSX","tags":["Activities"]}},"/activities/{id}":{"get":{"operationId":"ActivitiesController_findOne","parameters":[{"name":"id","required":true,"in":"path","description":"Activity ID","schema":{"type":"number"}}],"responses":{"200":{"description":"Activity retrieved successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ActivityResponseDto"}}}},"404":{"description":"Activity not found"}},"security":[{"bearer":[]}],"summary":"Get activity by ID","tags":["Activities"]},"put":{"operationId":"ActivitiesController_update","parameters":[{"name":"id","required":true,"in":"path","description":"Activity ID","schema":{"type":"number"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateActivityDto"}}}},"responses":{"200":{"description":"Activity updated successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ActivityResponseDto"}}}},"400":{"description":"Bad request - validation errors"},"404":{"description":"Activity not found"}},"security":[{"bearer":[]}],"summary":"Update activity","tags":["Activities"]},"delete":{"operationId":"ActivitiesController_remove","parameters":[{"name":"id","required":true,"in":"path","description":"Activity ID","schema":{"type":"number"}}],"responses":{"200":{"description":"Activity deleted successfully"},"400":{"description":"Cannot delete activity with participants"},"404":{"description":"Activity not found"}},"security":[{"bearer":[]}],"summary":"Delete/Cancel activity","tags":["Activities"]}},"/activities/{id}/summary":{"get":{"operationId":"ActivitiesController_getActivitySummary","parameters":[{"name":"id","required":true,"in":"path","description":"Activity ID","schema":{"type":"number"}}],"responses":{"200":{"description":"Activity summary retrieved successfully"},"404":{"description":"Activity not found"}},"security":[{"bearer":[]}],"summary":"Get activity summary with statistics","tags":["Activities"]}},"/activities/{id}/availability":{"get":{"operationId":"ActivitiesController_checkAvailability","parameters":[{"name":"id","required":true,"in":"path","description":"Activity ID","schema":{"type":"number"}}],"responses":{"200":{"description":"Activity availability information","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ActivityAvailabilityDto"}}}},"404":{"description":"Activity not found"}},"security":[{"bearer":[]}],"summary":"Check activity availability and quota information","tags":["Activities"]}},"/activities/{id}/reserve-spot":{"post":{"operationId":"ActivitiesController_reserveSpot","parameters":[{"name":"id","required":true,"in":"path","description":"Activity ID","schema":{"type":"number"}}],"responses":{"200":{"description":"Spot reserved successfully"},"400":{"description":"Cannot reserve spot - activity full or closed"},"404":{"description":"Activity not found"}},"security":[{"bearer":[]}],"summary":"Reserve a spot in the activity for a member","tags":["Activities"]}},"/activities/{id}/release-spot":{"post":{"operationId":"ActivitiesController_releaseSpot","parameters":[{"name":"id","required":true,"in":"path","description":"Activity ID","schema":{"type":"number"}}],"responses":{"200":{"description":"Spot released successfully"},"400":{"description":"Cannot release spot"},"404":{"description":"Activity or participant not found"}},"security":[{"bearer":[]}],"summary":"Release a reserved spot in the activity","tags":["Activities"]}},"/activities/{id}/status":{"put":{"operationId":"ActivitiesController_changeStatus","parameters":[{"name":"id","required":true,"in":"path","description":"Activity ID","schema":{"type":"number"}}],"responses":{"200":{"description":"Activity status changed successfully"},"400":{"description":"Invalid status value"},"404":{"description":"Activity not found"}},"security":[{"bearer":[]}],"summary":"Change activity status","tags":["Activities"]}},"/activities/bulk/status":{"put":{"operationId":"ActivitiesController_bulkUpdateStatus","parameters":[],"responses":{"200":{"description":"Activities status updated successfully"},"400":{"description":"Invalid status value"}},"security":[{"bearer":[]}],"summary":"Bulk update activity status","tags":["Activities"]}},"/activities/bulk":{"delete":{"operationId":"ActivitiesController_bulkDelete","parameters":[],"responses":{"200":{"description":"Activities deleted successfully"},"400":{"description":"Cannot delete one or more activities"}},"security":[{"bearer":[]}],"summary":"Bulk delete activities","tags":["Activities"]}},"/activity-participants/register":{"post":{"operationId":"ParticipantsController_registerParticipant","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateParticipantDto"}}}},"responses":{"201":{"description":"Participant registered successfully"},"400":{"description":"Bad request - validation errors or activity full"},"404":{"description":"Activity or member not found"}},"security":[{"bearer":[]}],"summary":"Register participant for activity","tags":["Activity Participants"]}},"/activity-participants/bulk":{"post":{"operationId":"ParticipantsController_bulkRegisterParticipants","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BulkCreateParticipantDto"}}}},"responses":{"201":{"description":"Participants registered successfully"},"400":{"description":"Bad request - validation errors"}},"security":[{"bearer":[]}],"summary":"Register multiple participants for activity","tags":["Activity Participants"]}},"/activity-participants":{"get":{"operationId":"ParticipantsController_getParticipants","parameters":[{"name":"activityId","required":false,"in":"query","description":"Filtrar por actividad","schema":{"type":"number"}},{"name":"search","required":false,"in":"query","description":"Search by participant id, name, email, phone, member code or member identification","schema":{"type":"string"}},{"name":"participationStatus","required":false,"in":"query","description":"Filtrar por estado de participación","schema":{"type":"string","enum":["REGISTERED","CONFIRMED","WAITING","ATTENDED","ABSENT","CANCELLED","WITHDRAWN","PENDING_REDEMPTION"]}},{"name":"paymentStatus","required":false,"in":"query","description":"Filtrar por estado de pago","schema":{"enum":["PENDING","PAID","PARTIAL","EXONERATED","REFUNDED","DUE","NOT_APPLICABLE"],"type":"string"}},{"name":"registrationDateFrom","required":false,"in":"query","description":"Fecha de registro desde","schema":{"type":"string"}},{"name":"registrationDateTo","required":false,"in":"query","description":"Fecha de registro hasta","schema":{"type":"string"}},{"name":"confirmed","required":false,"in":"query","description":"Solo participantes confirmados","schema":{"type":"boolean"}},{"name":"attended","required":false,"in":"query","description":"Solo participantes que asistieron","schema":{"type":"boolean"}},{"name":"paymentCompleted","required":false,"in":"query","description":"Solo pagos completados","schema":{"type":"boolean"}},{"name":"onWaitingList","required":false,"in":"query","description":"Solo participantes en lista de espera","schema":{"type":"boolean"}},{"name":"isActive","required":false,"in":"query","description":"Solo participantes activos","schema":{"type":"boolean"}},{"name":"includeCancelled","required":false,"in":"query","description":"Include cancelled participants (status=0)","schema":{"default":false,"type":"boolean"}},{"name":"onlyPendingBalance","required":false,"in":"query","description":"Only participants that can still be charged: pending balance and no cancelled/void/exonerated/paid state","schema":{"default":false,"type":"boolean"}},{"name":"includeActivity","required":false,"in":"query","description":"Include activity details (reduces payload ~40% if false, default: false)","schema":{"default":false,"type":"boolean"}},{"name":"select","required":false,"in":"query","description":"Specific fields to return (comma-separated). Ex: id,participantName,participationStatus","schema":{"example":"id,participantName,participationStatus,paymentStatus","type":"string"}},{"name":"page","required":false,"in":"query","description":"Page number (1-based)","schema":{"minimum":1,"default":1,"type":"number"}},{"name":"limit","required":false,"in":"query","description":"Items per page","schema":{"minimum":1,"maximum":100,"default":10,"type":"number"}},{"name":"sortBy","required":false,"in":"query","description":"Campo de ordenamiento","schema":{"default":"registrationDate","type":"string"}},{"name":"sortOrder","required":false,"in":"query","description":"Dirección de ordenamiento","schema":{"default":"DESC","type":"string","enum":["ASC","DESC"]}},{"name":"memberName","required":false,"in":"query","schema":{"type":"string"}},{"name":"status","required":false,"in":"query","schema":{"enum":["REGISTERED","CONFIRMED","WAITING","ATTENDED","ABSENT","CANCELLED","WITHDRAWN","PENDING_REDEMPTION"],"type":"string"}}],"responses":{"200":{"description":"Participants retrieved successfully"}},"security":[{"bearer":[]}],"summary":"Get all participants with filtering","tags":["Activity Participants"]}},"/activity-participants/stats":{"get":{"operationId":"ParticipantsController_getParticipantStats","parameters":[{"name":"activityId","required":false,"in":"query","description":"Filter by activity ID","schema":{"type":"number"}}],"responses":{"200":{"description":"Statistics retrieved successfully"}},"security":[{"bearer":[]}],"summary":"Get participant statistics","tags":["Activity Participants"]}},"/activity-participants/{id}":{"get":{"operationId":"ParticipantsController_getParticipantById","parameters":[{"name":"id","required":true,"in":"path","description":"Participant ID","schema":{"type":"integer"}},{"name":"includePayments","required":false,"in":"query","description":"Include payment details calculated from cajas_pagos_recibidos (default: false)","schema":{"type":"boolean"}}],"responses":{"200":{"description":"Participant details retrieved successfully"},"404":{"description":"Participant not found"}},"security":[{"bearer":[]}],"summary":"Get specific participant details","tags":["Activity Participants"]},"put":{"operationId":"ParticipantsController_updateParticipant","parameters":[{"name":"id","required":true,"in":"path","description":"Participant ID","schema":{"type":"integer"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateParticipantDto"}}}},"responses":{"200":{"description":"Participant updated successfully"},"400":{"description":"Bad request - validation errors"},"404":{"description":"Participant not found"}},"security":[{"bearer":[]}],"summary":"Update participant information","tags":["Activity Participants"]},"delete":{"operationId":"ParticipantsController_deleteParticipant","parameters":[{"name":"id","required":true,"in":"path","description":"Participant ID","schema":{"type":"integer"}}],"responses":{"200":{"description":"Participant deleted successfully"},"404":{"description":"Participant not found"}},"security":[{"bearer":[]}],"summary":"Delete participant record permanently","tags":["Activity Participants"]}},"/activity-participants/{id}/checkin":{"put":{"operationId":"ParticipantsController_checkInParticipant","parameters":[{"name":"id","required":true,"in":"path","description":"Participant ID","schema":{"type":"integer"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CheckInParticipantDto"}}}},"responses":{"200":{"description":"Participant checked in successfully"},"400":{"description":"Cannot check-in participant"},"404":{"description":"Participant not found"}},"security":[{"bearer":[]}],"summary":"Check-in participant to activity","tags":["Activity Participants"]}},"/activity-participants/{id}/checkout":{"put":{"operationId":"ParticipantsController_checkOutParticipant","parameters":[{"name":"id","required":true,"in":"path","description":"Participant ID","schema":{"type":"integer"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CheckOutParticipantDto"}}}},"responses":{"200":{"description":"Participant checked out successfully"},"400":{"description":"Cannot check-out participant"},"404":{"description":"Participant not found"}},"security":[{"bearer":[]}],"summary":"Check-out participant from activity","tags":["Activity Participants"]}},"/activity-participants/{id}/confirm":{"put":{"operationId":"ParticipantsController_confirmParticipant","parameters":[{"name":"id","required":true,"in":"path","description":"Participant ID","schema":{"type":"integer"}}],"responses":{"200":{"description":"Participant confirmed successfully"},"400":{"description":"Cannot confirm participant"},"404":{"description":"Participant not found"}},"security":[{"bearer":[]}],"summary":"Confirm participant registration","tags":["Activity Participants"]}},"/activity-participants/bulk/confirm":{"put":{"operationId":"ParticipantsController_bulkConfirmParticipants","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BulkConfirmParticipantsDto"}}}},"responses":{"200":{"description":"Participants confirmed successfully"},"400":{"description":"Cannot confirm one or more participants"}},"security":[{"bearer":[]}],"summary":"Confirm multiple participants","tags":["Activity Participants"]}},"/activity-participants/bulk/checkin":{"put":{"operationId":"ParticipantsController_bulkCheckInParticipants","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BulkCheckInParticipantsDto"}}}},"responses":{"200":{"description":"Participants checked in successfully"},"400":{"description":"Cannot check-in one or more participants"}},"security":[{"bearer":[]}],"summary":"Bulk check-in participants","tags":["Activity Participants"]}},"/activity-participants/bulk/checkout":{"put":{"operationId":"ParticipantsController_bulkCheckOutParticipants","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BulkCheckOutParticipantsDto"}}}},"responses":{"200":{"description":"Participants checked out successfully"},"400":{"description":"Cannot check-out one or more participants"}},"security":[{"bearer":[]}],"summary":"Bulk check-out participants","tags":["Activity Participants"]}},"/activity-participants/{id}/waiting-list":{"put":{"operationId":"ParticipantsController_moveToWaitingList","parameters":[{"name":"id","required":true,"in":"path","description":"Participant ID","schema":{"type":"integer"}}],"responses":{"200":{"description":"Participant moved to waiting list successfully"},"400":{"description":"Cannot move participant to waiting list"}},"security":[{"bearer":[]}],"summary":"Move participant to waiting list","tags":["Activity Participants"]}},"/activity-participants/waiting-list/promote/{activityId}":{"put":{"operationId":"ParticipantsController_promoteFromWaitingList","parameters":[{"name":"activityId","required":true,"in":"path","description":"Activity ID","schema":{"type":"integer"}}],"responses":{"200":{"description":"Participant promoted successfully"},"400":{"description":"No participants to promote"}},"security":[{"bearer":[]}],"summary":"Promote next participant from waiting list","tags":["Activity Participants"]}},"/activity-participants/{id}/cancel":{"post":{"operationId":"ParticipantsController_cancelParticipant","parameters":[{"name":"id","required":true,"in":"path","description":"Participant ID","schema":{"type":"integer"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RemoveParticipantDto"}}}},"responses":{"200":{"description":"Participant cancelled successfully"},"400":{"description":"Cannot remove participant"},"404":{"description":"Participant not found"}},"security":[{"bearer":[]}],"summary":"Cancel/Remove participant from activity","tags":["Activity Participants"]}},"/activity-participants/{id}/restore":{"post":{"operationId":"ParticipantsController_restoreParticipant","parameters":[{"name":"id","required":true,"in":"path","description":"Participant ID","schema":{"type":"integer"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RestoreParticipantDto"}}}},"responses":{"200":{"description":"Participant restored successfully"},"400":{"description":"Cannot restore participant"},"404":{"description":"Participant not found"}},"security":[{"bearer":[]}],"summary":"Restore a cancelled participant registration","tags":["Activity Participants"]}},"/activity-participants/{id}/pdf":{"get":{"operationId":"ParticipantsController_generatePDF","parameters":[{"name":"id","required":true,"in":"path","description":"Participant ID","schema":{"type":"integer"}}],"responses":{"200":{"description":"PDF generated successfully","content":{"application/pdf":{"schema":{"type":"string","format":"binary"}}}},"404":{"description":"Participant not found"}},"security":[{"bearer":[]}],"summary":"Generate PDF with participant registration details","tags":["Activity Participants"]}},"/activity-participants/{id}/reconcile":{"post":{"operationId":"ParticipantsController_reconcileParticipant","parameters":[{"name":"id","required":true,"in":"path","description":"Participant ID","schema":{"type":"number"}}],"responses":{"200":{"description":"Reconciliation result"},"404":{"description":"Participant not found"}},"security":[{"bearer":[]}],"summary":"Reconcile payment state for a single participant","tags":["Activity Participants"]}},"/activity-participants/activity/{activityId}/reconcile-payments":{"post":{"operationId":"ParticipantsController_reconcileActivity","parameters":[{"name":"activityId","required":true,"in":"path","description":"Activity ID","schema":{"type":"number"}}],"responses":{"200":{"description":"Reconciliation summary"}},"security":[{"bearer":[]}],"summary":"Reconcile all participant payments for an activity","tags":["Activity Participants"]}},"/activity-participants/sync-failures":{"get":{"operationId":"ParticipantsController_getSyncFailures","parameters":[],"responses":{"200":{"description":"List of unresolved sync failures"}},"security":[{"bearer":[]}],"summary":"Get unresolved payment sync failures","tags":["Activity Participants"]}},"/activity-participants/sync-failures/{id}/resolve":{"post":{"operationId":"ParticipantsController_resolveSyncFailure","parameters":[{"name":"id","required":true,"in":"path","description":"Sync failure ID","schema":{"type":"number"}}],"responses":{"200":{"description":"Sync failure resolved"}},"security":[{"bearer":[]}],"summary":"Manually resolve a sync failure","tags":["Activity Participants"]}},"/activity-checkin-checkout/activities/{activityId}/events":{"get":{"operationId":"ActivityCheckInOutController_getActivityScanEvents","parameters":[{"name":"activityId","required":true,"in":"path","schema":{"type":"number"}},{"name":"limit","required":true,"in":"query","schema":{"type":"string"}}],"responses":{"200":{"description":"Eventos recientes de escaneo","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/ActivityAttendanceScanEventEntity"}}}}}},"security":[{"bearer":[]}],"summary":"Listar eventos recientes de escaneo CheckIn/CheckOut por actividad","tags":["Activity CheckIn/CheckOut"]}},"/activity-checkin-checkout/participants/{participantId}/scan-code":{"get":{"operationId":"ActivityCheckInOutController_getParticipantScanCode","parameters":[{"name":"participantId","required":true,"in":"path","schema":{"type":"number"}}],"responses":{"200":{"description":"Payload escaneable del participante","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ActivityParticipantScanCodeResponseDto"}}}}},"security":[{"bearer":[]}],"summary":"Obtener payload estandar para QR/codigo de barra de un participante","tags":["Activity CheckIn/CheckOut"]}},"/activity-checkin-checkout/participants/{participantId}/scan-code/resend":{"post":{"operationId":"ActivityCheckInOutController_resendParticipantScanCode","parameters":[{"name":"participantId","required":true,"in":"path","schema":{"type":"number"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ActivityParticipantScanCodeResendDto"}}}},"responses":{"201":{"description":"Credencial encolada para reenvio","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ActivityParticipantScanCodeResendResponseDto"}}}}},"security":[{"bearer":[]}],"summary":"Reenviar credencial de ingreso de un participante","tags":["Activity CheckIn/CheckOut"]}},"/activity-checkin-checkout/resolve":{"post":{"operationId":"ActivityCheckInOutController_resolveScan","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ActivityCheckInOutScanDto"}}}},"responses":{"200":{"description":"Participante resuelto por escaneo"}},"security":[{"bearer":[]}],"summary":"Resolver participante y add-ons por escaneo","tags":["Activity CheckIn/CheckOut"]}},"/activity-checkin-checkout/checkin":{"post":{"operationId":"ActivityCheckInOutController_checkInByScan","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ActivityCheckInOutScanDto"}}}},"responses":{"201":{"description":"Check-in confirmado por escaneo"}},"security":[{"bearer":[]}],"summary":"Confirmar asistencia por escaneo de QR/codigo de barra","tags":["Activity CheckIn/CheckOut"]}},"/activity-checkin-checkout/checkout":{"post":{"operationId":"ActivityCheckInOutController_checkOutByScan","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ActivityCheckOutScanDto"}}}},"responses":{"201":{"description":"Check-out confirmado por escaneo"}},"security":[{"bearer":[]}],"summary":"Confirmar salida por escaneo de QR/codigo de barra","tags":["Activity CheckIn/CheckOut"]}},"/members":{"get":{"operationId":"MembersController_getMembers","parameters":[{"name":"select","required":false,"in":"query","description":"Columnas especificas a retornar (separadas por coma). Usar nombres de propiedades de la entidad.","schema":{"example":"id,firstName,lastName,email,status","type":"string"}},{"name":"sex","required":false,"in":"query","description":"Sex filter (accepts: MASCULINO/M/1 or FEMENINO/F/0)","schema":{"type":"string","enum":["MALE","FEMALE"]}},{"name":"city","required":false,"in":"query","description":"City filter","schema":{"type":"string"}},{"name":"harvest","required":false,"in":"query","description":"Harvest filter","schema":{"type":"string"}},{"name":"maritalStatus","required":false,"in":"query","description":"Marital status filter","schema":{"type":"string"}},{"name":"status","required":false,"in":"query","description":"Status filter","schema":{"type":"string"}},{"name":"church","required":false,"in":"query","description":"Church filter","schema":{"type":"string"}},{"name":"sortOrder","required":false,"in":"query","description":"Sort order","schema":{"enum":["ASC","DESC"],"type":"string"}},{"name":"sortBy","required":false,"in":"query","description":"Sort field","schema":{"type":"string"}},{"name":"search","required":false,"in":"query","description":"Search term","schema":{"type":"string"}},{"name":"limit","required":false,"in":"query","description":"Items per page","schema":{"type":"number"}},{"name":"page","required":false,"in":"query","description":"Page number","schema":{"type":"number"}}],"responses":{"200":{"description":"Members retrieved successfully"},"403":{"description":"Forbidden"}},"security":[{"JWT":[]}],"summary":"Get members with pagination, filters and search","tags":["Members"]},"post":{"operationId":"MembersController_create","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateMemberDto"}},"multipart/form-data":{"schema":{"$ref":"#/components/schemas/CreateMemberDto"}}}},"responses":{"201":{"description":"Member created successfully"},"400":{"description":"Bad Request"},"409":{"description":"Conflict - Identification already exists"}},"security":[{"JWT":[]}],"summary":"Create new member","tags":["Members"]}},"/members/search":{"get":{"operationId":"MembersController_searchMembers","parameters":[{"name":"q","required":true,"in":"query","description":"Search term","schema":{"type":"string"}},{"name":"limit","required":false,"in":"query","description":"Max results","schema":{"type":"number"}},{"name":"church","required":true,"in":"query","schema":{"type":"string"}}],"responses":{"200":{"description":"Search results"}},"security":[{"JWT":[]}],"summary":"Search members by name, id, code, identification or email (for autocomplete)","tags":["Members"]}},"/members/statistics":{"get":{"operationId":"MembersController_getStatistics","parameters":[{"name":"church","required":true,"in":"query","schema":{"type":"string"}}],"responses":{"200":{"description":"Statistics retrieved successfully"}},"security":[{"JWT":[]}],"summary":"Get members statistics","tags":["Members"]}},"/members/sex-suggestion":{"get":{"operationId":"MembersController_suggestSexByFirstName","parameters":[{"name":"firstName","required":true,"in":"query","description":"First name to evaluate","schema":{"type":"string"}},{"name":"church","required":false,"in":"query","description":"Church/location scope","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"security":[{"JWT":[]}],"summary":"Suggest sex from first name using existing church records","tags":["Members"]}},"/members/match-candidates":{"post":{"operationId":"MembersController_findMatchCandidates","parameters":[],"responses":{"201":{"description":""}},"security":[{"JWT":[]}],"summary":"Find possible duplicate member/new believer records before saving","tags":["Members"]}},"/members/{id}/printable-profile":{"get":{"operationId":"MembersController_printMemberProfile","parameters":[{"name":"id","required":true,"in":"path","description":"Member ID","schema":{"type":"number"}}],"responses":{"200":{"description":"Printable member profile PDF"}},"security":[{"JWT":[]}],"summary":"Generate printable member profile PDF","tags":["Members"]}},"/members/{id}":{"get":{"operationId":"MembersController_findOne","parameters":[{"name":"id","required":true,"in":"path","description":"Member ID","schema":{"type":"number"}}],"responses":{"200":{"description":"Member found"},"404":{"description":"Member not found"}},"security":[{"JWT":[]}],"summary":"Get member by ID","tags":["Members"]},"put":{"operationId":"MembersController_update","parameters":[{"name":"id","required":true,"in":"path","description":"Member ID","schema":{"type":"number"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateMemberDto"}}}},"responses":{"200":{"description":"Member updated successfully"},"403":{"description":"Forbidden"},"404":{"description":"Member not found"}},"security":[{"JWT":[]}],"summary":"Update member","tags":["Members"]},"delete":{"operationId":"MembersController_remove","parameters":[{"name":"id","required":true,"in":"path","description":"Member ID","schema":{"type":"number"}}],"responses":{"200":{"description":"Member deleted successfully"},"403":{"description":"Forbidden"},"404":{"description":"Member not found"}},"security":[{"JWT":[]}],"summary":"Delete member (soft delete)","tags":["Members"]}},"/members/by-code/{code}":{"get":{"operationId":"MembersController_findByCode","parameters":[{"name":"code","required":true,"in":"path","description":"Member code","schema":{"type":"number"}}],"responses":{"200":{"description":"Member found"},"404":{"description":"Member not found"}},"security":[{"JWT":[]}],"summary":"Get member by code","tags":["Members"]}},"/members/by-identification/{identification}":{"get":{"operationId":"MembersController_findByIdentification","parameters":[{"name":"identification","required":true,"in":"path","description":"Member identification","schema":{"type":"string"}}],"responses":{"200":{"description":"Member found"},"404":{"description":"Member not found"}},"security":[{"JWT":[]}],"summary":"Get member by identification","tags":["Members"]}},"/members/export/csv":{"get":{"operationId":"MembersController_exportToCsv","parameters":[{"name":"select","required":false,"in":"query","description":"Columnas especificas a retornar (separadas por coma). Usar nombres de propiedades de la entidad.","schema":{"example":"id,firstName,lastName,email,status","type":"string"}},{"name":"sex","required":false,"in":"query","description":"Sexo (MALE=Masculino, FEMALE=Femenino)","schema":{"type":"string","enum":["MALE","FEMALE"]}},{"name":"status","required":false,"in":"query","schema":{"type":"string"}},{"name":"church","required":false,"in":"query","schema":{"type":"string"}}],"responses":{"200":{"description":"CSV data"}},"security":[{"JWT":[]}],"summary":"Export members to CSV","tags":["Members"]}},"/members/reports/summary":{"get":{"operationId":"MembersController_getComprehensiveReport","parameters":[{"name":"church","required":true,"in":"query","schema":{"type":"string"}}],"responses":{"200":{"description":"Report data retrieved successfully"}},"security":[{"JWT":[]}],"summary":"Get comprehensive members report","tags":["Members"]}},"/members/{id}/ministries":{"get":{"operationId":"MembersController_getMemberMinistries","parameters":[{"name":"id","required":true,"in":"path","description":"ID del miembro","schema":{"type":"number"}}],"responses":{"200":{"description":"Ministerios recuperados exitosamente"}},"security":[{"JWT":[]}],"summary":"Obtener ministerios y grupos de un miembro","tags":["Members"]},"post":{"operationId":"MembersController_addMinistries","parameters":[{"name":"id","required":true,"in":"path","description":"ID del miembro","schema":{"type":"number"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AddMemberMinistriesDto"}}}},"responses":{"200":{"description":"Ministerios agregados exitosamente"}},"security":[{"JWT":[]}],"summary":"Agregar ministerios a un miembro","tags":["Members"]},"delete":{"operationId":"MembersController_removeMinistries","parameters":[{"name":"id","required":true,"in":"path","description":"ID del miembro","schema":{"type":"number"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RemoveMemberMinistriesDto"}}}},"responses":{"200":{"description":"Ministerios removidos exitosamente"}},"security":[{"JWT":[]}],"summary":"Remover ministerios de un miembro","tags":["Members"]}},"/members/{id}/ministry-groups":{"get":{"operationId":"MembersController_getMemberMinistryGroups","parameters":[{"name":"id","required":true,"in":"path","description":"ID del miembro","schema":{"type":"number"}}],"responses":{"200":{"description":"Grupos recuperados exitosamente"}},"security":[{"JWT":[]}],"summary":"Obtener solo los grupos de ministerio de un miembro","tags":["Members"]},"post":{"operationId":"MembersController_addMinistryGroups","parameters":[{"name":"id","required":true,"in":"path","description":"ID del miembro","schema":{"type":"number"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AddMemberMinistryGroupsDto"}}}},"responses":{"200":{"description":"Grupos agregados exitosamente"}},"security":[{"JWT":[]}],"summary":"Agregar grupos de ministerio a un miembro","tags":["Members"]},"delete":{"operationId":"MembersController_removeMinistryGroups","parameters":[{"name":"id","required":true,"in":"path","description":"ID del miembro","schema":{"type":"number"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RemoveMemberMinistryGroupsDto"}}}},"responses":{"200":{"description":"Grupos removidos exitosamente"}},"security":[{"JWT":[]}],"summary":"Remover grupos de ministerio de un miembro","tags":["Members"]}},"/members/{id}/ministries/sync":{"put":{"operationId":"MembersController_syncMinistries","parameters":[{"name":"id","required":true,"in":"path","description":"ID del miembro","schema":{"type":"number"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SyncMemberMinistriesDto"}}}},"responses":{"200":{"description":"Ministerios sincronizados exitosamente"}},"security":[{"JWT":[]}],"summary":"Sincronizar ministerios y grupos (reemplaza todos)","tags":["Members"]}},"/members/{id}/leadership":{"get":{"operationId":"MembersController_getMemberLeaderships","parameters":[{"name":"id","required":true,"in":"path","description":"ID del miembro","schema":{"type":"number"}}],"responses":{"200":{"description":"Liderazgos recuperados exitosamente"}},"security":[{"JWT":[]}],"summary":"Obtener ministerios donde el miembro es líder","tags":["Members"]}},"/members/{id}/ministry-leadership":{"put":{"operationId":"MembersController_setMinistryLeadership","parameters":[{"name":"id","required":true,"in":"path","description":"ID del miembro","schema":{"type":"number"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SetMinistryLeaderDto"}}}},"responses":{"200":{"description":"Liderazgo actualizado exitosamente"}},"security":[{"JWT":[]}],"summary":"Establecer o remover liderazgo de un ministerio","tags":["Members"]}},"/members/{id}/ministry-group-leadership":{"put":{"operationId":"MembersController_setMinistryGroupLeadership","parameters":[{"name":"id","required":true,"in":"path","description":"ID del miembro","schema":{"type":"number"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SetMinistryGroupLeaderDto"}}}},"responses":{"200":{"description":"Liderazgo actualizado exitosamente"}},"security":[{"JWT":[]}],"summary":"Establecer o remover liderazgo de un grupo de ministerio","tags":["Members"]}},"/members/{id}/ministries-leadership":{"put":{"operationId":"MembersController_updateMinistriesLeadership","parameters":[{"name":"id","required":true,"in":"path","description":"ID del miembro","schema":{"type":"number"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateMinistriesLeadershipDto"}}}},"responses":{"200":{"description":"Liderazgos actualizados exitosamente"}},"security":[{"JWT":[]}],"summary":"Actualizar liderazgo de múltiples ministerios","tags":["Members"]}},"/members/{id}/ministry-groups-leadership":{"put":{"operationId":"MembersController_updateMinistryGroupsLeadership","parameters":[{"name":"id","required":true,"in":"path","description":"ID del miembro","schema":{"type":"number"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateMinistryGroupsLeadershipDto"}}}},"responses":{"200":{"description":"Liderazgos actualizados exitosamente"}},"security":[{"JWT":[]}],"summary":"Actualizar liderazgo de múltiples grupos","tags":["Members"]}},"/members/{id}/add-as-leader":{"post":{"operationId":"MembersController_addMemberAsLeader","parameters":[{"name":"id","required":true,"in":"path","description":"ID del miembro","schema":{"type":"number"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AddMemberAsLeaderDto"}}}},"responses":{"200":{"description":"Miembro agregado como líder exitosamente"}},"security":[{"JWT":[]}],"summary":"Agregar miembro como líder de ministerios y/o grupos","tags":["Members"]}},"/members/{id}/remove-all-leadership":{"delete":{"operationId":"MembersController_removeAllLeadership","parameters":[{"name":"id","required":true,"in":"path","description":"ID del miembro","schema":{"type":"number"}}],"responses":{"200":{"description":"Liderazgo removido exitosamente"}},"security":[{"JWT":[]}],"summary":"Remover todo el liderazgo de un miembro","tags":["Members"]}},"/images/upload":{"post":{"operationId":"ImagesController_upload","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateImageDto"}}}},"responses":{"201":{"description":""}},"tags":["Images"]}},"/images/deleted":{"get":{"operationId":"ImagesController_findDeleted","parameters":[],"responses":{"200":{"description":"Lista de imágenes eliminadas"},"403":{"description":"Sin permisos para ver imágenes eliminadas"}},"summary":"Listar imágenes eliminadas (requiere FULL_ACCESS o RESTORE_IMAGE)","tags":["Images"]}},"/images":{"get":{"operationId":"ImagesController_findAll","parameters":[{"name":"page","required":false,"in":"query","description":"Número de página para la paginación","schema":{"example":1,"type":"number"}},{"name":"limit","required":false,"in":"query","description":"Número de resultados por página para la paginación","schema":{"example":10,"type":"number"}},{"name":"ownerId","required":false,"in":"query","description":"ID del propietario de la imagen","schema":{"example":123,"type":"number"}},{"name":"ownerType","required":false,"in":"query","description":"Tipo de propietario de la imagen","schema":{"example":"user","type":"string"}},{"name":"type","required":false,"in":"query","description":"Tipo de imagen","schema":{"example":"profile","type":"string"}},{"name":"visibility","required":false,"in":"query","description":"Visibilidad de la imagen","schema":{"example":"public","type":"string"}},{"name":"status","required":false,"in":"query","description":"Estado de la imagen","schema":{"example":"active","type":"string"}},{"name":"search","required":false,"in":"query","description":"Búsqueda por nombre o descripción","schema":{"example":"perfil","type":"string"}},{"name":"sortBy","required":false,"in":"query","description":"Campo por el cual ordenar los resultados","schema":{"example":"createdAt","type":"string"}},{"name":"sortOrder","required":false,"in":"query","description":"Orden de los resultados","schema":{"example":"DESC","type":"string"}}],"responses":{"200":{"description":""}},"tags":["Images"]}},"/images/{id}":{"get":{"operationId":"ImagesController_findOne","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"tags":["Images"]},"patch":{"operationId":"ImagesController_update","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateImageDto"}}}},"responses":{"200":{"description":""}},"tags":["Images"]},"delete":{"operationId":"ImagesController_remove","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"tags":["Images"]}},"/images/user-profile/{uid}":{"post":{"operationId":"ImagesController_uploadUserProfilePhoto","parameters":[{"name":"uid","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"201":{"description":""}},"tags":["Images"]}},"/images/member-profile/{id}":{"delete":{"operationId":"ImagesController_removeMemberProfile","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"tags":["Images"]}},"/images/user-profile/{uid}/{id}":{"delete":{"operationId":"ImagesController_removeUserProfilePhoto","parameters":[{"name":"uid","required":true,"in":"path","schema":{"type":"string"}},{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"tags":["Images"]}},"/images/{id}/hard":{"delete":{"operationId":"ImagesController_hardDelete","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"tags":["Images"]}},"/images/{id}/restore":{"post":{"operationId":"ImagesController_restore","parameters":[{"name":"id","required":true,"in":"path","description":"UUID de la imagen","schema":{"type":"string"}}],"responses":{"200":{"description":"Imagen restaurada exitosamente"},"403":{"description":"Sin permisos para restaurar"},"404":{"description":"Imagen no encontrada o archivo físico no existe"}},"summary":"Restaurar una imagen eliminada (requiere FULL_ACCESS o RESTORE_IMAGE)","tags":["Images"]}},"/images/{id}/reupload":{"post":{"description":"Permite subir un nuevo archivo físico cuando el original se perdió, manteniendo todos los metadatos del registro.","operationId":"ImagesController_reuploadFile","parameters":[{"name":"id","required":true,"in":"path","description":"UUID de la imagen","schema":{"type":"string"}}],"responses":{"200":{"description":"Archivo re-subido exitosamente"},"400":{"description":"El archivo físico ya existe o archivo inválido"},"403":{"description":"Sin permisos para re-subir"},"404":{"description":"Imagen no encontrada"}},"summary":"Re-subir archivo físico de una imagen existente (requiere FULL_ACCESS o RESTORE_IMAGE)","tags":["Images"]}},"/images/{id}/set-primary":{"post":{"operationId":"ImagesController_setPrimary","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"201":{"description":""}},"summary":"Establecer imagen como principal","tags":["Images"]}},"/images/{id}/file":{"get":{"description":"Sirve la imagen directamente. Las públicas no requieren auth, las privadas sí.","operationId":"ImagesController_getImageFile","parameters":[{"name":"id","required":true,"in":"path","description":"UUID de la imagen","schema":{"type":"string"}},{"name":"variant","required":false,"in":"query","description":"Variante: thumbnail, small, medium, large","schema":{"type":"string"}}],"responses":{"200":{"description":"Imagen servida correctamente"},"403":{"description":"Sin permisos para acceder a la imagen"},"404":{"description":"Imagen no encontrada"}},"summary":"Obtener archivo de imagen","tags":["Images"]}},"/images/{id}/download":{"get":{"operationId":"ImagesController_download","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"summary":"Descargar imagen como archivo adjunto","tags":["Images"]}},"/images/{id}/url":{"get":{"operationId":"ImagesController_getUrl","parameters":[{"name":"id","required":true,"in":"path","description":"UUID de la imagen","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"summary":"Obtener URL de acceso a la imagen","tags":["Images"]}},"/images/{id}/base64":{"get":{"description":"Útil para imágenes pequeñas que se embeben directamente en JSON","operationId":"ImagesController_getBase64","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}},{"name":"variant","required":false,"in":"query","description":"Variante: thumbnail, small, medium, large","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"summary":"Obtener imagen en Base64","tags":["Images"]}},"/marital-management/kpis":{"get":{"operationId":"MaritalManagementController_getKpis","parameters":[{"name":"church","required":false,"in":"query","schema":{"maxLength":5,"type":"string"}},{"name":"status","required":false,"in":"query","schema":{"type":"string","enum":["DRAFT","IN_REVIEW","COMPLETED","CANCELLED","REJECTED"]}},{"name":"processType","required":false,"in":"query","schema":{"type":"string","enum":["CLOSE_LINK","CORRECT_LINK","CHANGE_SPOUSE","ADMIN_REPAIR"]}},{"name":"reason","required":false,"in":"query","schema":{"type":"string","enum":["DIVORCE","SEPARATION","WIDOWHOOD","ADMIN_CORRECTION","CAPTURE_ERROR_ANNULMENT","OTHER"]}},{"name":"dateFrom","required":false,"in":"query","schema":{"example":"2026-01-01","type":"string"}},{"name":"dateTo","required":false,"in":"query","schema":{"example":"2026-12-31","type":"string"}},{"name":"page","required":false,"in":"query","schema":{"type":"number"}},{"name":"limit","required":false,"in":"query","schema":{"type":"number"}}],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"summary":"Obtener KPIs de Gestion Matrimonial","tags":["Marital Management"]}},"/marital-management/reports/processes":{"get":{"operationId":"MaritalManagementController_getProcessReport","parameters":[{"name":"church","required":false,"in":"query","schema":{"maxLength":5,"type":"string"}},{"name":"status","required":false,"in":"query","schema":{"type":"string","enum":["DRAFT","IN_REVIEW","COMPLETED","CANCELLED","REJECTED"]}},{"name":"processType","required":false,"in":"query","schema":{"type":"string","enum":["CLOSE_LINK","CORRECT_LINK","CHANGE_SPOUSE","ADMIN_REPAIR"]}},{"name":"reason","required":false,"in":"query","schema":{"type":"string","enum":["DIVORCE","SEPARATION","WIDOWHOOD","ADMIN_CORRECTION","CAPTURE_ERROR_ANNULMENT","OTHER"]}},{"name":"dateFrom","required":false,"in":"query","schema":{"example":"2026-01-01","type":"string"}},{"name":"dateTo","required":false,"in":"query","schema":{"example":"2026-12-31","type":"string"}},{"name":"page","required":false,"in":"query","schema":{"type":"number"}},{"name":"limit","required":false,"in":"query","schema":{"type":"number"}}],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"summary":"Reporte filtrable de procesos matrimoniales","tags":["Marital Management"]}},"/marital-management/reports/processes/export/csv":{"get":{"operationId":"MaritalManagementController_exportProcessReportCsv","parameters":[{"name":"church","required":false,"in":"query","schema":{"maxLength":5,"type":"string"}},{"name":"status","required":false,"in":"query","schema":{"type":"string","enum":["DRAFT","IN_REVIEW","COMPLETED","CANCELLED","REJECTED"]}},{"name":"processType","required":false,"in":"query","schema":{"type":"string","enum":["CLOSE_LINK","CORRECT_LINK","CHANGE_SPOUSE","ADMIN_REPAIR"]}},{"name":"reason","required":false,"in":"query","schema":{"type":"string","enum":["DIVORCE","SEPARATION","WIDOWHOOD","ADMIN_CORRECTION","CAPTURE_ERROR_ANNULMENT","OTHER"]}},{"name":"dateFrom","required":false,"in":"query","schema":{"example":"2026-01-01","type":"string"}},{"name":"dateTo","required":false,"in":"query","schema":{"example":"2026-12-31","type":"string"}},{"name":"page","required":false,"in":"query","schema":{"type":"number"}},{"name":"limit","required":false,"in":"query","schema":{"type":"number"}}],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"summary":"Exportar reporte de procesos matrimoniales a CSV","tags":["Marital Management"]}},"/marital-management/audit":{"get":{"operationId":"MaritalManagementController_findAudit","parameters":[{"name":"church","required":false,"in":"query","schema":{"maxLength":5,"type":"string"}},{"name":"processId","required":false,"in":"query","schema":{"type":"number"}},{"name":"eventType","required":false,"in":"query","schema":{"maxLength":80,"type":"string"}},{"name":"dateFrom","required":false,"in":"query","schema":{"example":"2026-01-01","type":"string"}},{"name":"dateTo","required":false,"in":"query","schema":{"example":"2026-12-31","type":"string"}},{"name":"page","required":false,"in":"query","schema":{"type":"number"}},{"name":"limit","required":false,"in":"query","schema":{"type":"number"}}],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"summary":"Auditoria visible del modulo de Gestion Matrimonial","tags":["Marital Management"]}},"/marital-management/people/{type}/{id}/active-link":{"get":{"operationId":"MaritalManagementController_findActiveLink","parameters":[{"name":"type","required":true,"in":"path","schema":{"type":"string"}},{"name":"id","required":true,"in":"path","schema":{"type":"number"}},{"name":"church","required":false,"in":"query","schema":{"maxLength":5,"type":"string"}}],"responses":{"200":{"description":"Vinculo activo encontrado o null."}},"security":[{"bearer":[]}],"summary":"Consultar vinculo matrimonial activo de una persona","tags":["Marital Management"]}},"/marital-management/people/{type}/{id}/summary":{"get":{"operationId":"MaritalManagementController_getPersonSummary","parameters":[{"name":"type","required":true,"in":"path","schema":{"type":"string"}},{"name":"id","required":true,"in":"path","schema":{"type":"number"}},{"name":"church","required":false,"in":"query","schema":{"maxLength":5,"type":"string"}}],"responses":{"200":{"description":"Resumen matrimonial consolidado."}},"security":[{"bearer":[]}],"summary":"Consultar resumen matrimonial de una persona","tags":["Marital Management"]}},"/marital-management/people/{type}/{id}/children-impact":{"get":{"operationId":"MaritalManagementController_getChildrenImpact","parameters":[{"name":"type","required":true,"in":"path","schema":{"type":"string"}},{"name":"id","required":true,"in":"path","schema":{"type":"number"}},{"name":"church","required":false,"in":"query","schema":{"maxLength":5,"type":"string"}},{"name":"spouseType","required":true,"in":"query","schema":{"type":"string","enum":["member","new_believer"]}},{"name":"spouseId","required":true,"in":"query","schema":{"type":"number"}}],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"summary":"Previsualizar hijos e hijastros afectados","tags":["Marital Management"]}},"/marital-management/processes":{"get":{"operationId":"MaritalManagementController_findAll","parameters":[{"name":"church","required":false,"in":"query","schema":{"maxLength":5,"type":"string"}},{"name":"status","required":false,"in":"query","schema":{"type":"string","enum":["DRAFT","IN_REVIEW","COMPLETED","CANCELLED","REJECTED"]}},{"name":"processType","required":false,"in":"query","schema":{"type":"string","enum":["CLOSE_LINK","CORRECT_LINK","CHANGE_SPOUSE","ADMIN_REPAIR"]}},{"name":"reason","required":false,"in":"query","schema":{"type":"string","enum":["DIVORCE","SEPARATION","WIDOWHOOD","ADMIN_CORRECTION","CAPTURE_ERROR_ANNULMENT","OTHER"]}},{"name":"dateFrom","required":false,"in":"query","schema":{"example":"2026-01-01","type":"string"}},{"name":"dateTo","required":false,"in":"query","schema":{"example":"2026-12-31","type":"string"}},{"name":"page","required":false,"in":"query","schema":{"type":"number"}},{"name":"limit","required":false,"in":"query","schema":{"type":"number"}}],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"summary":"Listar procesos matrimoniales","tags":["Marital Management"]},"post":{"operationId":"MaritalManagementController_create","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateMaritalProcessDto"}}}},"responses":{"201":{"description":""}},"security":[{"bearer":[]}],"summary":"Crear borrador de proceso matrimonial","tags":["Marital Management"]}},"/marital-management/processes/{id}":{"get":{"operationId":"MaritalManagementController_findOne","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"number"}}],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"summary":"Obtener proceso matrimonial por ID","tags":["Marital Management"]},"patch":{"operationId":"MaritalManagementController_update","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"number"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateMaritalProcessDto"}}}},"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"summary":"Actualizar datos permitidos de un proceso matrimonial","tags":["Marital Management"]}},"/marital-management/processes/{id}/events":{"get":{"operationId":"MaritalManagementController_findEvents","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"number"}}],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"summary":"Listar eventos de dominio de un proceso matrimonial","tags":["Marital Management"]}},"/marital-management/processes/{id}/evidence":{"get":{"operationId":"MaritalManagementController_listEvidence","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"number"}}],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"summary":"Listar evidencias privadas de un proceso matrimonial","tags":["Marital Management"]},"post":{"operationId":"MaritalManagementController_uploadEvidence","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"number"}}],"requestBody":{"required":true,"content":{"multipart/form-data":{"schema":{"type":"object","required":["file"],"properties":{"file":{"type":"string","format":"binary"},"evidenceType":{"type":"string"},"description":{"type":"string"}}}}}},"responses":{"201":{"description":""}},"security":[{"bearer":[]}],"summary":"Subir evidencia privada a un proceso matrimonial","tags":["Marital Management"]}},"/marital-management/processes/{id}/evidence/{evidenceId}/download":{"get":{"operationId":"MaritalManagementController_downloadEvidence","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"number"}},{"name":"evidenceId","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"summary":"Descargar evidencia matrimonial privada","tags":["Marital Management"]}},"/marital-management/processes/{id}/evidence/{evidenceId}/delete":{"post":{"operationId":"MaritalManagementController_deleteEvidence","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"number"}},{"name":"evidenceId","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"201":{"description":""}},"security":[{"bearer":[]}],"summary":"Eliminar logicamente evidencia matrimonial","tags":["Marital Management"]}},"/marital-management/processes/{id}/complete":{"post":{"operationId":"MaritalManagementController_complete","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"number"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CompleteMaritalProcessDto"}}}},"responses":{"201":{"description":""}},"security":[{"bearer":[]}],"summary":"Completar proceso matrimonial y aplicar su efecto transaccional","tags":["Marital Management"]}},"/marital-management/processes/{id}/cancel":{"post":{"operationId":"MaritalManagementController_cancel","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"number"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CancelMaritalProcessDto"}}}},"responses":{"201":{"description":""}},"security":[{"bearer":[]}],"summary":"Cancelar proceso matrimonial","tags":["Marital Management"]}},"/schooling/formations":{"post":{"operationId":"FormationsController_create","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateFormationDto"}}}},"responses":{"201":{"description":""}},"security":[{"JWT-auth":[]}],"summary":"Create a new academic formation","tags":["Schooling - Formations"]},"get":{"operationId":"FormationsController_findAll","parameters":[{"name":"search","required":false,"in":"query","description":"Búsqueda por nombre de formación","schema":{"example":"ingenieria","type":"string"}},{"name":"studyType","required":false,"in":"query","description":"Filtrar por tipo de estudio","schema":{"example":"UNIVERSITARIA","type":"string","enum":["PRIMARIA","SECUNDARIA","TECNICO UNIVERSITARIO","TECNICO NO UNIVERSITARIO","TECNOLOGICA","INGENIERIA","UNIVERSITARIO","ESPECIALIZACION","MAESTRIA","DOCTORADO"]}},{"name":"isActive","required":false,"in":"query","description":"Filtrar por estado activo/inactivo","schema":{"example":true,"type":"boolean"}},{"name":"page","required":false,"in":"query","description":"Número de página","schema":{"minimum":1,"example":1,"type":"number"}},{"name":"limit","required":false,"in":"query","description":"Cantidad de elementos por página","schema":{"minimum":1,"maximum":100,"example":10,"type":"number"}},{"name":"select","required":false,"in":"query","description":"Columnas específicas a devolver (separadas por coma)","schema":{"example":"codigo,nombreFormacion,tipoEstudio","type":"string"}},{"name":"activo","required":false,"in":"query","schema":{}},{"name":"tipoEstudio","required":false,"in":"query","schema":{}}],"responses":{"200":{"description":""}},"security":[{"JWT-auth":[]}],"summary":"Get all academic formations with filters and pagination","tags":["Schooling - Formations"]}},"/schooling/formations/statistics":{"get":{"operationId":"FormationsController_getStatistics","parameters":[],"responses":{"200":{"description":""}},"security":[{"JWT-auth":[]}],"summary":"Get formations statistics","tags":["Schooling - Formations"]}},"/schooling/formations/{code}":{"get":{"operationId":"FormationsController_findByCode","parameters":[{"name":"code","required":true,"in":"path","description":"Formation code","schema":{"type":"integer"}}],"responses":{"200":{"description":""}},"security":[{"JWT-auth":[]}],"summary":"Get academic formation by code","tags":["Schooling - Formations"]},"put":{"operationId":"FormationsController_update","parameters":[{"name":"code","required":true,"in":"path","description":"Formation code","schema":{"type":"integer"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateFormationDto"}}}},"responses":{"200":{"description":""}},"security":[{"JWT-auth":[]}],"summary":"Update academic formation by code","tags":["Schooling - Formations"]},"delete":{"operationId":"FormationsController_remove","parameters":[{"name":"code","required":true,"in":"path","description":"Formation code","schema":{"type":"integer"}}],"responses":{"200":{"description":""}},"security":[{"JWT-auth":[]}],"summary":"Delete academic formation (hard delete)","tags":["Schooling - Formations"]}},"/schooling/formations/{code}/deactivate":{"patch":{"operationId":"FormationsController_deactivate","parameters":[{"name":"code","required":true,"in":"path","description":"Formation code","schema":{"type":"integer"}}],"responses":{"200":{"description":""}},"security":[{"JWT-auth":[]}],"summary":"Deactivate academic formation (soft delete)","tags":["Schooling - Formations"]}},"/schooling/formations/{code}/activate":{"patch":{"operationId":"FormationsController_activate","parameters":[{"name":"code","required":true,"in":"path","description":"Formation code","schema":{"type":"integer"}}],"responses":{"200":{"description":""}},"security":[{"JWT-auth":[]}],"summary":"Activate academic formation","tags":["Schooling - Formations"]}},"/schooling/formations/member/{memberId}":{"get":{"operationId":"FormationsController_findByMember","parameters":[{"name":"memberId","required":true,"in":"path","description":"ID del miembro","schema":{"type":"number"}}],"responses":{"200":{"description":""}},"security":[{"JWT-auth":[]}],"summary":"Obtener todas las formaciones de un miembro","tags":["Schooling - Formations"]}},"/schooling/formations/assign":{"post":{"operationId":"FormationsController_assignToMember","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AssignFormationDto"}}}},"responses":{"201":{"description":""}},"security":[{"JWT-auth":[]}],"summary":"Asignar una formación a un miembro","tags":["Schooling - Formations"]}},"/schooling/formations/member/{memberId}/formation/{formationId}":{"patch":{"operationId":"FormationsController_updateMemberFormation","parameters":[{"name":"memberId","required":true,"in":"path","schema":{"type":"number"}},{"name":"formationId","required":true,"in":"path","schema":{"type":"number"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateMemberFormationDto"}}}},"responses":{"200":{"description":""}},"security":[{"JWT-auth":[]}],"summary":"Actualizar la relación formación-miembro","tags":["Schooling - Formations"]},"delete":{"operationId":"FormationsController_removeFromMember","parameters":[{"name":"memberId","required":true,"in":"path","schema":{"type":"number"}},{"name":"formationId","required":true,"in":"path","schema":{"type":"number"}}],"responses":{"200":{"description":""}},"security":[{"JWT-auth":[]}],"summary":"Remover una formación de un miembro","tags":["Schooling - Formations"]}},"/schooling/formations/member/{memberId}/primary":{"get":{"operationId":"FormationsController_getPrimaryFormation","parameters":[{"name":"memberId","required":true,"in":"path","schema":{"type":"number"}}],"responses":{"200":{"description":""}},"security":[{"JWT-auth":[]}],"summary":"Obtener la formación principal de un miembro","tags":["Schooling - Formations"]}},"/schooling/trades":{"post":{"operationId":"TradesController_create","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateTradeDto"}}}},"responses":{"201":{"description":""}},"security":[{"JWT-auth":[]}],"summary":"Create a new trade/occupation","tags":["Schooling - Trades"]},"get":{"operationId":"TradesController_findAll","parameters":[{"name":"search","required":false,"in":"query","description":"Búsqueda por nombre del oficio","schema":{"example":"ingeniero","type":"string"}},{"name":"isActive","required":false,"in":"query","description":"Filtrar por estado activo/inactivo","schema":{"example":true,"type":"boolean"}},{"name":"page","required":false,"in":"query","description":"Número de página","schema":{"minimum":1,"example":1,"type":"number"}},{"name":"limit","required":false,"in":"query","description":"Cantidad de elementos por página","schema":{"minimum":1,"maximum":100,"example":10,"type":"number"}},{"name":"select","required":false,"in":"query","description":"Columnas específicas a devolver (separadas por coma)","schema":{"example":"code,name","type":"string"}},{"name":"activo","required":false,"in":"query","schema":{}}],"responses":{"200":{"description":""}},"security":[{"JWT-auth":[]}],"summary":"Get all trades with filters and pagination","tags":["Schooling - Trades"]}},"/schooling/trades/statistics":{"get":{"operationId":"TradesController_getStatistics","parameters":[],"responses":{"200":{"description":""}},"security":[{"JWT-auth":[]}],"summary":"Get trades statistics","tags":["Schooling - Trades"]}},"/schooling/trades/{code}":{"get":{"operationId":"TradesController_findByCode","parameters":[{"name":"code","required":true,"in":"path","description":"Trade code","schema":{"type":"integer"}}],"responses":{"200":{"description":""}},"security":[{"JWT-auth":[]}],"summary":"Get trade by code","tags":["Schooling - Trades"]},"put":{"operationId":"TradesController_update","parameters":[{"name":"code","required":true,"in":"path","description":"Trade code","schema":{"type":"integer"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateTradeDto"}}}},"responses":{"200":{"description":""}},"security":[{"JWT-auth":[]}],"summary":"Update trade by code","tags":["Schooling - Trades"]},"delete":{"operationId":"TradesController_remove","parameters":[{"name":"code","required":true,"in":"path","description":"Trade code","schema":{"type":"integer"}}],"responses":{"200":{"description":""}},"security":[{"JWT-auth":[]}],"summary":"Delete trade (hard delete)","tags":["Schooling - Trades"]}},"/schooling/trades/{code}/deactivate":{"patch":{"operationId":"TradesController_deactivate","parameters":[{"name":"code","required":true,"in":"path","description":"Trade code","schema":{"type":"integer"}}],"responses":{"200":{"description":""}},"security":[{"JWT-auth":[]}],"summary":"Deactivate trade (soft delete)","tags":["Schooling - Trades"]}},"/schooling/trades/{code}/activate":{"patch":{"operationId":"TradesController_activate","parameters":[{"name":"code","required":true,"in":"path","description":"Trade code","schema":{"type":"integer"}}],"responses":{"200":{"description":""}},"security":[{"JWT-auth":[]}],"summary":"Activate trade","tags":["Schooling - Trades"]}},"/schooling/trades/member/{memberId}":{"get":{"operationId":"TradesController_findByMember","parameters":[{"name":"memberId","required":true,"in":"path","description":"Member ID","schema":{"type":"number"}}],"responses":{"200":{"description":""}},"security":[{"JWT-auth":[]}],"summary":"Get all trades for a specific member","tags":["Schooling - Trades"]}},"/schooling/trades/assign":{"post":{"operationId":"TradesController_assignToMember","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AssignTradeDto"}}}},"responses":{"201":{"description":""}},"security":[{"JWT-auth":[]}],"summary":"Assign trade to member","tags":["Schooling - Trades"]}},"/schooling/trades/member/{memberId}/trade/{tradeId}":{"patch":{"operationId":"TradesController_updateMemberTrade","parameters":[{"name":"memberId","required":true,"in":"path","description":"Member ID","schema":{"type":"number"}},{"name":"tradeId","required":true,"in":"path","description":"Trade ID (code)","schema":{"type":"number"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateMemberTradeDto"}}}},"responses":{"200":{"description":""}},"security":[{"JWT-auth":[]}],"summary":"Update member-trade relationship","tags":["Schooling - Trades"]},"delete":{"operationId":"TradesController_removeFromMember","parameters":[{"name":"memberId","required":true,"in":"path","description":"Member ID","schema":{"type":"number"}},{"name":"tradeId","required":true,"in":"path","description":"Trade ID (code)","schema":{"type":"number"}}],"responses":{"200":{"description":""}},"security":[{"JWT-auth":[]}],"summary":"Remove trade from member","tags":["Schooling - Trades"]}},"/schooling/trades/member/{memberId}/primary":{"get":{"operationId":"TradesController_getPrimaryTrade","parameters":[{"name":"memberId","required":true,"in":"path","description":"Member ID","schema":{"type":"number"}}],"responses":{"200":{"description":""}},"security":[{"JWT-auth":[]}],"summary":"Get primary trade for a member","tags":["Schooling - Trades"]}},"/schooling/knowledge-areas":{"post":{"operationId":"KnowledgeAreasController_create","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateKnowledgeAreaDto"}}}},"responses":{"201":{"description":""}},"security":[{"bearer":[]}],"summary":"Crear nueva área de conocimiento","tags":["Knowledge Areas"]},"get":{"operationId":"KnowledgeAreasController_findAll","parameters":[{"name":"search","required":false,"in":"query","description":"Búsqueda por nombre","schema":{"example":"ingenieria","type":"string"}},{"name":"isActive","required":false,"in":"query","description":"Filtrar por estado activo","schema":{"example":true,"type":"boolean"}},{"name":"ids","required":false,"in":"query","description":"Comma-separated IDs","schema":{"example":"1,2,3","type":"string"}},{"name":"page","required":false,"in":"query","description":"Número de página","schema":{"default":1,"example":1,"type":"number"}},{"name":"limit","required":false,"in":"query","description":"Cantidad de registros por página","schema":{"default":20,"example":20,"type":"number"}},{"name":"select","required":false,"in":"query","description":"Campos a seleccionar (separados por comas)","schema":{"example":"code,name","type":"string"}}],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"summary":"Listar todas las áreas de conocimiento","tags":["Knowledge Areas"]}},"/schooling/knowledge-areas/statistics":{"get":{"operationId":"KnowledgeAreasController_getStatistics","parameters":[],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"summary":"Obtener estadísticas de áreas de conocimiento","tags":["Knowledge Areas"]}},"/schooling/knowledge-areas/{code}":{"get":{"operationId":"KnowledgeAreasController_findOne","parameters":[{"name":"code","required":true,"in":"path","schema":{"type":"number"}}],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"summary":"Obtener área de conocimiento por código","tags":["Knowledge Areas"]},"put":{"operationId":"KnowledgeAreasController_update","parameters":[{"name":"code","required":true,"in":"path","schema":{"type":"number"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateKnowledgeAreaDto"}}}},"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"summary":"Actualizar área de conocimiento","tags":["Knowledge Areas"]},"delete":{"operationId":"KnowledgeAreasController_remove","parameters":[{"name":"code","required":true,"in":"path","schema":{"type":"number"}}],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"summary":"Eliminar área de conocimiento (hard delete - restricted)","tags":["Knowledge Areas"]}},"/schooling/knowledge-areas/{code}/deactivate":{"patch":{"operationId":"KnowledgeAreasController_deactivate","parameters":[{"name":"code","required":true,"in":"path","schema":{"type":"number"}}],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"summary":"Desactivar área de conocimiento (soft delete)","tags":["Knowledge Areas"]}},"/schooling/knowledge-areas/member/{memberId}":{"get":{"operationId":"KnowledgeAreasController_findByMember","parameters":[{"name":"memberId","required":true,"in":"path","description":"ID del miembro","schema":{"type":"number"}}],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"summary":"Obtener todas las áreas de conocimiento de un miembro","tags":["Knowledge Areas"]}},"/schooling/knowledge-areas/assign":{"post":{"operationId":"KnowledgeAreasController_assignToMember","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AssignKnowledgeAreaDto"}}}},"responses":{"201":{"description":""}},"security":[{"bearer":[]}],"summary":"Asignar un área de conocimiento a un miembro","tags":["Knowledge Areas"]}},"/schooling/knowledge-areas/member/{memberId}/area/{areaCode}":{"patch":{"operationId":"KnowledgeAreasController_updateMemberKnowledgeArea","parameters":[{"name":"memberId","required":true,"in":"path","schema":{"type":"number"}},{"name":"areaCode","required":true,"in":"path","schema":{"type":"number"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateMemberKnowledgeAreaDto"}}}},"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"summary":"Actualizar la relación área de conocimiento-miembro","tags":["Knowledge Areas"]},"delete":{"operationId":"KnowledgeAreasController_removeFromMember","parameters":[{"name":"memberId","required":true,"in":"path","schema":{"type":"number"}},{"name":"areaCode","required":true,"in":"path","schema":{"type":"number"}}],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"summary":"Remover un área de conocimiento de un miembro","tags":["Knowledge Areas"]}},"/addons":{"post":{"operationId":"AddonsController_create","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateAddonDto"}}}},"responses":{"201":{"description":"Add-on creado exitosamente","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AddonEntity"}}}}},"security":[{"bearer":[]}],"summary":"Crear un add-on del catalogo global","tags":["Addons"]},"get":{"operationId":"AddonsController_findAll","parameters":[{"name":"code","required":false,"in":"query","schema":{"type":"string"}},{"name":"name","required":false,"in":"query","schema":{"type":"string"}},{"name":"status","required":false,"in":"query","schema":{"type":"string","enum":["ACTIVE","INACTIVE"]}},{"name":"category","required":false,"in":"query","schema":{"type":"string","enum":["PRODUCTO","SERVICIO","ACCESO"]}},{"name":"isGlobal","required":false,"in":"query","schema":{"type":"boolean"}},{"name":"activityId","required":false,"in":"query","schema":{"type":"number"}},{"name":"onlyActive","required":false,"in":"query","schema":{"default":true,"type":"boolean"}}],"responses":{"200":{"description":"Catalogo de add-ons","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/AddonEntity"}}}}}},"security":[{"bearer":[]}],"summary":"Listar add-ons del catalogo","tags":["Addons"]}},"/addons/{id}":{"get":{"operationId":"AddonsController_findById","parameters":[{"name":"id","required":true,"in":"path","description":"ID del add-on","schema":{"type":"number"}}],"responses":{"200":{"description":"Add-on encontrado","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AddonEntity"}}}}},"security":[{"bearer":[]}],"summary":"Obtener un add-on por ID","tags":["Addons"]},"patch":{"operationId":"AddonsController_update","parameters":[{"name":"id","required":true,"in":"path","description":"ID del add-on","schema":{"type":"number"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateAddonDto"}}}},"responses":{"200":{"description":"Add-on actualizado","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AddonEntity"}}}}},"security":[{"bearer":[]}],"summary":"Actualizar un add-on del catalogo","tags":["Addons"]},"delete":{"operationId":"AddonsController_remove","parameters":[{"name":"id","required":true,"in":"path","description":"ID del add-on","schema":{"type":"number"}}],"responses":{"200":{"description":"Add-on eliminado o desactivado si estaba en uso"}},"security":[{"bearer":[]}],"summary":"Eliminar un add-on del catalogo si no esta en uso","tags":["Addons"]}},"/addons/activity/{activityId}":{"get":{"operationId":"ActivityAddonsController_getResolvedCatalog","parameters":[{"name":"activityId","required":true,"in":"path","description":"ID de la actividad","schema":{"type":"number"}}],"responses":{"200":{"description":"Catalogo resuelto por actividad"}},"security":[{"bearer":[]}],"summary":"Obtener catalogo resuelto de add-ons para una actividad","tags":["Addons"]}},"/addons/activity/{activityId}/config":{"get":{"operationId":"ActivityAddonsController_getConfig","parameters":[{"name":"activityId","required":true,"in":"path","description":"ID de la actividad","schema":{"type":"number"}}],"responses":{"200":{"description":"Configuracion actual de la actividad","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/ActivityAddonConfigEntity"}}}}}},"security":[{"bearer":[]}],"summary":"Obtener configuracion explicita de add-ons por actividad","tags":["Addons"]},"put":{"operationId":"ActivityAddonsController_upsertConfig","parameters":[{"name":"activityId","required":true,"in":"path","description":"ID de la actividad","schema":{"type":"number"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ActivityAddonConfigDto"}}}},"responses":{"200":{"description":"Configuracion guardada","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ActivityAddonConfigEntity"}}}}},"security":[{"bearer":[]}],"summary":"Crear o actualizar configuracion de add-on para una actividad","tags":["Addons"]}},"/addons/activity/{activityId}/config/{addonId}":{"delete":{"operationId":"ActivityAddonsController_removeConfig","parameters":[{"name":"activityId","required":true,"in":"path","description":"ID de la actividad","schema":{"type":"number"}},{"name":"addonId","required":true,"in":"path","description":"ID del add-on","schema":{"type":"number"}}],"responses":{"204":{"description":"Configuracion desactivada"}},"security":[{"bearer":[]}],"summary":"Desactivar configuracion de un add-on en una actividad","tags":["Addons"]}},"/addons/activity/{activityId}/quote":{"post":{"operationId":"ActivityAddonsController_quote","parameters":[{"name":"activityId","required":true,"in":"path","description":"ID de la actividad","schema":{"type":"number"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AddonQuoteRequestDto"}}}},"responses":{"200":{"description":"Cotizacion calculada"}},"security":[{"bearer":[]}],"summary":"Cotizar add-ons seleccionados para una actividad","tags":["Addons"]}},"/addons/sales/participants/{participantId}":{"get":{"operationId":"ParticipantAddonsController_findByParticipant","parameters":[{"name":"participantId","required":true,"in":"path","description":"ID del participante","schema":{"type":"number"}},{"name":"paymentStatus","required":false,"in":"query","schema":{"enum":["PENDING","PAID","CANCELLED","REFUNDED"],"type":"string"}},{"name":"deliveryStatus","required":false,"in":"query","schema":{"enum":["PENDING","PARTIAL","DELIVERED"],"type":"string"}}],"responses":{"200":{"description":"Lineas de add-ons del participante","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/ParticipantAddonEntity"}}}}}},"security":[{"bearer":[]}],"summary":"Listar add-ons de un participante","tags":["Addons"]}},"/addons/sales/payments/{paymentId}":{"get":{"operationId":"ParticipantAddonsController_findByPayment","parameters":[{"name":"paymentId","required":true,"in":"path","description":"ID del pago","schema":{"type":"number"}}],"responses":{"200":{"description":"Lineas de add-ons vinculadas al pago","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/ParticipantAddonEntity"}}}}}},"security":[{"bearer":[]}],"summary":"Listar add-ons vinculados a un pago","tags":["Addons"]}},"/addons/sales/activities/{activityId}":{"get":{"operationId":"ParticipantAddonsController_findByActivity","parameters":[{"name":"activityId","required":true,"in":"path","description":"ID de la actividad","schema":{"type":"number"}},{"name":"paymentStatus","required":false,"in":"query","schema":{"enum":["PENDING","PAID","CANCELLED","REFUNDED"],"type":"string"}},{"name":"deliveryStatus","required":false,"in":"query","schema":{"enum":["PENDING","PARTIAL","DELIVERED"],"type":"string"}}],"responses":{"200":{"description":"Lineas de add-ons por actividad","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/ParticipantAddonEntity"}}}}}},"security":[{"bearer":[]}],"summary":"Listar add-ons vendidos para una actividad","tags":["Addons"]}},"/addons/sales/activities/{activityId}/summary":{"get":{"operationId":"ParticipantAddonsController_getActivitySummary","parameters":[{"name":"activityId","required":true,"in":"path","description":"ID de la actividad","schema":{"type":"number"}}],"responses":{"200":{"description":"Resumen operativo de add-ons"}},"security":[{"bearer":[]}],"summary":"Obtener resumen operativo de add-ons por actividad","tags":["Addons"]}},"/addons/sales/delivery":{"patch":{"operationId":"ParticipantAddonsController_markAsDelivered","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeliverAddonDto"}}}},"responses":{"200":{"description":"Lineas entregadas","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/ParticipantAddonEntity"}}}}}},"security":[{"bearer":[]}],"summary":"Marcar add-ons pagados como entregados","tags":["Addons"]}},"/addons/sales/delivery-line":{"post":{"operationId":"ParticipantAddonsController_deliverLine","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeliverParticipantAddonLineDto"}}}},"responses":{"201":{"description":"Entrega registrada"}},"security":[{"bearer":[]}],"summary":"Registrar entrega parcial o total de una linea de add-on","tags":["Addons"]}},"/addons/participant-addons/activities/{activityId}/delivery-events":{"get":{"operationId":"ParticipantAddonScanDeliveryController_findActivityDeliveryEvents","parameters":[{"name":"activityId","required":true,"in":"path","description":"ID de la actividad","schema":{"type":"number"}},{"name":"limit","required":false,"in":"query","description":"Cantidad maxima de eventos a retornar","schema":{"type":"string"}}],"responses":{"200":{"description":"Eventos de entrega de add-ons","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/ParticipantAddonDeliveryEventEntity"}}}}}},"security":[{"bearer":[]}],"summary":"Listar eventos de entrega de add-ons por actividad","tags":["Addons"]}},"/addons/participant-addons/scan-delivery":{"post":{"operationId":"ParticipantAddonScanDeliveryController_scanDelivery","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ScanDeliverParticipantAddonDto"}}}},"responses":{"201":{"description":"Entrega por escaneo registrada"}},"security":[{"bearer":[]}],"summary":"Registrar entrega por escaneo de producto para CheckIn/CheckOut","tags":["Addons"]}},"/addon-sales/quote":{"post":{"operationId":"AddonSalesController_quote","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/QuoteAddonSaleDto"}}}},"responses":{"201":{"description":""}},"security":[{"bearer":[]}],"summary":"Cotizar selecciones de add-ons sin persistir","tags":["Addon Sales (Standalone)"]}},"/addon-sales":{"post":{"operationId":"AddonSalesController_create","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateAddonSaleDto"}}}},"responses":{"201":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AddonSaleEntity"}}}}},"security":[{"bearer":[]}],"summary":"Crear una venta standalone de add-ons","tags":["Addon Sales (Standalone)"]},"get":{"operationId":"AddonSalesController_findAll","parameters":[{"name":"status","required":false,"in":"query","schema":{"type":"string","enum":["OPEN","CANCELLED"]}},{"name":"paymentStatus","required":false,"in":"query","schema":{"type":"string","enum":["PENDING","PAID","REFUNDED","CANCELLED"]}},{"name":"deliveryStatus","required":false,"in":"query","description":"Filtrar por estado de entrega de al menos una linea","schema":{"type":"string"}},{"name":"buyerMemberCode","required":false,"in":"query","schema":{"type":"string"}},{"name":"dateFrom","required":false,"in":"query","description":"Fecha desde (YYYY-MM-DD)","schema":{"type":"string"}},{"name":"dateTo","required":false,"in":"query","description":"Fecha hasta (YYYY-MM-DD)","schema":{"type":"string"}},{"name":"page","required":false,"in":"query","schema":{"default":1,"type":"number"}},{"name":"limit","required":false,"in":"query","schema":{"default":20,"type":"number"}}],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"summary":"Listar ventas standalone con paginacion","tags":["Addon Sales (Standalone)"]}},"/addon-sales/reports/summary":{"get":{"operationId":"AddonSalesController_reportSummary","parameters":[{"name":"status","required":false,"in":"query","schema":{"type":"string","enum":["OPEN","CANCELLED"]}},{"name":"paymentStatus","required":false,"in":"query","schema":{"type":"string","enum":["PENDING","PAID","REFUNDED","CANCELLED"]}},{"name":"deliveryStatus","required":false,"in":"query","description":"Filtrar por estado de entrega de al menos una linea","schema":{"type":"string"}},{"name":"buyerMemberCode","required":false,"in":"query","schema":{"type":"string"}},{"name":"dateFrom","required":false,"in":"query","description":"Fecha desde (YYYY-MM-DD)","schema":{"type":"string"}},{"name":"dateTo","required":false,"in":"query","description":"Fecha hasta (YYYY-MM-DD)","schema":{"type":"string"}},{"name":"page","required":false,"in":"query","schema":{"default":1,"type":"number"}},{"name":"limit","required":false,"in":"query","schema":{"default":20,"type":"number"}}],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"summary":"Obtener resumen agregado de reportes de ventas standalone","tags":["Addon Sales (Standalone)"]}},"/addon-sales/{id}":{"get":{"operationId":"AddonSalesController_findOne","parameters":[{"name":"id","required":true,"in":"path","description":"ID de la venta","schema":{"type":"number"}}],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"summary":"Obtener una venta standalone por ID","tags":["Addon Sales (Standalone)"]},"patch":{"operationId":"AddonSalesController_update","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"number"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateAddonSaleDto"}}}},"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"summary":"Editar una venta standalone (solo si esta PENDING)","tags":["Addon Sales (Standalone)"]},"delete":{"operationId":"AddonSalesController_cancel","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"number"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CancelAddonSaleDto"}}}},"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"summary":"Cancelar una venta standalone (solo si no esta pagada)","tags":["Addon Sales (Standalone)"]}},"/addon-sales/{id}/deliveries":{"post":{"operationId":"AddonSalesController_deliver","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"number"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeliverAddonSaleDto"}}}},"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"summary":"Registrar entrega total/parcial de lineas de una venta pagada","tags":["Addon Sales (Standalone)"]}},"/churches":{"post":{"description":"Registra una nueva iglesia en el sistema","operationId":"ChurchesController_create","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateChurchDto"}}}},"responses":{"201":{"description":"Iglesia creada exitosamente","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ChurchEntity"}}}},"409":{"description":"Ya existe una iglesia con ese código o ya hay una iglesia principal"}},"security":[{"X-API-Key":[]},{"JWT":[]}],"summary":"Crear una nueva iglesia","tags":["churches"]},"get":{"description":"Obtiene todas las iglesias con filtros opcionales","operationId":"ChurchesController_findAll","parameters":[{"name":"page","required":true,"in":"query","schema":{"type":"number"}},{"name":"limit","required":true,"in":"query","schema":{"type":"number"}},{"name":"churchType","required":false,"in":"query","description":"Filtrar por tipo de iglesia","schema":{"enum":["MAIN","BRANCH","CELL_GROUP","MISSION","EXTENSION"],"type":"string"}},{"name":"status","required":false,"in":"query","description":"Filtrar por estado operativo","schema":{"enum":["ACTIVE","INACTIVE","UNDER_CONSTRUCTION","CLOSED","MERGED"],"type":"string"}},{"name":"search","required":false,"in":"query","description":"Buscar por código, nombre, denominación o ubicación","schema":{"type":"string"}},{"name":"q","required":false,"in":"query","description":"Alias de búsqueda para selectores asincrónicos","schema":{"type":"string"}},{"name":"onlyActive","required":false,"in":"query","description":"Solo iglesias activas (por defecto true)","schema":{"example":true,"type":"boolean"}},{"name":"includeLocation","required":false,"in":"query","description":"Incluir información de ubicación geográfica","schema":{"type":"boolean"}}],"responses":{"200":{"description":"Lista de iglesias obtenida exitosamente (paginada)"}},"security":[{"X-API-Key":[]},{"JWT":[]}],"summary":"Obtener lista de iglesias","tags":["churches"]}},"/churches/search":{"get":{"description":"Busca iglesias por nombre, código, denominación, dirección o pastor","operationId":"ChurchesController_search","parameters":[{"name":"q","required":true,"in":"query","description":"Término de búsqueda","schema":{"type":"string"}},{"name":"onlyActive","required":false,"in":"query","description":"Solo devolver iglesias activas","schema":{"type":"boolean"}},{"name":"includeLocation","required":false,"in":"query","description":"Incluir información de ubicación","schema":{"type":"boolean"}}],"responses":{"200":{"description":"Resultados de búsqueda obtenidos","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/ChurchEntity"}}}}}},"security":[{"X-API-Key":[]},{"JWT":[]}],"summary":"Buscar iglesias","tags":["churches"]}},"/churches/main":{"get":{"description":"Obtiene la iglesia marcada como principal (sede central)","operationId":"ChurchesController_findMain","parameters":[{"name":"includeLocation","required":false,"in":"query","description":"Incluir información de ubicación","schema":{"type":"boolean"}}],"responses":{"200":{"description":"Iglesia principal obtenida","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ChurchEntity"}}}},"404":{"description":"No hay iglesia principal configurada"}},"security":[{"X-API-Key":[]},{"JWT":[]}],"summary":"Obtener iglesia principal","tags":["churches"]}},"/churches/hierarchy":{"get":{"description":"Obtiene la estructura jerárquica: principal → sucursales → células","operationId":"ChurchesController_getHierarchy","parameters":[],"responses":{"200":{"description":"Jerarquía obtenida exitosamente"}},"security":[{"X-API-Key":[]},{"JWT":[]}],"summary":"Obtener jerarquía de iglesias","tags":["churches"]}},"/churches/statistics":{"get":{"description":"Obtiene métricas y estadísticas del sistema de iglesias","operationId":"ChurchesController_getStatistics","parameters":[],"responses":{"200":{"description":"Estadísticas obtenidas exitosamente"}},"security":[{"X-API-Key":[]},{"JWT":[]}],"summary":"Obtener estadísticas de iglesias","tags":["churches"]}},"/churches/denomination/{denomination}":{"get":{"description":"Obtiene todas las iglesias de una denominación específica","operationId":"ChurchesController_findByDenomination","parameters":[{"name":"denomination","required":true,"in":"path","description":"Nombre de la denominación","schema":{"example":"Mahanaim","type":"string"}},{"name":"includeLocation","required":false,"in":"query","description":"Incluir información de ubicación","schema":{"type":"boolean"}}],"responses":{"200":{"description":"Iglesias de la denominación obtenidas","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/ChurchEntity"}}}}}},"security":[{"X-API-Key":[]},{"JWT":[]}],"summary":"Obtener iglesias por denominación","tags":["churches"]}},"/churches/location":{"get":{"description":"Filtra iglesias por país, estado, ciudad o sector","operationId":"ChurchesController_findByLocation","parameters":[{"name":"countryId","required":false,"in":"query","description":"ID del país","schema":{"type":"number"}},{"name":"stateId","required":false,"in":"query","description":"ID del estado","schema":{"type":"number"}},{"name":"cityId","required":false,"in":"query","description":"ID de la ciudad","schema":{"type":"number"}},{"name":"sectorId","required":false,"in":"query","description":"ID del sector","schema":{"type":"number"}}],"responses":{"200":{"description":"Iglesias por ubicación obtenidas","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/ChurchEntity"}}}}}},"security":[{"X-API-Key":[]},{"JWT":[]}],"summary":"Obtener iglesias por ubicación","tags":["churches"]}},"/churches/nearby":{"get":{"description":"Encuentra iglesias cerca de coordenadas específicas","operationId":"ChurchesController_findNearby","parameters":[{"name":"lat","required":true,"in":"query","description":"Latitud","schema":{"example":18.427551,"type":"number"}},{"name":"lng","required":true,"in":"query","description":"Longitud","schema":{"example":-68.972259,"type":"number"}},{"name":"radius","required":false,"in":"query","description":"Radio en kilómetros (por defecto 10)","schema":{"example":10,"type":"number"}}],"responses":{"200":{"description":"Iglesias cercanas encontradas","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/ChurchEntity"}}}}}},"security":[{"X-API-Key":[]},{"JWT":[]}],"summary":"Buscar iglesias cercanas","tags":["churches"]}},"/churches/code/{code}":{"get":{"description":"Obtiene una iglesia específica por su código único","operationId":"ChurchesController_findByCode","parameters":[{"name":"code","required":true,"in":"path","description":"Código único de la iglesia","schema":{"example":"MLR","type":"string"}},{"name":"includeLocation","required":false,"in":"query","description":"Incluir información de ubicación","schema":{"type":"boolean"}}],"responses":{"200":{"description":"Iglesia obtenida exitosamente","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ChurchEntity"}}}},"404":{"description":"Iglesia no encontrada"}},"security":[{"X-API-Key":[]},{"JWT":[]}],"summary":"Obtener iglesia por código","tags":["churches"]}},"/churches/{id}":{"get":{"description":"Obtiene una iglesia específica por su ID","operationId":"ChurchesController_findOne","parameters":[{"name":"id","required":true,"in":"path","description":"ID de la iglesia","schema":{"type":"number"}},{"name":"includeLocation","required":false,"in":"query","description":"Incluir información de ubicación","schema":{"type":"boolean"}}],"responses":{"200":{"description":"Iglesia obtenida exitosamente","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ChurchEntity"}}}},"404":{"description":"Iglesia no encontrada"}},"security":[{"X-API-Key":[]},{"JWT":[]}],"summary":"Obtener iglesia por ID","tags":["churches"]},"patch":{"description":"Actualiza los datos de una iglesia existente","operationId":"ChurchesController_update","parameters":[{"name":"id","required":true,"in":"path","description":"ID de la iglesia","schema":{"type":"number"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateChurchDto"}}}},"responses":{"200":{"description":"Iglesia actualizada exitosamente","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ChurchEntity"}}}},"404":{"description":"Iglesia no encontrada"},"409":{"description":"Conflicto con código existente o restricción de iglesia principal"}},"security":[{"X-API-Key":[]},{"JWT":[]}],"summary":"Actualizar iglesia","tags":["churches"]},"delete":{"description":"Desactiva una iglesia (eliminación suave)","operationId":"ChurchesController_remove","parameters":[{"name":"id","required":true,"in":"path","description":"ID de la iglesia","schema":{"type":"number"}}],"responses":{"200":{"description":"Iglesia eliminada exitosamente"},"400":{"description":"No se puede eliminar la iglesia principal"},"404":{"description":"Iglesia no encontrada"}},"security":[{"X-API-Key":[]},{"JWT":[]}],"summary":"Eliminar iglesia","tags":["churches"]}},"/churches/{id}/location":{"patch":{"description":"Actualiza específicamente la información geográfica de una iglesia","operationId":"ChurchesController_updateLocation","parameters":[{"name":"id","required":true,"in":"path","description":"ID de la iglesia","schema":{"type":"number"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ChurchLocationUpdateDto"}}}},"responses":{"200":{"description":"Ubicación actualizada exitosamente","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ChurchEntity"}}}},"404":{"description":"Iglesia no encontrada"}},"security":[{"X-API-Key":[]},{"JWT":[]}],"summary":"Actualizar ubicación de iglesia","tags":["churches"]}},"/auth/login":{"post":{"operationId":"AuthController_login","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LoginDto"}}}},"responses":{"200":{"description":"User logged in successfully","content":{"application/json":{"schema":{"type":"object","properties":{"access_token":{"type":"string"},"refresh_token":{"type":"string"},"token_type":{"type":"string","example":"bearer"},"expires_in":{"type":"string"},"user":{"type":"object","properties":{"uid":{"type":"string"},"username":{"type":"string"},"name":{"type":"string"},"lastname":{"type":"string"},"email":{"type":"string"},"profileCode":{"type":"number"},"location":{"type":"string"},"permissions":{"type":"array","items":{"type":"string"}}}}}}}}},"401":{"description":"Unauthorized"}},"summary":"User login","tags":["Authentication"]}},"/auth/register":{"post":{"operationId":"AuthController_register","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateUserDto"}}}},"responses":{"201":{"description":"User registered successfully (awaiting activation)"},"400":{"description":"Bad Request"},"409":{"description":"Conflict - Username or email already exists"}},"summary":"User registration (public)","tags":["Authentication"]}},"/auth/refresh":{"post":{"operationId":"AuthController_refresh","parameters":[],"responses":{"200":{"description":"Token refreshed successfully"},"401":{"description":"Invalid refresh token"}},"summary":"Refresh access token","tags":["Authentication"]}},"/auth/logout":{"post":{"operationId":"AuthController_logout","parameters":[],"responses":{"200":{"description":"User logged out successfully"}},"security":[{"JWT":[]}],"summary":"User logout","tags":["Authentication"]}},"/auth/me":{"post":{"operationId":"AuthController_getProfile","parameters":[],"responses":{"200":{"description":"Current user information"}},"security":[{"JWT":[]}],"summary":"Get current user information","tags":["Authentication"]}},"/auth/profile":{"patch":{"operationId":"AuthController_updateProfile","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateCurrentProfileDto"}}}},"responses":{"200":{"description":"Current user profile updated"}},"security":[{"JWT":[]}],"summary":"Update current user profile","tags":["Authentication"]}},"/auth/profile/photo":{"post":{"operationId":"AuthController_uploadProfilePhoto","parameters":[],"responses":{"201":{"description":""}},"security":[{"JWT":[]}],"summary":"Upload current user profile photo","tags":["Authentication"]}},"/auth/profile/photo/{id}":{"delete":{"operationId":"AuthController_deleteProfilePhoto","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"security":[{"JWT":[]}],"summary":"Delete current user profile photo","tags":["Authentication"]}},"/auth/validate-token":{"post":{"operationId":"AuthController_validateToken","parameters":[],"responses":{"200":{"description":"Token is valid"},"401":{"description":"Invalid token"}},"security":[{"JWT":[]}],"summary":"Validate current token","tags":["Authentication"]}},"/auth/forgot-password":{"post":{"operationId":"AuthController_forgotPassword","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ForgotPasswordDto"}}}},"responses":{"200":{"description":"If the email exists, a reset link will be sent"}},"summary":"Request password reset email","tags":["Authentication"]}},"/auth/validate-reset-token":{"get":{"operationId":"AuthController_validateResetToken","parameters":[{"name":"token","required":true,"in":"query","schema":{"type":"string"}}],"responses":{"200":{"description":"Token validation result"}},"summary":"Validate password reset token","tags":["Authentication"]}},"/auth/reset-password":{"post":{"operationId":"AuthController_resetPassword","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ResetPasswordDto"}}}},"responses":{"200":{"description":"Password reset successful"},"400":{"description":"Passwords do not match"},"401":{"description":"Invalid or expired token"}},"summary":"Reset password with token","tags":["Authentication"]}},"/emails":{"post":{"operationId":"EmailsController_create","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateEmailDto"}}}},"responses":{"201":{"description":"Email record created successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Email"}}}}},"security":[{"bearer":[]}],"summary":"Create a new email record","tags":["Emails"]},"get":{"operationId":"EmailsController_findAll","parameters":[{"name":"status","required":false,"in":"query","schema":{"enum":["draft","pending","sent","cancelled"],"type":"string"}},{"name":"type","required":false,"in":"query","schema":{"enum":["transactional","marketing","notification","system"],"type":"string"}},{"name":"deliveryStatus","required":false,"in":"query","schema":{"enum":["pending","sent","delivered","failed","bounced","rejected"],"type":"string"}},{"name":"recipient","required":false,"in":"query","schema":{"type":"string"}},{"name":"dateFrom","required":false,"in":"query","schema":{"format":"date-time","type":"string"}},{"name":"dateTo","required":false,"in":"query","schema":{"format":"date-time","type":"string"}},{"name":"templateId","required":false,"in":"query","schema":{"type":"number"}},{"name":"page","required":false,"in":"query","description":"Page number (default: 1)","schema":{"type":"number"}},{"name":"limit","required":false,"in":"query","description":"Items per page (default: 20)","schema":{"type":"number"}}],"responses":{"200":{"description":"Emails retrieved successfully"}},"security":[{"bearer":[]}],"summary":"Get all emails","tags":["Emails"]}},"/emails/send":{"post":{"operationId":"EmailsController_sendEmail","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SendEmailDto"}}}},"responses":{"201":{"description":"Email sent successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Email"}}}},"400":{"description":"Invalid email data"}},"security":[{"bearer":[]}],"summary":"Send email directly","tags":["Emails"]}},"/emails/send/template":{"post":{"operationId":"EmailsController_sendTemplateEmail","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SendTemplateEmailDto"}}}},"responses":{"201":{"description":"Template email sent successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Email"}}}},"400":{"description":"Template validation failed"},"404":{"description":"Template not found"}},"security":[{"bearer":[]}],"summary":"Send email using template","tags":["Emails"]}},"/emails/send/bulk":{"post":{"operationId":"EmailsController_bulkSendEmails","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BulkSendEmailDto"}}}},"responses":{"201":{"description":"Bulk emails processing completed","content":{"application/json":{"schema":{"type":"object","properties":{"successful":{"type":"array","items":{"$ref":"#/components/schemas/Email"}},"failed":{"type":"array","items":{"type":"object","properties":{"recipient":{"type":"object"},"error":{"type":"string"}}}},"summary":{"type":"object","properties":{"total":{"type":"number"},"sent":{"type":"number"},"failed":{"type":"number"}}}}}}}}},"security":[{"bearer":[]}],"summary":"Send bulk emails","tags":["Emails"]}},"/emails/metrics":{"get":{"operationId":"EmailsController_getMetrics","parameters":[{"name":"dateFrom","required":false,"in":"query","schema":{"format":"date-time","type":"string"}},{"name":"dateTo","required":false,"in":"query","schema":{"format":"date-time","type":"string"}},{"name":"type","required":false,"in":"query","schema":{"enum":["transactional","marketing","notification","system"],"type":"string"}}],"responses":{"200":{"description":"Email metrics retrieved successfully","content":{"application/json":{"schema":{"type":"object","properties":{"totalSent":{"type":"number"},"totalDelivered":{"type":"number"},"totalFailed":{"type":"number"},"totalPending":{"type":"number"},"deliveryRate":{"type":"number"},"failureRate":{"type":"number"}}}}}}},"security":[{"bearer":[]}],"summary":"Get email metrics","tags":["Emails"]}},"/emails/statistics/{period}":{"get":{"operationId":"EmailsController_getStatistics","parameters":[{"name":"period","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":"Email statistics retrieved successfully"}},"security":[{"bearer":[]}],"summary":"Get email statistics by period","tags":["Emails"]}},"/emails/{id}":{"get":{"operationId":"EmailsController_findOne","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"number"}}],"responses":{"200":{"description":"Email retrieved successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Email"}}}},"404":{"description":"Email not found"}},"security":[{"bearer":[]}],"summary":"Get email by ID","tags":["Emails"]},"patch":{"operationId":"EmailsController_update","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"number"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateEmailDto"}}}},"responses":{"200":{"description":"Email updated successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Email"}}}},"404":{"description":"Email not found"}},"security":[{"bearer":[]}],"summary":"Update email","tags":["Emails"]},"delete":{"operationId":"EmailsController_remove","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"number"}}],"responses":{"200":{"description":"Email deleted successfully"},"400":{"description":"Cannot delete sent emails"},"404":{"description":"Email not found"}},"security":[{"bearer":[]}],"summary":"Delete email","tags":["Emails"]}},"/emails/{id}/send-now":{"post":{"operationId":"EmailsController_sendEmailNow","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"number"}}],"responses":{"200":{"description":"Email sent successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Email"}}}},"400":{"description":"Cannot send emails that are already sent or cancelled"},"404":{"description":"Email not found"}},"security":[{"bearer":[]}],"summary":"Send pending email immediately (manual trigger)","tags":["Emails"]}},"/emails/{id}/cancel":{"post":{"operationId":"EmailsController_cancelEmail","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"number"}}],"responses":{"200":{"description":"Email cancelled successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Email"}}}},"400":{"description":"Cannot cancel sent or already cancelled emails"},"404":{"description":"Email not found"}},"security":[{"bearer":[]}],"summary":"Cancel pending or scheduled email","tags":["Emails"]}},"/emails/{id}/resend":{"post":{"operationId":"EmailsController_resendEmail","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"number"}}],"responses":{"200":{"description":"Email resent successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Email"}}}},"400":{"description":"Can only resend failed emails"},"404":{"description":"Email not found"}},"security":[{"bearer":[]}],"summary":"Resend failed email","tags":["Emails"]}},"/emails/process-scheduled":{"post":{"operationId":"EmailsController_processScheduledEmails","parameters":[],"responses":{"200":{"description":"Scheduled emails processed","content":{"application/json":{"schema":{"type":"object","properties":{"processed":{"type":"number"},"failed":{"type":"number"}}}}}}},"security":[{"bearer":[]}],"summary":"Process scheduled emails (Admin/System only)","tags":["Emails"]}},"/emails/connection/test":{"get":{"operationId":"EmailsController_testConnection","parameters":[],"responses":{"200":{"description":"Connection test completed","content":{"application/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean"},"message":{"type":"string"}}}}}}},"security":[{"bearer":[]}],"summary":"Test email connection","tags":["Emails"]}},"/email-templates":{"post":{"operationId":"EmailTemplatesController_create","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateEmailTemplateDto"}}}},"responses":{"201":{"description":"Email template created successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/EmailTemplate"}}}},"409":{"description":"Template code already exists"}},"security":[{"bearer":[]}],"summary":"Create a new email template","tags":["Email Templates"]},"get":{"operationId":"EmailTemplatesController_findAll","parameters":[{"name":"type","required":false,"in":"query","schema":{"enum":["transactional","marketing","notification","system"],"type":"string"}},{"name":"status","required":false,"in":"query","schema":{"enum":["active","inactive","draft"],"type":"string"}},{"name":"category","required":false,"in":"query","schema":{"type":"string"}},{"name":"search","required":false,"in":"query","schema":{"type":"string"}},{"name":"isDefault","required":false,"in":"query","schema":{"type":"boolean"}},{"name":"language","required":false,"in":"query","schema":{"type":"string"}},{"name":"page","required":false,"in":"query","description":"Page number (default: 1)","schema":{"type":"number"}},{"name":"limit","required":false,"in":"query","description":"Items per page (default: 20)","schema":{"type":"number"}}],"responses":{"200":{"description":"Email templates retrieved successfully"}},"security":[{"bearer":[]}],"summary":"Get all email templates","tags":["Email Templates"]}},"/email-templates/categories":{"get":{"operationId":"EmailTemplatesController_getCategories","parameters":[],"responses":{"200":{"description":"Template categories retrieved successfully","content":{"application/json":{"schema":{"type":"array","items":{"type":"string"}}}}}},"security":[{"bearer":[]}],"summary":"Get all template categories","tags":["Email Templates"]}},"/email-templates/default/{type}":{"get":{"operationId":"EmailTemplatesController_getDefaultTemplate","parameters":[{"name":"type","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":"Default template retrieved successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/EmailTemplate"}}}},"404":{"description":"Default template not found for this type"}},"security":[{"bearer":[]}],"summary":"Get default template for a specific type","tags":["Email Templates"]}},"/email-templates/code/{code}":{"get":{"operationId":"EmailTemplatesController_findByCode","parameters":[{"name":"code","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":"Template retrieved successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/EmailTemplate"}}}},"404":{"description":"Template not found"}},"security":[{"bearer":[]}],"summary":"Get template by code","tags":["Email Templates"]}},"/email-templates/{id}":{"get":{"operationId":"EmailTemplatesController_findOne","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"number"}}],"responses":{"200":{"description":"Email template retrieved successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/EmailTemplate"}}}},"404":{"description":"Email template not found"}},"security":[{"bearer":[]}],"summary":"Get email template by ID","tags":["Email Templates"]},"patch":{"operationId":"EmailTemplatesController_update","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"number"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateEmailTemplateDto"}}}},"responses":{"200":{"description":"Email template updated successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/EmailTemplate"}}}},"404":{"description":"Email template not found"},"409":{"description":"Template code already exists"}},"security":[{"bearer":[]}],"summary":"Update email template","tags":["Email Templates"]},"delete":{"operationId":"EmailTemplatesController_remove","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"number"}}],"responses":{"200":{"description":"Email template deactivated successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/EmailTemplate"}}}},"400":{"description":"Cannot delete default template"},"404":{"description":"Email template not found"}},"security":[{"bearer":[]}],"summary":"Delete (deactivate) email template","tags":["Email Templates"]}},"/email-templates/{id}/clone":{"post":{"operationId":"EmailTemplatesController_clone","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"number"}}],"responses":{"201":{"description":"Template cloned successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/EmailTemplate"}}}},"404":{"description":"Source template not found"},"409":{"description":"New template code already exists"}},"security":[{"bearer":[]}],"summary":"Clone an existing template","tags":["Email Templates"]}},"/email-templates/{id}/render":{"post":{"operationId":"EmailTemplatesController_renderTemplate","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"number"}}],"responses":{"200":{"description":"Template rendered successfully","content":{"application/json":{"schema":{"type":"object","properties":{"subject":{"type":"string"},"bodyHtml":{"type":"string"},"bodyText":{"type":"string"}}}}}},"404":{"description":"Template not found"}},"security":[{"bearer":[]}],"summary":"Preview template rendering with variables","tags":["Email Templates"]}},"/email-templates/{id}/validate":{"post":{"operationId":"EmailTemplatesController_validateTemplate","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"number"}}],"responses":{"200":{"description":"Template validation completed","content":{"application/json":{"schema":{"type":"object","properties":{"isValid":{"type":"boolean"},"missingVariables":{"type":"array","items":{"type":"string"}},"invalidVariables":{"type":"array","items":{"type":"string"}}}}}}},"404":{"description":"Template not found"}},"security":[{"bearer":[]}],"summary":"Validate template variables","tags":["Email Templates"]}},"/email-templates/seed-defaults":{"post":{"operationId":"EmailTemplatesController_seedDefaultTemplates","parameters":[],"responses":{"200":{"description":"Default templates seeded successfully"}},"security":[{"bearer":[]}],"summary":"Seed default templates (Admin only)","tags":["Email Templates"]}},"/currencies":{"post":{"operationId":"CurrenciesController_create","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateCurrencyDto"}}}},"responses":{"201":{"description":"Currency created successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Currency"}}}},"409":{"description":"Currency code already exists"}},"security":[{"bearer":[]}],"summary":"Create a new currency","tags":["Currencies"]},"get":{"operationId":"CurrenciesController_findAll","parameters":[{"name":"status","required":false,"in":"query","schema":{"enum":["ACTIVE","INACTIVE","DEPRECATED"],"type":"string"}},{"name":"isActive","required":false,"in":"query","schema":{"type":"boolean"}},{"name":"page","required":false,"in":"query","schema":{"example":1,"type":"number"}},{"name":"limit","required":false,"in":"query","schema":{"example":10,"type":"number"}}],"responses":{"200":{"description":"Currencies retrieved successfully"}},"security":[{"bearer":[]}],"summary":"Get all currencies with optional filtering","tags":["Currencies"]}},"/currencies/active":{"get":{"operationId":"CurrenciesController_getActiveCurrencies","parameters":[],"responses":{"200":{"description":"Active currencies retrieved successfully","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/Currency"}}}}}},"security":[{"bearer":[]}],"summary":"Get all active currencies","tags":["Currencies"]}},"/currencies/base":{"get":{"operationId":"CurrenciesController_getBaseCurrency","parameters":[],"responses":{"200":{"description":"Base currency retrieved successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Currency"}}}}},"security":[{"bearer":[]}],"summary":"Get the base currency","tags":["Currencies"]}},"/currencies/code/{code}":{"get":{"operationId":"CurrenciesController_findByCode","parameters":[{"name":"code","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":"Currency found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Currency"}}}},"404":{"description":"Currency not found"}},"security":[{"bearer":[]}],"summary":"Get currency by code","tags":["Currencies"]}},"/currencies/{id}":{"get":{"operationId":"CurrenciesController_findOne","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"number"}}],"responses":{"200":{"description":"Currency found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Currency"}}}},"404":{"description":"Currency not found"}},"security":[{"bearer":[]}],"summary":"Get currency by ID","tags":["Currencies"]},"patch":{"operationId":"CurrenciesController_update","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"number"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateCurrencyDto"}}}},"responses":{"200":{"description":"Currency updated successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Currency"}}}},"404":{"description":"Currency not found"},"409":{"description":"Currency code already exists"}},"security":[{"bearer":[]}],"summary":"Update currency","tags":["Currencies"]},"delete":{"operationId":"CurrenciesController_remove","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"number"}}],"responses":{"200":{"description":"Currency deactivated successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Currency"}}}},"400":{"description":"Cannot delete base currency"},"404":{"description":"Currency not found"}},"security":[{"bearer":[]}],"summary":"Deactivate currency (soft delete)","tags":["Currencies"]}},"/currencies/{id}/set-base":{"patch":{"operationId":"CurrenciesController_setBaseCurrency","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"number"}}],"responses":{"200":{"description":"Base currency set successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Currency"}}}},"400":{"description":"Currency must be active to set as base"},"404":{"description":"Currency not found"}},"security":[{"bearer":[]}],"summary":"Set currency as base currency","tags":["Currencies"]}},"/currencies/seed-defaults":{"post":{"operationId":"CurrenciesController_seedDefaultCurrencies","parameters":[],"responses":{"200":{"description":"Default currencies seeded successfully"}},"security":[{"bearer":[]}],"summary":"Seed default currencies (DOP, USD, EUR)","tags":["Currencies"]}},"/exchange-rates":{"post":{"operationId":"ExchangeRatesController_create","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateExchangeRateDto"}}}},"responses":{"201":{"description":"Exchange rate created successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ExchangeRate"}}}},"409":{"description":"Exchange rate already exists for this date"}},"security":[{"bearer":[]}],"summary":"Create a new exchange rate","tags":["Exchange Rates"]},"get":{"operationId":"ExchangeRatesController_findAll","parameters":[{"name":"fromCurrency","required":false,"in":"query","schema":{"type":"string"}},{"name":"toCurrency","required":false,"in":"query","schema":{"type":"string"}},{"name":"fromDate","required":false,"in":"query","schema":{"example":"2024-01-01","type":"string"}},{"name":"toDate","required":false,"in":"query","schema":{"example":"2024-12-31","type":"string"}},{"name":"page","required":false,"in":"query","schema":{"example":1,"type":"number"}},{"name":"limit","required":false,"in":"query","schema":{"example":10,"type":"number"}}],"responses":{"200":{"description":"Exchange rates retrieved successfully"}},"security":[{"bearer":[]}],"summary":"Get exchange rates with optional filtering","tags":["Exchange Rates"]}},"/exchange-rates/current":{"get":{"operationId":"ExchangeRatesController_getCurrentRates","parameters":[],"responses":{"200":{"description":"Current exchange rates retrieved successfully","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/ExchangeRate"}}}}}},"security":[{"bearer":[]}],"summary":"Get current exchange rates for all currency pairs","tags":["Exchange Rates"]}},"/exchange-rates/current/{fromCurrency}/{toCurrency}":{"get":{"operationId":"ExchangeRatesController_getCurrentRate","parameters":[{"name":"fromCurrency","required":true,"in":"path","schema":{"type":"string"}},{"name":"toCurrency","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":"Current exchange rate found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ExchangeRate"}}}},"404":{"description":"Exchange rate not found"}},"security":[{"bearer":[]}],"summary":"Get current exchange rate for specific currency pair","tags":["Exchange Rates"]}},"/exchange-rates/history/{fromCurrency}/{toCurrency}":{"get":{"operationId":"ExchangeRatesController_getHistory","parameters":[{"name":"fromCurrency","required":true,"in":"path","schema":{"type":"string"}},{"name":"toCurrency","required":true,"in":"path","schema":{"type":"string"}},{"name":"fromDate","required":false,"in":"query","schema":{"example":"2024-01-01","type":"string"}},{"name":"toDate","required":false,"in":"query","schema":{"example":"2024-12-31","type":"string"}},{"name":"limit","required":false,"in":"query","schema":{"example":30,"type":"number"}}],"responses":{"200":{"description":"Exchange rate history retrieved successfully","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/ExchangeRate"}}}}}},"security":[{"bearer":[]}],"summary":"Get exchange rate history for specific currency pair","tags":["Exchange Rates"]}},"/exchange-rates/convert":{"post":{"operationId":"ExchangeRatesController_convertCurrency","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ConvertCurrencyDto"}}}},"responses":{"200":{"description":"Currency conversion calculated successfully","content":{"application/json":{"schema":{"type":"object","properties":{"fromCurrency":{"type":"string"},"toCurrency":{"type":"string"},"amount":{"type":"number"},"convertedAmount":{"type":"number"},"exchangeRate":{"type":"number"},"date":{"type":"string"}}}}}},"404":{"description":"Exchange rate not found"}},"security":[{"bearer":[]}],"summary":"Convert amount between currencies","tags":["Exchange Rates"]}},"/exchange-rates/{id}":{"get":{"operationId":"ExchangeRatesController_findOne","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"number"}}],"responses":{"200":{"description":"Exchange rate found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ExchangeRate"}}}},"404":{"description":"Exchange rate not found"}},"security":[{"bearer":[]}],"summary":"Get exchange rate by ID","tags":["Exchange Rates"]},"patch":{"operationId":"ExchangeRatesController_update","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"number"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateExchangeRateDto"}}}},"responses":{"200":{"description":"Exchange rate updated successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ExchangeRate"}}}},"404":{"description":"Exchange rate not found"},"409":{"description":"Exchange rate already exists for this date"}},"security":[{"bearer":[]}],"summary":"Update exchange rate","tags":["Exchange Rates"]},"delete":{"operationId":"ExchangeRatesController_remove","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"number"}}],"responses":{"200":{"description":"Exchange rate deactivated successfully"},"404":{"description":"Exchange rate not found"}},"security":[{"bearer":[]}],"summary":"Deactivate exchange rate","tags":["Exchange Rates"]}},"/exchange-rates/seed-defaults":{"post":{"operationId":"ExchangeRatesController_seedDefaultRates","parameters":[],"responses":{"200":{"description":"Default exchange rates seeded successfully"}},"security":[{"bearer":[]}],"summary":"Seed default exchange rates","tags":["Exchange Rates"]}},"/payments":{"post":{"operationId":"PaymentsController_create","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateInternalPaymentDto"}}}},"responses":{"201":{"description":"Payment created successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Payment"}}}},"400":{"description":"Invalid payment data"},"409":{"description":"External reference already exists"}},"security":[{"bearer":[]}],"summary":"Create a new internal payment","tags":["Payments"]},"get":{"operationId":"PaymentsController_findAll","parameters":[{"name":"location","required":false,"in":"query","description":"Filter by location","schema":{"type":"string"}},{"name":"memberCode","required":false,"in":"query","description":"Filter by member code","schema":{"type":"string"}},{"name":"batchNumber","required":false,"in":"query","description":"Filter by batch number","schema":{"type":"string"}},{"name":"paymentMethod","required":false,"in":"query","description":"Filter by payment method","schema":{"type":"string","enum":["CASH","CREDIT_CARD","DEBIT_CARD","TRANSFER","DEPOSIT","PAYPAL","OTHER","STRIPE","AZUL","REFUND_VOUCHER"]}},{"name":"currency","required":false,"in":"query","description":"Filter by currency","schema":{"type":"string","enum":["USD","DOP","EUR"]}},{"name":"paymentType","required":false,"in":"query","description":"Filter by payment type","schema":{"type":"string","enum":["OFRENDA","DIEZMO","ACTIVIDAD","EDUCACION","MINISTERIO","DONACION","MEMBRESIA","CERTIFICADO","OTRO"]}},{"name":"status","required":false,"in":"query","description":"Filter by payment status","schema":{"type":"string","enum":["PAID","PENDING","PARTIAL","NOT_APPLICABLE","PAID","FAILED","CANCELLED","REFUNDED","PARTIALLY_REFUNDED","PROCESSING"]}},{"name":"refundStatus","required":false,"in":"query","description":"Estado derivado del reembolso sin modificar el pago original","schema":{"type":"string","enum":["PARTIALLY_REFUNDED","REFUNDED"]}},{"name":"minAmount","required":false,"in":"query","description":"Minimum amount","schema":{"type":"number"}},{"name":"maxAmount","required":false,"in":"query","description":"Maximum amount","schema":{"type":"number"}},{"name":"dateFrom","required":false,"in":"query","description":"Date from (YYYY-MM-DD)","schema":{"type":"string"}},{"name":"dateTo","required":false,"in":"query","description":"Date to (YYYY-MM-DD)","schema":{"type":"string"}},{"name":"includeAnnulled","required":false,"in":"query","description":"Include annulled payments","schema":{"default":false,"type":"boolean"}},{"name":"isAnnulled","required":false,"in":"query","description":"Filter only annulled payments (alias for backwards compatibility)","schema":{"default":false,"type":"boolean"}},{"name":"externalReference","required":false,"in":"query","description":"Filter by external reference","schema":{"type":"string"}},{"name":"processorId","required":false,"in":"query","description":"Filter by processor ID","schema":{"type":"number"}},{"name":"relatedEntityType","required":false,"in":"query","description":"Filter by related entity type","schema":{"type":"string"}},{"name":"relatedEntityId","required":false,"in":"query","description":"Filter by related entity ID","schema":{"type":"number"}},{"name":"activityId","required":false,"in":"query","description":"Filter by activity ID (filters payments related to participants of this activity)","schema":{"type":"number"}},{"name":"search","required":false,"in":"query","description":"Search text (member name, comment, etc.)","schema":{"type":"string"}},{"name":"page","required":false,"in":"query","description":"Page number","schema":{"default":1,"type":"number"}},{"name":"limit","required":false,"in":"query","description":"Items per page","schema":{"default":20,"type":"number"}},{"name":"sortBy","required":false,"in":"query","description":"Sort field","schema":{"default":"paymentDate","type":"string","enum":["paymentDate","amount","memberCode","paymentMethod","status","createdAt","updatedAt"]}},{"name":"sortOrder","required":false,"in":"query","description":"Sort order","schema":{"default":"DESC","type":"string","enum":["ASC","DESC"]}},{"name":"select","required":false,"in":"query","description":"Specific columns to return (comma-separated)","schema":{"example":"id,memberCode,amount,currency,paymentDate,status","type":"string"}}],"responses":{"200":{"description":"Payments retrieved successfully"}},"security":[{"bearer":[]}],"summary":"Get all payments with filtering and pagination","tags":["Payments"]}},"/payments/external":{"post":{"operationId":"PaymentsController_createExternal","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProcessExternalPaymentDto"}}}},"responses":{"201":{"description":"External payment initiated successfully"},"400":{"description":"Invalid payment data or processor not available"}},"security":[{"bearer":[]}],"summary":"Process payment through external processor","tags":["Payments"]}},"/payments/pay-with-saved-card":{"post":{"operationId":"PaymentsController_payWithSavedCard","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PayWithSavedCardDto"}}}},"responses":{"201":{"description":"Payment processed successfully with saved card"},"400":{"description":"Invalid saved card payment data"}},"security":[{"bearer":[]}],"summary":"Process payment using a saved card token","tags":["Payments"]}},"/payments/member/{memberCode}":{"get":{"operationId":"PaymentsController_findByMember","parameters":[{"name":"memberCode","required":true,"in":"path","description":"Member code","schema":{"type":"string"}},{"name":"location","required":false,"in":"query","description":"Filter by location","schema":{"type":"string"}},{"name":"batchNumber","required":false,"in":"query","description":"Filter by batch number","schema":{"type":"string"}},{"name":"paymentMethod","required":false,"in":"query","description":"Filter by payment method","schema":{"type":"string","enum":["CASH","CREDIT_CARD","DEBIT_CARD","TRANSFER","DEPOSIT","PAYPAL","OTHER","STRIPE","AZUL","REFUND_VOUCHER"]}},{"name":"currency","required":false,"in":"query","description":"Filter by currency","schema":{"type":"string","enum":["USD","DOP","EUR"]}},{"name":"paymentType","required":false,"in":"query","description":"Filter by payment type","schema":{"type":"string","enum":["OFRENDA","DIEZMO","ACTIVIDAD","EDUCACION","MINISTERIO","DONACION","MEMBRESIA","CERTIFICADO","OTRO"]}},{"name":"status","required":false,"in":"query","description":"Filter by payment status","schema":{"type":"string","enum":["PAID","PENDING","PARTIAL","NOT_APPLICABLE","PAID","FAILED","CANCELLED","REFUNDED","PARTIALLY_REFUNDED","PROCESSING"]}},{"name":"refundStatus","required":false,"in":"query","description":"Estado derivado del reembolso sin modificar el pago original","schema":{"type":"string","enum":["PARTIALLY_REFUNDED","REFUNDED"]}},{"name":"minAmount","required":false,"in":"query","description":"Minimum amount","schema":{"type":"number"}},{"name":"maxAmount","required":false,"in":"query","description":"Maximum amount","schema":{"type":"number"}},{"name":"dateFrom","required":false,"in":"query","description":"Date from (YYYY-MM-DD)","schema":{"type":"string"}},{"name":"dateTo","required":false,"in":"query","description":"Date to (YYYY-MM-DD)","schema":{"type":"string"}},{"name":"includeAnnulled","required":false,"in":"query","description":"Include annulled payments","schema":{"default":false,"type":"boolean"}},{"name":"isAnnulled","required":false,"in":"query","description":"Filter only annulled payments (alias for backwards compatibility)","schema":{"default":false,"type":"boolean"}},{"name":"externalReference","required":false,"in":"query","description":"Filter by external reference","schema":{"type":"string"}},{"name":"processorId","required":false,"in":"query","description":"Filter by processor ID","schema":{"type":"number"}},{"name":"relatedEntityType","required":false,"in":"query","description":"Filter by related entity type","schema":{"type":"string"}},{"name":"relatedEntityId","required":false,"in":"query","description":"Filter by related entity ID","schema":{"type":"number"}},{"name":"activityId","required":false,"in":"query","description":"Filter by activity ID (filters payments related to participants of this activity)","schema":{"type":"number"}},{"name":"search","required":false,"in":"query","description":"Search text (member name, comment, etc.)","schema":{"type":"string"}},{"name":"page","required":false,"in":"query","description":"Page number","schema":{"default":1,"type":"number"}},{"name":"limit","required":false,"in":"query","description":"Items per page","schema":{"default":20,"type":"number"}},{"name":"sortBy","required":false,"in":"query","description":"Sort field","schema":{"default":"paymentDate","type":"string","enum":["paymentDate","amount","memberCode","paymentMethod","status","createdAt","updatedAt"]}},{"name":"sortOrder","required":false,"in":"query","description":"Sort order","schema":{"default":"DESC","type":"string","enum":["ASC","DESC"]}},{"name":"select","required":false,"in":"query","description":"Specific columns to return (comma-separated)","schema":{"example":"id,memberCode,amount,currency,paymentDate,status","type":"string"}}],"responses":{"200":{"description":"Member payments retrieved successfully"}},"security":[{"bearer":[]}],"summary":"Get payments by member code","tags":["Payments"]}},"/payments/participant/{participantId}":{"get":{"operationId":"PaymentsController_findByParticipant","parameters":[{"name":"participantId","required":true,"in":"path","description":"Activity participant ID (catalogo_actividades_participantes.id)","schema":{"type":"number"}},{"name":"includeAnnulled","required":false,"in":"query","description":"Include annulled payments","schema":{"type":"boolean"}}],"responses":{"200":{"description":"Participant payments retrieved successfully"}},"security":[{"bearer":[]}],"summary":"Get payments by activity participant ID","tags":["Payments"]}},"/payments/entity/{entityType}/{entityId}":{"get":{"operationId":"PaymentsController_findByEntity","parameters":[{"name":"entityType","required":true,"in":"path","description":"Entity type (activity, education, etc.)","schema":{"type":"string"}},{"name":"entityId","required":true,"in":"path","description":"Entity ID","schema":{"type":"number"}}],"responses":{"200":{"description":"Entity payments retrieved successfully"}},"security":[{"bearer":[]}],"summary":"Get payments by related entity","tags":["Payments"]}},"/payments/totals":{"get":{"operationId":"PaymentsController_getTotals","parameters":[{"name":"dateFrom","required":true,"in":"query","description":"Start date (YYYY-MM-DD)","schema":{"type":"string"}},{"name":"dateTo","required":true,"in":"query","description":"End date (YYYY-MM-DD)","schema":{"type":"string"}},{"name":"location","required":false,"in":"query","description":"Filter by location","schema":{"type":"string"}}],"responses":{"200":{"description":"Payment totals calculated successfully"}},"security":[{"bearer":[]}],"summary":"Get payment totals by date range","tags":["Payments"]}},"/payments/{id}":{"get":{"operationId":"PaymentsController_findOne","parameters":[{"name":"id","required":true,"in":"path","description":"Payment ID","schema":{"type":"number"}}],"responses":{"200":{"description":"Payment found"},"404":{"description":"Payment not found"}},"security":[{"bearer":[]}],"summary":"Get payment by ID","tags":["Payments"]},"patch":{"operationId":"PaymentsController_update","parameters":[{"name":"id","required":true,"in":"path","description":"Payment ID","schema":{"type":"number"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdatePaymentDto"}}}},"responses":{"200":{"description":"Payment updated successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Payment"}}}},"400":{"description":"Invalid update data"},"404":{"description":"Payment not found"}},"security":[{"bearer":[]}],"summary":"Update payment","tags":["Payments"]}},"/payments/{id}/transactions":{"get":{"operationId":"PaymentsController_getTransactions","parameters":[{"name":"id","required":true,"in":"path","description":"Payment ID","schema":{"type":"number"}}],"responses":{"200":{"description":"Payment transactions retrieved successfully"}},"security":[{"bearer":[]}],"summary":"Get payment transactions","tags":["Payments"]}},"/payments/{id}/status":{"get":{"operationId":"PaymentsController_checkStatus","parameters":[{"name":"id","required":true,"in":"path","description":"Payment ID","schema":{"type":"number"}}],"responses":{"200":{"description":"Payment status retrieved successfully"}},"security":[{"bearer":[]}],"summary":"Check external payment status","tags":["Payments"]}},"/payments/{id}/reassign":{"patch":{"operationId":"PaymentsController_reassignPayment","parameters":[{"name":"id","required":true,"in":"path","description":"Payment ID","schema":{"type":"number"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ReassignPaymentDto"}}}},"responses":{"200":{"description":"Payment reassigned successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Payment"}}}},"400":{"description":"Invalid reassignment (different activities, annulled payment, etc.)"},"404":{"description":"Payment or participant not found"}},"security":[{"bearer":[]}],"summary":"Reassign payment to another participant","tags":["Payments"]}},"/payments/{id}/annul":{"patch":{"operationId":"PaymentsController_annul","parameters":[{"name":"id","required":true,"in":"path","description":"Payment ID","schema":{"type":"number"}}],"responses":{"200":{"description":"Payment annulled successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Payment"}}}},"400":{"description":"Cannot annul payment or missing required comment"},"404":{"description":"Payment not found"}},"security":[{"bearer":[]}],"summary":"Annul payment","tags":["Payments"]}},"/payments/{id}/refund":{"patch":{"operationId":"PaymentsController_refundInternal","parameters":[{"name":"id","required":true,"in":"path","description":"Payment ID","schema":{"type":"number"}}],"responses":{"200":{"description":"Payment refunded and credit note generated"},"400":{"description":"Cannot refund payment"},"404":{"description":"Payment not found"}},"security":[{"bearer":[]}],"summary":"Refund payment with credit note (independent of batch status)","tags":["Payments"]},"post":{"operationId":"PaymentsController_refund","parameters":[{"name":"id","required":true,"in":"path","description":"Payment ID","schema":{"type":"number"}}],"responses":{"200":{"description":"Refund processed successfully"},"400":{"description":"Cannot refund payment"},"404":{"description":"Payment not found"}},"security":[{"bearer":[]}],"summary":"Refund external payment","tags":["Payments"]}},"/payments/{id}/attach-approval":{"patch":{"operationId":"PaymentsController_attachApproval","parameters":[{"name":"id","required":true,"in":"path","description":"Payment ID","schema":{"type":"number"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AttachApprovalDto"}}}},"responses":{"200":{"description":"Approval attached successfully"},"400":{"description":"Payment already completed or invalid state"},"404":{"description":"Payment not found"}},"security":[{"bearer":[]}],"summary":"Attach manual approval to pending payment","tags":["Payments"]}},"/payments/{id}/restore":{"patch":{"operationId":"PaymentsController_restore","parameters":[{"name":"id","required":true,"in":"path","description":"Payment ID","schema":{"type":"number"}}],"responses":{"200":{"description":"Payment restored successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Payment"}}}},"400":{"description":"Payment is not annulled, missing required comment, or cannot be restored"},"404":{"description":"Payment not found"}},"security":[{"bearer":[]}],"summary":"Restore annulled payment with validation modes","tags":["Payments"]}},"/payments/{id}/validate-restore":{"get":{"operationId":"PaymentsController_validateRestore","parameters":[{"name":"id","required":true,"in":"path","description":"Payment ID","schema":{"type":"number"}}],"responses":{"200":{"description":"Validation result with available actions"},"404":{"description":"Payment not found"}},"security":[{"bearer":[]}],"summary":"Validate if payment can be restored","tags":["Payments"]}},"/payments/{id}/refund-eligibility":{"get":{"operationId":"PaymentsController_getRefundEligibility","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"number"}}],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"summary":"Consultar monto y destinos disponibles para reembolso","tags":["Payments"]}},"/payments/bulk-action":{"post":{"operationId":"PaymentsController_bulkAction","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BulkPaymentActionDto"}}}},"responses":{"200":{"description":"Bulk action completed"},"400":{"description":"Invalid bulk action data"}},"security":[{"bearer":[]}],"summary":"Perform bulk action on payments","tags":["Payments"]}},"/payments/validate-multiple-payment":{"post":{"description":"Validates that all participants can be paid together in a single transaction. Checks: 1) All participants exist, 2) All have zero previous payments, 3) Total amount matches sum of pending amounts, 4) All belong to same activity.","operationId":"PaymentsController_validateMultiplePayment","parameters":[],"responses":{"200":{"description":"Validation result with details","content":{"application/json":{"schema":{"type":"object","properties":{"isValid":{"type":"boolean"},"participants":{"type":"array"},"totalPending":{"type":"number"},"totalPendingDOP":{"type":"number"},"errors":{"type":"array","items":{"type":"string"}}}}}}},"400":{"description":"Invalid request"}},"security":[{"bearer":[]}],"summary":"Validate multiple participant payment before processing","tags":["Payments"]}},"/payments/webhook/{processorId}":{"post":{"operationId":"PaymentsController_handleWebhook","parameters":[{"name":"processorId","required":true,"in":"path","description":"Payment processor ID","schema":{"type":"number"}}],"responses":{"200":{"description":"Webhook processed successfully"}},"security":[{"bearer":[]}],"summary":"Handle payment processor webhook","tags":["Payments"]}},"/payments/{id}/details":{"get":{"operationId":"PaymentsController_getPaymentDetails","parameters":[{"name":"id","required":true,"in":"path","description":"Payment ID","schema":{"type":"number"}}],"responses":{"200":{"description":"Payment details retrieved"}},"security":[{"bearer":[]}],"summary":"Obtener detalles completos del pago (alias de GET /payments/:id)","tags":["Payments"]}},"/payments/{id}/print":{"get":{"operationId":"PaymentsController_printPayment","parameters":[{"name":"id","required":true,"in":"path","description":"Payment ID","schema":{"type":"number"}},{"name":"format","required":false,"in":"query","description":"Formato: ticket (default) o carta","schema":{"type":"string"}}],"responses":{"200":{"description":"Payment PDF generated"}},"security":[{"bearer":[]}],"summary":"Imprimir/descargar PDF con datos del pago","tags":["Payments"]}},"/payment-processors":{"post":{"operationId":"ProcessorsController_create","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateProcessorDto"}}}},"responses":{"201":{"description":"Processor created successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaymentProcessor"}}}},"400":{"description":"Invalid processor configuration"},"409":{"description":"Processor name already exists"}},"security":[{"bearer":[]}],"summary":"Create a new payment processor","tags":["Payment Processors"]},"get":{"operationId":"ProcessorsController_findAll","parameters":[{"name":"type","required":false,"in":"query","description":"Filter by processor type","schema":{"type":"string","enum":["STRIPE","PAYPAL","AZUL","PLACETOPAY","MERCADOPAGO","CUSTOM"]}},{"name":"status","required":false,"in":"query","description":"Filter by status","schema":{"type":"string","enum":["ACTIVE","INACTIVE","TESTING","MAINTENANCE"]}},{"name":"isActive","required":false,"in":"query","description":"Filter active only","schema":{"type":"boolean"}},{"name":"currency","required":false,"in":"query","description":"Filter by currency support","schema":{"type":"string"}},{"name":"search","required":false,"in":"query","description":"Search by name or display name","schema":{"type":"string"}}],"responses":{"200":{"description":"Processors retrieved successfully"}},"security":[{"bearer":[]}],"summary":"Get all payment processors","tags":["Payment Processors"]}},"/payment-processors/available":{"get":{"operationId":"ProcessorsController_getAvailable","parameters":[{"name":"currency","required":true,"in":"query","schema":{"type":"string"}}],"responses":{"200":{"description":"Available processors retrieved successfully"}},"security":[{"bearer":[]}],"summary":"Get available payment processors for currency","tags":["Payment Processors"]}},"/payment-processors/{id}":{"get":{"operationId":"ProcessorsController_findOne","parameters":[{"name":"id","required":true,"in":"path","description":"Processor ID","schema":{"type":"number"}}],"responses":{"200":{"description":"Processor found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaymentProcessor"}}}},"404":{"description":"Processor not found"}},"security":[{"bearer":[]}],"summary":"Get payment processor by ID","tags":["Payment Processors"]},"patch":{"operationId":"ProcessorsController_update","parameters":[{"name":"id","required":true,"in":"path","description":"Processor ID","schema":{"type":"number"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateProcessorDto"}}}},"responses":{"200":{"description":"Processor updated successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaymentProcessor"}}}},"400":{"description":"Invalid processor configuration"},"404":{"description":"Processor not found"}},"security":[{"bearer":[]}],"summary":"Update payment processor","tags":["Payment Processors"]},"delete":{"operationId":"ProcessorsController_remove","parameters":[{"name":"id","required":true,"in":"path","description":"Processor ID","schema":{"type":"number"}}],"responses":{"200":{"description":"Processor deleted successfully"},"400":{"description":"Cannot delete processor with existing payments"},"404":{"description":"Processor not found"}},"security":[{"bearer":[]}],"summary":"Delete payment processor","tags":["Payment Processors"]}},"/payment-processors/{id}/test":{"get":{"operationId":"ProcessorsController_testConnection","parameters":[{"name":"id","required":true,"in":"path","description":"Processor ID","schema":{"type":"number"}}],"responses":{"200":{"description":"Connection test completed"}},"security":[{"bearer":[]}],"summary":"Test payment processor connection","tags":["Payment Processors"]}},"/payment-processors/logs/all":{"get":{"description":"Retrieve logs of all communications with payment processors. Sensitive data is automatically masked for PCI compliance.","operationId":"ProcessorsController_getProcessorLogs","parameters":[{"name":"processor","required":false,"in":"query","description":"Filter by processor name (AZUL, PAYPAL, STRIPE)","schema":{"example":"AZUL","type":"string"}},{"name":"logType","required":false,"in":"query","description":"Filter by log type","schema":{"type":"string","enum":["REQUEST","RESPONSE","ERROR","WEBHOOK"]}},{"name":"transactionId","required":false,"in":"query","description":"Filter by transaction ID","schema":{"type":"string"}},{"name":"externalTransactionId","required":false,"in":"query","description":"Filter by external transaction ID (processor)","schema":{"type":"string"}},{"name":"paymentId","required":false,"in":"query","description":"Filter by payment ID","schema":{"type":"number"}},{"name":"churchId","required":false,"in":"query","description":"Filter by church ID","schema":{"type":"number"}},{"name":"success","required":false,"in":"query","description":"Filter by success status","schema":{"type":"boolean"}},{"name":"startDate","required":false,"in":"query","description":"Filter logs from this date (ISO 8601)","schema":{"example":"2024-01-01T00:00:00Z","type":"string"}},{"name":"endDate","required":false,"in":"query","description":"Filter logs until this date (ISO 8601)","schema":{"example":"2024-12-31T23:59:59Z","type":"string"}},{"name":"limit","required":false,"in":"query","description":"Maximum number of logs to return","schema":{"default":50,"type":"number"}},{"name":"offset","required":false,"in":"query","description":"Number of logs to skip","schema":{"default":0,"type":"number"}}],"responses":{"200":{"description":"Logs retrieved successfully","content":{"application/json":{"schema":{"type":"object","properties":{"logs":{"type":"array","items":{"type":"object"}},"total":{"type":"number"}}}}}}},"security":[{"bearer":[]}],"summary":"Get processor communication logs","tags":["Payment Processors"]}},"/payment-processors/logs/request/{requestId}":{"get":{"description":"Retrieve all logs (request, response, error) for a specific request correlation ID.","operationId":"ProcessorsController_getLogsByRequestId","parameters":[{"name":"requestId","required":true,"in":"path","description":"Request correlation ID","schema":{"type":"string"}}],"responses":{"200":{"description":"Logs retrieved successfully"}},"security":[{"bearer":[]}],"summary":"Get all logs for a specific request","tags":["Payment Processors"]}},"/payment-links":{"post":{"operationId":"PaymentLinksController_create","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreatePaymentLinkDto"}}}},"responses":{"201":{"description":"Payment link created"}},"security":[{"bearer":[]}],"summary":"Create a secure payment link without creating a payment record yet","tags":["Payment Links"]},"get":{"operationId":"PaymentLinksController_findAll","parameters":[{"name":"status","required":false,"in":"query","description":"Filtrar por estado","schema":{"type":"string","enum":["PENDING","SENT","OPENED","PROCESSING","PAID","FAILED","CANCELLED","EXPIRED"]}},{"name":"methodCode","required":false,"in":"query","description":"Filtrar por metodo","schema":{"type":"string","enum":["PAGINA_PAGO_AZUL","PAGINA_PAGO_STRIPE","PAGINA_PAGO_PAYPAL"]}},{"name":"relatedEntityType","required":false,"in":"query","description":"Filtrar por tipo de entidad relacionada","schema":{"type":"string"}},{"name":"relatedEntityId","required":false,"in":"query","description":"Filtrar por ID de entidad relacionada","schema":{"type":"number"}},{"name":"participantId","required":false,"in":"query","description":"Filtrar por participante","schema":{"type":"number"}},{"name":"search","required":false,"in":"query","description":"Buscar por cliente o codigo de miembro","schema":{"type":"string"}},{"name":"limit","required":false,"in":"query","description":"Limite de resultados","schema":{"default":50,"type":"number"}},{"name":"offset","required":false,"in":"query","description":"Desplazamiento de resultados","schema":{"default":0,"type":"number"}}],"responses":{"200":{"description":"Payment links retrieved"}},"security":[{"bearer":[]}],"summary":"List payment links","tags":["Payment Links"]}},"/payment-links/active":{"get":{"operationId":"PaymentLinksController_findActive","parameters":[{"name":"relatedEntityType","required":false,"in":"query","description":"Tipo de entidad relacionada","schema":{"type":"string"}},{"name":"relatedEntityId","required":false,"in":"query","description":"ID de la entidad relacionada","schema":{"type":"number"}},{"name":"participantId","required":false,"in":"query","description":"ID del participante de actividad","schema":{"type":"number"}},{"name":"amount","required":false,"in":"query","description":"Monto esperado para detectar diferencias","schema":{"type":"number"}},{"name":"discountAmount","required":false,"in":"query","description":"Descuento esperado para calcular la cobertura reservada","schema":{"type":"number"}},{"name":"currency","required":false,"in":"query","description":"Moneda esperada","schema":{"example":"DOP","type":"string"}}],"responses":{"200":{"description":"Active payment link lookup completed"}},"security":[{"bearer":[]}],"summary":"Find active payment link for a participant/entity","tags":["Payment Links"]}},"/payment-links/{id}/provider-details":{"get":{"operationId":"PaymentLinksController_getProviderDetails","parameters":[{"name":"id","required":true,"in":"path","description":"Payment link ID","schema":{"type":"number"}}],"responses":{"200":{"description":"Provider details retrieved"}},"security":[{"bearer":[]}],"summary":"Get provider details for a payment link","tags":["Payment Links"]}},"/payment-links/{id}/print":{"get":{"operationId":"PaymentLinksController_printPaymentLink","parameters":[{"name":"id","required":true,"in":"path","description":"Payment link ID","schema":{"type":"number"}}],"responses":{"200":{"description":"Payment link PDF generated"}},"security":[{"bearer":[]}],"summary":"Print payment link summary as PDF","tags":["Payment Links"]}},"/payment-links/{id}/provider-details/print":{"get":{"operationId":"PaymentLinksController_printProviderDetails","parameters":[{"name":"id","required":true,"in":"path","description":"Payment link ID","schema":{"type":"number"}}],"responses":{"200":{"description":"Provider details PDF generated"}},"security":[{"bearer":[]}],"summary":"Print payment link provider details as PDF","tags":["Payment Links"]}},"/payment-links/{id}":{"get":{"operationId":"PaymentLinksController_findOne","parameters":[{"name":"id","required":true,"in":"path","description":"Payment link ID","schema":{"type":"number"}}],"responses":{"200":{"description":"Payment link found"}},"security":[{"bearer":[]}],"summary":"Get payment link details by ID","tags":["Payment Links"]}},"/payment-links/{id}/status":{"get":{"operationId":"PaymentLinksController_getStatus","parameters":[{"name":"id","required":true,"in":"path","description":"Payment link ID","schema":{"type":"number"}}],"responses":{"200":{"description":"Payment link status found"}},"security":[{"bearer":[]}],"summary":"Get payment link status by ID","tags":["Payment Links"]}},"/payment-links/{id}/cancel":{"post":{"operationId":"PaymentLinksController_cancel","parameters":[{"name":"id","required":true,"in":"path","description":"Payment link ID","schema":{"type":"number"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CancelPaymentLinkDto"}}}},"responses":{"200":{"description":"Payment link cancelled"}},"security":[{"bearer":[]}],"summary":"Cancel a payment link that has not been paid","tags":["Payment Links"]}},"/payment-links/{id}/deliveries":{"post":{"operationId":"PaymentLinksController_deliver","parameters":[{"name":"id","required":true,"in":"path","description":"Payment link ID","schema":{"type":"number"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeliverPaymentLinkDto"}}}},"responses":{"200":{"description":"Payment link delivery registered"}},"security":[{"bearer":[]}],"summary":"Resend or record delivery of an existing payment link","tags":["Payment Links"]}},"/pay/l/{token}/data":{"get":{"operationId":"PublicPaymentLinksController_openData","parameters":[{"name":"token","required":true,"in":"path","description":"Public payment link token","schema":{"type":"string"}}],"responses":{"200":{"description":"Payment link open data returned"}},"summary":"Inspect a public payment link without starting checkout","tags":["Public Payment Links"]}},"/pay/l/{token}":{"get":{"operationId":"PublicPaymentLinksController_open","parameters":[{"name":"token","required":true,"in":"path","description":"Public payment link token","schema":{"type":"string"}}],"responses":{"200":{"description":"Shows payment details and current status"}},"summary":"Show a public payment link before starting checkout","tags":["Public Payment Links"]},"post":{"operationId":"PublicPaymentLinksController_start","parameters":[{"name":"token","required":true,"in":"path","description":"Public payment link token","schema":{"type":"string"}}],"responses":{"201":{"description":""}},"summary":"Start a hosted payment attempt from a public link","tags":["Public Payment Links"]}},"/pay/l/{token}/image":{"get":{"operationId":"PublicPaymentLinksController_productImage","parameters":[{"name":"token","required":true,"in":"path","description":"Public payment link token","schema":{"type":"string"}}],"responses":{"200":{"description":"Product image returned"}},"summary":"Return the payment link product image when available","tags":["Public Payment Links"]}},"/payment-callback/stripe/{result}":{"get":{"operationId":"PaymentCallbackController_stripeReturn_get","parameters":[{"name":"result","required":true,"in":"path","description":"success, cancel or failed","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"security":[{"X-API-Key":[]}],"summary":"Handle Stripe hosted payment return","tags":["Payment Callback"]},"post":{"operationId":"PaymentCallbackController_stripeReturn_post","parameters":[{"name":"result","required":true,"in":"path","description":"success, cancel or failed","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"security":[{"X-API-Key":[]}],"summary":"Handle Stripe hosted payment return","tags":["Payment Callback"]},"put":{"operationId":"PaymentCallbackController_stripeReturn_put","parameters":[{"name":"result","required":true,"in":"path","description":"success, cancel or failed","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"security":[{"X-API-Key":[]}],"summary":"Handle Stripe hosted payment return","tags":["Payment Callback"]},"delete":{"operationId":"PaymentCallbackController_stripeReturn_delete","parameters":[{"name":"result","required":true,"in":"path","description":"success, cancel or failed","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"security":[{"X-API-Key":[]}],"summary":"Handle Stripe hosted payment return","tags":["Payment Callback"]},"patch":{"operationId":"PaymentCallbackController_stripeReturn_patch","parameters":[{"name":"result","required":true,"in":"path","description":"success, cancel or failed","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"security":[{"X-API-Key":[]}],"summary":"Handle Stripe hosted payment return","tags":["Payment Callback"]},"options":{"operationId":"PaymentCallbackController_stripeReturn_options","parameters":[{"name":"result","required":true,"in":"path","description":"success, cancel or failed","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"security":[{"X-API-Key":[]}],"summary":"Handle Stripe hosted payment return","tags":["Payment Callback"]},"head":{"operationId":"PaymentCallbackController_stripeReturn_head","parameters":[{"name":"result","required":true,"in":"path","description":"success, cancel or failed","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"security":[{"X-API-Key":[]}],"summary":"Handle Stripe hosted payment return","tags":["Payment Callback"]},"search":{"operationId":"PaymentCallbackController_stripeReturn_search","parameters":[{"name":"result","required":true,"in":"path","description":"success, cancel or failed","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"security":[{"X-API-Key":[]}],"summary":"Handle Stripe hosted payment return","tags":["Payment Callback"]}},"/payment-callback/azul/{result}":{"get":{"operationId":"PaymentCallbackController_azulReturn_get","parameters":[{"name":"result","required":true,"in":"path","description":"approved, declined or cancel","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"security":[{"X-API-Key":[]}],"summary":"Handle Azul Payment Page return","tags":["Payment Callback"]},"post":{"operationId":"PaymentCallbackController_azulReturn_post","parameters":[{"name":"result","required":true,"in":"path","description":"approved, declined or cancel","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"security":[{"X-API-Key":[]}],"summary":"Handle Azul Payment Page return","tags":["Payment Callback"]},"put":{"operationId":"PaymentCallbackController_azulReturn_put","parameters":[{"name":"result","required":true,"in":"path","description":"approved, declined or cancel","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"security":[{"X-API-Key":[]}],"summary":"Handle Azul Payment Page return","tags":["Payment Callback"]},"delete":{"operationId":"PaymentCallbackController_azulReturn_delete","parameters":[{"name":"result","required":true,"in":"path","description":"approved, declined or cancel","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"security":[{"X-API-Key":[]}],"summary":"Handle Azul Payment Page return","tags":["Payment Callback"]},"patch":{"operationId":"PaymentCallbackController_azulReturn_patch","parameters":[{"name":"result","required":true,"in":"path","description":"approved, declined or cancel","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"security":[{"X-API-Key":[]}],"summary":"Handle Azul Payment Page return","tags":["Payment Callback"]},"options":{"operationId":"PaymentCallbackController_azulReturn_options","parameters":[{"name":"result","required":true,"in":"path","description":"approved, declined or cancel","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"security":[{"X-API-Key":[]}],"summary":"Handle Azul Payment Page return","tags":["Payment Callback"]},"head":{"operationId":"PaymentCallbackController_azulReturn_head","parameters":[{"name":"result","required":true,"in":"path","description":"approved, declined or cancel","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"security":[{"X-API-Key":[]}],"summary":"Handle Azul Payment Page return","tags":["Payment Callback"]},"search":{"operationId":"PaymentCallbackController_azulReturn_search","parameters":[{"name":"result","required":true,"in":"path","description":"approved, declined or cancel","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"security":[{"X-API-Key":[]}],"summary":"Handle Azul Payment Page return","tags":["Payment Callback"]}},"/payment-callback/paypal/{result}":{"get":{"operationId":"PaymentCallbackController_paypalReturn_get","parameters":[{"name":"result","required":true,"in":"path","description":"success or cancel","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"security":[{"X-API-Key":[]}],"summary":"Handle PayPal hosted payment return","tags":["Payment Callback"]},"post":{"operationId":"PaymentCallbackController_paypalReturn_post","parameters":[{"name":"result","required":true,"in":"path","description":"success or cancel","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"security":[{"X-API-Key":[]}],"summary":"Handle PayPal hosted payment return","tags":["Payment Callback"]},"put":{"operationId":"PaymentCallbackController_paypalReturn_put","parameters":[{"name":"result","required":true,"in":"path","description":"success or cancel","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"security":[{"X-API-Key":[]}],"summary":"Handle PayPal hosted payment return","tags":["Payment Callback"]},"delete":{"operationId":"PaymentCallbackController_paypalReturn_delete","parameters":[{"name":"result","required":true,"in":"path","description":"success or cancel","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"security":[{"X-API-Key":[]}],"summary":"Handle PayPal hosted payment return","tags":["Payment Callback"]},"patch":{"operationId":"PaymentCallbackController_paypalReturn_patch","parameters":[{"name":"result","required":true,"in":"path","description":"success or cancel","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"security":[{"X-API-Key":[]}],"summary":"Handle PayPal hosted payment return","tags":["Payment Callback"]},"options":{"operationId":"PaymentCallbackController_paypalReturn_options","parameters":[{"name":"result","required":true,"in":"path","description":"success or cancel","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"security":[{"X-API-Key":[]}],"summary":"Handle PayPal hosted payment return","tags":["Payment Callback"]},"head":{"operationId":"PaymentCallbackController_paypalReturn_head","parameters":[{"name":"result","required":true,"in":"path","description":"success or cancel","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"security":[{"X-API-Key":[]}],"summary":"Handle PayPal hosted payment return","tags":["Payment Callback"]},"search":{"operationId":"PaymentCallbackController_paypalReturn_search","parameters":[{"name":"result","required":true,"in":"path","description":"success or cancel","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"security":[{"X-API-Key":[]}],"summary":"Handle PayPal hosted payment return","tags":["Payment Callback"]}},"/payment-callback/receipt":{"post":{"operationId":"PaymentCallbackController_temporaryReceipt","parameters":[],"responses":{"200":{"description":""}},"security":[{"X-API-Key":[]}],"summary":"Generate temporary payment callback receipt PDF","tags":["Payment Callback"]}},"/payment-callback/{result}":{"get":{"operationId":"PaymentCallbackController_unifiedReturn_get","parameters":[{"name":"result","required":true,"in":"path","description":"success, declined or cancel","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"security":[{"X-API-Key":[]}],"summary":"Handle unified hosted payment return","tags":["Payment Callback"]},"post":{"operationId":"PaymentCallbackController_unifiedReturn_post","parameters":[{"name":"result","required":true,"in":"path","description":"success, declined or cancel","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"security":[{"X-API-Key":[]}],"summary":"Handle unified hosted payment return","tags":["Payment Callback"]},"put":{"operationId":"PaymentCallbackController_unifiedReturn_put","parameters":[{"name":"result","required":true,"in":"path","description":"success, declined or cancel","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"security":[{"X-API-Key":[]}],"summary":"Handle unified hosted payment return","tags":["Payment Callback"]},"delete":{"operationId":"PaymentCallbackController_unifiedReturn_delete","parameters":[{"name":"result","required":true,"in":"path","description":"success, declined or cancel","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"security":[{"X-API-Key":[]}],"summary":"Handle unified hosted payment return","tags":["Payment Callback"]},"patch":{"operationId":"PaymentCallbackController_unifiedReturn_patch","parameters":[{"name":"result","required":true,"in":"path","description":"success, declined or cancel","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"security":[{"X-API-Key":[]}],"summary":"Handle unified hosted payment return","tags":["Payment Callback"]},"options":{"operationId":"PaymentCallbackController_unifiedReturn_options","parameters":[{"name":"result","required":true,"in":"path","description":"success, declined or cancel","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"security":[{"X-API-Key":[]}],"summary":"Handle unified hosted payment return","tags":["Payment Callback"]},"head":{"operationId":"PaymentCallbackController_unifiedReturn_head","parameters":[{"name":"result","required":true,"in":"path","description":"success, declined or cancel","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"security":[{"X-API-Key":[]}],"summary":"Handle unified hosted payment return","tags":["Payment Callback"]},"search":{"operationId":"PaymentCallbackController_unifiedReturn_search","parameters":[{"name":"result","required":true,"in":"path","description":"success, declined or cancel","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"security":[{"X-API-Key":[]}],"summary":"Handle unified hosted payment return","tags":["Payment Callback"]}},"/payment-provider-webhooks/stripe":{"post":{"operationId":"PaymentProviderWebhooksController_stripeWebhook","parameters":[],"responses":{"201":{"description":""}},"summary":"Handle Stripe hosted payment webhook","tags":["Payment Provider Webhooks"]}},"/payment-provider-webhooks/stripe/{processorId}":{"post":{"operationId":"PaymentProviderWebhooksController_stripeWebhookByProcessor","parameters":[{"name":"processorId","required":true,"in":"path","description":"Payment processor id","schema":{"type":"string"}}],"responses":{"201":{"description":""}},"summary":"Handle Stripe hosted payment webhook by processor","tags":["Payment Provider Webhooks"]}},"/payment-provider-webhooks/paypal":{"post":{"operationId":"PaymentProviderWebhooksController_paypalWebhook","parameters":[],"responses":{"201":{"description":""}},"summary":"Handle PayPal hosted payment webhook","tags":["Payment Provider Webhooks"]}},"/payment-provider-webhooks/paypal/{processorId}":{"post":{"operationId":"PaymentProviderWebhooksController_paypalWebhookByProcessor","parameters":[{"name":"processorId","required":true,"in":"path","description":"Payment processor id","schema":{"type":"string"}}],"responses":{"201":{"description":""}},"summary":"Handle PayPal hosted payment webhook by processor","tags":["Payment Provider Webhooks"]}},"/payment-methods":{"get":{"operationId":"PaymentMethodsController_getGlobalMethods","parameters":[],"responses":{"200":{"description":"Payment methods retrieved"}},"security":[{"bearer":[]}],"summary":"List global payment methods","tags":["Payment Methods"]}},"/payment-methods/{code}/status":{"patch":{"operationId":"PaymentMethodsController_updateGlobalStatus","parameters":[{"name":"code","required":true,"in":"path","description":"Payment method code","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdatePaymentMethodStatusDto"}}}},"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"summary":"Enable, disable, show or hide a global payment method","tags":["Payment Methods"]}},"/payment-method-availability":{"get":{"operationId":"PaymentMethodsController_getAvailability","parameters":[{"name":"activityId","required":false,"in":"query","description":"ID de actividad","schema":{"type":"number"}},{"name":"participantId","required":false,"in":"query","description":"ID de participante de actividad","schema":{"type":"number"}},{"name":"amount","required":false,"in":"query","description":"Monto a pagar","schema":{"type":"number"}},{"name":"currency","required":false,"in":"query","description":"Moneda ISO 4217","schema":{"example":"DOP","type":"string"}},{"name":"context","required":false,"in":"query","description":"Contexto operativo","schema":{"example":"ACTIVITY_PAYMENT","type":"string"}}],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"summary":"Resolve available payment methods for a payment context","tags":["Payment Methods"]}},"/activities/{activityId}/payment-methods":{"get":{"operationId":"PaymentMethodsController_getActivityMethods","parameters":[{"name":"activityId","required":true,"in":"path","description":"Activity ID","schema":{"type":"number"}}],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"summary":"List payment method availability for an activity","tags":["Payment Methods"]}},"/activities/{activityId}/payment-methods/{code}":{"patch":{"operationId":"PaymentMethodsController_updateActivityMethod","parameters":[{"name":"activityId","required":true,"in":"path","description":"Activity ID","schema":{"type":"number"}},{"name":"code","required":true,"in":"path","description":"Payment method code","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateActivityPaymentMethodDto"}}}},"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"summary":"Set payment method availability for an activity","tags":["Payment Methods"]}},"/payment-refunds":{"post":{"operationId":"PaymentRefundsController_create","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreatePaymentRefundDto"}}}},"responses":{"201":{"description":"Solicitud de reembolso creada"}},"security":[{"bearer":[]}],"summary":"Solicitar un reembolso de pago","tags":["Payment Refunds"]},"get":{"operationId":"PaymentRefundsController_findAll","parameters":[{"name":"status","required":false,"in":"query","schema":{"type":"string","enum":["REQUESTED","APPROVED","PROCESSING","PROCESSED","FAILED","CANCELLED"]}},{"name":"disposition","required":false,"in":"query","schema":{"type":"string","enum":["MONEY_RETURN","REFUND_VOUCHER"]}},{"name":"search","required":false,"in":"query","schema":{"type":"string"}},{"name":"page","required":false,"in":"query","schema":{"$ref":"#/components/schemas/Object"}},{"name":"limit","required":false,"in":"query","schema":{"$ref":"#/components/schemas/Object"}}],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"summary":"Consultar reembolsos de pagos","tags":["Payment Refunds"]}},"/payment-refunds/{id}/provider-details":{"get":{"operationId":"PaymentRefundsController_findProviderDetails","parameters":[{"name":"id","required":true,"in":"path","description":"ID del reembolso","schema":{"type":"number"}}],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"summary":"Consultar la respuesta del proveedor para un reembolso","tags":["Payment Refunds"]}},"/payment-refunds/{id}/document":{"get":{"operationId":"PaymentRefundsController_getDocument","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"number"}}],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"summary":"Abrir el comprobante PDF de un reembolso","tags":["Payment Refunds"]}},"/payment-refunds/{id}":{"get":{"operationId":"PaymentRefundsController_findOne","parameters":[{"name":"id","required":true,"in":"path","description":"ID del reembolso","schema":{"type":"number"}}],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"summary":"Consultar el detalle de un reembolso","tags":["Payment Refunds"]}},"/payment-refunds/{id}/approve":{"post":{"operationId":"PaymentRefundsController_approve","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"number"}}],"responses":{"201":{"description":""}},"security":[{"bearer":[]}],"summary":"Aprobar una solicitud de reembolso","tags":["Payment Refunds"]}},"/payment-refunds/{id}/process":{"post":{"operationId":"PaymentRefundsController_process","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"number"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProcessPaymentRefundDto"}}}},"responses":{"201":{"description":""}},"security":[{"bearer":[]}],"summary":"Procesar un reembolso aprobado","tags":["Payment Refunds"]}},"/payment-refunds/{id}/retry-provider":{"post":{"operationId":"PaymentRefundsController_retry","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"number"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProcessPaymentRefundDto"}}}},"responses":{"201":{"description":""}},"security":[{"bearer":[]}],"summary":"Reintentar un reembolso que no pudo completarse","tags":["Payment Refunds"]}},"/payment-refunds/{id}/cancel":{"post":{"operationId":"PaymentRefundsController_cancel","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"number"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CancelPaymentRefundDto"}}}},"responses":{"201":{"description":""}},"security":[{"bearer":[]}],"summary":"Cancelar una solicitud de reembolso","tags":["Payment Refunds"]}},"/credit-notes":{"get":{"operationId":"CreditNotesController_findAll","parameters":[{"name":"memberCode","required":true,"in":"query","schema":{"type":"string"}},{"name":"status","required":true,"in":"query","schema":{"type":"string"}},{"name":"location","required":true,"in":"query","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"summary":"Consultar vouchers de reembolso","tags":["Credit Notes"]}},"/credit-notes/beneficiary/{reference}/available":{"get":{"operationId":"CreditNotesController_findAvailable","parameters":[{"name":"reference","required":true,"in":"path","schema":{"type":"string"}},{"name":"location","required":true,"in":"query","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"summary":"Consultar vouchers disponibles para una persona","tags":["Credit Notes"]}},"/credit-notes/{id}":{"get":{"operationId":"CreditNotesController_findOne","parameters":[{"name":"id","required":true,"in":"path","description":"ID del voucher","schema":{"type":"number"}}],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"summary":"Consultar el detalle de un voucher de reembolso","tags":["Credit Notes"]}},"/credit-notes/{id}/document":{"get":{"operationId":"CreditNotesController_getDocument","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"number"}}],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"summary":"Abrir el documento PDF de un voucher de reembolso","tags":["Credit Notes"]}},"/credit-notes/{id}/applications":{"post":{"operationId":"CreditNotesController_apply","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"number"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApplyCreditNoteDto"}}}},"responses":{"201":{"description":""}},"security":[{"bearer":[]}],"summary":"Aplicar un voucher a un cobro pendiente","tags":["Credit Notes"]}},"/credit-notes/{id}/application-quote":{"post":{"operationId":"CreditNotesController_quoteApplication","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"number"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/QuoteCreditNoteApplicationDto"}}}},"responses":{"201":{"description":""}},"security":[{"bearer":[]}],"summary":"Calcular la cobertura de un voucher antes de aplicarlo","tags":["Credit Notes"]}},"/credit-notes/applications/{id}/reverse":{"post":{"operationId":"CreditNotesController_reverseApplication","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"number"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ReverseCreditNoteApplicationDto"}}}},"responses":{"201":{"description":""}},"security":[{"bearer":[]}],"summary":"Revertir una aplicacion de voucher","tags":["Credit Notes"]}},"/credit-notes/{id}/transfers":{"post":{"operationId":"CreditNotesController_transfer","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"number"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TransferCreditNoteDto"}}}},"responses":{"201":{"description":""}},"security":[{"bearer":[]}],"summary":"Transferir saldo a otra persona de forma autorizada","tags":["Credit Notes"]}},"/credit-notes/{id}/cancel":{"post":{"operationId":"CreditNotesController_cancel","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"number"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CancelCreditNoteDto"}}}},"responses":{"201":{"description":""}},"security":[{"bearer":[]}],"summary":"Cancelar un voucher que no ha sido utilizado","tags":["Credit Notes"]}},"/receipts/generate/{paymentId}":{"post":{"operationId":"ReceiptsController_generateReceipt","parameters":[{"name":"paymentId","required":true,"in":"path","schema":{"type":"number"}}],"responses":{"201":{"description":""}},"tags":["Receipts"]}},"/receipts/{id}":{"get":{"operationId":"ReceiptsController_getReceipt","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"number"}}],"responses":{"200":{"description":""}},"tags":["Receipts"]}},"/receipts/payment/{paymentId}":{"get":{"operationId":"ReceiptsController_getReceiptByPayment","parameters":[{"name":"paymentId","required":true,"in":"path","schema":{"type":"number"}}],"responses":{"200":{"description":""}},"tags":["Receipts"]}},"/receipts/{id}/download":{"get":{"operationId":"ReceiptsController_downloadReceipt","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"number"}}],"responses":{"200":{"description":""}},"tags":["Receipts"]}},"/receipts/{id}/view":{"get":{"operationId":"ReceiptsController_viewReceipt","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"number"}}],"responses":{"200":{"description":""}},"tags":["Receipts"]}},"/receipts/{id}/cancel":{"post":{"operationId":"ReceiptsController_cancelReceipt","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"number"}}],"responses":{"201":{"description":""}},"tags":["Receipts"]}},"/receipts/print/{paymentId}":{"get":{"operationId":"ReceiptsController_printReceiptByPayment","parameters":[{"name":"paymentId","required":true,"in":"path","schema":{"type":"number"}},{"name":"format","required":true,"in":"query","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"tags":["Receipts"]}},"/payments/corrections/unlink":{"post":{"description":"Desvincula un pago de su entidad relacionada. \n    El pago queda marcado como UNLINKED y los montos se recalculan.\n    Requiere permisos: FULL_ACCESS, PAYMENT_CORRECTION, FINANCIAL_ADMIN","operationId":"PaymentCorrectionController_unlinkPayment","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnlinkPaymentDto"}}}},"responses":{"200":{"description":"Pago desvinculado exitosamente","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CorrectionResponseDto"}}}},"400":{"description":"Datos inválidos"},"403":{"description":"Sin permisos"},"404":{"description":"Pago no encontrado"}},"security":[{"bearer":[]}],"summary":"Desvincular pago de su entidad","tags":["Payment Corrections"]}},"/payments/corrections/link":{"post":{"description":"Vincula un pago sin asignar a una entidad específica.\n    Solo funciona con pagos que tienen status UNLINKED.\n    Requiere permisos: FULL_ACCESS, PAYMENT_CORRECTION, FINANCIAL_ADMIN","operationId":"PaymentCorrectionController_linkPayment","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LinkPaymentDto"}}}},"responses":{"200":{"description":"Pago vinculado exitosamente","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CorrectionResponseDto"}}}},"400":{"description":"Datos inválidos o pago ya vinculado"},"403":{"description":"Sin permisos"},"404":{"description":"Pago o entidad no encontrada"}},"security":[{"bearer":[]}],"summary":"Vincular pago a una entidad","tags":["Payment Corrections"]}},"/payments/corrections/reassign":{"post":{"description":"Reasigna un pago de una entidad a otra del mismo tipo.\n    Por ejemplo, de un participante de actividad a otro.\n    Requiere permisos: FULL_ACCESS, PAYMENT_CORRECTION, FINANCIAL_ADMIN","operationId":"PaymentCorrectionController_reassignPayment","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ReassignPaymentDto"}}}},"responses":{"200":{"description":"Pago reasignado exitosamente","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CorrectionResponseDto"}}}},"400":{"description":"Datos inválidos"},"403":{"description":"Sin permisos"},"404":{"description":"Pago o entidad no encontrada"}},"security":[{"bearer":[]}],"summary":"Reasignar pago a otra entidad del mismo tipo","tags":["Payment Corrections"]}},"/payments/corrections/transfer":{"post":{"description":"Transfiere un pago a un tipo de entidad diferente.\n    Por ejemplo, de actividad a ofrenda o de diezmo a donación.\n    Requiere permisos: FULL_ACCESS, PAYMENT_CORRECTION, FINANCIAL_ADMIN","operationId":"PaymentCorrectionController_transferPayment","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TransferPaymentDto"}}}},"responses":{"200":{"description":"Pago transferido exitosamente","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CorrectionResponseDto"}}}},"400":{"description":"Datos inválidos"},"403":{"description":"Sin permisos"},"404":{"description":"Pago o entidad no encontrada"}},"security":[{"bearer":[]}],"summary":"Transferir pago a un tipo diferente","tags":["Payment Corrections"]}},"/payments/corrections/history":{"get":{"description":"Consulta el historial de correcciones realizadas con filtros opcionales.","operationId":"PaymentCorrectionController_getCorrectionHistory","parameters":[{"name":"paymentId","required":false,"in":"query","description":"ID del pago para filtrar","schema":{"example":1234,"type":"number"}},{"name":"correctedBy","required":false,"in":"query","description":"Usuario que realizó la corrección","schema":{"example":"admin001","type":"string"}},{"name":"action","required":false,"in":"query","description":"Tipo de acción","schema":{"type":"string","enum":["UNLINK","LINK","REASSIGN","TRANSFER","CHANGE_TYPE"]}},{"name":"dateFrom","required":false,"in":"query","description":"Fecha inicio (formato ISO)","schema":{"example":"2025-01-01","type":"string"}},{"name":"dateTo","required":false,"in":"query","description":"Fecha fin (formato ISO)","schema":{"example":"2025-12-31","type":"string"}},{"name":"page","required":false,"in":"query","description":"Número de página","schema":{"example":1,"type":"number"}},{"name":"limit","required":false,"in":"query","description":"Elementos por página","schema":{"example":20,"type":"number"}}],"responses":{"200":{"description":"Historial de correcciones"}},"security":[{"bearer":[]}],"summary":"Obtener historial de correcciones","tags":["Payment Corrections"]}},"/payments/corrections/stats":{"get":{"description":"Estadísticas generales de las correcciones realizadas.","operationId":"PaymentCorrectionController_getCorrectionStats","parameters":[],"responses":{"200":{"description":"Estadísticas de correcciones"}},"security":[{"bearer":[]}],"summary":"Obtener estadísticas de correcciones","tags":["Payment Corrections"]}},"/payments/corrections/supported-types":{"get":{"description":"Lista los tipos de entidad que pueden ser corregidos.","operationId":"PaymentCorrectionController_getSupportedTypes","parameters":[],"responses":{"200":{"description":"Lista de tipos soportados"}},"security":[{"bearer":[]}],"summary":"Obtener tipos de entidad soportados","tags":["Payment Corrections"]}},"/payments/corrections/check-permission":{"get":{"description":"Verifica si el usuario actual tiene permisos para realizar correcciones.","operationId":"PaymentCorrectionController_checkPermission","parameters":[],"responses":{"200":{"description":"Estado de permisos"}},"security":[{"bearer":[]}],"summary":"Verificar permisos de corrección","tags":["Payment Corrections"]}},"/logging":{"get":{"operationId":"LoggingController_getLogs","parameters":[{"name":"type","required":false,"in":"query","schema":{"enum":["request","response","error"],"type":"string"}},{"name":"environment","required":false,"in":"query","description":"Filtrar por ambiente","schema":{"enum":["localhost","production","sandbox","unknown","all"],"type":"string"}},{"name":"userId","required":false,"in":"query","description":"Buscar por UID, ID, username o nombre de usuario","schema":{"type":"string"}},{"name":"method","required":false,"in":"query","schema":{"type":"string"}},{"name":"url","required":false,"in":"query","schema":{"type":"string"}},{"name":"statusCode","required":false,"in":"query","schema":{"type":"number"}},{"name":"errorType","required":false,"in":"query","schema":{"type":"string"}},{"name":"startDate","required":false,"in":"query","schema":{"type":"string"}},{"name":"endDate","required":false,"in":"query","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":100,"default":50,"type":"number"}}],"responses":{"200":{"description":""}},"security":[{"JWT-auth":[]}],"summary":"Get logs with filters","tags":["Logging"]}},"/logging/detail/{type}/{id}":{"get":{"operationId":"LoggingController_getLogDetail","parameters":[{"name":"type","required":true,"in":"path","schema":{"enum":["request","response","error"],"type":"string"}},{"name":"id","required":true,"in":"path","description":"MongoDB document id","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"security":[{"JWT-auth":[]}],"summary":"Get a complete log document by type and id","tags":["Logging"]}},"/logging/trace/{requestId}":{"get":{"operationId":"LoggingController_getLogTrace","parameters":[{"name":"requestId","required":true,"in":"path","description":"Request correlation id","schema":{"type":"string"}},{"name":"environment","required":false,"in":"query","schema":{"enum":["localhost","production","sandbox","unknown","all"],"type":"string"}}],"responses":{"200":{"description":""}},"security":[{"JWT-auth":[]}],"summary":"Get request, response and error logs associated to a requestId","tags":["Logging"]}},"/logging/statistics":{"get":{"operationId":"LoggingController_getStatistics","parameters":[{"name":"startDate","required":false,"in":"query","schema":{"type":"string"}},{"name":"endDate","required":false,"in":"query","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"security":[{"JWT-auth":[]}],"summary":"Get logging statistics","tags":["Logging"]}},"/logging/errors/{id}/resolve":{"patch":{"operationId":"LoggingController_markErrorAsResolved","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"security":[{"JWT-auth":[]}],"summary":"Mark error as resolved","tags":["Logging"]}},"/logging/status":{"get":{"operationId":"LoggingController_getConnectionStatus","parameters":[],"responses":{"200":{"description":""}},"security":[{"JWT-auth":[]}],"summary":"Get MongoDB connection status","tags":["Logging"]}},"/logging/storage-stats":{"get":{"description":"Returns counts, date ranges and distribution by environment for all log collections","operationId":"LoggingController_getStorageStats","parameters":[],"responses":{"200":{"description":""}},"security":[{"JWT-auth":[]}],"summary":"Get storage statistics for logs","tags":["Logging"]}},"/logging/clean/preview":{"post":{"description":"Returns count of logs that would be deleted by date range and environment without actually deleting them. Use this before executing cleanup.","operationId":"LoggingController_previewCleanLogs","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CleanLogsDto"}}}},"responses":{"200":{"description":"Preview of logs to be deleted"}},"security":[{"JWT-auth":[]}],"summary":"Preview logs to be deleted (dry run)","tags":["Logging"]}},"/logging/clean":{"delete":{"description":"Permanently deletes logs within the specified date range and environment. Requires confirm=true. If environment is omitted, the active backend environment is used.","operationId":"LoggingController_cleanLogs","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CleanLogsDto"}}}},"responses":{"200":{"description":"Logs deleted successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CleanLogsResponseDto"}}}},"400":{"description":"Invalid parameters or missing confirmation"},"403":{"description":"Insufficient permissions"}},"security":[{"JWT-auth":[]}],"summary":"Delete logs by date range and environment","tags":["Logging"]}},"/cashflow/cashboxes":{"get":{"operationId":"CashboxesController_findAll","parameters":[],"responses":{"200":{"description":"Lista de cajas","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/Cashbox"}}}}}},"security":[{"bearer":[]}],"summary":"Obtener todas las cajas disponibles","tags":["Cashflow - Cajas"]}},"/cashflow/cashboxes/{id}":{"get":{"operationId":"CashboxesController_findOne","parameters":[{"name":"id","required":true,"in":"path","description":"ID de la caja","schema":{"type":"number"}}],"responses":{"200":{"description":"Detalle de la caja","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Cashbox"}}}},"404":{"description":"Caja no encontrada"}},"security":[{"bearer":[]}],"summary":"Obtener detalle de una caja","tags":["Cashflow - Cajas"]}},"/cashflow/cashboxes/{id}/status":{"get":{"operationId":"CashboxesController_getStatus","parameters":[{"name":"id","required":true,"in":"path","description":"ID de la caja","schema":{"type":"number"}}],"responses":{"200":{"description":"Estado de la caja"},"404":{"description":"Caja no encontrada"}},"security":[{"bearer":[]}],"summary":"Obtener estado actual de una caja","tags":["Cashflow - Cajas"]}},"/cashflow/batches/open":{"post":{"operationId":"CashBatchesController_openBatch","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/OpenBatchDto"}}}},"responses":{"201":{"description":"Lote aperturado exitosamente","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CashBatch"}}}},"400":{"description":"Ya tienes un lote abierto o datos inválidos"},"404":{"description":"Caja no encontrada"}},"security":[{"bearer":[]}],"summary":"Aperturar un nuevo lote en una caja","tags":["Cashflow - Lotes"]}},"/cashflow/batches/{id}/close":{"patch":{"operationId":"CashBatchesController_closeBatch","parameters":[{"name":"id","required":true,"in":"path","description":"ID del lote","schema":{"type":"number"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CloseBatchDto"}}}},"responses":{"200":{"description":"Lote cerrado exitosamente","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CashBatch"}}}},"400":{"description":"El lote ya está cerrado o no puedes cerrarlo"},"404":{"description":"Lote no encontrado"}},"security":[{"bearer":[]}],"summary":"Cerrar un lote","tags":["Cashflow - Lotes"]}},"/cashflow/batches/{id}/approve":{"patch":{"operationId":"CashBatchesController_approveBatch","parameters":[{"name":"id","required":true,"in":"path","description":"ID del lote","schema":{"type":"number"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApproveBatchDto"}}}},"responses":{"200":{"description":"Lote aprobado exitosamente","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CashBatch"}}}},"400":{"description":"El lote no está cerrado o ya fue aprobado"},"403":{"description":"No puedes aprobar tu propio cuadre"},"404":{"description":"Lote no encontrado"}},"security":[{"bearer":[]}],"summary":"Aprobar un cuadre de lote (solo supervisores)","tags":["Cashflow - Lotes"]}},"/cashflow/batches/{id}/reject":{"patch":{"operationId":"CashBatchesController_rejectBatch","parameters":[{"name":"id","required":true,"in":"path","description":"ID del lote","schema":{"type":"number"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RejectBatchDto"}}}},"responses":{"200":{"description":"Lote rechazado exitosamente","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CashBatch"}}}},"400":{"description":"El lote no está cerrado"},"403":{"description":"No puedes rechazar tu propio cuadre"},"404":{"description":"Lote no encontrado"}},"security":[{"bearer":[]}],"summary":"Rechazar un cuadre de lote","tags":["Cashflow - Lotes"]}},"/cashflow/batches/{id}/reopen":{"patch":{"operationId":"CashBatchesController_reopenBatch","parameters":[{"name":"id","required":true,"in":"path","description":"ID del lote","schema":{"type":"number"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ReopenBatchDto"}}}},"responses":{"200":{"description":"Lote reabierto exitosamente","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CashBatch"}}}},"400":{"description":"El lote ya está abierto"},"403":{"description":"No tienes permiso para reabrir este lote"},"404":{"description":"Lote no encontrado"}},"security":[{"bearer":[]}],"summary":"Reabrir un lote cerrado","tags":["Cashflow - Lotes"]},"post":{"operationId":"CashBatchesController_reopenBatchPost","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"number"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ReopenBatchDto"}}}},"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"summary":"Reabrir un lote cerrado (compatibilidad)","tags":["Cashflow - Lotes"]}},"/cashflow/batches/my-active":{"get":{"operationId":"CashBatchesController_getMyActiveBatch","parameters":[],"responses":{"200":{"description":"Lote activo del usuario","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CashBatch"}}}},"404":{"description":"No tienes un lote activo"}},"security":[{"bearer":[]}],"summary":"Obtener mi lote activo","tags":["Cashflow - Lotes"]}},"/cashflow/batches/pending-approval":{"get":{"operationId":"CashBatchesController_getPendingApproval","parameters":[],"responses":{"200":{"description":"Lista de lotes pendientes","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/CashBatch"}}}}}},"security":[{"bearer":[]}],"summary":"Obtener lotes pendientes de aprobación","tags":["Cashflow - Lotes"]}},"/cashflow/batches/{id}":{"get":{"operationId":"CashBatchesController_findOne","parameters":[{"name":"id","required":true,"in":"path","description":"ID del lote","schema":{"type":"number"}}],"responses":{"200":{"description":"Detalle del lote","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CashBatch"}}}},"404":{"description":"Lote no encontrado"}},"security":[{"bearer":[]}],"summary":"Obtener detalle de un lote","tags":["Cashflow - Lotes"]}},"/cashflow/batches":{"get":{"operationId":"CashBatchesController_findAll","parameters":[{"name":"userUid","required":false,"in":"query","description":"Filtrar por usuario (UID)","schema":{"example":"6365377","type":"string"}},{"name":"cashboxId","required":false,"in":"query","description":"Filtrar por caja","schema":{"example":100,"type":"number"}},{"name":"status","required":false,"in":"query","description":"Filtrar por estado","schema":{"example":1,"type":"number","enum":[1,0,2,3,4]}},{"name":"dateFrom","required":false,"in":"query","description":"Fecha desde","schema":{"example":"2026-01-01","type":"string"}},{"name":"dateTo","required":false,"in":"query","description":"Fecha hasta","schema":{"example":"2026-01-31","type":"string"}},{"name":"page","required":false,"in":"query","description":"Página","schema":{"default":1,"example":1,"type":"number"}},{"name":"limit","required":false,"in":"query","description":"Límite por página","schema":{"default":20,"example":20,"type":"number"}}],"responses":{"200":{"description":"Lista de lotes"}},"security":[{"bearer":[]}],"summary":"Listar lotes con filtros","tags":["Cashflow - Lotes"]}},"/cashflow/settlements":{"get":{"operationId":"CashSettlementsController_listSettlements","parameters":[{"name":"page","required":false,"in":"query","schema":{"type":"number"}},{"name":"limit","required":false,"in":"query","schema":{"type":"number"}},{"name":"status","required":false,"in":"query","schema":{"type":"string"}},{"name":"batchNumber","required":false,"in":"query","schema":{"type":"string"}},{"name":"cashboxId","required":false,"in":"query","schema":{"type":"number"}},{"name":"username","required":false,"in":"query","schema":{"type":"string"}},{"name":"location","required":false,"in":"query","schema":{"type":"string"}}],"responses":{"200":{"description":"Lista paginada de cuadres"}},"security":[{"bearer":[]}],"summary":"Listar cuadres procesados","tags":["Cashflow - Cuadres"]}},"/cashflow/settlements/batch/{batchNumber}":{"get":{"operationId":"CashSettlementsController_getSettlementByBatch","parameters":[{"name":"batchNumber","required":true,"in":"path","description":"Número de lote","schema":{"type":"string"}}],"responses":{"200":{"description":"Cuadre del lote","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CashSettlement"}}}},"404":{"description":"Cuadre no encontrado"}},"security":[{"bearer":[]}],"summary":"Obtener cuadre por número de lote","tags":["Cashflow - Cuadres"]}},"/cashflow/settlements/batch/{batchNumber}/summary":{"get":{"operationId":"CashSettlementsController_getSettlementSummary","parameters":[{"name":"batchNumber","required":true,"in":"path","description":"Número de lote","schema":{"type":"string"}}],"responses":{"200":{"description":"Resumen completo del cuadre"},"404":{"description":"Cuadre no encontrado"}},"security":[{"bearer":[]}],"summary":"Obtener resumen completo del cuadre con totales calculados","tags":["Cashflow - Cuadres"]}},"/cashflow/settlements/batch/{batchNumber}/calculate":{"get":{"operationId":"CashSettlementsController_calculateSettlement","parameters":[{"name":"batchNumber","required":true,"in":"path","description":"Número de lote","schema":{"type":"string"}}],"responses":{"200":{"description":"Totales calculados"}},"security":[{"bearer":[]}],"summary":"Recalcular totales del cuadre basado en pagos","tags":["Cashflow - Cuadres"]}},"/cashflow/settlements/batch/{batchNumber}/payments/list":{"get":{"operationId":"CashSettlementsController_listPaymentsByBatch","parameters":[{"name":"batchNumber","required":true,"in":"path","description":"Número de lote","schema":{"type":"string"}},{"name":"page","required":false,"in":"query","schema":{"type":"number"}},{"name":"limit","required":false,"in":"query","schema":{"type":"number"}},{"name":"paymentMethod","required":false,"in":"query","schema":{"enum":["CASH","CREDIT_CARD","DEBIT_CARD","TRANSFER","DEPOSIT","PAYPAL","OTHER"],"type":"string"}},{"name":"currency","required":false,"in":"query","description":"Filtrar por moneda (DOP, USD, EUR)","schema":{"type":"string"}},{"name":"activityId","required":false,"in":"query","schema":{"type":"number"}},{"name":"sortBy","required":false,"in":"query","schema":{"enum":["amount","date","method","concept"],"type":"string"}},{"name":"sortOrder","required":false,"in":"query","schema":{"enum":["ASC","DESC"],"type":"string"}},{"name":"dateFrom","required":false,"in":"query","schema":{"type":"string"}},{"name":"dateTo","required":false,"in":"query","schema":{"type":"string"}},{"name":"amountMin","required":false,"in":"query","schema":{"type":"number"}},{"name":"amountMax","required":false,"in":"query","schema":{"type":"number"}},{"name":"userId","required":false,"in":"query","schema":{"type":"string"}},{"name":"paymentStatus","required":false,"in":"query","schema":{"enum":["PAID","PENDING","PARTIAL","NOT_APPLICABLE","ANNULLED"],"type":"string"}},{"name":"participantName","required":false,"in":"query","schema":{"type":"string"}},{"name":"includeAnnulled","required":false,"in":"query","schema":{"type":"boolean"}}],"responses":{"200":{"description":"Lista paginada de pagos del cuadre"}},"security":[{"bearer":[]}],"summary":"Listar pagos de un cuadre con paginación y columnas mínimas","tags":["Cashflow - Cuadres"]}},"/cashflow/settlements/batch/{batchNumber}/payments":{"get":{"operationId":"CashSettlementsController_getPaymentsByBatch","parameters":[{"name":"batchNumber","required":true,"in":"path","description":"Número de lote","schema":{"type":"string"}},{"name":"includeAnnulled","required":false,"in":"query","description":"Incluir pagos anulados","schema":{"type":"boolean"}}],"responses":{"200":{"description":"Lista de pagos del lote"}},"security":[{"bearer":[]}],"summary":"Obtener pagos de un lote","tags":["Cashflow - Cuadres"]}},"/cashflow/settlements/pending-approval":{"get":{"deprecated":true,"description":"⚠️ DEPRECATED: Use GET /cashflow/batches/pending-approval en su lugar. Este endpoint será eliminado.","operationId":"CashSettlementsController_getPendingSettlements","parameters":[],"responses":{"200":{"description":"Lista de cuadres pendientes","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/CashSettlement"}}}}}},"security":[{"bearer":[]}],"summary":"[DEPRECATED] Obtener cuadres pendientes de aprobación","tags":["Cashflow - Cuadres"]}},"/cashflow/settlements/batch/{batchNumber}/detailed":{"get":{"description":"Retorna el cuadre con información completa: totales por método/moneda, nombres de participantes, conceptos (actividades), y detalles de cada pago individual.","operationId":"CashSettlementsController_getDetailedSettlement","parameters":[{"name":"batchNumber","required":true,"in":"path","description":"Número de lote","schema":{"example":"MLR-2026-001","type":"string"}},{"name":"paymentMethod","required":false,"in":"query","description":"Filtrar por método de pago","schema":{"enum":["CASH","CREDIT_CARD","DEBIT_CARD","TRANSFER","DEPOSIT","PAYPAL","OTHER"],"type":"string"}},{"name":"currency","required":false,"in":"query","description":"Filtrar por moneda (DOP, USD, EUR)","schema":{"type":"string"}},{"name":"activityId","required":false,"in":"query","description":"Filtrar por ID de actividad","schema":{"type":"number"}},{"name":"includeAnnulled","required":false,"in":"query","description":"Incluir pagos anulados","schema":{"type":"boolean"}},{"name":"sortBy","required":false,"in":"query","description":"Campo para ordenar","schema":{"enum":["amount","date","method","concept"],"type":"string"}},{"name":"sortOrder","required":false,"in":"query","description":"Dirección de ordenamiento","schema":{"enum":["ASC","DESC"],"type":"string"}},{"name":"dateFrom","required":false,"in":"query","description":"Fecha desde (YYYY-MM-DD)","schema":{"type":"string"}},{"name":"dateTo","required":false,"in":"query","description":"Fecha hasta (YYYY-MM-DD)","schema":{"type":"string"}},{"name":"amountMin","required":false,"in":"query","description":"Monto mínimo","schema":{"type":"number"}},{"name":"amountMax","required":false,"in":"query","description":"Monto máximo","schema":{"type":"number"}},{"name":"userId","required":false,"in":"query","description":"Filtrar por usuario cajero (UID)","schema":{"type":"string"}},{"name":"paymentStatus","required":false,"in":"query","description":"Filtrar por estado de pago","schema":{"enum":["PAID","PENDING","PARTIAL","NOT_APPLICABLE"],"type":"string"}},{"name":"participantName","required":false,"in":"query","description":"Buscar por nombre de participante (parcial)","schema":{"type":"string"}}],"responses":{"200":{"description":"Cuadre detallado completo","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DetailedSettlementResponseDto"}}}},"404":{"description":"Cuadre no encontrado"}},"security":[{"bearer":[]}],"summary":"Obtener cuadre detallado con participantes y conceptos","tags":["Cashflow - Cuadres"]}},"/cashflow/settlements/batch/{batchNumber}/detailed/export":{"get":{"description":"Descarga el cuadre detallado con participantes y conceptos en el formato especificado","operationId":"CashSettlementsController_exportDetailedSettlement","parameters":[{"name":"batchNumber","required":true,"in":"path","description":"Número de lote","schema":{"example":"MLR-2026-001","type":"string"}},{"name":"format","required":false,"in":"query","description":"Formato de exportación","schema":{"enum":["xlsx","pdf","csv"],"type":"string"}},{"name":"paymentMethod","required":false,"in":"query","description":"Filtrar por método de pago","schema":{"enum":["CASH","CREDIT_CARD","DEBIT_CARD","TRANSFER","DEPOSIT","PAYPAL","OTHER"],"type":"string"}},{"name":"currency","required":false,"in":"query","description":"Filtrar por moneda (DOP, USD, EUR)","schema":{"type":"string"}},{"name":"activityId","required":false,"in":"query","description":"Filtrar por ID de actividad","schema":{"type":"number"}},{"name":"includeAnnulled","required":false,"in":"query","description":"Incluir pagos anulados","schema":{"type":"boolean"}},{"name":"sortBy","required":false,"in":"query","description":"Campo para ordenar","schema":{"enum":["amount","date","method","concept"],"type":"string"}},{"name":"sortOrder","required":false,"in":"query","description":"Dirección de ordenamiento","schema":{"enum":["ASC","DESC"],"type":"string"}},{"name":"dateFrom","required":false,"in":"query","description":"Fecha desde (YYYY-MM-DD)","schema":{"type":"string"}},{"name":"dateTo","required":false,"in":"query","description":"Fecha hasta (YYYY-MM-DD)","schema":{"type":"string"}},{"name":"amountMin","required":false,"in":"query","description":"Monto mínimo","schema":{"type":"number"}},{"name":"amountMax","required":false,"in":"query","description":"Monto máximo","schema":{"type":"number"}},{"name":"userId","required":false,"in":"query","description":"Filtrar por usuario cajero (UID)","schema":{"type":"string"}},{"name":"paymentStatus","required":false,"in":"query","description":"Filtrar por estado de pago","schema":{"enum":["PAID","PENDING","PARTIAL","NOT_APPLICABLE"],"type":"string"}},{"name":"participantName","required":false,"in":"query","description":"Buscar por nombre de participante (parcial)","schema":{"type":"string"}},{"name":"forceRegenerate","required":false,"in":"query","description":"Regenerar el archivo aunque exista cacheado","schema":{"type":"boolean"}}],"responses":{"200":{"description":"Archivo descargado","content":{"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet":{},"application/pdf":{},"text/csv":{}}}},"security":[{"bearer":[]}],"summary":"Exportar cuadre detallado a Excel/PDF/CSV","tags":["Cashflow - Cuadres"]}},"/cashflow/settlements/batch/{batchNumber}/detailed/print":{"get":{"operationId":"CashSettlementsController_printDetailedSettlement","parameters":[{"name":"batchNumber","required":true,"in":"path","description":"Número del lote","schema":{"type":"string"}},{"name":"paymentMethod","required":true,"in":"query","schema":{"type":"string"}},{"name":"currency","required":true,"in":"query","schema":{"type":"string"}},{"name":"activityId","required":true,"in":"query","schema":{"type":"number"}},{"name":"includeAnnulled","required":true,"in":"query","schema":{"type":"boolean"}},{"name":"sortBy","required":true,"in":"query","schema":{"type":"string"}},{"name":"sortOrder","required":true,"in":"query","schema":{"type":"string"}},{"name":"dateFrom","required":true,"in":"query","schema":{"type":"string"}},{"name":"dateTo","required":true,"in":"query","schema":{"type":"string"}},{"name":"amountMin","required":true,"in":"query","schema":{"type":"number"}},{"name":"amountMax","required":true,"in":"query","schema":{"type":"number"}},{"name":"userId","required":true,"in":"query","schema":{"type":"string"}},{"name":"paymentStatus","required":true,"in":"query","schema":{"type":"string"}},{"name":"participantName","required":true,"in":"query","schema":{"type":"string"}},{"name":"forceRegenerate","required":false,"in":"query","description":"Regenerar el PDF antes de imprimir","schema":{"type":"boolean"}}],"responses":{"200":{"description":"PDF listo para impresión","content":{"application/pdf":{}}}},"security":[{"bearer":[]}],"summary":"Imprimir reporte PDF del cuadre detallado","tags":["Cashflow - Cuadres"]}},"/cashflow/settlements/batch/{batchNumber}/dashboard":{"get":{"description":"Retorna un resumen rápido con KPIs principales: totales, promedios, distribución por método, top actividades y estado de discrepancias.","operationId":"CashSettlementsController_getBatchDashboard","parameters":[{"name":"batchNumber","required":true,"in":"path","description":"Número de lote","schema":{"example":"MLR-2026-001","type":"string"}}],"responses":{"200":{"description":"Dashboard del lote","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BatchDashboardDto"}}}},"404":{"description":"Lote no encontrado"}},"security":[{"bearer":[]}],"summary":"Dashboard de KPIs del lote","tags":["Cashflow - Cuadres"]}},"/cashflow/settlements/batch/{batchNumber}/discrepancies":{"get":{"description":"Compara automáticamente los totales calculados vs declarados por moneda y método de pago. Clasifica discrepancias por severidad (OK, WARNING, CRITICAL) y genera recomendaciones.","operationId":"CashSettlementsController_validateDiscrepancies","parameters":[{"name":"batchNumber","required":true,"in":"path","description":"Número de lote","schema":{"example":"MLR-2026-001","type":"string"}}],"responses":{"200":{"description":"Resultado de validación de discrepancias","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DiscrepancyValidationResponseDto"}}}},"404":{"description":"Cuadre no encontrado"}},"security":[{"bearer":[]}],"summary":"Validar discrepancias del cuadre","tags":["Cashflow - Cuadres"]}},"/cashflow/reports/dashboard":{"get":{"description":"Estadísticas del día: lotes abiertos, pendientes, aprobados, ingresos, etc.","operationId":"CashReportsController_getDashboard","parameters":[{"name":"location","required":false,"in":"query","schema":{"example":"MLR","type":"string"}},{"name":"dateFrom","required":false,"in":"query","schema":{"example":"2026-04-01","type":"string"}},{"name":"dateTo","required":false,"in":"query","schema":{"example":"2026-04-30","type":"string"}}],"responses":{"200":{"description":"Estadísticas obtenidas exitosamente"}},"security":[{"bearer":[]}],"summary":"Dashboard en tiempo real","tags":["Cashflow - Reports"]}},"/cashflow/reports/revenue":{"get":{"description":"Ingresos totales, promedio y cantidad de pagos por caja en un período","operationId":"CashReportsController_getCashboxRevenue","parameters":[{"name":"cashboxId","required":true,"in":"query","schema":{"example":"100","type":"string"}},{"name":"dateFrom","required":true,"in":"query","schema":{"example":"2026-01-01","type":"string"}},{"name":"dateTo","required":true,"in":"query","schema":{"example":"2026-01-31","type":"string"}}],"responses":{"200":{"description":"Reporte generado exitosamente"}},"security":[{"bearer":[]}],"summary":"Reporte de ingresos por caja","tags":["Cashflow - Reports"]}},"/cashflow/reports/discrepancies":{"get":{"description":"Identifica usuarios con múltiples discrepancias y las clasifica por severidad","operationId":"CashReportsController_analyzeDiscrepancies","parameters":[{"name":"dateFrom","required":true,"in":"query","schema":{"example":"2026-01-01","type":"string"}},{"name":"dateTo","required":true,"in":"query","schema":{"example":"2026-01-31","type":"string"}},{"name":"minOccurrences","required":false,"in":"query","description":"Mínimo de ocurrencias para incluir en el reporte","schema":{"example":3,"type":"number"}}],"responses":{"200":{"description":"Análisis completado"}},"security":[{"bearer":[]}],"summary":"Análisis de discrepancias recurrentes","tags":["Cashflow - Reports"]}},"/cashflow/reports/batches":{"get":{"description":"Lista completa de lotes con totales, pagos y discrepancias","operationId":"CashReportsController_getBatchesReport","parameters":[{"name":"dateFrom","required":true,"in":"query","schema":{"example":"2026-01-01","type":"string"}},{"name":"dateTo","required":true,"in":"query","schema":{"example":"2026-01-31","type":"string"}},{"name":"cashboxId","required":false,"in":"query","schema":{"example":"100","type":"string"}},{"name":"userId","required":false,"in":"query","schema":{"example":"USR001","type":"string"}}],"responses":{"200":{"description":"Reporte generado"}},"security":[{"bearer":[]}],"summary":"Reporte detallado de lotes","tags":["Cashflow - Reports"]}},"/cashflow/reports/export":{"get":{"description":"Descarga el reporte de lotes en el formato especificado","operationId":"CashReportsController_exportReport","parameters":[{"name":"dateFrom","required":true,"in":"query","schema":{"type":"string"}},{"name":"dateTo","required":true,"in":"query","schema":{"type":"string"}},{"name":"format","required":false,"in":"query","schema":{"enum":["xlsx","pdf","csv"],"type":"string"}},{"name":"cashboxId","required":false,"in":"query","schema":{"type":"string"}},{"name":"userId","required":false,"in":"query","schema":{"type":"string"}}],"responses":{"200":{"description":"Archivo descargado","content":{"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet":{},"application/pdf":{},"text/csv":{}}}},"security":[{"bearer":[]}],"summary":"Exportar reporte a Excel/PDF/CSV","tags":["Cashflow - Reports"]}},"/discounts/validate":{"post":{"operationId":"DiscountsController_validate","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApplyDiscountDto"}}}},"responses":{"200":{"description":"Resultado de la validación","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DiscountApplicationResponseDto"}}}}},"security":[{"bearer":[]}],"summary":"Validar un código de descuento (sin aplicarlo)","tags":["Discounts"]}},"/discounts/quote":{"post":{"operationId":"DiscountsController_quote","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DiscountQuoteRequestDto"}}}},"responses":{"200":{"description":"Cotizacion contextual de descuentos","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DiscountQuoteResponseDto"}}}}},"security":[{"bearer":[]}],"summary":"Cotizar descuentos aplicables para una operacion","tags":["Discounts"]}},"/discounts/quote/available-promotions":{"post":{"operationId":"DiscountsController_availablePromotions","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AvailablePromotionsRequestDto"}}}},"responses":{"200":{"description":"Promociones aplicables paginadas","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AvailablePromotionsResponseDto"}}}}},"security":[{"bearer":[]}],"summary":"Listar promociones aplicables bajo demanda para una operacion","tags":["Discounts"]}},"/discounts/code-availability":{"get":{"operationId":"DiscountsController_codeAvailability","parameters":[{"name":"code","required":true,"in":"query","schema":{"type":"string"}},{"name":"kind","required":true,"in":"query","schema":{"type":"string"}},{"name":"excludeId","required":true,"in":"query","schema":{"type":"string"}}],"responses":{"200":{"description":"Disponibilidad del código normalizado"}},"security":[{"bearer":[]}],"summary":"Verificar disponibilidad de código de descuento","tags":["Discounts"]}},"/discounts/promotions":{"post":{"operationId":"PromotionsController_create","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreatePromotionDto"}}}},"responses":{"201":{"description":"Promoción creada exitosamente","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Discount"}}}},"400":{"description":"Datos inválidos"},"409":{"description":"El código ya existe"}},"security":[{"bearer":[]}],"summary":"Crear una nueva promoción","tags":["Promotions"]},"get":{"operationId":"PromotionsController_findAll","parameters":[{"name":"kind","required":false,"in":"query","description":"Filtrar por tipo (promotion/voucher)","schema":{"type":"string","enum":["promotion","voucher"]}},{"name":"status","required":false,"in":"query","description":"Filtrar por estado","schema":{"type":"string","enum":["active","inactive","expired","depleted"]}},{"name":"discountType","required":false,"in":"query","description":"Filtrar por tipo de descuento","schema":{"type":"string","enum":["percent","fixed_amount"]}},{"name":"code","required":false,"in":"query","description":"Buscar por código (parcial)","schema":{"type":"string"}},{"name":"name","required":false,"in":"query","description":"Buscar por nombre (parcial)","schema":{"type":"string"}},{"name":"batchId","required":false,"in":"query","description":"Filtrar por batch ID (vouchers)","schema":{"type":"string"}},{"name":"issuedBy","required":false,"in":"query","description":"Filtrar por emisor (vouchers)","schema":{"type":"string"}},{"name":"issuedTo","required":false,"in":"query","description":"Filtrar por destinatario (vouchers)","schema":{"type":"string"}},{"name":"onlyActive","required":false,"in":"query","description":"Solo vigentes (fecha actual entre start y end)","schema":{"type":"boolean"}},{"name":"createdFrom","required":false,"in":"query","description":"Desde fecha de creación","schema":{"type":"string"}},{"name":"createdTo","required":false,"in":"query","description":"Hasta fecha de creación","schema":{"type":"string"}},{"name":"page","required":false,"in":"query","description":"Página","schema":{"default":1,"type":"number"}},{"name":"limit","required":false,"in":"query","description":"Items por página","schema":{"default":20,"type":"number"}}],"responses":{"200":{"description":"Lista de promociones"}},"security":[{"bearer":[]}],"summary":"Listar promociones con filtros","tags":["Promotions"]}},"/discounts/promotions/{id}":{"get":{"operationId":"PromotionsController_findById","parameters":[{"name":"id","required":true,"in":"path","description":"ID de la promoción","schema":{"type":"number"}}],"responses":{"200":{"description":"Promoción encontrada","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Discount"}}}},"404":{"description":"Promoción no encontrada"}},"security":[{"bearer":[]}],"summary":"Obtener una promoción por ID","tags":["Promotions"]},"patch":{"operationId":"PromotionsController_update","parameters":[{"name":"id","required":true,"in":"path","description":"ID de la promoción","schema":{"type":"number"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdatePromotionDto"}}}},"responses":{"200":{"description":"Promoción actualizada","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Discount"}}}},"404":{"description":"Promoción no encontrada"}},"security":[{"bearer":[]}],"summary":"Actualizar una promoción","tags":["Promotions"]},"delete":{"operationId":"PromotionsController_remove","parameters":[{"name":"id","required":true,"in":"path","description":"ID de la promoción","schema":{"type":"number"}}],"responses":{"204":{"description":"Promoción eliminada/desactivada"},"404":{"description":"Promoción no encontrada"}},"security":[{"bearer":[]}],"summary":"Eliminar o desactivar una promoción","tags":["Promotions"]}},"/discounts/promotions/code/{code}":{"get":{"operationId":"PromotionsController_findByCode","parameters":[{"name":"code","required":true,"in":"path","description":"Código de la promoción","schema":{"type":"string"}}],"responses":{"200":{"description":"Promoción encontrada","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Discount"}}}},"404":{"description":"Promoción no encontrada"}},"security":[{"bearer":[]}],"summary":"Obtener una promoción por código","tags":["Promotions"]}},"/discounts/promotions/{id}/activate":{"patch":{"operationId":"PromotionsController_activate","parameters":[{"name":"id","required":true,"in":"path","description":"ID de la promoción","schema":{"type":"number"}}],"responses":{"200":{"description":"Promoción activada","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Discount"}}}}},"security":[{"bearer":[]}],"summary":"Activar una promoción","tags":["Promotions"]}},"/discounts/promotions/{id}/deactivate":{"patch":{"operationId":"PromotionsController_deactivate","parameters":[{"name":"id","required":true,"in":"path","description":"ID de la promoción","schema":{"type":"number"}}],"responses":{"200":{"description":"Promoción desactivada","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Discount"}}}}},"security":[{"bearer":[]}],"summary":"Desactivar una promoción","tags":["Promotions"]}},"/discounts/promotions/{id}/usage":{"get":{"operationId":"PromotionsController_getUsageHistory","parameters":[{"name":"id","required":true,"in":"path","description":"ID de la promoción","schema":{"type":"number"}},{"name":"page","required":false,"in":"query","description":"Número de página","schema":{"type":"number"}},{"name":"limit","required":false,"in":"query","description":"Items por página","schema":{"type":"number"}}],"responses":{"200":{"description":"Historial de uso"}},"security":[{"bearer":[]}],"summary":"Obtener historial de uso de una promoción","tags":["Promotions"]}},"/discounts/promotions/{id}/stats":{"get":{"operationId":"PromotionsController_getStats","parameters":[{"name":"id","required":true,"in":"path","description":"ID de la promoción","schema":{"type":"number"}}],"responses":{"200":{"description":"Estadísticas de uso"}},"security":[{"bearer":[]}],"summary":"Obtener estadísticas de una promoción","tags":["Promotions"]}},"/discounts/vouchers":{"post":{"operationId":"VouchersController_create","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateVoucherDto"}}}},"responses":{"201":{"description":"Voucher creado exitosamente","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Discount"}}}},"400":{"description":"Datos inválidos"},"409":{"description":"El código ya existe"}},"security":[{"bearer":[]}],"summary":"Crear un voucher individual","tags":["Vouchers"]},"get":{"operationId":"VouchersController_findAll","parameters":[{"name":"kind","required":false,"in":"query","description":"Filtrar por tipo (promotion/voucher)","schema":{"type":"string","enum":["promotion","voucher"]}},{"name":"status","required":false,"in":"query","description":"Filtrar por estado","schema":{"type":"string","enum":["active","inactive","expired","depleted"]}},{"name":"discountType","required":false,"in":"query","description":"Filtrar por tipo de descuento","schema":{"type":"string","enum":["percent","fixed_amount"]}},{"name":"code","required":false,"in":"query","description":"Buscar por código (parcial)","schema":{"type":"string"}},{"name":"name","required":false,"in":"query","description":"Buscar por nombre (parcial)","schema":{"type":"string"}},{"name":"batchId","required":false,"in":"query","description":"Filtrar por batch ID (vouchers)","schema":{"type":"string"}},{"name":"issuedBy","required":false,"in":"query","description":"Filtrar por emisor (vouchers)","schema":{"type":"string"}},{"name":"issuedTo","required":false,"in":"query","description":"Filtrar por destinatario (vouchers)","schema":{"type":"string"}},{"name":"onlyActive","required":false,"in":"query","description":"Solo vigentes (fecha actual entre start y end)","schema":{"type":"boolean"}},{"name":"createdFrom","required":false,"in":"query","description":"Desde fecha de creación","schema":{"type":"string"}},{"name":"createdTo","required":false,"in":"query","description":"Hasta fecha de creación","schema":{"type":"string"}},{"name":"page","required":false,"in":"query","description":"Página","schema":{"default":1,"type":"number"}},{"name":"limit","required":false,"in":"query","description":"Items por página","schema":{"default":20,"type":"number"}}],"responses":{"200":{"description":"Lista de vouchers"}},"security":[{"bearer":[]}],"summary":"Listar vouchers con filtros","tags":["Vouchers"]}},"/discounts/vouchers/batch":{"post":{"operationId":"VouchersController_generateBatch","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GenerateVoucherBatchDto"}}}},"responses":{"201":{"description":"Lote de vouchers generado"},"400":{"description":"Datos inválidos"}},"security":[{"bearer":[]}],"summary":"Generar vouchers en lote","tags":["Vouchers"]}},"/discounts/vouchers/lookup":{"post":{"operationId":"VouchersController_lookup","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/VoucherLookupDto"}}}},"responses":{"200":{"description":"Resultado contextual del voucher"}},"security":[{"bearer":[]}],"summary":"Buscar y validar un voucher para la operación actual","tags":["Vouchers"]}},"/discounts/vouchers/{id}/scan-payload":{"get":{"operationId":"VouchersController_getScanPayload","parameters":[{"name":"id","required":true,"in":"path","description":"ID del voucher","schema":{"type":"number"}}],"responses":{"200":{"description":"Payload de escaneo del voucher"},"404":{"description":"Voucher no encontrado"}},"security":[{"bearer":[]}],"summary":"Obtener payload para QR/código de barras del voucher","tags":["Vouchers"]}},"/discounts/vouchers/{id}":{"get":{"operationId":"VouchersController_findById","parameters":[{"name":"id","required":true,"in":"path","description":"ID del voucher","schema":{"type":"number"}}],"responses":{"200":{"description":"Voucher encontrado","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Discount"}}}},"404":{"description":"Voucher no encontrado"}},"security":[{"bearer":[]}],"summary":"Obtener un voucher por ID","tags":["Vouchers"]},"patch":{"operationId":"VouchersController_update","parameters":[{"name":"id","required":true,"in":"path","description":"ID del voucher","schema":{"type":"number"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateVoucherDto"}}}},"responses":{"200":{"description":"Voucher actualizado","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Discount"}}}},"404":{"description":"Voucher no encontrado"}},"security":[{"bearer":[]}],"summary":"Actualizar un voucher","tags":["Vouchers"]},"delete":{"operationId":"VouchersController_cancel","parameters":[{"name":"id","required":true,"in":"path","description":"ID del voucher","schema":{"type":"number"}}],"responses":{"200":{"description":"Voucher eliminado o desactivado","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Discount"}}}},"404":{"description":"Voucher no encontrado"}},"security":[{"bearer":[]}],"summary":"Eliminar un voucher sin uso o desactivarlo si ya tiene historial","tags":["Vouchers"]}},"/discounts/vouchers/code/{code}":{"get":{"operationId":"VouchersController_findByCode","parameters":[{"name":"code","required":true,"in":"path","description":"Código del voucher","schema":{"type":"string"}}],"responses":{"200":{"description":"Voucher encontrado","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Discount"}}}},"404":{"description":"Voucher no encontrado"}},"security":[{"bearer":[]}],"summary":"Obtener un voucher por código","tags":["Vouchers"]}},"/discounts/vouchers/batch/{batchId}":{"get":{"operationId":"VouchersController_findByBatch","parameters":[{"name":"batchId","required":true,"in":"path","description":"ID del batch","schema":{"type":"string"}}],"responses":{"200":{"description":"Vouchers del batch"}},"security":[{"bearer":[]}],"summary":"Obtener vouchers de un batch","tags":["Vouchers"]},"delete":{"operationId":"VouchersController_cancelBatch","parameters":[{"name":"batchId","required":true,"in":"path","description":"ID del batch","schema":{"type":"string"}}],"responses":{"200":{"description":"Vouchers del batch cancelados"}},"security":[{"bearer":[]}],"summary":"Cancelar todos los vouchers de un batch","tags":["Vouchers"]}},"/discounts/vouchers/batch/{batchId}/summary":{"get":{"operationId":"VouchersController_getBatchSummary","parameters":[{"name":"batchId","required":true,"in":"path","description":"ID del batch","schema":{"type":"string"}}],"responses":{"200":{"description":"Resumen del batch"}},"security":[{"bearer":[]}],"summary":"Obtener resumen de un batch","tags":["Vouchers"]}},"/discounts/vouchers/{id}/usage":{"get":{"operationId":"VouchersController_getUsageHistory","parameters":[{"name":"id","required":true,"in":"path","description":"ID del voucher","schema":{"type":"number"}}],"responses":{"200":{"description":"Historial de uso"}},"security":[{"bearer":[]}],"summary":"Obtener historial de uso de un voucher","tags":["Vouchers"]}},"/discounts/certificates":{"post":{"operationId":"CertificatesController_create","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateDiscountCertificateDto"}}}},"responses":{"201":{"description":"Certificado creado en estado pendiente de pago"}},"security":[{"bearer":[]}],"summary":"Crear certificado pendiente de pago","tags":["Discount Certificates"]},"get":{"operationId":"CertificatesController_findAll","parameters":[{"name":"page","required":false,"in":"query","description":"Pagina","schema":{"default":1,"type":"number"}},{"name":"limit","required":false,"in":"query","description":"Elementos por pagina","schema":{"default":20,"type":"number"}},{"name":"type","required":false,"in":"query","schema":{"type":"string","enum":["purchase_person","purchase_person_activity","gift_activity","gift_credit"]}},{"name":"status","required":false,"in":"query","schema":{"type":"string","enum":["pending_payment","active","reserved","partially_used","redeemed","expired_window","converted_to_credit","cancelled","refunded"]}},{"name":"publicCode","required":false,"in":"query","schema":{"type":"string"}},{"name":"buyerMemberCode","required":false,"in":"query","schema":{"type":"string"}},{"name":"activityId","required":false,"in":"query","schema":{"type":"number"}},{"name":"participantId","required":false,"in":"query","schema":{"type":"number"}},{"name":"paymentId","required":false,"in":"query","schema":{"type":"number"}},{"name":"beneficiaryIdentification","required":false,"in":"query","description":"Cedula/identificacion para busqueda segura por hash","schema":{"type":"string"}},{"name":"beneficiaryEmail","required":false,"in":"query","description":"Correo para busqueda segura por hash","schema":{"type":"string"}},{"name":"beneficiaryPhone","required":false,"in":"query","description":"Telefono para busqueda segura por hash","schema":{"type":"string"}},{"name":"includeSensitive","required":false,"in":"query","description":"Solicita datos sensibles permitidos si el usuario tiene permiso","schema":{"type":"boolean"}}],"responses":{"200":{"description":"Lista paginada de certificados"}},"security":[{"bearer":[]}],"summary":"Listar certificados con respuesta minimizada","tags":["Discount Certificates"]}},"/discounts/certificates/gift-activity":{"post":{"operationId":"CertificatesController_createGiftActivity","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateGiftActivityCertificateDto"}}}},"responses":{"201":{"description":"Certificado de regalo creado pendiente de pago"}},"security":[{"bearer":[]}],"summary":"Crear certificado de regalo 100% para una actividad","tags":["Discount Certificates"]}},"/discounts/certificates/purchase-person":{"post":{"operationId":"CertificatesController_createPurchasePerson","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreatePurchasePersonCertificateDto"}}}},"responses":{"201":{"description":"Certificado de compra creado pendiente de pago"}},"security":[{"bearer":[]}],"summary":"Crear certificado de compra dirigido a una persona","tags":["Discount Certificates"]}},"/discounts/certificates/purchase-person-activity":{"post":{"operationId":"CertificatesController_createPurchasePersonActivity","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreatePurchasePersonActivityCertificateDto"}}}},"responses":{"201":{"description":"Certificado persona+actividad creado pendiente de pago"}},"security":[{"bearer":[]}],"summary":"Crear certificado de compra dirigido a persona+actividad","tags":["Discount Certificates"]}},"/discounts/certificates/purchase/quote":{"post":{"operationId":"CertificatesController_quotePurchaseCredits","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/QuotePurchaseCertificateCreditsDto"}}}},"responses":{"201":{"description":"Creditos aplicables minimizados"}},"security":[{"bearer":[]}],"summary":"Cotizar creditos de certificados de compra aplicables","tags":["Discount Certificates"]}},"/discounts/certificates/purchase/redeem":{"post":{"operationId":"CertificatesController_redeemPurchaseCredits","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RedeemPurchaseCertificateCreditsDto"}}}},"responses":{"201":{"description":"Creditos consumidos y auditados"}},"security":[{"bearer":[]}],"summary":"Consumir creditos de certificados de compra contra un pago","tags":["Discount Certificates"]}},"/discounts/certificates/redemption/lookup":{"post":{"operationId":"CertificatesController_lookupRedemption","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LookupCertificateRedemptionDto"}}}},"responses":{"201":{"description":"Vista minimizada de redencion"}},"security":[{"bearer":[]}],"summary":"Consultar redencion interna de certificado por codigo/token","tags":["Discount Certificates"]}},"/discounts/certificates/redemption/gift-activity":{"post":{"operationId":"CertificatesController_redeemGiftActivity","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RedeemGiftActivityCertificateDto"}}}},"responses":{"201":{"description":"Certificado redimido y participante completado"}},"security":[{"bearer":[]}],"summary":"Completar redencion de certificado de regalo de actividad","tags":["Discount Certificates"]}},"/discounts/certificates/{id}/gift-activity/activate":{"post":{"operationId":"CertificatesController_activateGiftActivity","parameters":[{"name":"id","required":true,"in":"path","description":"ID del certificado","schema":{"type":"number"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ActivateGiftActivityCertificateDto"}}}},"responses":{"201":{"description":"Certificado activado y cupo reservado"}},"security":[{"bearer":[]}],"summary":"Activar certificado de regalo y reservar cupo pendiente de redencion","tags":["Discount Certificates"]}},"/discounts/certificates/{id}/gift-activity/convert-to-credit":{"post":{"operationId":"CertificatesController_convertGiftActivityToCredit","parameters":[{"name":"id","required":true,"in":"path","description":"ID del certificado de regalo","schema":{"type":"number"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ConvertGiftActivityCertificateToCreditDto"}}}},"responses":{"201":{"description":"Cupo liberado y credito transferible creado"}},"security":[{"bearer":[]}],"summary":"Convertir certificado de regalo no redimido a credito transferible","tags":["Discount Certificates"]}},"/discounts/certificates/{id}/gift-credit/split":{"post":{"operationId":"CertificatesController_splitGiftCredit","parameters":[{"name":"id","required":true,"in":"path","description":"ID del credito transferible","schema":{"type":"number"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SplitGiftCreditCertificateDto"}}}},"responses":{"201":{"description":"Credito dividido y auditado"}},"security":[{"bearer":[]}],"summary":"Dividir credito transferible de regalo","tags":["Discount Certificates"]}},"/discounts/certificates/{id}/gift-credit/reassign-person-activity":{"post":{"operationId":"CertificatesController_reassignGiftCreditToPersonActivity","parameters":[{"name":"id","required":true,"in":"path","description":"ID del credito transferible","schema":{"type":"number"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ReassignGiftCreditToPersonActivityDto"}}}},"responses":{"201":{"description":"Credito reasignado a certificado persona+actividad"}},"security":[{"bearer":[]}],"summary":"Reasignar credito transferible a certificado persona+actividad","tags":["Discount Certificates"]}},"/discounts/certificates/{id}/notifications/email":{"post":{"operationId":"CertificatesController_sendCertificateNotification","parameters":[{"name":"id","required":true,"in":"path","description":"ID del certificado","schema":{"type":"number"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SendCertificateNotificationDto"}}}},"responses":{"201":{"description":"Notificacion registrada y correo encolado/enviado"}},"security":[{"bearer":[]}],"summary":"Enviar o encolar correo seguro de evento de certificado","tags":["Discount Certificates"]}},"/discounts/certificates/{id}/purchase/activate":{"post":{"operationId":"CertificatesController_activatePurchaseCertificate","parameters":[{"name":"id","required":true,"in":"path","description":"ID del certificado","schema":{"type":"number"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ActivatePurchaseCertificateDto"}}}},"responses":{"201":{"description":"Certificado de compra activo con balance disponible"}},"security":[{"bearer":[]}],"summary":"Activar certificado de compra despues del pago confirmado","tags":["Discount Certificates"]}},"/discounts/certificates/{id}":{"get":{"operationId":"CertificatesController_findOne","parameters":[{"name":"id","required":true,"in":"path","description":"ID del certificado","schema":{"type":"number"}},{"name":"page","required":false,"in":"query","description":"Pagina","schema":{"default":1,"type":"number"}},{"name":"limit","required":false,"in":"query","description":"Elementos por pagina","schema":{"default":20,"type":"number"}},{"name":"type","required":false,"in":"query","schema":{"type":"string","enum":["purchase_person","purchase_person_activity","gift_activity","gift_credit"]}},{"name":"status","required":false,"in":"query","schema":{"type":"string","enum":["pending_payment","active","reserved","partially_used","redeemed","expired_window","converted_to_credit","cancelled","refunded"]}},{"name":"publicCode","required":false,"in":"query","schema":{"type":"string"}},{"name":"buyerMemberCode","required":false,"in":"query","schema":{"type":"string"}},{"name":"activityId","required":false,"in":"query","schema":{"type":"number"}},{"name":"participantId","required":false,"in":"query","schema":{"type":"number"}},{"name":"paymentId","required":false,"in":"query","schema":{"type":"number"}},{"name":"beneficiaryIdentification","required":false,"in":"query","description":"Cedula/identificacion para busqueda segura por hash","schema":{"type":"string"}},{"name":"beneficiaryEmail","required":false,"in":"query","description":"Correo para busqueda segura por hash","schema":{"type":"string"}},{"name":"beneficiaryPhone","required":false,"in":"query","description":"Telefono para busqueda segura por hash","schema":{"type":"string"}},{"name":"includeSensitive","required":false,"in":"query","description":"Solicita datos sensibles permitidos si el usuario tiene permiso","schema":{"type":"boolean"}}],"responses":{"200":{"description":"Certificado encontrado"}},"security":[{"bearer":[]}],"summary":"Obtener un certificado por ID","tags":["Discount Certificates"]}},"/discounts/certificates/{id}/ledger":{"get":{"operationId":"CertificatesController_getLedger","parameters":[{"name":"id","required":true,"in":"path","description":"ID del certificado","schema":{"type":"number"}}],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"summary":"Obtener ledger de balance del certificado","tags":["Discount Certificates"]}},"/discounts/certificates/{id}/redemptions":{"get":{"operationId":"CertificatesController_getRedemptions","parameters":[{"name":"id","required":true,"in":"path","description":"ID del certificado","schema":{"type":"number"}}],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"summary":"Obtener redenciones del certificado","tags":["Discount Certificates"]}},"/discounts/certificates/{id}/notifications":{"get":{"operationId":"CertificatesController_getNotifications","parameters":[{"name":"id","required":true,"in":"path","description":"ID del certificado","schema":{"type":"number"}}],"responses":{"200":{"description":""}},"security":[{"bearer":[]}],"summary":"Obtener notificaciones del certificado","tags":["Discount Certificates"]}},"/discounts/certificates/public/lookup":{"post":{"operationId":"PublicCertificatesController_lookup","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicLookupCertificateRedemptionDto"}}}},"responses":{"201":{"description":"Vista publica minimizada del certificado"}},"summary":"Consultar certificado publico por codigo y token opaco","tags":["Public Discount Certificates"]}},"/discounts/certificates/public/gift-activity/redeem":{"post":{"operationId":"PublicCertificatesController_redeemGiftActivity","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PublicRedeemGiftActivityCertificateDto"}}}},"responses":{"201":{"description":"Certificado redimido con respuesta minimizada"}},"summary":"Redimir publicamente un certificado de regalo de actividad","tags":["Public Discount Certificates"]}},"/harvests":{"get":{"operationId":"HarvestsController_getHarvests","parameters":[{"name":"select","required":false,"in":"query","description":"Columnas especificas a retornar (separadas por coma). Usar nombres de propiedades de la entidad.","schema":{"example":"id,firstName,lastName,email,status","type":"string"}},{"name":"number","required":false,"in":"query","description":"Number filter","schema":{"type":"string"}},{"name":"name","required":false,"in":"query","description":"Name filter","schema":{"type":"string"}},{"name":"status","required":false,"in":"query","description":"Status filter","schema":{"enum":["ABIERTA","CERRADA"],"type":"string"}},{"name":"location","required":false,"in":"query","description":"Location filter","schema":{"type":"string"}},{"name":"sortOrder","required":false,"in":"query","description":"Sort order","schema":{"enum":["ASC","DESC"],"type":"string"}},{"name":"sortBy","required":false,"in":"query","description":"Sort field","schema":{"type":"string"}},{"name":"search","required":false,"in":"query","description":"Search term","schema":{"type":"string"}},{"name":"limit","required":false,"in":"query","description":"Items per page","schema":{"type":"number"}},{"name":"page","required":false,"in":"query","description":"Page number","schema":{"type":"number"}}],"responses":{"200":{"description":"Harvests retrieved successfully"},"403":{"description":"Forbidden"}},"security":[{"JWT":[]}],"summary":"Get harvests with pagination, filters and search","tags":["Harvests"]},"post":{"operationId":"HarvestsController_create","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateHarvestDto"}}}},"responses":{"201":{"description":"Harvest created successfully"},"400":{"description":"Bad Request"},"409":{"description":"Conflict - Number already exists"}},"security":[{"JWT":[]}],"summary":"Create new harvest","tags":["Harvests"]}},"/harvests/search":{"get":{"operationId":"HarvestsController_searchHarvests","parameters":[{"name":"q","required":true,"in":"query","description":"Search term","schema":{"type":"string"}},{"name":"church","required":false,"in":"query","description":"Church code (if not provided, uses user's church)","schema":{"type":"string"}},{"name":"limit","required":false,"in":"query","description":"Max results","schema":{"type":"number"}}],"responses":{"200":{"description":"Search results"}},"security":[{"JWT":[]}],"summary":"Search harvests by number or name (for autocomplete)","tags":["Harvests"]}},"/harvests/statistics":{"get":{"operationId":"HarvestsController_getStatistics","parameters":[],"responses":{"200":{"description":"Statistics retrieved successfully"}},"security":[{"JWT":[]}],"summary":"Get harvest statistics","tags":["Harvests"]}},"/harvests/available-members":{"get":{"operationId":"HarvestsController_getAvailableMembers","parameters":[{"name":"page","required":false,"in":"query","description":"Page number","schema":{"type":"number"}},{"name":"limit","required":false,"in":"query","description":"Items per page","schema":{"type":"number"}}],"responses":{"200":{"description":"Available members retrieved successfully"}},"security":[{"JWT":[]}],"summary":"Get available members for harvest assignment","tags":["Harvests"]}},"/harvests/{id}":{"get":{"operationId":"HarvestsController_findOne","parameters":[{"name":"id","required":true,"in":"path","description":"Harvest ID","schema":{"type":"number"}}],"responses":{"200":{"description":"Harvest found"},"404":{"description":"Harvest not found"}},"security":[{"JWT":[]}],"summary":"Get harvest by ID","tags":["Harvests"]},"put":{"operationId":"HarvestsController_update","parameters":[{"name":"id","required":true,"in":"path","description":"Harvest ID","schema":{"type":"number"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateHarvestDto"}}}},"responses":{"200":{"description":"Harvest updated successfully"},"403":{"description":"Forbidden"},"404":{"description":"Harvest not found"}},"security":[{"JWT":[]}],"summary":"Update harvest","tags":["Harvests"]},"delete":{"operationId":"HarvestsController_remove","parameters":[{"name":"id","required":true,"in":"path","description":"Harvest ID","schema":{"type":"number"}}],"responses":{"200":{"description":"Harvest deleted successfully"},"403":{"description":"Forbidden"},"404":{"description":"Harvest not found"}},"security":[{"JWT":[]}],"summary":"Delete harvest","tags":["Harvests"]}},"/harvests/by-number/{number}":{"get":{"operationId":"HarvestsController_findByNumber","parameters":[{"name":"number","required":true,"in":"path","description":"Harvest number","schema":{"type":"string"}}],"responses":{"200":{"description":"Harvest found"},"404":{"description":"Harvest not found"}},"security":[{"JWT":[]}],"summary":"Get harvest by number","tags":["Harvests"]}},"/harvests/{id}/members":{"get":{"operationId":"HarvestsController_getHarvestMembers","parameters":[{"name":"id","required":true,"in":"path","description":"Harvest ID","schema":{"type":"number"}},{"name":"page","required":false,"in":"query","description":"Page number","schema":{"type":"number"}},{"name":"limit","required":false,"in":"query","description":"Items per page","schema":{"type":"number"}},{"name":"source","required":false,"in":"query","description":"Origen de datos. Por defecto: maestro_r1 si la cosecha está abierta, maestro_miembros si está cerrada.","schema":{"enum":["new_believers","members"],"type":"string"}},{"name":"refresh","required":false,"in":"query","description":"Bypass cache and reload members","schema":{"type":"boolean"}}],"responses":{"200":{"description":"Harvest members retrieved successfully"}},"security":[{"JWT":[]}],"summary":"Get harvest members","tags":["Harvests"]},"post":{"operationId":"HarvestsController_addMemberToHarvest","parameters":[{"name":"id","required":true,"in":"path","description":"Harvest ID","schema":{"type":"number"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AddMemberToHarvestDto"}}}},"responses":{"201":{"description":"Member added to harvest successfully"},"400":{"description":"Bad Request"},"409":{"description":"Conflict - Member already in another harvest"}},"security":[{"JWT":[]}],"summary":"Add member to harvest","tags":["Harvests"]}},"/harvests/{id}/close":{"post":{"operationId":"HarvestsController_closeHarvest","parameters":[{"name":"id","required":true,"in":"path","description":"Harvest ID","schema":{"type":"number"}}],"responses":{"200":{"description":"Harvest closed successfully"},"400":{"description":"Bad Request - Already closed"}},"security":[{"JWT":[]}],"summary":"Close harvest - moves members to main table","tags":["Harvests"]}},"/harvests/{id}/members/multiple":{"post":{"operationId":"HarvestsController_addMultipleMembersToHarvest","parameters":[{"name":"id","required":true,"in":"path","description":"Harvest ID","schema":{"type":"number"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AddMultipleMembersToHarvestDto"}}}},"responses":{"201":{"description":"Members added to harvest"}},"security":[{"JWT":[]}],"summary":"Add multiple members to harvest","tags":["Harvests"]}},"/harvests/{id}/members/{memberId}":{"put":{"operationId":"HarvestsController_updateHarvestMember","parameters":[{"name":"id","required":true,"in":"path","description":"Harvest ID","schema":{"type":"number"}},{"name":"memberId","required":true,"in":"path","description":"Member ID","schema":{"type":"number"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateHarvestMemberDto"}}}},"responses":{"200":{"description":"Harvest member updated successfully"}},"security":[{"JWT":[]}],"summary":"Update harvest member","tags":["Harvests"]},"delete":{"operationId":"HarvestsController_removeMemberFromHarvest","parameters":[{"name":"id","required":true,"in":"path","description":"Harvest ID","schema":{"type":"number"}},{"name":"memberId","required":true,"in":"path","description":"Member ID","schema":{"type":"number"}}],"responses":{"200":{"description":"Member removed from harvest successfully"}},"security":[{"JWT":[]}],"summary":"Remove member from harvest","tags":["Harvests"]}},"/harvests/export/csv":{"get":{"operationId":"HarvestsController_exportToCsv","parameters":[{"name":"select","required":false,"in":"query","description":"Columnas especificas a retornar (separadas por coma). Usar nombres de propiedades de la entidad.","schema":{"example":"id,firstName,lastName,email,status","type":"string"}},{"name":"status","required":false,"in":"query","schema":{"type":"string"}},{"name":"church","required":false,"in":"query","schema":{"type":"string"}}],"responses":{"200":{"description":"CSV data"}},"security":[{"JWT":[]}],"summary":"Export harvests to CSV","tags":["Harvests"]}},"/harvests/reports/summary":{"get":{"operationId":"HarvestsController_getComprehensiveReport","parameters":[],"responses":{"200":{"description":"Report data retrieved successfully"}},"security":[{"JWT":[]}],"summary":"Get comprehensive harvest report","tags":["Harvests"]}},"/networks/new-believers":{"get":{"operationId":"NetworksController_getNewBelievers","parameters":[{"name":"page","required":false,"in":"query","description":"Page number","schema":{"minimum":1,"example":1,"type":"number"}},{"name":"limit","required":false,"in":"query","description":"Items per page","schema":{"minimum":1,"maximum":100,"example":20,"type":"number"}},{"name":"search","required":false,"in":"query","description":"Search term","schema":{"example":"Juan Pérez","type":"string"}},{"name":"church","required":false,"in":"query","description":"Church filter","schema":{"example":"SGM01","type":"string"}},{"name":"harvestNumber","required":false,"in":"query","description":"Harvest number filter","schema":{"example":"COS2025001","type":"string"}},{"name":"status","required":false,"in":"query","description":"Status filter","schema":{"type":"string","enum":["NUEVO","EN_PROCESO","ENTREVISTA_1","ENTREVISTA_2","ENTREVISTA_3","LISTO_MEMBRESIA","PROCESADO","INACTIVO"]}},{"name":"sex","required":false,"in":"query","description":"Sexo (MALE=Masculino, FEMALE=Femenino)","schema":{"type":"string","enum":["MALE","FEMALE"]}},{"name":"assignedMinister","required":false,"in":"query","description":"Ministro asignado para filtrar","schema":{"example":"Pastor Juan","type":"string"}},{"name":"sortBy","required":false,"in":"query","description":"Sort field","schema":{"default":"createdDate","type":"string","enum":["firstName","lastName","conversionDate","createdDate","status","processStatus","preparationStatus"]}},{"name":"sortOrder","required":false,"in":"query","description":"Sort order","schema":{"enum":["ASC","DESC"],"type":"string"}},{"name":"processStatus","required":false,"in":"query","description":"Estado operativo del proceso de preparación","schema":{"type":"string","enum":["IN_PREPARATION","INTERVIEW_PENDING","READY_FOR_BAPTISM","BAPTISM_NOT_ATTENDED","SUITABLE_MEMBERSHIP","LOCKED","PROCESSED"]}},{"name":"preparationStatus","required":false,"in":"query","description":"Estado general de preparación","schema":{"type":"string","enum":["NOT_REQUIRED","PENDING","IN_PROGRESS","COMPLETED","BLOCKED"]}},{"name":"entryType","required":false,"in":"query","description":"Tipo de ingreso del creyente en Networks","schema":{"type":"string","enum":["REGULAR","VISITOR","TRANSFERRED","ADHERENT"]}},{"name":"isActive","required":false,"in":"query","description":"Filtrar por activos/inactivos","schema":{"type":"string","enum":["1","0"]}},{"name":"select","required":false,"in":"query","description":"Columnas especificas a retornar (separadas por coma)","schema":{"example":"id,firstName,lastName,status,conversionDate","type":"string"}}],"responses":{"200":{"description":"New believers retrieved successfully"},"403":{"description":"Forbidden"}},"security":[{"JWT":[]}],"summary":"Get new believers with pagination, filters and search","tags":["Networks (Redes de Cuidado)"]},"post":{"operationId":"NetworksController_create","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateNewBelieverDto"}}}},"responses":{"201":{"description":"New believer created successfully"},"400":{"description":"Bad Request"},"409":{"description":"Conflict - Identification already exists"}},"security":[{"JWT":[]}],"summary":"Create new believer","tags":["Networks (Redes de Cuidado)"]}},"/networks/new-members/process-status/preview":{"get":{"operationId":"NetworksController_getNewMemberHarvestPreview","parameters":[{"name":"church","required":false,"in":"query","description":"Codigo de iglesia para filtrar","schema":{"type":"string"}},{"name":"harvestNumber","required":true,"in":"query","description":"Numero de cosecha para previsualizar","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":100,"type":"number"}}],"responses":{"200":{"description":""}},"security":[{"JWT":[]}],"summary":"Preview ready Network records for a harvest membership flow","tags":["Networks (Redes de Cuidado)"]}},"/networks/new-members/process-status/harvest-result":{"post":{"operationId":"NetworksController_confirmNewMemberHarvestResult","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/NewMemberHarvestResultDto"}}}},"responses":{"202":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/NetworkHarvestProcessingRunResponseDto"}}}}},"security":[{"JWT":[]}],"summary":"Queue harvest attendance confirmation and process ready Network records in background","tags":["Networks (Redes de Cuidado)"]}},"/networks/new-members/process-status/harvest-result/runs/{id}":{"get":{"operationId":"NetworksController_getNewMemberHarvestProcessingRun","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"number"}},{"name":"church","required":true,"in":"query","schema":{"type":"string"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/NetworkHarvestProcessingRunResponseDto"}}}}},"security":[{"JWT":[]}],"summary":"Get harvest processing run status","tags":["Networks (Redes de Cuidado)"]}},"/networks/new-members/process-status/harvest-result/runs/{id}/report/retry":{"post":{"operationId":"NetworksController_retryNewMemberHarvestProcessingRunReport","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"number"}},{"name":"church","required":true,"in":"query","schema":{"type":"string"}}],"responses":{"200":{"description":"","content":{"application/json":{"schema":{"$ref":"#/components/schemas/NetworkHarvestProcessingRunResponseDto"}}}}},"security":[{"JWT":[]}],"summary":"Retry operative PDF generation for a harvest processing run","tags":["Networks (Redes de Cuidado)"]}},"/networks/new-members/process-status":{"get":{"operationId":"NetworksController_getNewMemberProcessStatus","parameters":[{"name":"status","required":true,"in":"query","description":"Alias tecnico o processStatus a consultar","schema":{"example":"READY","type":"string","enum":["READY","IN_PREPARATION","INTERVIEW_PENDING","READY_FOR_BAPTISM","BAPTISM_NOT_ATTENDED","SUITABLE_MEMBERSHIP","LOCKED","PROCESSED"]}},{"name":"church","required":false,"in":"query","description":"Codigo de iglesia para filtrar","schema":{"type":"string"}},{"name":"harvestNumber","required":false,"in":"query","description":"Numero de cosecha para filtrar","schema":{"type":"string"}},{"name":"preparationStatus","required":false,"in":"query","description":"Estado de preparacion para filtrar","schema":{"type":"string","enum":["NOT_REQUIRED","PENDING","IN_PROGRESS","COMPLETED","BLOCKED"]}},{"name":"entryType","required":false,"in":"query","description":"Tipo de ingreso para filtrar","schema":{"type":"string","enum":["REGULAR","VISITOR","TRANSFERRED","ADHERENT"]}},{"name":"cbbSeriesVersionId","required":false,"in":"query","description":"Version CBB aplicada para filtrar","schema":{"type":"number"}},{"name":"search","required":false,"in":"query","description":"Busqueda por ID, nombre, identificacion o email","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":100,"default":25,"type":"number"}},{"name":"sortBy","required":false,"in":"query","schema":{"default":"harvestNumber","type":"string","enum":["harvestNumber","fullName","processStatus","updatedAt"]}},{"name":"sortOrder","required":false,"in":"query","schema":{"default":"ASC","type":"string","enum":["ASC","DESC"]}}],"responses":{"200":{"description":"Network process status records retrieved successfully"}},"security":[{"JWT":[]}],"summary":"List Network records by process status for membership flow","tags":["Networks (Redes de Cuidado)"]}},"/networks/new-believers/statistics":{"get":{"operationId":"NetworksController_getStatistics","parameters":[],"responses":{"200":{"description":"Statistics retrieved successfully"}},"security":[{"JWT":[]}],"summary":"Get networks statistics","tags":["Networks (Redes de Cuidado)"]}},"/networks/new-believers/by-harvest/{harvestNumber}":{"get":{"operationId":"NetworksController_getNewBelieversByHarvest","parameters":[{"name":"harvestNumber","required":true,"in":"path","description":"Harvest number","schema":{"type":"string"}}],"responses":{"200":{"description":"New believers by harvest retrieved successfully"}},"security":[{"JWT":[]}],"summary":"Get new believers by harvest","tags":["Networks (Redes de Cuidado)"]}},"/networks/new-believers/match-candidates":{"post":{"operationId":"NetworksController_findMatchCandidates","parameters":[],"responses":{"201":{"description":""}},"security":[{"JWT":[]}],"summary":"Find possible duplicate member/new believer records before saving","tags":["Networks (Redes de Cuidado)"]}},"/networks/new-believers/sex-suggestion":{"get":{"operationId":"NetworksController_suggestSexByFirstName","parameters":[{"name":"firstName","required":true,"in":"query","description":"First name to evaluate","schema":{"type":"string"}},{"name":"church","required":false,"in":"query","description":"Church/location scope","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"security":[{"JWT":[]}],"summary":"Suggest sex from first name using existing church records","tags":["Networks (Redes de Cuidado)"]}},"/networks/person-spouses/candidates":{"post":{"operationId":"NetworksController_findSpouseCandidates","parameters":[],"responses":{"201":{"description":""}},"security":[{"JWT":[]}],"summary":"Find spouse candidates across members and active R1 records","tags":["Networks (Redes de Cuidado)"]}},"/networks/person-spouses/link":{"post":{"operationId":"NetworksController_linkSpouses","parameters":[],"responses":{"201":{"description":""}},"security":[{"JWT":[]}],"summary":"Link two people as spouses and sync both records","tags":["Networks (Redes de Cuidado)"]}},"/networks/preparation-groups":{"get":{"operationId":"NetworksController_getPreparationGroups","parameters":[{"name":"church","required":false,"in":"query","schema":{"type":"string"}},{"name":"entryType","required":false,"in":"query","schema":{"type":"string"}},{"name":"includeInactive","required":true,"in":"query","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"security":[{"JWT":[]}],"summary":"List preparation groups available for Network records","tags":["Networks (Redes de Cuidado)"]},"post":{"operationId":"NetworksController_createPreparationGroup","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateNetworkBelieverGroupDto"}}}},"responses":{"201":{"description":""}},"security":[{"JWT":[]}],"summary":"Create a Network preparation group","tags":["Networks (Redes de Cuidado)"]}},"/networks/preparation-groups/{groupId}":{"put":{"operationId":"NetworksController_updatePreparationGroup","parameters":[{"name":"groupId","required":true,"in":"path","schema":{"type":"number"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateNetworkBelieverGroupDto"}}}},"responses":{"200":{"description":""}},"security":[{"JWT":[]}],"summary":"Update a Network preparation group","tags":["Networks (Redes de Cuidado)"]},"delete":{"operationId":"NetworksController_deactivatePreparationGroup","parameters":[{"name":"groupId","required":true,"in":"path","schema":{"type":"number"}}],"responses":{"200":{"description":""}},"security":[{"JWT":[]}],"summary":"Deactivate a Network preparation group","tags":["Networks (Redes de Cuidado)"]}},"/networks/preparation-policies":{"get":{"operationId":"NetworksController_getPreparationPolicies","parameters":[{"name":"believerGroupId","required":false,"in":"query","schema":{"type":"number"}},{"name":"includeInactive","required":false,"in":"query","schema":{"type":"boolean"}}],"responses":{"200":{"description":""}},"security":[{"JWT":[]}],"summary":"List Network preparation policies","tags":["Networks (Redes de Cuidado)"]},"post":{"operationId":"NetworksController_createPreparationPolicy","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateNetworkPreparationPolicyDto"}}}},"responses":{"201":{"description":""}},"security":[{"JWT":[]}],"summary":"Create a Network preparation policy","tags":["Networks (Redes de Cuidado)"]}},"/networks/preparation-policies/{policyId}":{"put":{"operationId":"NetworksController_updatePreparationPolicy","parameters":[{"name":"policyId","required":true,"in":"path","schema":{"type":"number"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateNetworkPreparationPolicyDto"}}}},"responses":{"200":{"description":""}},"security":[{"JWT":[]}],"summary":"Update a Network preparation policy","tags":["Networks (Redes de Cuidado)"]},"delete":{"operationId":"NetworksController_deactivatePreparationPolicy","parameters":[{"name":"policyId","required":true,"in":"path","schema":{"type":"number"}}],"responses":{"200":{"description":""}},"security":[{"JWT":[]}],"summary":"Deactivate a Network preparation policy","tags":["Networks (Redes de Cuidado)"]}},"/networks/cbb-series":{"get":{"operationId":"NetworksController_getCbbSeriesVersions","parameters":[{"name":"includeInactive","required":false,"in":"query","schema":{"type":"boolean"}},{"name":"status","required":false,"in":"query","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"security":[{"JWT":[]}],"summary":"List CBB series versions configured by Networks","tags":["Networks (Redes de Cuidado)"]},"post":{"operationId":"NetworksController_createCbbSeriesVersion","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateNetworkCbbSeriesVersionDto"}}}},"responses":{"201":{"description":""}},"security":[{"JWT":[]}],"summary":"Create a CBB series version","tags":["Networks (Redes de Cuidado)"]}},"/networks/cbb-series/{seriesVersionId}":{"put":{"operationId":"NetworksController_updateCbbSeriesVersion","parameters":[{"name":"seriesVersionId","required":true,"in":"path","schema":{"type":"number"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateNetworkCbbSeriesVersionDto"}}}},"responses":{"200":{"description":""}},"security":[{"JWT":[]}],"summary":"Update a CBB series version","tags":["Networks (Redes de Cuidado)"]}},"/networks/cbb-series/{seriesVersionId}/courses":{"get":{"operationId":"NetworksController_getCbbSeriesCourses","parameters":[{"name":"seriesVersionId","required":true,"in":"path","schema":{"type":"number"}},{"name":"includeInactive","required":false,"in":"query","schema":{"type":"boolean"}}],"responses":{"200":{"description":""}},"security":[{"JWT":[]}],"summary":"List courses linked to a CBB series version","tags":["Networks (Redes de Cuidado)"]},"post":{"operationId":"NetworksController_linkCbbSeriesCourse","parameters":[{"name":"seriesVersionId","required":true,"in":"path","schema":{"type":"number"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LinkNetworkCbbSeriesCourseDto"}}}},"responses":{"201":{"description":""}},"security":[{"JWT":[]}],"summary":"Link a Discipleship course to a CBB series version","tags":["Networks (Redes de Cuidado)"]}},"/networks/cbb-series/{seriesVersionId}/courses/{seriesCourseId}":{"patch":{"operationId":"NetworksController_updateCbbSeriesCourseLink","parameters":[{"name":"seriesVersionId","required":true,"in":"path","schema":{"type":"number"}},{"name":"seriesCourseId","required":true,"in":"path","schema":{"type":"number"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateNetworkCbbSeriesCourseLinkDto"}}}},"responses":{"200":{"description":""}},"security":[{"JWT":[]}],"summary":"Update a course link in a CBB series version","tags":["Networks (Redes de Cuidado)"]},"delete":{"operationId":"NetworksController_unlinkCbbSeriesCourse","parameters":[{"name":"seriesVersionId","required":true,"in":"path","schema":{"type":"number"}},{"name":"seriesCourseId","required":true,"in":"path","schema":{"type":"number"}}],"responses":{"200":{"description":""}},"security":[{"JWT":[]}],"summary":"Deactivate a course link in a CBB series version","tags":["Networks (Redes de Cuidado)"]}},"/networks/new-believers/preparation/reconcile":{"post":{"operationId":"NetworksController_reconcilePreparationStatuses","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ReconcileNetworkPreparationDto"}}}},"responses":{"200":{"description":"Preparation reconciliation completed"}},"security":[{"JWT":[]}],"summary":"Reconcile CBB preparation progress for one or more new believers","tags":["Networks (Redes de Cuidado)"]}},"/networks/new-believers/{id}/preparation":{"get":{"operationId":"NetworksController_getPreparationStatus","parameters":[{"name":"id","required":true,"in":"path","description":"New believer ID","schema":{"type":"number"}}],"responses":{"200":{"description":"Preparation status retrieved successfully"},"404":{"description":"New believer not found"}},"security":[{"JWT":[]}],"summary":"Get preparation requirements and process status for a new believer","tags":["Networks (Redes de Cuidado)"]}},"/networks/new-believers/{id}/preparation/audit":{"get":{"operationId":"NetworksController_getPreparationAuditLog","parameters":[{"name":"id","required":true,"in":"path","description":"New believer ID","schema":{"type":"number"}}],"responses":{"200":{"description":"Preparation audit log retrieved successfully"},"404":{"description":"New believer not found"}},"security":[{"JWT":[]}],"summary":"Get preparation audit log for a new believer","tags":["Networks (Redes de Cuidado)"]}},"/networks/new-believers/{id}/preparation/override":{"patch":{"operationId":"NetworksController_overridePreparationRequirements","parameters":[{"name":"id","required":true,"in":"path","description":"New believer ID","schema":{"type":"number"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/OverrideNetworkPreparationDto"}}}},"responses":{"200":{"description":"Preparation override applied successfully"},"400":{"description":"Override cannot be applied"},"404":{"description":"New believer not found"}},"security":[{"JWT":[]}],"summary":"Apply an audited manual override to preparation requirements","tags":["Networks (Redes de Cuidado)"]}},"/networks/new-believers/{id}/preparation/recalculate":{"post":{"operationId":"NetworksController_recalculatePreparationStatus","parameters":[{"name":"id","required":true,"in":"path","description":"New believer ID","schema":{"type":"number"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RecalculateNetworkPreparationDto"}}}},"responses":{"200":{"description":"Preparation status recalculated successfully"},"400":{"description":"Preparation is not configured for this record"},"404":{"description":"New believer not found"}},"security":[{"JWT":[]}],"summary":"Recalculate preparation and process status for a new believer","tags":["Networks (Redes de Cuidado)"]}},"/networks/new-believers/{id}":{"get":{"operationId":"NetworksController_findOne","parameters":[{"name":"id","required":true,"in":"path","description":"New believer ID","schema":{"type":"number"}}],"responses":{"200":{"description":"New believer found"},"404":{"description":"New believer not found"}},"security":[{"JWT":[]}],"summary":"Get new believer by ID","tags":["Networks (Redes de Cuidado)"]},"put":{"operationId":"NetworksController_update","parameters":[{"name":"id","required":true,"in":"path","description":"New believer ID","schema":{"type":"number"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateNewBelieverDto"}}}},"responses":{"200":{"description":"New believer updated successfully"},"400":{"description":"Cannot update processed believer"},"404":{"description":"New believer not found"}},"security":[{"JWT":[]}],"summary":"Update new believer","tags":["Networks (Redes de Cuidado)"]},"delete":{"operationId":"NetworksController_remove","parameters":[{"name":"id","required":true,"in":"path","description":"New believer ID","schema":{"type":"number"}}],"responses":{"200":{"description":"New believer deleted successfully"},"400":{"description":"Cannot delete processed believer"},"404":{"description":"New believer not found"}},"security":[{"JWT":[]}],"summary":"Delete new believer","tags":["Networks (Redes de Cuidado)"]}},"/networks/new-believers/by-identification/{identification}":{"get":{"operationId":"NetworksController_findByIdentification","parameters":[{"name":"identification","required":true,"in":"path","description":"Identification number","schema":{"type":"string"}}],"responses":{"200":{"description":"New believer found"},"404":{"description":"New believer not found"}},"security":[{"JWT":[]}],"summary":"Get new believer by identification","tags":["Networks (Redes de Cuidado)"]}},"/networks/new-believers/{id}/interview-1":{"patch":{"operationId":"NetworksController_updateInterview1","parameters":[{"name":"id","required":true,"in":"path","description":"New believer ID","schema":{"type":"number"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateInterviewDto"}}}},"responses":{"200":{"description":"First interview updated successfully"}},"security":[{"JWT":[]}],"summary":"Update first interview for new believer","tags":["Networks (Redes de Cuidado)"]}},"/networks/new-believers/{id}/interview-2":{"patch":{"operationId":"NetworksController_updateInterview2","parameters":[{"name":"id","required":true,"in":"path","description":"New believer ID","schema":{"type":"number"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateInterviewDto"}}}},"responses":{"200":{"description":"Second interview updated successfully"},"400":{"description":"First interview must be completed first"}},"security":[{"JWT":[]}],"summary":"Update second interview for new believer","tags":["Networks (Redes de Cuidado)"]}},"/networks/new-believers/{id}/interview-3":{"patch":{"operationId":"NetworksController_updateInterview3","parameters":[{"name":"id","required":true,"in":"path","description":"New believer ID","schema":{"type":"number"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateInterviewDto"}}}},"responses":{"200":{"description":"Third interview updated successfully"},"400":{"description":"Second interview must be completed first"}},"security":[{"JWT":[]}],"summary":"Update third interview for new believer","tags":["Networks (Redes de Cuidado)"]}},"/networks/new-believers/{id}/process-membership":{"post":{"operationId":"NetworksController_processToMembership","parameters":[{"name":"id","required":true,"in":"path","description":"New believer ID","schema":{"type":"number"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProcessToMembershipDto"}}}},"responses":{"200":{"description":"Processed to membership successfully"},"400":{"description":"Not ready for membership or already processed"}},"security":[{"JWT":[]}],"summary":"Process new believer to membership","tags":["Networks (Redes de Cuidado)"]}},"/networks/new-believers/bulk-process-membership":{"post":{"operationId":"NetworksController_bulkProcessToMembership","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BulkProcessToMembershipDto"}}}},"responses":{"200":{"description":"Bulk processing completed"}},"security":[{"JWT":[]}],"summary":"Bulk process new believers to membership","tags":["Networks (Redes de Cuidado)"]}},"/networks/new-believers/export/csv":{"get":{"operationId":"NetworksController_exportToCsv","parameters":[{"name":"page","required":false,"in":"query","description":"Número de página","schema":{"minimum":1,"example":1,"type":"number"}},{"name":"limit","required":false,"in":"query","description":"Elementos por página","schema":{"minimum":1,"maximum":100,"example":20,"type":"number"}},{"name":"search","required":false,"in":"query","description":"Término de búsqueda (id, nombre, apellido, identificación o email)","schema":{"example":"Juan Pérez","type":"string"}},{"name":"church","required":false,"in":"query","description":"Código de iglesia para filtrar","schema":{"example":"SGM01","type":"string"}},{"name":"harvestNumber","required":false,"in":"query","description":"Número de cosecha para filtrar","schema":{"example":"COS2025001","type":"string"}},{"name":"status","required":false,"in":"query","description":"Estado del proceso R1","schema":{"type":"string","enum":["NUEVO","EN_PROCESO","ENTREVISTA_1","ENTREVISTA_2","ENTREVISTA_3","LISTO_MEMBRESIA","PROCESADO","INACTIVO"]}},{"name":"sex","required":false,"in":"query","description":"Sexo (MALE=Masculino, FEMALE=Femenino)","schema":{"type":"string","enum":["MALE","FEMALE"]}},{"name":"assignedMinister","required":false,"in":"query","description":"Ministro asignado para filtrar","schema":{"example":"Pastor Juan","type":"string"}},{"name":"sortBy","required":false,"in":"query","description":"Campo por el cual ordenar","schema":{"default":"createdDate","type":"string","enum":["firstName","lastName","conversionDate","createdDate","status","processStatus","preparationStatus"]}},{"name":"sortOrder","required":false,"in":"query","description":"Orden de clasificación","schema":{"default":"DESC","type":"string","enum":["ASC","DESC"]}},{"name":"processStatus","required":false,"in":"query","description":"Estado operativo del proceso de preparación","schema":{"type":"string","enum":["IN_PREPARATION","INTERVIEW_PENDING","READY_FOR_BAPTISM","BAPTISM_NOT_ATTENDED","SUITABLE_MEMBERSHIP","LOCKED","PROCESSED"]}},{"name":"preparationStatus","required":false,"in":"query","description":"Estado general de preparación","schema":{"type":"string","enum":["NOT_REQUIRED","PENDING","IN_PROGRESS","COMPLETED","BLOCKED"]}},{"name":"entryType","required":false,"in":"query","description":"Tipo de ingreso del creyente en Networks","schema":{"type":"string","enum":["REGULAR","VISITOR","TRANSFERRED","ADHERENT"]}},{"name":"isActive","required":false,"in":"query","description":"Filtrar por activos/inactivos","schema":{"type":"string","enum":["1","0"]}},{"name":"select","required":false,"in":"query","description":"Columnas especificas a retornar (separadas por coma)","schema":{"example":"id,firstName,lastName,status,conversionDate","type":"string"}}],"responses":{"200":{"description":"CSV data"}},"security":[{"JWT":[]}],"summary":"Export new believers to CSV","tags":["Networks (Redes de Cuidado)"]}},"/networks/reports/summary":{"get":{"operationId":"NetworksController_getComprehensiveReport","parameters":[],"responses":{"200":{"description":"Report data retrieved successfully"}},"security":[{"JWT":[]}],"summary":"Get comprehensive networks report","tags":["Networks (Redes de Cuidado)"]}},"/networks/reports/preparation-operation":{"get":{"operationId":"NetworksController_getPreparationOperationReport","parameters":[{"name":"church","required":false,"in":"query","description":"Codigo de iglesia para filtrar","schema":{"type":"string"}},{"name":"harvestNumber","required":false,"in":"query","description":"Numero de cosecha para filtrar","schema":{"type":"string"}},{"name":"limit","required":false,"in":"query","schema":{"minimum":1,"maximum":25,"default":10,"type":"number"}}],"responses":{"200":{"description":"Preparation operation report retrieved successfully"}},"security":[{"JWT":[]}],"summary":"Get Networks preparation operation report","tags":["Networks (Redes de Cuidado)"]}},"/networks/consolidation-r2":{"post":{"description":"Inicia un proceso de consolidación/discipulado R2 para un miembro","operationId":"ConsolidationR2Controller_create","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateConsolidationR2Dto"}}}},"responses":{"201":{"description":"Consolidación R2 creada exitosamente","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ConsolidationR2"}}}},"400":{"description":"Datos de entrada inválidos"},"404":{"description":"Miembro no encontrado"}},"security":[{"bearer":[]}],"summary":"Crear nueva consolidación R2","tags":["Networks - Consolidation R2"]},"get":{"description":"Lista paginada de consolidaciones R2 con filtros opcionales","operationId":"ConsolidationR2Controller_findAll","parameters":[{"name":"status","required":false,"in":"query","description":"Filtrar por estado del proceso","schema":{"type":"string","enum":["enrolled","in_progress","evaluation","completed","ready_leadership","promoted_r3","inactive"]}},{"name":"programType","required":false,"in":"query","description":"Filtrar por tipo de programa","schema":{"type":"string","enum":["basic_faith","church_membership","ministry_prep","youth_track","adult_track","couples_track"]}},{"name":"consolidatorId","required":false,"in":"query","description":"ID del consolidador","schema":{"type":"number"}},{"name":"location","required":false,"in":"query","description":"Código de localidad/iglesia","schema":{"type":"string"}},{"name":"startDateFrom","required":false,"in":"query","description":"Fecha de inicio desde (ISO 8601)","schema":{"type":"string"}},{"name":"startDateTo","required":false,"in":"query","description":"Fecha de inicio hasta (ISO 8601)","schema":{"type":"string"}},{"name":"minCompletion","required":false,"in":"query","description":"Completitud mínima requerida","schema":{"minimum":0,"maximum":100,"type":"number"}},{"name":"search","required":false,"in":"query","description":"Buscar en nombre del miembro o consolidador","schema":{"type":"string"}},{"name":"readyForR3","required":false,"in":"query","description":"Solo los listos para promover a R3","schema":{"type":"boolean"}},{"name":"page","required":false,"in":"query","description":"Página para paginación","schema":{"minimum":1,"default":1,"type":"number"}},{"name":"limit","required":false,"in":"query","description":"Elementos por página (1-100)","schema":{"minimum":1,"maximum":100,"default":20,"type":"number"}}],"responses":{"200":{"description":"Lista de consolidaciones R2 obtenida exitosamente","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/ConsolidationR2"}},"total":{"type":"number","description":"Total de registros"},"page":{"type":"number","description":"Página actual"},"limit":{"type":"number","description":"Elementos por página"}}}}}}},"security":[{"bearer":[]}],"summary":"Obtener todas las consolidaciones R2","tags":["Networks - Consolidation R2"]}},"/networks/consolidation-r2/statistics":{"get":{"description":"Métricas y estadísticas del proceso de consolidación R2","operationId":"ConsolidationR2Controller_getStatistics","parameters":[{"name":"status","required":false,"in":"query","description":"Filtrar por estado del proceso","schema":{"type":"string","enum":["enrolled","in_progress","evaluation","completed","ready_leadership","promoted_r3","inactive"]}},{"name":"programType","required":false,"in":"query","description":"Filtrar por tipo de programa","schema":{"type":"string","enum":["basic_faith","church_membership","ministry_prep","youth_track","adult_track","couples_track"]}},{"name":"consolidatorId","required":false,"in":"query","description":"ID del consolidador","schema":{"type":"number"}},{"name":"location","required":false,"in":"query","description":"Código de localidad/iglesia","schema":{"type":"string"}},{"name":"startDateFrom","required":false,"in":"query","description":"Fecha de inicio desde (ISO 8601)","schema":{"type":"string"}},{"name":"startDateTo","required":false,"in":"query","description":"Fecha de inicio hasta (ISO 8601)","schema":{"type":"string"}},{"name":"minCompletion","required":false,"in":"query","description":"Completitud mínima requerida","schema":{"minimum":0,"maximum":100,"type":"number"}},{"name":"search","required":false,"in":"query","description":"Buscar en nombre del miembro o consolidador","schema":{"type":"string"}},{"name":"readyForR3","required":false,"in":"query","description":"Solo los listos para promover a R3","schema":{"type":"boolean"}},{"name":"page","required":false,"in":"query","description":"Página para paginación","schema":{"minimum":1,"default":1,"type":"number"}},{"name":"limit","required":false,"in":"query","description":"Elementos por página (1-100)","schema":{"minimum":1,"maximum":100,"default":20,"type":"number"}}],"responses":{"200":{"description":"Estadísticas obtenidas exitosamente","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ConsolidationR2StatisticsDto"}}}}},"security":[{"bearer":[]}],"summary":"Obtener estadísticas de consolidación R2","tags":["Networks - Consolidation R2"]}},"/networks/consolidation-r2/mentor/{mentorId}/dashboard":{"get":{"description":"Panel de control para mentores con sus mentees R2","operationId":"ConsolidationR2Controller_getMentorDashboard","parameters":[{"name":"mentorId","required":true,"in":"path","description":"ID del mentor","schema":{"type":"number"}}],"responses":{"200":{"description":"Dashboard del mentor obtenido exitosamente","content":{"application/json":{"schema":{"type":"object","properties":{"activeMentees":{"type":"array","items":{"$ref":"#/components/schemas/ConsolidationR2"}},"completedMentees":{"type":"array","items":{"$ref":"#/components/schemas/ConsolidationR2"}},"readyForPromotion":{"type":"array","items":{"$ref":"#/components/schemas/ConsolidationR2"}},"totalMentees":{"type":"number"},"averageProgress":{"type":"number"}}}}}}},"security":[{"bearer":[]}],"summary":"Dashboard del mentor para R2","tags":["Networks - Consolidation R2"]}},"/networks/consolidation-r2/member/{memberId}":{"get":{"description":"Historial de consolidaciones R2 de un miembro específico","operationId":"ConsolidationR2Controller_findByMemberId","parameters":[{"name":"memberId","required":true,"in":"path","description":"ID del miembro","schema":{"type":"number"}}],"responses":{"200":{"description":"Consolidaciones del miembro obtenidas exitosamente","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/ConsolidationR2"}}}}}},"security":[{"bearer":[]}],"summary":"Obtener consolidaciones R2 por miembro","tags":["Networks - Consolidation R2"]}},"/networks/consolidation-r2/{id}":{"get":{"description":"Detalles completos de una consolidación R2 específica","operationId":"ConsolidationR2Controller_findOne","parameters":[{"name":"id","required":true,"in":"path","description":"ID de la consolidación R2","schema":{"type":"number"}}],"responses":{"200":{"description":"Consolidación R2 obtenida exitosamente","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ConsolidationR2"}}}},"404":{"description":"Consolidación R2 no encontrada"}},"security":[{"bearer":[]}],"summary":"Obtener consolidación R2 por ID","tags":["Networks - Consolidation R2"]},"patch":{"description":"Actualiza los datos de una consolidación R2 existente","operationId":"ConsolidationR2Controller_update","parameters":[{"name":"id","required":true,"in":"path","description":"ID de la consolidación R2","schema":{"type":"number"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateConsolidationR2Dto"}}}},"responses":{"200":{"description":"Consolidación R2 actualizada exitosamente","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ConsolidationR2"}}}},"404":{"description":"Consolidación R2 no encontrada"}},"security":[{"bearer":[]}],"summary":"Actualizar consolidación R2","tags":["Networks - Consolidation R2"]},"delete":{"description":"Elimina una consolidación R2 (solo si no ha sido promovida a R3)","operationId":"ConsolidationR2Controller_remove","parameters":[{"name":"id","required":true,"in":"path","description":"ID de la consolidación R2","schema":{"type":"number"}}],"responses":{"200":{"description":"Consolidación R2 eliminada exitosamente"},"400":{"description":"No se puede eliminar una consolidación promovida a R3"},"404":{"description":"Consolidación R2 no encontrada"}},"security":[{"bearer":[]}],"summary":"Eliminar consolidación R2","tags":["Networks - Consolidation R2"]}},"/networks/consolidation-r2/{id}/progress":{"patch":{"description":"Actualiza el porcentaje de progreso y sesiones completadas","operationId":"ConsolidationR2Controller_updateProgress","parameters":[{"name":"id","required":true,"in":"path","description":"ID de la consolidación R2","schema":{"type":"number"}},{"name":"progressPercentage","required":true,"in":"query","description":"Porcentaje de progreso (0-100)","schema":{"type":"number"}},{"name":"sessionsCompleted","required":false,"in":"query","description":"Sesiones completadas","schema":{"type":"number"}}],"responses":{"200":{"description":"Progreso actualizado exitosamente","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ConsolidationR2"}}}}},"security":[{"bearer":[]}],"summary":"Actualizar progreso de consolidación R2","tags":["Networks - Consolidation R2"]}},"/networks/consolidation-r2/{id}/spiritual-gifts":{"post":{"description":"Añade un don espiritual identificado a la consolidación R2","operationId":"ConsolidationR2Controller_addSpiritualGift","parameters":[{"name":"id","required":true,"in":"path","description":"ID de la consolidación R2","schema":{"type":"number"}}],"responses":{"200":{"description":"Don espiritual agregado exitosamente","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ConsolidationR2"}}}}},"security":[{"bearer":[]}],"summary":"Agregar don espiritual","tags":["Networks - Consolidation R2"]}},"/networks/consolidation-r2/{id}/ministry-interests":{"post":{"description":"Añade un interés ministerial identificado a la consolidación R2","operationId":"ConsolidationR2Controller_addMinistryInterest","parameters":[{"name":"id","required":true,"in":"path","description":"ID de la consolidación R2","schema":{"type":"number"}}],"responses":{"200":{"description":"Interés ministerial agregado exitosamente","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ConsolidationR2"}}}}},"security":[{"bearer":[]}],"summary":"Agregar interés ministerial","tags":["Networks - Consolidation R2"]}},"/networks/consolidation-r2/{id}/promote-to-r3":{"post":{"description":"Promueve un miembro consolidado R2 al proceso de liderazgo R3","operationId":"ConsolidationR2Controller_promoteToR3","parameters":[{"name":"id","required":true,"in":"path","description":"ID de la consolidación R2","schema":{"type":"number"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PromoteToR3Dto"}}}},"responses":{"200":{"description":"Promoción a R3 exitosa","content":{"application/json":{"schema":{"type":"object","properties":{"success":{"type":"boolean"},"message":{"type":"string"},"r3Data":{"type":"object","description":"Datos para crear el registro R3"}}}}}},"400":{"description":"Miembro no elegible para promoción"}},"security":[{"bearer":[]}],"summary":"Promover a R3","tags":["Networks - Consolidation R2"]}},"/networks/leadership-r3":{"post":{"description":"Inicia un proceso de desarrollo de liderazgo R3 para un miembro","operationId":"LeadershipR3Controller_create","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateLeadershipR3Dto"}}}},"responses":{"201":{"description":"Liderazgo R3 creado exitosamente","content":{"application/json":{"schema":{"$ref":"#/components/schemas/LeadershipR3"}}}},"400":{"description":"Datos de entrada inválidos"},"404":{"description":"Miembro no encontrado"}},"security":[{"bearer":[]}],"summary":"Crear nuevo liderazgo R3","tags":["Networks - Leadership R3"]},"get":{"description":"Lista paginada de liderazgos R3 con filtros opcionales","operationId":"LeadershipR3Controller_findAll","parameters":[{"name":"status","required":false,"in":"query","description":"Filtrar por estado del liderazgo","schema":{"type":"string","enum":["enrolled","leadership_training","cell_leader_prep","cell_leader","ministry_leader","pastor_track","certified_leader","active","inactive"]}},{"name":"track","required":false,"in":"query","description":"Filtrar por pista de liderazgo","schema":{"type":"string","enum":["cell_leadership","youth_ministry","worship_ministry","teaching_ministry","pastoral_ministry","ministry_leadership","pastoral_leadership","evangelism_leadership","administration","evangelism","counseling"]}},{"name":"mentorId","required":false,"in":"query","description":"ID del mentor","schema":{"type":"number"}},{"name":"minLevel","required":false,"in":"query","description":"Nivel mínimo de liderazgo","schema":{"minimum":1,"maximum":6,"type":"number"}},{"name":"currentCertification","required":false,"in":"query","description":"Filtrar por certificación actual","schema":{"type":"string","enum":["basic_leader","cell_leader","ministry_coordinator","ministry_leader","department_head","associate_pastor","senior_pastor","senior_leader"]}},{"name":"location","required":false,"in":"query","description":"Código de localidad/iglesia","schema":{"type":"string"}},{"name":"minTrainingProgress","required":false,"in":"query","description":"Mínimo progreso de entrenamiento (0-100)","schema":{"minimum":0,"maximum":100,"type":"number"}},{"name":"readyForCertification","required":false,"in":"query","description":"Solo los listos para certificación","schema":{"type":"boolean"}},{"name":"activeLeaders","required":false,"in":"query","description":"Solo los activos en liderazgo","schema":{"type":"boolean"}},{"name":"search","required":false,"in":"query","description":"Buscar en nombre del miembro o mentor","schema":{"type":"string"}},{"name":"page","required":false,"in":"query","description":"Página para paginación","schema":{"minimum":1,"default":1,"type":"number"}},{"name":"limit","required":false,"in":"query","description":"Elementos por página (1-100)","schema":{"minimum":1,"maximum":100,"default":20,"type":"number"}}],"responses":{"200":{"description":"Lista de liderazgos R3 obtenida exitosamente","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/LeadershipR3"}},"total":{"type":"number","description":"Total de registros"},"page":{"type":"number","description":"Página actual"},"limit":{"type":"number","description":"Elementos por página"}}}}}}},"security":[{"bearer":[]}],"summary":"Obtener todos los liderazgos R3","tags":["Networks - Leadership R3"]}},"/networks/leadership-r3/statistics":{"get":{"description":"Métricas y estadísticas del proceso de desarrollo de liderazgo R3","operationId":"LeadershipR3Controller_getStatistics","parameters":[{"name":"status","required":false,"in":"query","description":"Filtrar por estado del liderazgo","schema":{"type":"string","enum":["enrolled","leadership_training","cell_leader_prep","cell_leader","ministry_leader","pastor_track","certified_leader","active","inactive"]}},{"name":"track","required":false,"in":"query","description":"Filtrar por pista de liderazgo","schema":{"type":"string","enum":["cell_leadership","youth_ministry","worship_ministry","teaching_ministry","pastoral_ministry","ministry_leadership","pastoral_leadership","evangelism_leadership","administration","evangelism","counseling"]}},{"name":"mentorId","required":false,"in":"query","description":"ID del mentor","schema":{"type":"number"}},{"name":"minLevel","required":false,"in":"query","description":"Nivel mínimo de liderazgo","schema":{"minimum":1,"maximum":6,"type":"number"}},{"name":"currentCertification","required":false,"in":"query","description":"Filtrar por certificación actual","schema":{"type":"string","enum":["basic_leader","cell_leader","ministry_coordinator","ministry_leader","department_head","associate_pastor","senior_pastor","senior_leader"]}},{"name":"location","required":false,"in":"query","description":"Código de localidad/iglesia","schema":{"type":"string"}},{"name":"minTrainingProgress","required":false,"in":"query","description":"Mínimo progreso de entrenamiento (0-100)","schema":{"minimum":0,"maximum":100,"type":"number"}},{"name":"readyForCertification","required":false,"in":"query","description":"Solo los listos para certificación","schema":{"type":"boolean"}},{"name":"activeLeaders","required":false,"in":"query","description":"Solo los activos en liderazgo","schema":{"type":"boolean"}},{"name":"search","required":false,"in":"query","description":"Buscar en nombre del miembro o mentor","schema":{"type":"string"}},{"name":"page","required":false,"in":"query","description":"Página para paginación","schema":{"minimum":1,"default":1,"type":"number"}},{"name":"limit","required":false,"in":"query","description":"Elementos por página (1-100)","schema":{"minimum":1,"maximum":100,"default":20,"type":"number"}}],"responses":{"200":{"description":"Estadísticas obtenidas exitosamente","content":{"application/json":{"schema":{"$ref":"#/components/schemas/LeadershipR3StatisticsDto"}}}}},"security":[{"bearer":[]}],"summary":"Obtener estadísticas de liderazgo R3","tags":["Networks - Leadership R3"]}},"/networks/leadership-r3/mentor/{mentorId}/dashboard":{"get":{"description":"Panel de control para mentores con sus líderes R3","operationId":"LeadershipR3Controller_getMentorDashboard","parameters":[{"name":"mentorId","required":true,"in":"path","description":"ID del mentor","schema":{"type":"number"}}],"responses":{"200":{"description":"Dashboard del mentor obtenido exitosamente","content":{"application/json":{"schema":{"type":"object","properties":{"activeMentees":{"type":"array","items":{"$ref":"#/components/schemas/LeadershipR3"}},"readyForPromotion":{"type":"array","items":{"$ref":"#/components/schemas/LeadershipR3"}},"topPerformers":{"type":"array","items":{"$ref":"#/components/schemas/LeadershipR3"}},"totalMentees":{"type":"number"},"averagePerformance":{"type":"number"}}}}}}},"security":[{"bearer":[]}],"summary":"Dashboard del mentor para R3","tags":["Networks - Leadership R3"]}},"/networks/leadership-r3/member/{memberId}":{"get":{"description":"Historial de liderazgos R3 de un miembro específico","operationId":"LeadershipR3Controller_findByMemberId","parameters":[{"name":"memberId","required":true,"in":"path","description":"ID del miembro","schema":{"type":"number"}}],"responses":{"200":{"description":"Liderazgos del miembro obtenidos exitosamente","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/LeadershipR3"}}}}}},"security":[{"bearer":[]}],"summary":"Obtener liderazgos R3 por miembro","tags":["Networks - Leadership R3"]}},"/networks/leadership-r3/{id}":{"get":{"description":"Detalles completos de un liderazgo R3 específico","operationId":"LeadershipR3Controller_findOne","parameters":[{"name":"id","required":true,"in":"path","description":"ID del liderazgo R3","schema":{"type":"number"}}],"responses":{"200":{"description":"Liderazgo R3 obtenido exitosamente","content":{"application/json":{"schema":{"$ref":"#/components/schemas/LeadershipR3"}}}},"404":{"description":"Liderazgo R3 no encontrado"}},"security":[{"bearer":[]}],"summary":"Obtener liderazgo R3 por ID","tags":["Networks - Leadership R3"]},"patch":{"description":"Actualiza los datos de un liderazgo R3 existente","operationId":"LeadershipR3Controller_update","parameters":[{"name":"id","required":true,"in":"path","description":"ID del liderazgo R3","schema":{"type":"number"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateLeadershipR3Dto"}}}},"responses":{"200":{"description":"Liderazgo R3 actualizado exitosamente","content":{"application/json":{"schema":{"$ref":"#/components/schemas/LeadershipR3"}}}},"404":{"description":"Liderazgo R3 no encontrado"}},"security":[{"bearer":[]}],"summary":"Actualizar liderazgo R3","tags":["Networks - Leadership R3"]},"delete":{"description":"Elimina un liderazgo R3 (solo si no está liderando activamente)","operationId":"LeadershipR3Controller_remove","parameters":[{"name":"id","required":true,"in":"path","description":"ID del liderazgo R3","schema":{"type":"number"}}],"responses":{"200":{"description":"Liderazgo R3 eliminado exitosamente"},"400":{"description":"No se puede eliminar un líder activo"},"404":{"description":"Liderazgo R3 no encontrado"}},"security":[{"bearer":[]}],"summary":"Eliminar liderazgo R3","tags":["Networks - Leadership R3"]}},"/networks/leadership-r3/{id}/training-modules/complete":{"post":{"description":"Marca un módulo de entrenamiento como completado","operationId":"LeadershipR3Controller_completeTrainingModule","parameters":[{"name":"id","required":true,"in":"path","description":"ID del liderazgo R3","schema":{"type":"number"}}],"responses":{"200":{"description":"Módulo de entrenamiento completado exitosamente","content":{"application/json":{"schema":{"$ref":"#/components/schemas/LeadershipR3"}}}}},"security":[{"bearer":[]}],"summary":"Completar módulo de entrenamiento","tags":["Networks - Leadership R3"]}},"/networks/leadership-r3/practical-assignments":{"post":{"description":"Añade una nueva asignación práctica al proceso de liderazgo R3","operationId":"LeadershipR3Controller_addPracticalAssignment","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AddPracticalAssignmentDto"}}}},"responses":{"200":{"description":"Asignación práctica agregada exitosamente","content":{"application/json":{"schema":{"$ref":"#/components/schemas/LeadershipR3"}}}}},"security":[{"bearer":[]}],"summary":"Agregar asignación práctica","tags":["Networks - Leadership R3"]}},"/networks/leadership-r3/{id}/practical-assignments/{assignmentId}":{"patch":{"description":"Actualiza los datos de una asignación práctica específica","operationId":"LeadershipR3Controller_updatePracticalAssignment","parameters":[{"name":"id","required":true,"in":"path","description":"ID del liderazgo R3","schema":{"type":"number"}},{"name":"assignmentId","required":true,"in":"path","description":"ID de la asignación práctica","schema":{"type":"string"}}],"responses":{"200":{"description":"Asignación práctica actualizada exitosamente","content":{"application/json":{"schema":{"$ref":"#/components/schemas/LeadershipR3"}}}}},"security":[{"bearer":[]}],"summary":"Actualizar asignación práctica","tags":["Networks - Leadership R3"]}},"/networks/leadership-r3/mentor-evaluations":{"post":{"description":"Añade una nueva evaluación del mentor al proceso de liderazgo R3","operationId":"LeadershipR3Controller_addMentorEvaluation","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AddMentorEvaluationDto"}}}},"responses":{"200":{"description":"Evaluación del mentor agregada exitosamente","content":{"application/json":{"schema":{"$ref":"#/components/schemas/LeadershipR3"}}}}},"security":[{"bearer":[]}],"summary":"Agregar evaluación del mentor","tags":["Networks - Leadership R3"]}},"/networks/leadership-r3/{id}/promote-level":{"post":{"description":"Promociona a un líder R3 al siguiente nivel de liderazgo","operationId":"LeadershipR3Controller_promoteLevel","parameters":[{"name":"id","required":true,"in":"path","description":"ID del liderazgo R3","schema":{"type":"number"}}],"responses":{"200":{"description":"Nivel de liderazgo promovido exitosamente","content":{"application/json":{"schema":{"$ref":"#/components/schemas/LeadershipR3"}}}},"400":{"description":"Líder no elegible para promoción"}},"security":[{"bearer":[]}],"summary":"Promover nivel de liderazgo","tags":["Networks - Leadership R3"]}},"/networks/leadership-r3/{id}/leadership-metrics":{"patch":{"description":"Actualiza las métricas de personas mentoreando y células liderando","operationId":"LeadershipR3Controller_updateLeadershipMetrics","parameters":[{"name":"id","required":true,"in":"path","description":"ID del liderazgo R3","schema":{"type":"number"}}],"responses":{"200":{"description":"Métricas de liderazgo actualizadas exitosamente","content":{"application/json":{"schema":{"$ref":"#/components/schemas/LeadershipR3"}}}}},"security":[{"bearer":[]}],"summary":"Actualizar métricas de liderazgo","tags":["Networks - Leadership R3"]}},"/discipleship/courses":{"post":{"operationId":"DiscipleshipCoursesController_create","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateDiscipleshipCourseDto"}}}},"responses":{"201":{"description":"Curso creado exitosamente."},"400":{"description":"Datos de entrada inválidos."}},"security":[{"bearer":[]}],"summary":"Crear un nuevo curso de discipulado","tags":["Discipleship Courses"]},"get":{"operationId":"DiscipleshipCoursesController_findAll","parameters":[{"name":"search","required":false,"in":"query","description":"Buscar por código o nombre","schema":{"type":"string"}},{"name":"nivel","required":false,"in":"query","description":"Filtrar por nivel","schema":{"type":"string","enum":["BASICO","INTERMEDIO","AVANZADO","ESPECIALIDAD"]}},{"name":"tipoCurso","required":false,"in":"query","description":"Filtrar por tipo","schema":{"type":"string","enum":["S","E","ES","T"]}},{"name":"facilitadorId","required":false,"in":"query","description":"Filtrar por facilitador","schema":{"type":"number"}},{"name":"activo","required":false,"in":"query","description":"Solo cursos activos","schema":{"type":"boolean"}},{"name":"conCosto","required":false,"in":"query","description":"Con costo","schema":{"type":"boolean"}},{"name":"page","required":false,"in":"query","description":"Página","schema":{"minimum":1,"default":1,"type":"number"}},{"name":"limit","required":false,"in":"query","description":"Elementos por página","schema":{"minimum":1,"maximum":1000,"default":10,"type":"number"}},{"name":"select","required":false,"in":"query","description":"Columnas específicas a retornar (separadas por coma)","schema":{"example":"id,codigo,nombre,level,status","type":"string"}}],"responses":{"200":{"description":"Lista de cursos obtenida exitosamente."}},"security":[{"bearer":[]}],"summary":"Obtener lista de cursos con filtros","tags":["Discipleship Courses"]}},"/discipleship/courses/{id}":{"get":{"operationId":"DiscipleshipCoursesController_findOne","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"number"}}],"responses":{"200":{"description":"Curso encontrado exitosamente."},"404":{"description":"Curso no encontrado."}},"security":[{"bearer":[]}],"summary":"Obtener un curso específico por ID","tags":["Discipleship Courses"]},"patch":{"operationId":"DiscipleshipCoursesController_update","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"number"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateDiscipleshipCourseDto"}}}},"responses":{"200":{"description":"Curso actualizado exitosamente."},"404":{"description":"Curso no encontrado."}},"security":[{"bearer":[]}],"summary":"Actualizar información de un curso","tags":["Discipleship Courses"]},"delete":{"operationId":"DiscipleshipCoursesController_remove","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"number"}}],"responses":{"200":{"description":"Curso archivado exitosamente."},"404":{"description":"Curso no encontrado."}},"security":[{"bearer":[]}],"summary":"Archivar un curso sin eliminar su historial","tags":["Discipleship Courses"]}},"/discipleship/courses/{id}/students":{"get":{"operationId":"DiscipleshipCoursesController_getStudents","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"number"}}],"responses":{"200":{"description":"Lista de estudiantes obtenida exitosamente."}},"security":[{"bearer":[]}],"summary":"Obtener estudiantes inscritos en un curso","tags":["Discipleship Courses"]}},"/discipleship/courses/{id}/financial-summary":{"get":{"operationId":"DiscipleshipCoursesController_getFinancialSummary","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"number"}}],"responses":{"200":{"description":"Resumen financiero obtenido exitosamente."}},"security":[{"bearer":[]}],"summary":"Obtener resumen financiero del curso","tags":["Discipleship Courses"]}},"/discipleship/courses/{id}/duplicate":{"post":{"operationId":"DiscipleshipCoursesController_duplicate","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"number"}}],"responses":{"201":{"description":"Curso duplicado exitosamente."},"404":{"description":"Curso no encontrado."}},"security":[{"bearer":[]}],"summary":"Duplicar un curso existente","tags":["Discipleship Courses"]}},"/discipleship/courses/{id}/status":{"patch":{"operationId":"DiscipleshipCoursesController_updateStatus","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"number"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateDiscipleshipCourseStatusDto"}}}},"responses":{"200":{"description":"Estado actualizado exitosamente."}},"security":[{"bearer":[]}],"summary":"Cambiar estado del curso","tags":["Discipleship Courses"]}},"/discipleship/enrollments":{"post":{"operationId":"DiscipleshipEnrollmentsController_create","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateDiscipleshipEnrollmentDto"}}}},"responses":{"201":{"description":"Inscripción creada exitosamente."},"400":{"description":"Datos de entrada inválidos."},"409":{"description":"El estudiante ya está inscrito en este curso."}},"security":[{"bearer":[]}],"summary":"Crear nueva inscripción a curso","tags":["Discipleship Enrollments"]},"get":{"operationId":"DiscipleshipEnrollmentsController_findAll","parameters":[{"name":"search","required":false,"in":"query","description":"Buscar por nombre de estudiante","schema":{"type":"string"}},{"name":"courseId","required":false,"in":"query","description":"Filtrar por curso","schema":{"type":"number"}},{"name":"periodId","required":false,"in":"query","description":"Filtrar por período","schema":{"type":"number"}},{"name":"studentType","required":false,"in":"query","description":"Filtrar por tipo de estudiante","schema":{"type":"string","enum":["MIEMBRO","NUEVO_CREYENTE","VISITANTE","EX_MIEMBRO"]}},{"name":"status","required":false,"in":"query","description":"Filtrar por estado","schema":{"type":"string","enum":["INSCRITO","CONFIRMADO","EN_PROGRESO","APROBADO","REPROBADO","RETIRADO","CANCELADO","TRANSFERIDO"]}},{"name":"memberId","required":false,"in":"query","description":"Filtrar por miembro","schema":{"type":"number"}},{"name":"active","required":false,"in":"query","description":"Solo inscripciones activas","schema":{"type":"boolean"}},{"name":"pendingCertificate","required":false,"in":"query","description":"Solo inscripciones con certificado pendiente","schema":{"type":"boolean"}},{"name":"minGrade","required":false,"in":"query","description":"Nota mínima","schema":{"type":"number"}},{"name":"minAttendance","required":false,"in":"query","description":"Asistencia mínima","schema":{"type":"number"}},{"name":"enrollmentDateFrom","required":false,"in":"query","description":"Fecha de inscripción desde","schema":{"format":"date-time","type":"string"}},{"name":"enrollmentDateTo","required":false,"in":"query","description":"Fecha de inscripción hasta","schema":{"format":"date-time","type":"string"}},{"name":"page","required":false,"in":"query","description":"Página","schema":{"minimum":1,"default":1,"type":"number"}},{"name":"limit","required":false,"in":"query","description":"Elementos por página","schema":{"minimum":1,"maximum":100,"default":10,"type":"number"}},{"name":"select","required":false,"in":"query","description":"Columnas especificas a retornar (separadas por coma)","schema":{"example":"id,studentName,courseName,status,grade,attendance","type":"string"}}],"responses":{"200":{"description":"Lista de inscripciones obtenida exitosamente."}},"security":[{"bearer":[]}],"summary":"Obtener lista de inscripciones con filtros","tags":["Discipleship Enrollments"]}},"/discipleship/enrollments/payments/sync-failures":{"get":{"operationId":"DiscipleshipEnrollmentsController_getPaymentSyncFailures","parameters":[],"responses":{"200":{"description":"Fallos pendientes obtenidos exitosamente."}},"security":[{"bearer":[]}],"summary":"Listar fallos pendientes de sincronización de pagos","tags":["Discipleship Enrollments"]}},"/discipleship/enrollments/payments/financial-report":{"get":{"operationId":"DiscipleshipEnrollmentsController_getFinancialReport","parameters":[{"name":"courseId","required":false,"in":"query","description":"Filtrar por curso","schema":{"type":"number"}},{"name":"periodId","required":false,"in":"query","description":"Filtrar por periodo","schema":{"type":"number"}},{"name":"studentType","required":false,"in":"query","description":"Filtrar por tipo de estudiante","schema":{"type":"string","enum":["MIEMBRO","NUEVO_CREYENTE","VISITANTE","EX_MIEMBRO"]}},{"name":"paymentStatus","required":false,"in":"query","description":"Filtrar por estado de pago","schema":{"type":"string","enum":["PENDING","PARTIAL","PAID","OVERDUE","WAIVED","REFUNDED"]}}],"responses":{"200":{"description":"Reporte financiero obtenido exitosamente."}},"security":[{"bearer":[]}],"summary":"Obtener reporte financiero básico de Discipleship","tags":["Discipleship Enrollments"]}},"/discipleship/enrollments/payments/financial-report/export":{"get":{"operationId":"DiscipleshipEnrollmentsController_exportFinancialReport","parameters":[{"name":"courseId","required":false,"in":"query","description":"Filtrar por curso","schema":{"type":"number"}},{"name":"periodId","required":false,"in":"query","description":"Filtrar por periodo","schema":{"type":"number"}},{"name":"studentType","required":false,"in":"query","description":"Filtrar por tipo de estudiante","schema":{"type":"string","enum":["MIEMBRO","NUEVO_CREYENTE","VISITANTE","EX_MIEMBRO"]}},{"name":"paymentStatus","required":false,"in":"query","description":"Filtrar por estado de pago","schema":{"type":"string","enum":["PENDING","PARTIAL","PAID","OVERDUE","WAIVED","REFUNDED"]}},{"name":"format","required":true,"in":"query","schema":{"type":"string"}}],"responses":{"200":{"description":"Reporte financiero exportado exitosamente."}},"security":[{"bearer":[]}],"summary":"Exportar reporte financiero de Discipleship","tags":["Discipleship Enrollments"]}},"/discipleship/enrollments/academic-report":{"get":{"operationId":"DiscipleshipEnrollmentsController_getAcademicReport","parameters":[{"name":"courseId","required":false,"in":"query","description":"Filtrar por curso","schema":{"type":"number"}},{"name":"periodId","required":false,"in":"query","description":"Filtrar por periodo","schema":{"type":"number"}},{"name":"studentType","required":false,"in":"query","description":"Filtrar por tipo de estudiante","schema":{"type":"string","enum":["MIEMBRO","NUEVO_CREYENTE","VISITANTE","EX_MIEMBRO"]}},{"name":"status","required":false,"in":"query","description":"Filtrar por estado de inscripcion","schema":{"type":"string","enum":["INSCRITO","CONFIRMADO","EN_PROGRESO","APROBADO","REPROBADO","RETIRADO","CANCELADO","TRANSFERIDO"]}}],"responses":{"200":{"description":"Reporte academico obtenido exitosamente."}},"security":[{"bearer":[]}],"summary":"Obtener reporte academico canonico de Discipleship","tags":["Discipleship Enrollments"]}},"/discipleship/enrollments/dashboard-summary":{"get":{"operationId":"DiscipleshipEnrollmentsController_getDashboardSummary","parameters":[],"responses":{"200":{"description":"Resumen operativo obtenido exitosamente."}},"security":[{"bearer":[]}],"summary":"Obtener resumen operativo canonico de Discipulado","tags":["Discipleship Enrollments"]}},"/discipleship/enrollments/academic-report/export":{"get":{"operationId":"DiscipleshipEnrollmentsController_exportAcademicReport","parameters":[{"name":"courseId","required":false,"in":"query","description":"Filtrar por curso","schema":{"type":"number"}},{"name":"periodId","required":false,"in":"query","description":"Filtrar por periodo","schema":{"type":"number"}},{"name":"studentType","required":false,"in":"query","description":"Filtrar por tipo de estudiante","schema":{"type":"string","enum":["MIEMBRO","NUEVO_CREYENTE","VISITANTE","EX_MIEMBRO"]}},{"name":"status","required":false,"in":"query","description":"Filtrar por estado de inscripcion","schema":{"type":"string","enum":["INSCRITO","CONFIRMADO","EN_PROGRESO","APROBADO","REPROBADO","RETIRADO","CANCELADO","TRANSFERIDO"]}},{"name":"format","required":true,"in":"query","schema":{"type":"string"}}],"responses":{"200":{"description":"Reporte academico exportado exitosamente."}},"security":[{"bearer":[]}],"summary":"Exportar reporte academico canonico de Discipleship","tags":["Discipleship Enrollments"]}},"/discipleship/enrollments/payments/sync-failures/{failureId}/resolve":{"post":{"operationId":"DiscipleshipEnrollmentsController_resolvePaymentSyncFailure","parameters":[{"name":"failureId","required":true,"in":"path","schema":{"type":"number"}}],"responses":{"200":{"description":"Fallo resuelto exitosamente."}},"security":[{"bearer":[]}],"summary":"Resolver manualmente un fallo de sincronización de pago","tags":["Discipleship Enrollments"]}},"/discipleship/enrollments/{id}":{"get":{"operationId":"DiscipleshipEnrollmentsController_findOne","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"number"}}],"responses":{"200":{"description":"Inscripción encontrada exitosamente."},"404":{"description":"Inscripción no encontrada."}},"security":[{"bearer":[]}],"summary":"Obtener inscripción específica por ID","tags":["Discipleship Enrollments"]},"patch":{"operationId":"DiscipleshipEnrollmentsController_update","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"number"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateDiscipleshipEnrollmentDto"}}}},"responses":{"200":{"description":"Inscripción actualizada exitosamente."},"404":{"description":"Inscripción no encontrada."}},"security":[{"bearer":[]}],"summary":"Actualizar inscripción","tags":["Discipleship Enrollments"]},"delete":{"operationId":"DiscipleshipEnrollmentsController_remove","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"number"}}],"responses":{"200":{"description":"Inscripción cancelada exitosamente."},"404":{"description":"Inscripción no encontrada."}},"security":[{"bearer":[]}],"summary":"Cancelar inscripción sin eliminar su historial","tags":["Discipleship Enrollments"]}},"/discipleship/enrollments/{id}/progress":{"get":{"operationId":"DiscipleshipEnrollmentsController_getProgress","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"number"}}],"responses":{"200":{"description":"Progreso obtenido exitosamente."}},"security":[{"bearer":[]}],"summary":"Obtener progreso del estudiante en el curso","tags":["Discipleship Enrollments"]}},"/discipleship/enrollments/{id}/financial-status":{"get":{"operationId":"DiscipleshipEnrollmentsController_getFinancialStatus","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"number"}}],"responses":{"200":{"description":"Estado financiero obtenido exitosamente."}},"security":[{"bearer":[]}],"summary":"Obtener estado financiero de la inscripción","tags":["Discipleship Enrollments"]}},"/discipleship/enrollments/payments/reconcile":{"post":{"operationId":"DiscipleshipEnrollmentsController_reconcilePaymentCandidates","parameters":[],"responses":{"200":{"description":"Conciliación ejecutada exitosamente."}},"security":[{"bearer":[]}],"summary":"Reconciliar pagos vinculados a inscripciones de discipulado","tags":["Discipleship Enrollments"]}},"/discipleship/enrollments/{id}/payment/reconcile":{"post":{"operationId":"DiscipleshipEnrollmentsController_reconcileEnrollmentPayment","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"number"}}],"responses":{"200":{"description":"Conciliación ejecutada exitosamente."}},"security":[{"bearer":[]}],"summary":"Reconciliar pagos de una inscripción","tags":["Discipleship Enrollments"]}},"/discipleship/enrollments/{id}/payment-link":{"post":{"operationId":"DiscipleshipEnrollmentsController_createPaymentLink","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"number"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateDiscipleshipPaymentLinkDto"}}}},"responses":{"201":{"description":"Link de pago generado exitosamente."},"400":{"description":"La inscripción no tiene saldo pagable o el monto es inválido."}},"security":[{"bearer":[]}],"summary":"Generar link de pago para una inscripción","tags":["Discipleship Enrollments"]}},"/discipleship/enrollments/{id}/payment":{"post":{"operationId":"DiscipleshipEnrollmentsController_makePayment","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"number"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RegisterDiscipleshipPaymentDto"}}}},"responses":{"200":{"description":"Pago registrado exitosamente."},"400":{"description":"Datos de pago inválidos."}},"security":[{"bearer":[]}],"summary":"Registrar pago para inscripción","tags":["Discipleship Enrollments"]}},"/discipleship/enrollments/{id}/scholarship":{"post":{"operationId":"DiscipleshipEnrollmentsController_applyScholarship","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"number"}}],"responses":{"200":{"description":"Beca aplicada exitosamente."},"400":{"description":"Porcentaje de beca inválido."}},"security":[{"bearer":[]}],"summary":"Aplicar beca a inscripción","tags":["Discipleship Enrollments"]}},"/discipleship/enrollments/{id}/academic-grades":{"patch":{"operationId":"DiscipleshipEnrollmentsController_updateAcademicGrades","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"number"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateAcademicGradesDto"}}}},"responses":{"200":{"description":"Notas academicas actualizadas exitosamente."},"400":{"description":"Resultado academico incompleto para finalizacion."},"404":{"description":"Inscripción no encontrada."}},"security":[{"bearer":[]}],"summary":"Actualizar notas academicas canonicas de una inscripcion","tags":["Discipleship Enrollments"]}},"/discipleship/enrollments/{id}/status":{"patch":{"operationId":"DiscipleshipEnrollmentsController_updateStatus","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"number"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateDiscipleshipEnrollmentStatusDto"}}}},"responses":{"200":{"description":"Estado actualizado exitosamente."}},"security":[{"bearer":[]}],"summary":"Cambiar estado de inscripción","tags":["Discipleship Enrollments"]}},"/discipleship/enrollments/students/list":{"get":{"operationId":"DiscipleshipEnrollmentsController_findAllWithStudents","parameters":[{"name":"search","required":false,"in":"query","description":"Buscar por nombre de estudiante","schema":{"type":"string"}},{"name":"courseId","required":false,"in":"query","description":"Filtrar por curso","schema":{"type":"number"}},{"name":"periodId","required":false,"in":"query","description":"Filtrar por período","schema":{"type":"number"}},{"name":"studentType","required":false,"in":"query","description":"Filtrar por tipo de estudiante","schema":{"type":"string","enum":["MIEMBRO","NUEVO_CREYENTE","VISITANTE","EX_MIEMBRO"]}},{"name":"status","required":false,"in":"query","description":"Filtrar por estado","schema":{"type":"string","enum":["INSCRITO","CONFIRMADO","EN_PROGRESO","APROBADO","REPROBADO","RETIRADO","CANCELADO","TRANSFERIDO"]}},{"name":"memberId","required":false,"in":"query","description":"Filtrar por miembro","schema":{"type":"number"}},{"name":"active","required":false,"in":"query","description":"Solo inscripciones activas","schema":{"type":"boolean"}},{"name":"pendingCertificate","required":false,"in":"query","description":"Solo inscripciones con certificado pendiente","schema":{"type":"boolean"}},{"name":"minGrade","required":false,"in":"query","description":"Nota mínima","schema":{"type":"number"}},{"name":"minAttendance","required":false,"in":"query","description":"Asistencia mínima","schema":{"type":"number"}},{"name":"enrollmentDateFrom","required":false,"in":"query","description":"Fecha de inscripción desde","schema":{"format":"date-time","type":"string"}},{"name":"enrollmentDateTo","required":false,"in":"query","description":"Fecha de inscripción hasta","schema":{"format":"date-time","type":"string"}},{"name":"page","required":false,"in":"query","description":"Página","schema":{"minimum":1,"default":1,"type":"number"}},{"name":"limit","required":false,"in":"query","description":"Elementos por página","schema":{"minimum":1,"maximum":100,"default":10,"type":"number"}},{"name":"select","required":false,"in":"query","description":"Columnas especificas a retornar (separadas por coma)","schema":{"example":"id,studentName,courseName,status,grade,attendance","type":"string"}}],"responses":{"200":{"description":"Lista de inscripciones con estudiantes obtenida exitosamente.","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/EnrollmentWithStudentDto"}}}}}},"security":[{"bearer":[]}],"summary":"Obtener inscripciones con información unificada de estudiantes","tags":["Discipleship Enrollments"]}},"/discipleship/enrollments/{id}/student":{"get":{"operationId":"DiscipleshipEnrollmentsController_getStudentInfo","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"number"}}],"responses":{"200":{"description":"Información del estudiante obtenida exitosamente.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StudentInfoDto"}}}},"404":{"description":"Inscripción no encontrada."}},"security":[{"bearer":[]}],"summary":"Obtener información del estudiante de una inscripción","tags":["Discipleship Enrollments"]}},"/discipleship/enrollments/{id}/with-student":{"get":{"operationId":"DiscipleshipEnrollmentsController_findOneWithStudent","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"number"}}],"responses":{"200":{"description":"Inscripción con estudiante obtenida exitosamente.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/EnrollmentWithStudentDto"}}}},"404":{"description":"Inscripción no encontrada."}},"security":[{"bearer":[]}],"summary":"Obtener inscripción con información completa del estudiante","tags":["Discipleship Enrollments"]}},"/discipleship/enrollments/course/{courseId}/students":{"get":{"operationId":"DiscipleshipEnrollmentsController_getStudentsByCourse","parameters":[{"name":"courseId","required":true,"in":"path","schema":{"type":"number"}}],"responses":{"200":{"description":"Lista de estudiantes obtenida exitosamente.","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/StudentSummaryDto"}}}}}},"security":[{"bearer":[]}],"summary":"Obtener lista de estudiantes únicos de un curso","tags":["Discipleship Enrollments"]}},"/discipleship/enrollments/course/{courseId}/validate-student-type/{studentType}":{"get":{"operationId":"DiscipleshipEnrollmentsController_validateStudentType","parameters":[{"name":"courseId","required":true,"in":"path","schema":{"type":"number"}},{"name":"studentType","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":"Validación realizada exitosamente."}},"security":[{"bearer":[]}],"summary":"Validar si un tipo de estudiante puede inscribirse en un curso","tags":["Discipleship Enrollments"]}},"/discipleship/enrollments/with-validation":{"post":{"operationId":"DiscipleshipEnrollmentsController_createWithValidation","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateDiscipleshipEnrollmentDto"}}}},"responses":{"201":{"description":"Inscripción creada exitosamente.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/EnrollmentWithStudentDto"}}}},"400":{"description":"Tipo de estudiante no permitido o datos inválidos."},"409":{"description":"El estudiante ya está inscrito en este curso."}},"security":[{"bearer":[]}],"summary":"Crear inscripción con validación de tipo de estudiante","tags":["Discipleship Enrollments"]}},"/discipleship/students/candidates":{"get":{"operationId":"DiscipleshipStudentsController_searchCandidates","parameters":[{"name":"search","required":true,"in":"query","description":"Texto de busqueda: nombre, documento, telefono, email, codigo de miembro o id R1/externo","schema":{"type":"string"}},{"name":"limit","required":false,"in":"query","description":"Limite de resultados por fuente","schema":{"minimum":1,"maximum":50,"default":20,"type":"number"}},{"name":"studentType","required":false,"in":"query","description":"Filtrar por tipo de estudiante esperado","schema":{"type":"string","enum":["MIEMBRO","NUEVO_CREYENTE","VISITANTE","EX_MIEMBRO"]}},{"name":"church","required":false,"in":"query","description":"Filtrar miembros/nuevos creyentes por localidad/iglesia","schema":{"type":"string"}},{"name":"includeInactive","required":false,"in":"query","description":"Incluir candidatos inactivos","schema":{"default":true,"type":"boolean"}}],"responses":{"200":{"description":"Candidatos obtenidos exitosamente.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DiscipleshipStudentCandidateListDto"}}}}},"security":[{"bearer":[]}],"summary":"Buscar candidatos para inscripcion en Discipleship","tags":["Discipleship Students"]}},"/discipleship/meetings":{"post":{"operationId":"DiscipleshipMeetingsController_create","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateDiscipleshipMeetingDto"}}}},"responses":{"201":{"description":"Reunion creada exitosamente."},"400":{"description":"Proveedor o datos de reunion invalidos."},"404":{"description":"Curso o periodo no encontrado."}},"security":[{"bearer":[]}],"summary":"Crear reunion virtual o externa de discipulado","tags":["Discipleship Meetings"]},"get":{"operationId":"DiscipleshipMeetingsController_findAll","parameters":[{"name":"courseId","required":false,"in":"query","description":"Filtrar por curso","schema":{"type":"number"}},{"name":"periodId","required":false,"in":"query","description":"Filtrar por periodo","schema":{"type":"number"}},{"name":"provider","required":false,"in":"query","schema":{"type":"string","enum":["JITSI","ZOOM","GOOGLE_MEET","EXTERNAL"]}},{"name":"status","required":false,"in":"query","schema":{"type":"string","enum":["SCHEDULED","CANCELLED","COMPLETED"]}},{"name":"page","required":false,"in":"query","description":"Pagina","schema":{"minimum":1,"default":1,"type":"number"}},{"name":"limit","required":false,"in":"query","description":"Elementos por pagina","schema":{"minimum":1,"maximum":100,"default":20,"type":"number"}}],"responses":{"200":{"description":"Reuniones obtenidas exitosamente."}},"security":[{"bearer":[]}],"summary":"Listar reuniones de discipulado","tags":["Discipleship Meetings"]}},"/discipleship/meetings/{id}":{"get":{"operationId":"DiscipleshipMeetingsController_findOne","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"number"}}],"responses":{"200":{"description":"Reunion encontrada exitosamente."},"404":{"description":"Reunion no encontrada."}},"security":[{"bearer":[]}],"summary":"Obtener reunion de discipulado por ID","tags":["Discipleship Meetings"]},"patch":{"operationId":"DiscipleshipMeetingsController_update","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"number"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateDiscipleshipMeetingDto"}}}},"responses":{"200":{"description":"Reunion actualizada exitosamente."}},"security":[{"bearer":[]}],"summary":"Actualizar reunion de discipulado","tags":["Discipleship Meetings"]}},"/discipleship/meetings/{id}/join-url":{"get":{"operationId":"DiscipleshipMeetingsController_getJoinUrl","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"number"}}],"responses":{"200":{"description":"URL obtenida exitosamente."}},"security":[{"bearer":[]}],"summary":"Obtener URL de acceso para estudiante","tags":["Discipleship Meetings"]}},"/discipleship/meetings/{id}/host-url":{"get":{"operationId":"DiscipleshipMeetingsController_getHostUrl","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"number"}}],"responses":{"200":{"description":"URL administrativa obtenida exitosamente."}},"security":[{"bearer":[]}],"summary":"Obtener URL administrativa para facilitador","tags":["Discipleship Meetings"]}},"/discipleship/meetings/{id}/cancel":{"post":{"operationId":"DiscipleshipMeetingsController_cancel","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"number"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CancelDiscipleshipMeetingDto"}}}},"responses":{"200":{"description":"Reunion cancelada exitosamente."}},"security":[{"bearer":[]}],"summary":"Cancelar reunion de discipulado","tags":["Discipleship Meetings"]}},"/discipleship/sessions":{"post":{"operationId":"DiscipleshipCourseSessionsController_create","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateDiscipleshipCourseSessionDto"}}}},"responses":{"201":{"description":"Sesion creada exitosamente."}},"security":[{"bearer":[]}],"summary":"Crear sesion canonica de curso de discipulado","tags":["Discipleship Course Sessions"]},"get":{"operationId":"DiscipleshipCourseSessionsController_findAll","parameters":[{"name":"courseId","required":false,"in":"query","description":"Filtrar por curso","schema":{"type":"number"}},{"name":"periodId","required":false,"in":"query","description":"Filtrar por periodo","schema":{"type":"number"}},{"name":"modality","required":false,"in":"query","schema":{"type":"string","enum":["PRESENCIAL","VIRTUAL","HIBRIDA"]}},{"name":"status","required":false,"in":"query","schema":{"type":"string","enum":["SCHEDULED","COMPLETED","CANCELLED"]}},{"name":"page","required":false,"in":"query","description":"Pagina","schema":{"minimum":1,"default":1,"type":"number"}},{"name":"limit","required":false,"in":"query","description":"Elementos por pagina","schema":{"minimum":1,"maximum":100,"default":20,"type":"number"}}],"responses":{"200":{"description":"Sesiones obtenidas exitosamente."}},"security":[{"bearer":[]}],"summary":"Listar sesiones de cursos de discipulado","tags":["Discipleship Course Sessions"]}},"/discipleship/sessions/{id}":{"get":{"operationId":"DiscipleshipCourseSessionsController_findOne","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"number"}}],"responses":{"200":{"description":"Sesion encontrada exitosamente."}},"security":[{"bearer":[]}],"summary":"Obtener sesion de curso por ID","tags":["Discipleship Course Sessions"]},"patch":{"operationId":"DiscipleshipCourseSessionsController_update","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"number"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateDiscipleshipCourseSessionDto"}}}},"responses":{"200":{"description":"Sesion actualizada exitosamente."}},"security":[{"bearer":[]}],"summary":"Actualizar sesion de curso","tags":["Discipleship Course Sessions"]}},"/discipleship/sessions/{id}/cancel":{"post":{"operationId":"DiscipleshipCourseSessionsController_cancel","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"number"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CancelDiscipleshipCourseSessionDto"}}}},"responses":{"200":{"description":"Sesion cancelada exitosamente."}},"security":[{"bearer":[]}],"summary":"Cancelar sesion de curso","tags":["Discipleship Course Sessions"]}},"/discipleship/sessions/{id}/complete":{"post":{"operationId":"DiscipleshipCourseSessionsController_complete","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"number"}}],"responses":{"200":{"description":"Sesion completada exitosamente."}},"security":[{"bearer":[]}],"summary":"Marcar sesion como completada","tags":["Discipleship Course Sessions"]}},"/discipleship/periods":{"get":{"operationId":"DiscipleshipPeriodsController_findAll","parameters":[{"name":"search","required":false,"in":"query","description":"Buscar por nombre","schema":{"type":"string"}},{"name":"year","required":false,"in":"query","description":"Filtrar por año","schema":{"type":"number"}},{"name":"semestre","required":false,"in":"query","description":"Filtrar por semestre","schema":{"type":"number"}},{"name":"status","required":false,"in":"query","description":"Filtrar por estado","schema":{"type":"string","enum":["PLANIFICADO","ACTIVO","EN_PROGRESO","COMPLETADO","CANCELADO","SUSPENDIDO"]}},{"name":"activo","required":false,"in":"query","description":"Solo períodos activos","schema":{"type":"boolean"}},{"name":"actual","required":false,"in":"query","description":"Solo períodos actuales","schema":{"type":"boolean"}},{"name":"inscripcionesAbiertas","required":false,"in":"query","description":"Con inscripciones abiertas","schema":{"type":"boolean"}},{"name":"page","required":false,"in":"query","description":"Página","schema":{"minimum":1,"default":1,"type":"number"}},{"name":"limit","required":false,"in":"query","description":"Elementos por página","schema":{"minimum":1,"maximum":100,"default":10,"type":"number"}}],"responses":{"200":{"description":"Periodos obtenidos exitosamente."}},"security":[{"bearer":[]}],"summary":"Listar periodos disponibles para la operación académica","tags":["Discipleship Periods"]}},"/discipleship/periods/current":{"get":{"operationId":"DiscipleshipPeriodsController_findCurrent","parameters":[],"responses":{"200":{"description":"Periodo actual obtenido exitosamente."}},"security":[{"bearer":[]}],"summary":"Obtener el periodo académico actual","tags":["Discipleship Periods"]}},"/discipleship/periods/{id}":{"get":{"operationId":"DiscipleshipPeriodsController_findOne","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"number"}}],"responses":{"200":{"description":"Periodo obtenido exitosamente."},"404":{"description":"Periodo no encontrado."}},"security":[{"bearer":[]}],"summary":"Obtener un periodo académico por ID","tags":["Discipleship Periods"]}},"/discipleship/attendance/sessions/{sessionId}":{"post":{"operationId":"DiscipleshipAttendanceController_upsertSessionAttendance","parameters":[{"name":"sessionId","required":true,"in":"path","schema":{"type":"number"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpsertDiscipleshipSessionAttendanceDto"}}}},"responses":{"200":{"description":"Asistencia registrada exitosamente."}},"security":[{"bearer":[]}],"summary":"Registrar o actualizar asistencia de una sesion","tags":["Discipleship Attendance"]},"get":{"operationId":"DiscipleshipAttendanceController_findBySession","parameters":[{"name":"sessionId","required":true,"in":"path","schema":{"type":"number"}}],"responses":{"200":{"description":"Asistencia obtenida exitosamente."}},"security":[{"bearer":[]}],"summary":"Listar asistencia de una sesion","tags":["Discipleship Attendance"]}},"/discipleship/attendance/meetings/{meetingId}":{"post":{"operationId":"DiscipleshipAttendanceController_upsertMeetingAttendance","parameters":[{"name":"meetingId","required":true,"in":"path","schema":{"type":"number"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpsertDiscipleshipMeetingAttendanceDto"}}}},"responses":{"200":{"description":"Asistencia de reunion registrada exitosamente."}},"security":[{"bearer":[]}],"summary":"Registrar asistencia desde una reunion vinculada a sesion canonica","tags":["Discipleship Attendance"]},"get":{"operationId":"DiscipleshipAttendanceController_findByMeeting","parameters":[{"name":"meetingId","required":true,"in":"path","schema":{"type":"number"}}],"responses":{"200":{"description":"Asistencia de reunion obtenida exitosamente."}},"security":[{"bearer":[]}],"summary":"Listar asistencia de una reunion vinculada a sesion canonica","tags":["Discipleship Attendance"]}},"/discipleship/attendance/report":{"get":{"operationId":"DiscipleshipAttendanceController_getAttendanceReport","parameters":[{"name":"courseId","required":false,"in":"query","description":"Filtrar por curso","schema":{"type":"number"}},{"name":"periodId","required":false,"in":"query","description":"Filtrar por periodo","schema":{"type":"number"}},{"name":"sessionId","required":false,"in":"query","description":"Filtrar por sesion","schema":{"type":"number"}},{"name":"enrollmentId","required":false,"in":"query","description":"Filtrar por inscripcion","schema":{"type":"number"}}],"responses":{"200":{"description":"Reporte de asistencia obtenido exitosamente."}},"security":[{"bearer":[]}],"summary":"Obtener reporte agregado de asistencia","tags":["Discipleship Attendance"]}},"/discipleship/attendance/report/export":{"get":{"operationId":"DiscipleshipAttendanceController_exportAttendanceReport","parameters":[{"name":"courseId","required":false,"in":"query","description":"Filtrar por curso","schema":{"type":"number"}},{"name":"periodId","required":false,"in":"query","description":"Filtrar por periodo","schema":{"type":"number"}},{"name":"sessionId","required":false,"in":"query","description":"Filtrar por sesion","schema":{"type":"number"}},{"name":"enrollmentId","required":false,"in":"query","description":"Filtrar por inscripcion","schema":{"type":"number"}},{"name":"format","required":true,"in":"query","schema":{"type":"string"}}],"responses":{"200":{"description":"Reporte de asistencia exportado exitosamente."}},"security":[{"bearer":[]}],"summary":"Exportar reporte agregado de asistencia","tags":["Discipleship Attendance"]}},"/discipleship/attendance/enrollments/{enrollmentId}":{"get":{"operationId":"DiscipleshipAttendanceController_findByEnrollment","parameters":[{"name":"enrollmentId","required":true,"in":"path","schema":{"type":"number"}}],"responses":{"200":{"description":"Asistencia obtenida exitosamente."}},"security":[{"bearer":[]}],"summary":"Listar asistencia de una inscripcion","tags":["Discipleship Attendance"]}},"/discipleship/attendance/{id}":{"delete":{"operationId":"DiscipleshipAttendanceController_remove","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"number"}}],"responses":{"200":{"description":"Asistencia eliminada exitosamente."}},"security":[{"bearer":[]}],"summary":"Eliminar registro de asistencia","tags":["Discipleship Attendance"]}},"/discipleship/certificates/enrollments/{enrollmentId}":{"post":{"operationId":"DiscipleshipCertificatesController_generateForEnrollment","parameters":[{"name":"enrollmentId","required":true,"in":"path","schema":{"type":"number"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GenerateEnrollmentCertificateDto"}}}},"responses":{"201":{"description":"Certificado generado exitosamente."},"400":{"description":"La inscripcion no cumple los requisitos del certificado."},"409":{"description":"Ya existe un certificado vigente para la inscripcion."}},"security":[{"bearer":[]}],"summary":"Generar certificado desde una inscripcion aprobada","tags":["Discipleship Certificates"]}},"/discipleship/certificates":{"get":{"operationId":"DiscipleshipCertificatesController_findAll","parameters":[{"name":"search","required":false,"in":"query","description":"Buscar por número de certificado o nombre de estudiante","schema":{"type":"string"}},{"name":"courseId","required":false,"in":"query","description":"Filtrar por curso","schema":{"type":"number"}},{"name":"periodId","required":false,"in":"query","description":"Filtrar por período","schema":{"type":"number"}},{"name":"status","required":false,"in":"query","description":"Filtrar por estado","schema":{"type":"string","enum":["PENDIENTE","GENERADO","ENTREGADO","ANULADO","REIMPRESO"]}},{"name":"certificateType","required":false,"in":"query","description":"Filtrar por tipo","schema":{"type":"string","enum":["CURSO_INDIVIDUAL","NIVEL_COMPLETO","PROGRAMA_COMPLETO","PARTICIPACION"]}},{"name":"memberId","required":false,"in":"query","description":"Filtrar por miembro","schema":{"type":"number"}},{"name":"valid","required":false,"in":"query","description":"Solo certificados válidos","schema":{"type":"boolean"}},{"name":"delivered","required":false,"in":"query","description":"Solo certificados entregados","schema":{"type":"boolean"}},{"name":"pendingDelivery","required":false,"in":"query","description":"Solo certificados pendientes de entrega","schema":{"type":"boolean"}},{"name":"issuedDateFrom","required":false,"in":"query","description":"Fecha de emisión desde","schema":{"format":"date-time","type":"string"}},{"name":"issuedDateTo","required":false,"in":"query","description":"Fecha de emisión hasta","schema":{"format":"date-time","type":"string"}},{"name":"page","required":false,"in":"query","description":"Página","schema":{"minimum":1,"default":1,"type":"number"}},{"name":"limit","required":false,"in":"query","description":"Elementos por página","schema":{"minimum":1,"maximum":100,"default":10,"type":"number"}}],"responses":{"200":{"description":"Certificados obtenidos exitosamente."}},"security":[{"bearer":[]}],"summary":"Listar certificados de Discipleship","tags":["Discipleship Certificates"]}},"/discipleship/certificates/{id}":{"get":{"operationId":"DiscipleshipCertificatesController_findOne","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"number"}}],"responses":{"200":{"description":"Certificado obtenido exitosamente."},"404":{"description":"Certificado no encontrado."}},"security":[{"bearer":[]}],"summary":"Obtener certificado por ID","tags":["Discipleship Certificates"]}},"/discipleship/certificates/{id}/download":{"get":{"operationId":"DiscipleshipCertificatesController_downloadPdf","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"number"}}],"responses":{"200":{"description":"PDF del certificado descargado exitosamente."},"400":{"description":"El certificado no tiene PDF generado."}},"security":[{"bearer":[]}],"summary":"Descargar PDF privado del certificado","tags":["Discipleship Certificates"]}},"/discipleship/certificates/{id}/email":{"post":{"operationId":"DiscipleshipCertificatesController_queueEmail","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"number"}}],"responses":{"201":{"description":"Envio del certificado encolado u omitido segun disponibilidad de email."},"400":{"description":"El certificado no tiene PDF generado."}},"security":[{"bearer":[]}],"summary":"Encolar envio por correo del certificado","tags":["Discipleship Certificates"]}},"/discipleship/certificates/{id}/regenerate-pdf":{"post":{"operationId":"DiscipleshipCertificatesController_regeneratePdf","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"number"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CertificateRegeneratePdfDto"}}}},"responses":{"201":{"description":"PDF oficial regenerado y auditado."},"400":{"description":"Motivo de regeneracion requerido."}},"security":[{"bearer":[]}],"summary":"Regenerar PDF oficial del certificado","tags":["Discipleship Certificates"]}},"/discipleship/certificates/{id}/deliver":{"patch":{"operationId":"DiscipleshipCertificatesController_deliver","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"number"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CertificateDeliveryDto"}}}},"responses":{"200":{"description":"Entrega registrada exitosamente."}},"security":[{"bearer":[]}],"summary":"Registrar entrega de certificado","tags":["Discipleship Certificates"]}},"/discipleship/certificates/{id}/void":{"patch":{"operationId":"DiscipleshipCertificatesController_void","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"number"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CertificateVoidDto"}}}},"responses":{"200":{"description":"Certificado anulado exitosamente."}},"security":[{"bearer":[]}],"summary":"Anular certificado","tags":["Discipleship Certificates"]}},"/discipleship/certificates/{id}/reprint":{"patch":{"operationId":"DiscipleshipCertificatesController_reprint","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"number"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CertificateReprintDto"}}}},"responses":{"200":{"description":"Reimpresion registrada exitosamente."}},"security":[{"bearer":[]}],"summary":"Registrar reimpresion de certificado","tags":["Discipleship Certificates"]}},"/discipleship/certificate-templates":{"post":{"operationId":"DiscipleshipCertificateTemplatesController_create","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateDiscipleshipCertificateTemplateDto"}}}},"responses":{"201":{"description":"Template creado exitosamente."},"409":{"description":"Version duplicada o vigencia solapada."}},"security":[{"bearer":[]}],"summary":"Crear template oficial de certificado","tags":["Discipleship Certificate Templates"]},"get":{"operationId":"DiscipleshipCertificateTemplatesController_findAll","parameters":[{"name":"search","required":false,"in":"query","description":"Busqueda por codigo, nombre o version","schema":{"type":"string"}},{"name":"status","required":false,"in":"query","schema":{"type":"string","enum":["ACTIVE","INACTIVE","ARCHIVED"]}},{"name":"courseId","required":false,"in":"query","description":"Filtrar por curso","schema":{"type":"number"}},{"name":"periodId","required":false,"in":"query","description":"Filtrar por periodo","schema":{"type":"number"}},{"name":"churchId","required":false,"in":"query","description":"Filtrar por iglesia/localidad institucional","schema":{"type":"number"}},{"name":"localityCode","required":false,"in":"query","description":"Filtrar por codigo de localidad","schema":{"type":"string"}},{"name":"activeAt","required":false,"in":"query","description":"Templates vigentes en esta fecha","schema":{"type":"string"}},{"name":"page","required":false,"in":"query","description":"Pagina","schema":{"minimum":1,"default":1,"type":"number"}},{"name":"limit","required":false,"in":"query","description":"Elementos por pagina","schema":{"minimum":1,"maximum":100,"default":20,"type":"number"}}],"responses":{"200":{"description":"Templates obtenidos exitosamente."}},"security":[{"bearer":[]}],"summary":"Listar templates oficiales de certificados","tags":["Discipleship Certificate Templates"]}},"/discipleship/certificate-templates/{id}":{"get":{"operationId":"DiscipleshipCertificateTemplatesController_findOne","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"number"}}],"responses":{"200":{"description":"Template obtenido exitosamente."},"404":{"description":"Template no encontrado."}},"security":[{"bearer":[]}],"summary":"Obtener template oficial de certificado","tags":["Discipleship Certificate Templates"]},"patch":{"operationId":"DiscipleshipCertificateTemplatesController_update","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"number"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateDiscipleshipCertificateTemplateDto"}}}},"responses":{"200":{"description":"Template actualizado exitosamente."},"409":{"description":"Version duplicada o vigencia solapada."}},"security":[{"bearer":[]}],"summary":"Actualizar template oficial de certificado","tags":["Discipleship Certificate Templates"]},"delete":{"operationId":"DiscipleshipCertificateTemplatesController_archive","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"number"}}],"responses":{"200":{"description":"Template archivado exitosamente."}},"security":[{"bearer":[]}],"summary":"Archivar template oficial de certificado","tags":["Discipleship Certificate Templates"]}},"/discipleship/certificate-access-tokens":{"get":{"operationId":"DiscipleshipCertificateAccessTokensController_findAll","parameters":[{"name":"certificateId","required":false,"in":"query","description":"Filtrar por certificado","schema":{"type":"number"}},{"name":"email","required":false,"in":"query","description":"Filtrar por correo receptor","schema":{"type":"string"}},{"name":"status","required":false,"in":"query","schema":{"type":"string","enum":["ACTIVE","REVOKED"]}},{"name":"operationalStatus","required":false,"in":"query","schema":{"type":"string","enum":["ACTIVE","USED","EXPIRED","REVOKED"]}},{"name":"page","required":false,"in":"query","description":"Pagina","schema":{"minimum":1,"default":1,"type":"number"}},{"name":"limit","required":false,"in":"query","description":"Elementos por pagina","schema":{"minimum":1,"maximum":100,"default":20,"type":"number"}}],"responses":{"200":{"description":"Tokens obtenidos exitosamente."}},"security":[{"bearer":[]}],"summary":"Listar tokens de acceso publico a certificados","tags":["Discipleship Certificate Access Tokens"]}},"/discipleship/certificate-access-tokens/{id}/revoke":{"patch":{"operationId":"DiscipleshipCertificateAccessTokensController_revoke","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"number"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CertificatePublicAccessTokenRevokeDto"}}}},"responses":{"200":{"description":"Token revocado exitosamente."},"404":{"description":"Token no encontrado."}},"security":[{"bearer":[]}],"summary":"Revocar token de acceso publico a certificado","tags":["Discipleship Certificate Access Tokens"]}},"/discipleship/self-service/overview":{"get":{"operationId":"DiscipleshipSelfServiceController_getOverview","parameters":[],"responses":{"200":{"description":"Resumen propio obtenido exitosamente."}},"security":[{"bearer":[]}],"summary":"Obtener resumen propio de Discipleship","tags":["Discipleship Self Service"]}},"/discipleship/self-service/enrollments":{"get":{"operationId":"DiscipleshipSelfServiceController_getEnrollments","parameters":[],"responses":{"200":{"description":"Inscripciones propias obtenidas exitosamente."}},"security":[{"bearer":[]}],"summary":"Listar mis inscripciones de Discipleship","tags":["Discipleship Self Service"]}},"/discipleship/self-service/certificates":{"get":{"operationId":"DiscipleshipSelfServiceController_getCertificates","parameters":[],"responses":{"200":{"description":"Certificados propios obtenidos exitosamente."}},"security":[{"bearer":[]}],"summary":"Listar mis certificados de Discipleship","tags":["Discipleship Self Service"]}},"/discipleship/self-service/certificates/{id}/download":{"get":{"operationId":"DiscipleshipSelfServiceController_downloadCertificate","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"number"}}],"responses":{"200":{"description":"Certificado propio descargado exitosamente."},"404":{"description":"Certificado no encontrado para el usuario autenticado."}},"security":[{"bearer":[]}],"summary":"Descargar mi certificado de Discipleship","tags":["Discipleship Self Service"]}},"/discipleship/public/certificate-access":{"post":{"operationId":"DiscipleshipCertificatePublicAccessController_requestAccess","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CertificatePublicAccessRequestDto"}}}},"responses":{"201":{"description":"Solicitud recibida sin revelar existencia del certificado."}},"summary":"Solicitar enlace de acceso publico a certificado","tags":["Discipleship Public Certificate Access"]}},"/discipleship/public/certificate-access/{token}":{"get":{"operationId":"DiscipleshipCertificatePublicAccessController_getCertificate","parameters":[{"name":"token","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":"Certificado encontrado por token valido."},"404":{"description":"Token no encontrado o expirado."}},"summary":"Ver informacion basica de certificado por token","tags":["Discipleship Public Certificate Access"]}},"/discipleship/public/certificate-access/{token}/download":{"get":{"operationId":"DiscipleshipCertificatePublicAccessController_download","parameters":[{"name":"token","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":"Certificado descargado por token valido."},"404":{"description":"Token no encontrado o expirado."}},"summary":"Descargar certificado por token publico","tags":["Discipleship Public Certificate Access"]}},"/discipleship/auto-grading/calculate":{"post":{"description":"LEGACY: opera sobre tablas heredadas discipulados_*. Para el modelo canónico usar inscripciones académicas de Discipleship.","operationId":"AutoGradingController_calculateGrades","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AutoGradeRequestDto"}}}},"responses":{"200":{"description":"Calificaciones calculadas exitosamente","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AutoGradeResultDto"}}}},"400":{"description":"Parámetros inválidos o criterios de calificación incorrectos"},"404":{"description":"Curso o período no encontrado"}},"security":[{"bearer":[]}],"summary":"LEGACY - Calcular calificaciones automáticamente","tags":["Auto Grading Legacy"]}},"/discipleship/auto-grading/stats/{courseId}/{period}":{"get":{"description":"LEGACY: obtiene estadísticas desde tablas heredadas discipulados_*.","operationId":"AutoGradingController_getCourseStats","parameters":[{"name":"courseId","required":true,"in":"path","description":"ID del curso","schema":{"type":"string"}},{"name":"period","required":true,"in":"path","description":"Período académico","schema":{"type":"string"}}],"responses":{"200":{"description":"Estadísticas obtenidas exitosamente","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GradeStatsDto"}}}}},"security":[{"bearer":[]}],"summary":"LEGACY - Obtener estadísticas de calificaciones","tags":["Auto Grading Legacy"]}},"/discipleship/auto-grading/simulate":{"post":{"description":"LEGACY: simula cálculo sobre tablas heredadas discipulados_* sin guardar cambios.","operationId":"AutoGradingController_simulateGradeCalculation","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AutoGradeRequestDto"}}}},"responses":{"200":{"description":"Simulación completada exitosamente","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AutoGradeResultDto"}}}}},"security":[{"bearer":[]}],"summary":"LEGACY - Simular cálculo de calificaciones","tags":["Auto Grading Legacy"]}},"/discipleship/auto-grading/process-tmp-notes/{courseId}/{period}":{"post":{"description":"LEGACY: procesa notas temporales en tablas heredadas discipulados_*.","operationId":"AutoGradingController_processPendingTmpNotes","parameters":[{"name":"courseId","required":true,"in":"path","description":"ID del curso","schema":{"type":"string"}},{"name":"period","required":true,"in":"path","description":"Período académico","schema":{"type":"string"}}],"responses":{"200":{"description":"Notas temporales procesadas exitosamente","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProcessTmpNotesResultDto"}}}}},"security":[{"bearer":[]}],"summary":"LEGACY - Procesar notas temporales pendientes","tags":["Auto Grading Legacy"]}},"/discipleship/auto-grading/validate-grades":{"post":{"description":"Valida y calcula el promedio de calificaciones para un estudiante específico sin guardar cambios","operationId":"AutoGradingController_validateStudentGrades","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GradeValidationDto"}}}},"responses":{"200":{"description":"Validación completada exitosamente","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GradeValidationResultDto"}}}}},"security":[{"bearer":[]}],"summary":"LEGACY - Validar calificaciones de un estudiante","tags":["Auto Grading Legacy"]}},"/discipleship/auto-grading/criteria/default":{"get":{"description":"Obtiene los criterios legacy de calificación por defecto utilizados por AutoGrading.","operationId":"AutoGradingController_getDefaultCriteria","parameters":[],"responses":{"200":{"description":"Criterios obtenidos exitosamente","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GradingCriteriaDto"}}}}},"security":[{"bearer":[]}],"summary":"LEGACY - Obtener criterios de calificación por defecto","tags":["Auto Grading Legacy"]}},"/discipleship/auto-grading/recalculate-all/{courseId}/{period}":{"post":{"description":"LEGACY: fuerza el recálculo en tablas heredadas discipulados_*. No usar como motor canónico de Discipleship.","operationId":"AutoGradingController_forceRecalculateAll","parameters":[{"name":"courseId","required":true,"in":"path","description":"ID del curso","schema":{"type":"string"}},{"name":"period","required":true,"in":"path","description":"Período académico","schema":{"type":"string"}},{"name":"confirm","required":true,"in":"query","description":"Confirmación requerida (true)","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GradingCriteriaDto"}}}},"responses":{"200":{"description":"Recálculo completado exitosamente","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AutoGradeResultDto"}}}}},"security":[{"bearer":[]}],"summary":"LEGACY - Recalcular todas las calificaciones","tags":["Auto Grading Legacy"]}},"/ministries":{"post":{"operationId":"MinistriesController_create","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateMinistryDto"}}}},"responses":{"201":{"description":"Ministry created successfully"},"400":{"description":"Bad request"},"409":{"description":"Ministry name already exists"}},"security":[{"JWT":[]}],"summary":"Create a new ministry","tags":["Ministries"]},"get":{"operationId":"MinistriesController_findAll","parameters":[{"name":"includeMembers","required":false,"in":"query","description":"Include members","schema":{"type":"boolean"}},{"name":"includeGroups","required":false,"in":"query","description":"Include groups","schema":{"type":"boolean"}},{"name":"leaderId","required":false,"in":"query","description":"Filter by leader ID","schema":{"type":"number"}},{"name":"location","required":false,"in":"query","description":"Filter by location","schema":{"type":"string"}},{"name":"name","required":false,"in":"query","description":"Filter by name","schema":{"type":"string"}},{"name":"limit","required":false,"in":"query","description":"Items per page","schema":{"type":"number"}},{"name":"page","required":false,"in":"query","description":"Page number","schema":{"type":"number"}}],"responses":{"200":{"description":"Ministries retrieved successfully"}},"security":[{"JWT":[]}],"summary":"Get all ministries with filtering and pagination","tags":["Ministries"]}},"/ministries/search":{"get":{"operationId":"MinistriesController_search","parameters":[{"name":"q","required":true,"in":"query","description":"Search term","schema":{"type":"string"}},{"name":"page","required":false,"in":"query","description":"Page number","schema":{"type":"number"}},{"name":"limit","required":false,"in":"query","description":"Items per page","schema":{"type":"number"}},{"name":"includeGroups","required":false,"in":"query","description":"Include groups","schema":{"type":"boolean"}}],"responses":{"200":{"description":"Search results retrieved successfully"}},"security":[{"JWT":[]}],"summary":"Search ministries by term","tags":["Ministries"]}},"/ministries/statistics":{"get":{"operationId":"MinistriesController_getStatistics","parameters":[],"responses":{"200":{"description":"Statistics retrieved successfully"}},"security":[{"JWT":[]}],"summary":"Get ministry statistics","tags":["Ministries"]}},"/ministries/location/{location}":{"get":{"operationId":"MinistriesController_findByLocation","parameters":[{"name":"location","required":true,"in":"path","description":"Location code (e.g., MLR, BOG)","schema":{"type":"string"}}],"responses":{"200":{"description":"Ministries by location retrieved successfully"}},"security":[{"JWT":[]}],"summary":"Get ministries by location","tags":["Ministries"]}},"/ministries/export/csv":{"get":{"operationId":"MinistriesController_exportToCSV","parameters":[{"name":"name","required":false,"in":"query","description":"Filter by ministry name","schema":{"example":"Jóvenes","type":"string"}},{"name":"location","required":false,"in":"query","description":"Filter by location","schema":{"example":"MLR","type":"string"}},{"name":"leaderId","required":false,"in":"query","description":"Filter by leader ID","schema":{"example":123,"type":"number"}},{"name":"minActiveMembers","required":false,"in":"query","description":"Minimum number of active members","schema":{"example":10,"type":"number"}},{"name":"maxActiveMembers","required":false,"in":"query","description":"Maximum number of active members","schema":{"example":100,"type":"number"}},{"name":"search","required":false,"in":"query","description":"Search term for name or description","schema":{"example":"ministerio","type":"string"}},{"name":"includeGroups","required":false,"in":"query","description":"Include groups in the response","schema":{"default":false,"example":true,"type":"boolean"}},{"name":"includeMembers","required":false,"in":"query","description":"Include members in the response","schema":{"default":false,"example":true,"type":"boolean"}},{"name":"sortBy","required":false,"in":"query","description":"Sort by field","schema":{"default":"id","example":"name","type":"string"}},{"name":"sortOrder","required":false,"in":"query","description":"Sort direction","schema":{"default":"DESC","example":"ASC","type":"string"}},{"name":"page","required":false,"in":"query","description":"Page number for pagination","schema":{"default":1,"example":1,"type":"number"}},{"name":"limit","required":false,"in":"query","description":"Number of items per page","schema":{"default":10,"example":10,"type":"number"}},{"name":"select","required":false,"in":"query","description":"Columnas especificas a retornar (separadas por coma)","schema":{"example":"id,name,location,activeMembers","type":"string"}}],"responses":{"200":{"description":"CSV data retrieved successfully"}},"security":[{"JWT":[]}],"summary":"Export ministries to CSV format","tags":["Ministries"]}},"/ministries/{id}":{"get":{"operationId":"MinistriesController_findOne","parameters":[{"name":"id","required":true,"in":"path","description":"Ministry ID","schema":{"type":"number"}},{"name":"includeGroups","required":false,"in":"query","description":"Include groups","schema":{"type":"boolean"}},{"name":"includeMembers","required":false,"in":"query","description":"Include members","schema":{"type":"boolean"}}],"responses":{"200":{"description":"Ministry retrieved successfully"},"404":{"description":"Ministry not found"}},"security":[{"JWT":[]}],"summary":"Get ministry by ID","tags":["Ministries"]},"patch":{"operationId":"MinistriesController_update","parameters":[{"name":"id","required":true,"in":"path","description":"Ministry ID","schema":{"type":"number"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateMinistryDto"}}}},"responses":{"200":{"description":"Ministry updated successfully"},"404":{"description":"Ministry not found"},"409":{"description":"Ministry name already exists"}},"security":[{"JWT":[]}],"summary":"Update ministry","tags":["Ministries"]},"delete":{"operationId":"MinistriesController_remove","parameters":[{"name":"id","required":true,"in":"path","description":"Ministry ID","schema":{"type":"number"}}],"responses":{"200":{"description":"Ministry deleted successfully"},"400":{"description":"Cannot delete ministry with existing groups or members"},"404":{"description":"Ministry not found"}},"security":[{"JWT":[]}],"summary":"Delete ministry","tags":["Ministries"]}},"/ministries/{id}/reports/summary":{"get":{"operationId":"MinistriesController_getSummaryReport","parameters":[{"name":"id","required":true,"in":"path","description":"Ministry ID","schema":{"type":"number"}}],"responses":{"200":{"description":"Summary report retrieved successfully"}},"security":[{"JWT":[]}],"summary":"Get ministry summary report","tags":["Ministries"]}},"/ministry-groups":{"post":{"operationId":"MinistryGroupsController_create","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateMinistryGroupDto"}}}},"responses":{"201":{"description":"Ministry group created successfully"},"400":{"description":"Bad request"},"409":{"description":"Group name already exists in ministry"}},"security":[{"JWT":[]}],"summary":"Create a new ministry group","tags":["Ministry Groups"]},"get":{"operationId":"MinistryGroupsController_findAll","parameters":[{"name":"ministryId","required":false,"in":"query","description":"Filter by ministry ID","schema":{"example":1,"type":"number"}},{"name":"name","required":false,"in":"query","description":"Filter by group name","schema":{"example":"Alabanza","type":"string"}},{"name":"leaderId","required":false,"in":"query","description":"Filter by leader ID","schema":{"example":123,"type":"number"}},{"name":"search","required":false,"in":"query","description":"Search term for group name or description","schema":{"example":"alabanza","type":"string"}},{"name":"includeMinistry","required":false,"in":"query","description":"Include ministry info","schema":{"default":false,"example":true,"type":"boolean"}},{"name":"includeMembers","required":false,"in":"query","description":"Include members","schema":{"default":false,"example":true,"type":"boolean"}},{"name":"sortBy","required":false,"in":"query","description":"Sort by field","schema":{"default":"id","example":"groupName","type":"string"}},{"name":"sortOrder","required":false,"in":"query","description":"Sort direction","schema":{"default":"DESC","example":"ASC","type":"string"}},{"name":"page","required":false,"in":"query","description":"Page number","schema":{"default":1,"example":1,"type":"number"}},{"name":"limit","required":false,"in":"query","description":"Items per page","schema":{"default":10,"example":10,"type":"number"}},{"name":"groupName","required":false,"in":"query","description":"Filter by group name","schema":{"type":"string"}}],"responses":{"200":{"description":"Ministry groups retrieved successfully"}},"security":[{"JWT":[]}],"summary":"Get all ministry groups with filtering and pagination","tags":["Ministry Groups"]}},"/ministry-groups/search":{"get":{"operationId":"MinistryGroupsController_search","parameters":[{"name":"q","required":true,"in":"query","description":"Search term","schema":{"type":"string"}},{"name":"page","required":false,"in":"query","description":"Page number","schema":{"type":"number"}},{"name":"limit","required":false,"in":"query","description":"Items per page","schema":{"type":"number"}},{"name":"ministryId","required":false,"in":"query","description":"Filter by ministry ID","schema":{"type":"number"}},{"name":"includeMinistry","required":false,"in":"query","description":"Include ministry info","schema":{"type":"boolean"}}],"responses":{"200":{"description":"Search results retrieved successfully"}},"security":[{"JWT":[]}],"summary":"Search ministry groups by term","tags":["Ministry Groups"]}},"/ministry-groups/statistics":{"get":{"operationId":"MinistryGroupsController_getStatistics","parameters":[{"name":"ministryId","required":false,"in":"query","description":"Filter by ministry ID","schema":{"type":"number"}}],"responses":{"200":{"description":"Statistics retrieved successfully"}},"security":[{"JWT":[]}],"summary":"Get ministry groups statistics","tags":["Ministry Groups"]}},"/ministry-groups/by-ministry/{ministryId}":{"get":{"operationId":"MinistryGroupsController_findByMinistry","parameters":[{"name":"ministryId","required":true,"in":"path","description":"Ministry ID","schema":{"type":"number"}},{"name":"includeMembers","required":false,"in":"query","description":"Include members","schema":{"type":"boolean"}}],"responses":{"200":{"description":"Groups by ministry retrieved successfully"}},"security":[{"JWT":[]}],"summary":"Get groups by ministry ID","tags":["Ministry Groups"]}},"/ministry-groups/export/csv":{"get":{"operationId":"MinistryGroupsController_exportToCSV","parameters":[{"name":"ministryId","required":false,"in":"query","description":"Filter by ministry ID","schema":{"example":1,"type":"number"}},{"name":"name","required":false,"in":"query","description":"Filter by group name","schema":{"example":"Alabanza","type":"string"}},{"name":"leaderId","required":false,"in":"query","description":"Filter by leader ID","schema":{"example":123,"type":"number"}},{"name":"search","required":false,"in":"query","description":"Search term for group name or description","schema":{"example":"alabanza","type":"string"}},{"name":"includeMinistry","required":false,"in":"query","description":"Include ministry information in the response","schema":{"default":false,"example":true,"type":"boolean"}},{"name":"includeMembers","required":false,"in":"query","description":"Include members in the response","schema":{"default":false,"example":true,"type":"boolean"}},{"name":"sortBy","required":false,"in":"query","description":"Sort by field","schema":{"default":"id","example":"groupName","type":"string"}},{"name":"sortOrder","required":false,"in":"query","description":"Sort direction","schema":{"default":"DESC","example":"ASC","type":"string"}},{"name":"page","required":false,"in":"query","description":"Page number for pagination","schema":{"default":1,"example":1,"type":"number"}},{"name":"limit","required":false,"in":"query","description":"Number of items per page","schema":{"default":10,"example":10,"type":"number"}}],"responses":{"200":{"description":"CSV data retrieved successfully"}},"security":[{"JWT":[]}],"summary":"Export ministry groups to CSV format","tags":["Ministry Groups"]}},"/ministry-groups/{id}":{"get":{"operationId":"MinistryGroupsController_findOne","parameters":[{"name":"id","required":true,"in":"path","description":"Ministry group ID","schema":{"type":"number"}},{"name":"includeMinistry","required":false,"in":"query","description":"Include ministry info","schema":{"type":"boolean"}},{"name":"includeMembers","required":false,"in":"query","description":"Include members","schema":{"type":"boolean"}}],"responses":{"200":{"description":"Ministry group retrieved successfully"},"404":{"description":"Ministry group not found"}},"security":[{"JWT":[]}],"summary":"Get ministry group by ID","tags":["Ministry Groups"]},"patch":{"operationId":"MinistryGroupsController_update","parameters":[{"name":"id","required":true,"in":"path","description":"Ministry group ID","schema":{"type":"number"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateMinistryGroupDto"}}}},"responses":{"200":{"description":"Ministry group updated successfully"},"404":{"description":"Ministry group not found"},"409":{"description":"Group name already exists in ministry"}},"security":[{"JWT":[]}],"summary":"Update ministry group","tags":["Ministry Groups"]},"delete":{"operationId":"MinistryGroupsController_remove","parameters":[{"name":"id","required":true,"in":"path","description":"Ministry group ID","schema":{"type":"number"}}],"responses":{"200":{"description":"Ministry group deleted successfully"},"400":{"description":"Cannot delete group with existing members"},"404":{"description":"Ministry group not found"}},"security":[{"JWT":[]}],"summary":"Delete ministry group","tags":["Ministry Groups"]}},"/ministry-groups/{id}/reports/summary":{"get":{"operationId":"MinistryGroupsController_getSummaryReport","parameters":[{"name":"id","required":true,"in":"path","description":"Ministry group ID","schema":{"type":"number"}}],"responses":{"200":{"description":"Summary report retrieved successfully"}},"security":[{"JWT":[]}],"summary":"Get ministry group summary report","tags":["Ministry Groups"]}},"/ministry-members":{"post":{"operationId":"MinistryMembersController_addMemberToMinistry","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AddMemberToMinistryDto"}}}},"responses":{"201":{"description":"Member added to ministry successfully"},"400":{"description":"Bad request"},"409":{"description":"Member already belongs to this ministry"}},"security":[{"JWT":[]}],"summary":"Add member to ministry","tags":["Ministry Members"]},"get":{"operationId":"MinistryMembersController_getMinistryMembers","parameters":[{"name":"ministryId","required":false,"in":"query","description":"Filter by ministry ID","schema":{"example":1,"type":"number"}},{"name":"search","required":false,"in":"query","description":"Search term","schema":{"example":"juan","type":"string"}},{"name":"sortBy","required":false,"in":"query","description":"Sort by field","schema":{"default":"id","example":"createdAt","type":"string"}},{"name":"sortOrder","required":false,"in":"query","description":"Sort direction","schema":{"default":"DESC","example":"DESC","type":"string"}},{"name":"page","required":false,"in":"query","description":"Page number","schema":{"default":1,"example":1,"type":"number"}},{"name":"limit","required":false,"in":"query","description":"Items per page","schema":{"default":10,"example":10,"type":"number"}}],"responses":{"200":{"description":"Ministry members retrieved successfully"}},"security":[{"JWT":[]}],"summary":"Get ministry members with filtering and pagination","tags":["Ministry Members"]}},"/ministry-members/{ministryId}":{"get":{"operationId":"MinistryMembersController_getMinistryMembersByMinistry","parameters":[{"name":"ministryId","required":true,"in":"path","description":"Ministry ID","schema":{"type":"number"}},{"name":"page","required":false,"in":"query","description":"Page number","schema":{"type":"number"}},{"name":"limit","required":false,"in":"query","description":"Items per page","schema":{"type":"number"}}],"responses":{"200":{"description":"Ministry members retrieved successfully"}},"security":[{"JWT":[]}],"summary":"Get members of a specific ministry","tags":["Ministry Members"]}},"/ministry-members/{ministryId}/search":{"get":{"operationId":"MinistryMembersController_searchMinistryMembers","parameters":[{"name":"ministryId","required":true,"in":"path","description":"Ministry ID","schema":{"type":"number"}},{"name":"q","required":true,"in":"query","description":"Search term","schema":{"type":"string"}},{"name":"page","required":false,"in":"query","description":"Page number","schema":{"type":"number"}},{"name":"limit","required":false,"in":"query","description":"Items per page","schema":{"type":"number"}}],"responses":{"200":{"description":"Search results retrieved successfully"}},"security":[{"JWT":[]}],"summary":"Search members in a specific ministry","tags":["Ministry Members"]}},"/ministry-members/{ministryId}/members/{memberId}":{"delete":{"operationId":"MinistryMembersController_removeMemberFromMinistry","parameters":[{"name":"ministryId","required":true,"in":"path","description":"Ministry ID","schema":{"type":"number"}},{"name":"memberId","required":true,"in":"path","description":"Member ID","schema":{"type":"number"}}],"responses":{"200":{"description":"Member removed from ministry successfully"},"404":{"description":"Member not found in this ministry"}},"security":[{"JWT":[]}],"summary":"Remove member from ministry","tags":["Ministry Members"]}},"/ministry-members/statistics":{"get":{"operationId":"MinistryMembersController_getMinistryMemberStatistics","parameters":[{"name":"ministryId","required":false,"in":"query","description":"Filter by ministry ID","schema":{"type":"number"}}],"responses":{"200":{"description":"Statistics retrieved successfully"}},"security":[{"JWT":[]}],"summary":"Get ministry members statistics","tags":["Ministry Members"]}},"/ministry-members/{ministryId}/member/{memberId}/exists":{"get":{"operationId":"MinistryMembersController_checkMemberExistsInMinistry","parameters":[{"name":"ministryId","required":true,"in":"path","description":"Ministry ID","schema":{"type":"number"}},{"name":"memberId","required":true,"in":"path","description":"Member ID","schema":{"type":"number"}}],"responses":{"200":{"description":"Member existence check completed"}},"security":[{"JWT":[]}],"summary":"Check if member exists in ministry","tags":["Ministry Members"]}},"/ministry-group-members":{"post":{"operationId":"MinistryGroupMembersController_addMemberToGroup","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AddMemberToGroupDto"}}}},"responses":{"201":{"description":"Member added to group successfully"},"400":{"description":"Bad request"},"409":{"description":"Member already belongs to this group"}},"security":[{"JWT":[]}],"summary":"Add member to ministry group","tags":["Ministry Group Members"]},"get":{"operationId":"MinistryGroupMembersController_getGroupMembers","parameters":[{"name":"ministryId","required":false,"in":"query","description":"Filter by ministry ID","schema":{"example":1,"type":"number"}},{"name":"search","required":false,"in":"query","description":"Search term for member names or identification","schema":{"example":"juan","type":"string"}},{"name":"sortBy","required":false,"in":"query","description":"Sort by field","schema":{"default":"id","example":"createdAt","type":"string"}},{"name":"sortOrder","required":false,"in":"query","description":"Sort direction","schema":{"default":"DESC","example":"DESC","type":"string"}},{"name":"page","required":false,"in":"query","description":"Page number","schema":{"default":1,"example":1,"type":"number"}},{"name":"limit","required":false,"in":"query","description":"Items per page","schema":{"default":10,"example":10,"type":"number"}},{"name":"groupId","required":false,"in":"query","description":"Filter by group ID","schema":{"example":2,"type":"number"}}],"responses":{"200":{"description":"Group members retrieved successfully"}},"security":[{"JWT":[]}],"summary":"Get group members with filtering and pagination","tags":["Ministry Group Members"]}},"/ministry-group-members/multiple":{"post":{"operationId":"MinistryGroupMembersController_addMultipleMembersToGroup","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AddMultipleMembersToGroupDto"}}}},"responses":{"201":{"description":"Members added to group successfully"},"400":{"description":"Bad request"}},"security":[{"JWT":[]}],"summary":"Add multiple members to ministry group","tags":["Ministry Group Members"]}},"/ministry-group-members/{groupId}":{"get":{"operationId":"MinistryGroupMembersController_getGroupMembersByGroup","parameters":[{"name":"groupId","required":true,"in":"path","description":"Group ID","schema":{"type":"number"}},{"name":"page","required":false,"in":"query","description":"Page number","schema":{"type":"number"}},{"name":"limit","required":false,"in":"query","description":"Items per page","schema":{"type":"number"}}],"responses":{"200":{"description":"Group members retrieved successfully"}},"security":[{"JWT":[]}],"summary":"Get members of a specific group","tags":["Ministry Group Members"]}},"/ministry-group-members/{groupId}/members/{memberId}":{"delete":{"operationId":"MinistryGroupMembersController_removeMemberFromGroup","parameters":[{"name":"groupId","required":true,"in":"path","description":"Group ID","schema":{"type":"number"}},{"name":"memberId","required":true,"in":"path","description":"Member ID","schema":{"type":"number"}}],"responses":{"200":{"description":"Member removed from group successfully"},"404":{"description":"Member not found in this group"}},"security":[{"JWT":[]}],"summary":"Remove member from group","tags":["Ministry Group Members"]}},"/ministry-group-members/record/{recordId}":{"delete":{"operationId":"MinistryGroupMembersController_removeGroupMemberRecord","parameters":[{"name":"recordId","required":true,"in":"path","description":"Group member record ID","schema":{"type":"number"}}],"responses":{"200":{"description":"Member record removed successfully"},"404":{"description":"Member record not found"}},"security":[{"JWT":[]}],"summary":"Remove group member record by ID","tags":["Ministry Group Members"]}},"/ministry-group-members/statistics":{"get":{"operationId":"MinistryGroupMembersController_getGroupMemberStatistics","parameters":[{"name":"groupId","required":false,"in":"query","description":"Filter by group ID","schema":{"type":"number"}}],"responses":{"200":{"description":"Statistics retrieved successfully"}},"security":[{"JWT":[]}],"summary":"Get group members statistics","tags":["Ministry Group Members"]}},"/ministry-group-members/{groupId}/member/{memberId}/exists":{"get":{"operationId":"MinistryGroupMembersController_checkMemberExistsInGroup","parameters":[{"name":"groupId","required":true,"in":"path","description":"Group ID","schema":{"type":"number"}},{"name":"memberId","required":true,"in":"path","description":"Member ID","schema":{"type":"number"}},{"name":"ministryId","required":true,"in":"query","description":"Ministry ID","schema":{"type":"number"}}],"responses":{"200":{"description":"Member existence check completed"}},"security":[{"JWT":[]}],"summary":"Check if member exists in group","tags":["Ministry Group Members"]}},"/member-pastoral-notes":{"post":{"operationId":"MemberPastoralNotesController_create","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateMemberPastoralNoteDto"}}}},"responses":{"201":{"description":""}},"security":[{"JWT":[]}],"tags":["Members"]},"get":{"operationId":"MemberPastoralNotesController_findAll","parameters":[{"name":"page","required":false,"in":"query","description":"Page number for pagination","schema":{"example":1,"type":"number"}},{"name":"limit","required":false,"in":"query","description":"Number of items per page","schema":{"example":10,"type":"number"}},{"name":"sortBy","required":false,"in":"query","description":"Field to sort by","schema":{"example":"id","type":"string","enum":["id","date","memberId","user"]}},{"name":"sortOrder","required":false,"in":"query","description":"Sort direction","schema":{"example":"DESC","type":"string","enum":["ASC","DESC"]}},{"name":"memberId","required":false,"in":"query","description":"Filter by specific member ID","schema":{"example":123,"type":"number"}},{"name":"user","required":false,"in":"query","description":"Filter by user who created the note","schema":{"example":"Pastor John","type":"string"}},{"name":"origin","required":false,"in":"query","description":"Filter by origin","schema":{"example":"COUNSELING","type":"string"}},{"name":"searchTerm","required":false,"in":"query","description":"Search in note content","schema":{"example":"spiritual growth","type":"string"}},{"name":"dateFrom","required":false,"in":"query","description":"Filter notes from this date","schema":{"example":"2025-01-01","type":"string"}},{"name":"dateTo","required":false,"in":"query","description":"Filter notes up to this date","schema":{"example":"2025-12-31","type":"string"}},{"name":"ref","required":false,"in":"query","description":"Filter by reference ID","schema":{"example":456,"type":"number"}},{"name":"select","required":false,"in":"query","description":"Specific columns to return (comma-separated)","schema":{"example":"id,memberId,date,note,user","type":"string"}}],"responses":{"200":{"description":""}},"security":[{"JWT":[]}],"tags":["Members"]}},"/member-pastoral-notes/search":{"get":{"operationId":"MemberPastoralNotesController_search","parameters":[{"name":"term","required":true,"in":"query","schema":{"type":"string"}},{"name":"page","required":true,"in":"query","schema":{"type":"number"}},{"name":"limit","required":true,"in":"query","schema":{"type":"number"}},{"name":"memberId","required":true,"in":"query","schema":{"type":"number"}}],"responses":{"200":{"description":""}},"security":[{"JWT":[]}],"tags":["Members"]}},"/member-pastoral-notes/statistics":{"get":{"operationId":"MemberPastoralNotesController_getStatistics","parameters":[{"name":"memberId","required":true,"in":"query","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"security":[{"JWT":[]}],"tags":["Members"]}},"/member-pastoral-notes/export":{"get":{"operationId":"MemberPastoralNotesController_export","parameters":[{"name":"page","required":false,"in":"query","description":"Page number for pagination","schema":{"example":1,"type":"number"}},{"name":"limit","required":false,"in":"query","description":"Number of items per page","schema":{"example":10,"type":"number"}},{"name":"sortBy","required":false,"in":"query","description":"Field to sort by","schema":{"example":"id","type":"string","enum":["id","date","memberId","user"]}},{"name":"sortOrder","required":false,"in":"query","description":"Sort direction","schema":{"example":"DESC","type":"string","enum":["ASC","DESC"]}},{"name":"memberId","required":false,"in":"query","description":"Filter by specific member ID","schema":{"example":123,"type":"number"}},{"name":"user","required":false,"in":"query","description":"Filter by user who created the note","schema":{"example":"Pastor John","type":"string"}},{"name":"origin","required":false,"in":"query","description":"Filter by origin","schema":{"example":"COUNSELING","type":"string"}},{"name":"searchTerm","required":false,"in":"query","description":"Search in note content","schema":{"example":"spiritual growth","type":"string"}},{"name":"dateFrom","required":false,"in":"query","description":"Filter notes from this date","schema":{"example":"2025-01-01","type":"string"}},{"name":"dateTo","required":false,"in":"query","description":"Filter notes up to this date","schema":{"example":"2025-12-31","type":"string"}},{"name":"ref","required":false,"in":"query","description":"Filter by reference ID","schema":{"example":456,"type":"number"}},{"name":"select","required":false,"in":"query","description":"Specific columns to return (comma-separated)","schema":{"example":"id,memberId,date,note,user","type":"string"}}],"responses":{"200":{"description":""}},"security":[{"JWT":[]}],"tags":["Members"]}},"/member-pastoral-notes/member/{memberId}":{"get":{"operationId":"MemberPastoralNotesController_findByMemberId","parameters":[{"name":"memberId","required":true,"in":"path","schema":{"type":"string"}},{"name":"page","required":true,"in":"query","schema":{"type":"string"}},{"name":"limit","required":true,"in":"query","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"security":[{"JWT":[]}],"tags":["Members"]}},"/member-pastoral-notes/member/{memberId}/recent":{"get":{"operationId":"MemberPastoralNotesController_getRecentNotes","parameters":[{"name":"memberId","required":true,"in":"path","schema":{"type":"string"}},{"name":"limit","required":true,"in":"query","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"security":[{"JWT":[]}],"tags":["Members"]}},"/member-pastoral-notes/member/{memberId}/count":{"get":{"operationId":"MemberPastoralNotesController_getNotesCount","parameters":[{"name":"memberId","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"security":[{"JWT":[]}],"tags":["Members"]}},"/member-pastoral-notes/member/{memberId}/has-notes":{"get":{"operationId":"MemberPastoralNotesController_memberHasNotes","parameters":[{"name":"memberId","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"security":[{"JWT":[]}],"tags":["Members"]}},"/member-pastoral-notes/{id}":{"get":{"operationId":"MemberPastoralNotesController_findOne","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"security":[{"JWT":[]}],"tags":["Members"]},"patch":{"operationId":"MemberPastoralNotesController_update","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateMemberPastoralNoteDto"}}}},"responses":{"200":{"description":""}},"security":[{"JWT":[]}],"tags":["Members"]},"delete":{"operationId":"MemberPastoralNotesController_remove","parameters":[{"name":"id","required":true,"in":"path","schema":{"type":"string"}}],"responses":{"200":{"description":""}},"security":[{"JWT":[]}],"tags":["Members"]}},"/anniversaries":{"get":{"description":"Retrieve anniversaries by type (birthday, marriage, conversion, baptism, membership) with various filters","operationId":"AnniversariesController_getAnniversaries","parameters":[{"name":"type","required":false,"in":"query","description":"Type of anniversary","schema":{"example":"birthday","type":"string","enum":["birthday","marriage","conversion","baptism","membership"]}},{"name":"date","required":false,"in":"query","description":"Specific date to search for (YYYY-MM-DD format)","schema":{"example":"2024-11-14","type":"string"}},{"name":"month","required":false,"in":"query","description":"Month to filter (1-12)","schema":{"minimum":1,"maximum":12,"example":11,"type":"number"}},{"name":"day","required":false,"in":"query","description":"Day to filter (1-31)","schema":{"minimum":1,"maximum":31,"example":14,"type":"number"}},{"name":"daysAhead","required":false,"in":"query","description":"Number of days ahead to include (for upcoming anniversaries)","schema":{"minimum":0,"maximum":365,"default":0,"type":"number"}},{"name":"church","required":false,"in":"query","description":"Location filter","schema":{"example":"MLR","type":"string"}},{"name":"status","required":false,"in":"query","description":"Member status filter","schema":{"example":"6","type":"string"}},{"name":"searchTerm","required":false,"in":"query","description":"Search term for name","schema":{"example":"Juan","type":"string"}},{"name":"search","required":false,"in":"query","description":"Search term for name (alias for searchTerm)","schema":{"example":"Juan","type":"string"}},{"name":"page","required":false,"in":"query","description":"Page number for pagination","schema":{"minimum":1,"default":1,"type":"number"}},{"name":"limit","required":false,"in":"query","description":"Number of records per page","schema":{"minimum":1,"maximum":100,"default":10,"type":"number"}},{"name":"sortBy","required":false,"in":"query","description":"Sort field","schema":{"default":"firstName","example":"firstName","type":"string"}},{"name":"sortOrder","required":false,"in":"query","description":"Sort direction","schema":{"default":"ASC","type":"string","enum":["ASC","DESC"]}}],"responses":{"200":{"description":"Paginated list of anniversary members","content":{"application/json":{"schema":{"$ref":"#/components/schemas/"}}}}},"security":[{"JWT":[]}],"summary":"Get anniversaries with filtering and pagination","tags":["Anniversaries"]}},"/anniversaries/today":{"get":{"description":"Retrieve all anniversaries happening today for a specific type","operationId":"AnniversariesController_getTodaysAnniversaries","parameters":[{"name":"type","required":false,"in":"query","description":"Type of anniversary (default: birthday)","schema":{"enum":["birthday","marriage","conversion","baptism","membership"],"type":"string"}}],"responses":{"200":{"description":"List of today's anniversary members","content":{"application/json":{"schema":{"type":"array","items":{"type":"object"}}}}}},"security":[{"JWT":[]}],"summary":"Get today's anniversaries","tags":["Anniversaries"]}},"/anniversaries/upcoming":{"get":{"description":"Retrieve anniversaries happening in the next X days","operationId":"AnniversariesController_getUpcomingAnniversaries","parameters":[{"name":"type","required":false,"in":"query","description":"Type of anniversary","schema":{"default":"birthday","type":"string","enum":["birthday","marriage","conversion","baptism","membership"]}},{"name":"daysAhead","required":false,"in":"query","description":"Number of days ahead to look for upcoming anniversaries","schema":{"minimum":1,"maximum":365,"default":7,"type":"number"}},{"name":"church","required":false,"in":"query","description":"Location filter","schema":{"example":"MLR","type":"string"}},{"name":"activeOnly","required":false,"in":"query","description":"Include only active members","schema":{"default":true,"type":"boolean"}}],"responses":{"200":{"description":"List of upcoming anniversary members ordered by days remaining","content":{"application/json":{"schema":{"type":"array","items":{"type":"object"}}}}}},"security":[{"JWT":[]}],"summary":"Get upcoming anniversaries","tags":["Anniversaries"]}},"/anniversaries/statistics":{"get":{"description":"Comprehensive statistics about anniversaries including counts, demographics, and breakdowns","operationId":"AnniversariesController_getStatistics","parameters":[{"name":"type","required":false,"in":"query","description":"Type of anniversary for statistics","schema":{"default":"birthday","type":"string","enum":["birthday","marriage","conversion","baptism","membership"]}},{"name":"month","required":false,"in":"query","description":"Month to analyze (1-12)","schema":{"minimum":1,"maximum":12,"type":"number"}},{"name":"year","required":false,"in":"query","description":"Year to analyze","schema":{"minimum":1900,"maximum":2100,"type":"number"}},{"name":"church","required":false,"in":"query","description":"Church filter for statistics","schema":{"example":"MLR","type":"string"}},{"name":"includeMonthlyBreakdown","required":false,"in":"query","description":"Include detailed breakdown by month","schema":{"default":true,"type":"boolean"}},{"name":"includeAgeDemographics","required":false,"in":"query","description":"Include age demographics (for birthdays)","schema":{"default":false,"type":"boolean"}},{"name":"topCount","required":false,"in":"query","description":"Number of oldest/newest members to include","schema":{"minimum":1,"maximum":50,"default":10,"type":"number"}}],"responses":{"200":{"description":"Anniversary statistics and analytics","content":{"application/json":{"schema":{"$ref":"#/components/schemas/"}}}}},"security":[{"JWT":[]}],"summary":"Get anniversary statistics","tags":["Anniversaries"]}},"/anniversaries/birthdays/this-month":{"get":{"description":"Retrieve all birthday celebrations for the current month","operationId":"AnniversariesController_getBirthdaysThisMonth","parameters":[{"name":"church","required":true,"in":"query","schema":{"type":"string"}},{"name":"activeOnly","required":false,"in":"query","description":"Include only active members (default: true)","schema":{"type":"boolean"}},{"name":"page","required":true,"in":"query","schema":{"type":"number"}},{"name":"limit","required":true,"in":"query","schema":{"type":"number"}},{"name":"location","required":false,"in":"query","description":"Filter by location","schema":{}}],"responses":{"200":{"description":"Paginated list of birthday members for current month","content":{"application/json":{"schema":{"$ref":"#/components/schemas/"}}}}},"security":[{"JWT":[]}],"summary":"Get birthdays for current month","tags":["Anniversaries"]}},"/anniversaries/marriages/this-month":{"get":{"description":"Retrieve all marriage anniversaries for the current month","operationId":"AnniversariesController_getMarriagesThisMonth","parameters":[{"name":"church","required":true,"in":"query","schema":{"type":"string"}},{"name":"page","required":true,"in":"query","schema":{"type":"number"}},{"name":"limit","required":true,"in":"query","schema":{"type":"number"}},{"name":"location","required":false,"in":"query","description":"Filter by location","schema":{}}],"responses":{"200":{"description":"Paginated list of marriage anniversary members for current month","content":{"application/json":{"schema":{"$ref":"#/components/schemas/"}}}}},"security":[{"JWT":[]}],"summary":"Get marriage anniversaries for current month","tags":["Anniversaries"]}},"/anniversaries/conversions":{"get":{"description":"Retrieve members with conversion anniversaries with optional filters","operationId":"AnniversariesController_getConversions","parameters":[{"name":"type","required":false,"in":"query","description":"Type of anniversary","schema":{"example":"birthday","type":"string","enum":["birthday","marriage","conversion","baptism","membership"]}},{"name":"date","required":false,"in":"query","description":"Specific date to search for (YYYY-MM-DD format)","schema":{"example":"2024-11-14","type":"string"}},{"name":"month","required":false,"in":"query","description":"Month to filter (1-12)","schema":{"minimum":1,"maximum":12,"example":11,"type":"number"}},{"name":"day","required":false,"in":"query","description":"Day to filter (1-31)","schema":{"minimum":1,"maximum":31,"example":14,"type":"number"}},{"name":"daysAhead","required":false,"in":"query","description":"Number of days ahead to include (for upcoming anniversaries)","schema":{"minimum":0,"maximum":365,"default":0,"type":"number"}},{"name":"church","required":false,"in":"query","description":"Location filter","schema":{"example":"MLR","type":"string"}},{"name":"status","required":false,"in":"query","description":"Member status filter","schema":{"example":"6","type":"string"}},{"name":"searchTerm","required":false,"in":"query","description":"Search term for name","schema":{"example":"Juan","type":"string"}},{"name":"search","required":false,"in":"query","description":"Search term for name (alias for searchTerm)","schema":{"example":"Juan","type":"string"}},{"name":"page","required":false,"in":"query","description":"Page number for pagination","schema":{"minimum":1,"default":1,"type":"number"}},{"name":"limit","required":false,"in":"query","description":"Number of records per page","schema":{"minimum":1,"maximum":100,"default":10,"type":"number"}},{"name":"sortBy","required":false,"in":"query","description":"Sort field","schema":{"default":"firstName","example":"firstName","type":"string"}},{"name":"sortOrder","required":false,"in":"query","description":"Sort direction","schema":{"default":"ASC","type":"string","enum":["ASC","DESC"]}}],"responses":{"200":{"description":"Paginated list of conversion anniversary members","content":{"application/json":{"schema":{"$ref":"#/components/schemas/"}}}}},"security":[{"JWT":[]}],"summary":"Get conversion anniversaries","tags":["Anniversaries"]}},"/anniversaries/baptisms":{"get":{"description":"Retrieve members with baptism anniversaries with optional filters","operationId":"AnniversariesController_getBaptisms","parameters":[{"name":"type","required":false,"in":"query","description":"Type of anniversary","schema":{"example":"birthday","type":"string","enum":["birthday","marriage","conversion","baptism","membership"]}},{"name":"date","required":false,"in":"query","description":"Specific date to search for (YYYY-MM-DD format)","schema":{"example":"2024-11-14","type":"string"}},{"name":"month","required":false,"in":"query","description":"Month to filter (1-12)","schema":{"minimum":1,"maximum":12,"example":11,"type":"number"}},{"name":"day","required":false,"in":"query","description":"Day to filter (1-31)","schema":{"minimum":1,"maximum":31,"example":14,"type":"number"}},{"name":"daysAhead","required":false,"in":"query","description":"Number of days ahead to include (for upcoming anniversaries)","schema":{"minimum":0,"maximum":365,"default":0,"type":"number"}},{"name":"church","required":false,"in":"query","description":"Location filter","schema":{"example":"MLR","type":"string"}},{"name":"status","required":false,"in":"query","description":"Member status filter","schema":{"example":"6","type":"string"}},{"name":"searchTerm","required":false,"in":"query","description":"Search term for name","schema":{"example":"Juan","type":"string"}},{"name":"search","required":false,"in":"query","description":"Search term for name (alias for searchTerm)","schema":{"example":"Juan","type":"string"}},{"name":"page","required":false,"in":"query","description":"Page number for pagination","schema":{"minimum":1,"default":1,"type":"number"}},{"name":"limit","required":false,"in":"query","description":"Number of records per page","schema":{"minimum":1,"maximum":100,"default":10,"type":"number"}},{"name":"sortBy","required":false,"in":"query","description":"Sort field","schema":{"default":"firstName","example":"firstName","type":"string"}},{"name":"sortOrder","required":false,"in":"query","description":"Sort direction","schema":{"default":"ASC","type":"string","enum":["ASC","DESC"]}}],"responses":{"200":{"description":"Paginated list of baptism anniversary members","content":{"application/json":{"schema":{"$ref":"#/components/schemas/"}}}}},"security":[{"JWT":[]}],"summary":"Get baptism anniversaries","tags":["Anniversaries"]}},"/anniversaries/memberships":{"get":{"description":"Retrieve members with membership anniversaries with optional filters","operationId":"AnniversariesController_getMemberships","parameters":[{"name":"type","required":false,"in":"query","description":"Type of anniversary","schema":{"example":"birthday","type":"string","enum":["birthday","marriage","conversion","baptism","membership"]}},{"name":"date","required":false,"in":"query","description":"Specific date to search for (YYYY-MM-DD format)","schema":{"example":"2024-11-14","type":"string"}},{"name":"month","required":false,"in":"query","description":"Month to filter (1-12)","schema":{"minimum":1,"maximum":12,"example":11,"type":"number"}},{"name":"day","required":false,"in":"query","description":"Day to filter (1-31)","schema":{"minimum":1,"maximum":31,"example":14,"type":"number"}},{"name":"daysAhead","required":false,"in":"query","description":"Number of days ahead to include (for upcoming anniversaries)","schema":{"minimum":0,"maximum":365,"default":0,"type":"number"}},{"name":"church","required":false,"in":"query","description":"Location filter","schema":{"example":"MLR","type":"string"}},{"name":"status","required":false,"in":"query","description":"Member status filter","schema":{"example":"6","type":"string"}},{"name":"searchTerm","required":false,"in":"query","description":"Search term for name","schema":{"example":"Juan","type":"string"}},{"name":"search","required":false,"in":"query","description":"Search term for name (alias for searchTerm)","schema":{"example":"Juan","type":"string"}},{"name":"page","required":false,"in":"query","description":"Page number for pagination","schema":{"minimum":1,"default":1,"type":"number"}},{"name":"limit","required":false,"in":"query","description":"Number of records per page","schema":{"minimum":1,"maximum":100,"default":10,"type":"number"}},{"name":"sortBy","required":false,"in":"query","description":"Sort field","schema":{"default":"firstName","example":"firstName","type":"string"}},{"name":"sortOrder","required":false,"in":"query","description":"Sort direction","schema":{"default":"ASC","type":"string","enum":["ASC","DESC"]}}],"responses":{"200":{"description":"Paginated list of membership anniversary members","content":{"application/json":{"schema":{"$ref":"#/components/schemas/"}}}}},"security":[{"JWT":[]}],"summary":"Get membership anniversaries","tags":["Anniversaries"]}},"/anniversaries/export":{"get":{"description":"Export anniversary data with applied filters in CSV format","operationId":"AnniversariesController_exportAnniversaries","parameters":[{"name":"type","required":false,"in":"query","description":"Type of anniversary","schema":{"example":"birthday","type":"string","enum":["birthday","marriage","conversion","baptism","membership"]}},{"name":"date","required":false,"in":"query","description":"Specific date to search for (YYYY-MM-DD format)","schema":{"example":"2024-11-14","type":"string"}},{"name":"month","required":false,"in":"query","description":"Month to filter (1-12)","schema":{"minimum":1,"maximum":12,"example":11,"type":"number"}},{"name":"day","required":false,"in":"query","description":"Day to filter (1-31)","schema":{"minimum":1,"maximum":31,"example":14,"type":"number"}},{"name":"daysAhead","required":false,"in":"query","description":"Number of days ahead to include (for upcoming anniversaries)","schema":{"minimum":0,"maximum":365,"default":0,"type":"number"}},{"name":"church","required":false,"in":"query","description":"Location filter","schema":{"example":"MLR","type":"string"}},{"name":"status","required":false,"in":"query","description":"Member status filter","schema":{"example":"6","type":"string"}},{"name":"searchTerm","required":false,"in":"query","description":"Search term for name","schema":{"example":"Juan","type":"string"}},{"name":"search","required":false,"in":"query","description":"Search term for name (alias for searchTerm)","schema":{"example":"Juan","type":"string"}},{"name":"page","required":false,"in":"query","description":"Page number for pagination","schema":{"minimum":1,"default":1,"type":"number"}},{"name":"limit","required":false,"in":"query","description":"Number of records per page","schema":{"minimum":1,"maximum":100,"default":10,"type":"number"}},{"name":"sortBy","required":false,"in":"query","description":"Sort field","schema":{"default":"firstName","example":"firstName","type":"string"}},{"name":"sortOrder","required":false,"in":"query","description":"Sort direction","schema":{"default":"ASC","type":"string","enum":["ASC","DESC"]}}],"responses":{"200":{"description":"Anniversary data in CSV format","content":{"application/json":{"schema":{"type":"array","items":{"type":"object"}}}}}},"security":[{"JWT":[]}],"summary":"Export anniversaries to CSV format","tags":["Anniversaries"]}},"/anniversaries/dashboard":{"get":{"description":"Get a comprehensive dashboard with today's anniversaries, upcoming events, and quick statistics","operationId":"AnniversariesController_getDashboard","parameters":[{"name":"church","required":true,"in":"query","schema":{"type":"string"}},{"name":"location","required":false,"in":"query","description":"Filter by location","schema":{}}],"responses":{"200":{"description":"Anniversary dashboard data","content":{"application/json":{"schema":{"$ref":"#/components/schemas/"}}}}},"security":[{"JWT":[]}],"summary":"Get anniversary dashboard summary","tags":["Anniversaries"]}},"/dashboard/summary":{"get":{"description":"Devuelve KPIs ligeros para /dashboard. La respuesta se filtra según los permisos del usuario y se cachea en Redis con fallback a memoria para evitar lecturas repetidas sobre la base de datos.","operationId":"DashboardController_getSummary","parameters":[{"name":"location","required":false,"in":"query","description":"Localidad a consultar. Solo se respeta para usuarios con FULL_ACCESS; los demás usuarios quedan limitados a su localidad.","schema":{"example":"MLR","type":"string"}}],"responses":{"200":{"description":"Resumen del dashboard obtenido exitosamente","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DashboardSummaryDto"}}}}},"security":[{"bearer":[]}],"summary":"Resumen dinámico de la pantalla principal","tags":["Dashboard"]}},"/reports/generate":{"post":{"description":"Genera un reporte basado en los módulos y filtros especificados","operationId":"ReportsController_generateReport","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateReportDto"}}}},"responses":{"200":{"description":"Reporte generado exitosamente","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ReportResponseDto"}}}},"400":{"description":"Parámetros inválidos"},"403":{"description":"Sin permisos para generar reportes"}},"security":[{"bearer":[]}],"summary":"Generar reporte personalizado","tags":["Reports"]}},"/reports/dashboard":{"get":{"description":"Obtiene el dashboard ejecutivo con KPIs principales y métricas cruzadas","operationId":"ReportsController_getDashboard","parameters":[{"name":"includeProjections","required":false,"in":"query","description":"Incluir proyecciones futuras","schema":{"type":"boolean"}},{"name":"detailLevel","required":false,"in":"query","description":"Nivel de detalle del dashboard","schema":{"enum":["basic","detailed","comprehensive"],"type":"string"}}],"responses":{"200":{"description":"Dashboard obtenido exitosamente"}},"security":[{"bearer":[]}],"summary":"Dashboard ejecutivo","tags":["Reports"]}},"/reports/kpis":{"get":{"description":"Obtiene KPIs de uno o múltiples módulos","operationId":"ReportsController_getKPIs","parameters":[{"name":"includeComparison","required":false,"in":"query","description":"Incluir comparación con período anterior","schema":{"type":"boolean"}},{"name":"endDate","required":false,"in":"query","description":"Fecha fin (ISO format)","schema":{"type":"string"}},{"name":"startDate","required":false,"in":"query","description":"Fecha inicio (ISO format)","schema":{"type":"string"}},{"name":"modules","required":false,"in":"query","description":"Módulos separados por coma (ej: members,payments)","schema":{}}],"responses":{"200":{"description":"KPIs obtenidos exitosamente","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/KPIResponse"}}}}}},"security":[{"bearer":[]}],"summary":"Obtener KPIs","tags":["Reports"]}},"/reports/modules/capabilities":{"get":{"description":"Obtiene las capacidades de reporte de todos los módulos disponibles","operationId":"ReportsController_getModuleCapabilities","parameters":[],"responses":{"200":{"description":"Capacidades obtenidas exitosamente"}},"security":[{"bearer":[]}],"summary":"Capacidades de módulos","tags":["Reports"]}},"/reports/modules/{moduleName}/reports":{"get":{"description":"Obtiene la lista de reportes disponibles para un módulo específico","operationId":"ReportsController_getAvailableReportsForModule","parameters":[{"name":"moduleName","required":true,"in":"path","description":"Nombre del módulo","schema":{"example":"members","type":"string"}}],"responses":{"200":{"description":"Lista de reportes obtenida exitosamente"},"404":{"description":"Módulo no encontrado"}},"security":[{"bearer":[]}],"summary":"Reportes disponibles por módulo","tags":["Reports"]}},"/reports/modules/{moduleName}/reports/{reportKey}/validate":{"get":{"description":"Valida si un reporte específico está disponible para un módulo","operationId":"ReportsController_validateReportAvailability","parameters":[{"name":"moduleName","required":true,"in":"path","description":"Nombre del módulo","schema":{"type":"string"}},{"name":"reportKey","required":true,"in":"path","description":"Clave del reporte","schema":{"type":"string"}}],"responses":{"200":{"description":"Validación completada"}},"security":[{"bearer":[]}],"summary":"Validar disponibilidad de reporte","tags":["Reports"]}},"/reports/schedule":{"post":{"description":"Programa un reporte para ejecutarse automáticamente","operationId":"ReportsController_scheduleReport","parameters":[],"responses":{"201":{"description":"Reporte programado exitosamente"}},"security":[{"bearer":[]}],"summary":"Programar reporte automático","tags":["Reports"]}},"/reports/exports/{exportId}/status":{"get":{"description":"Obtiene el estado de una exportación en progreso","operationId":"ReportsController_getExportStatus","parameters":[{"name":"exportId","required":true,"in":"path","description":"ID de la exportación","schema":{"type":"string"}}],"responses":{"200":{"description":"Estado obtenido exitosamente"}},"security":[{"bearer":[]}],"summary":"Estado de exportación","tags":["Reports"]}},"/reports/exports/{exportId}/download":{"get":{"description":"Descarga un archivo de exportación generado","operationId":"ReportsController_downloadExport","parameters":[{"name":"exportId","required":true,"in":"path","description":"ID de la exportación","schema":{"type":"string"}}],"responses":{"200":{"description":"Archivo descargado exitosamente"}},"security":[{"bearer":[]}],"summary":"Descargar exportación","tags":["Reports"]}},"/health":{"get":{"description":"Returns basic health status of the API. No authentication required.","operationId":"HealthController_getSimpleHealth","parameters":[],"responses":{"200":{"description":"API is healthy","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SimpleHealthDto"}}}}},"summary":"Simple health check","tags":["Health"]},"options":{"description":"Returns information about available HTTP methods and endpoint capabilities for CORS and API discovery","operationId":"HealthController_getOptions","parameters":[],"responses":{"200":{"description":"Available options and methods retrieved successfully"}},"summary":"Get available HTTP methods and options","tags":["Health"]}},"/health/info":{"get":{"description":"Returns comprehensive information about the API including configuration, modules, and system metrics","operationId":"HealthController_getSystemInfo","parameters":[],"responses":{"200":{"description":"System information retrieved successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HealthOptionsDto"}}}}},"security":[{"X-API-Key":[]}],"summary":"Get system information and configuration","tags":["Health"]}},"/health/preflight":{"get":{"description":"Returns sanitized environment, database, Redis and migration configuration for release validation.","operationId":"HealthController_getPreflight","parameters":[],"responses":{"200":{"description":"Safe preflight retrieved successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HealthPreflightDto"}}}}},"security":[{"X-API-Key":[]}],"summary":"Safe environment preflight","tags":["Health"]}},"/health/system":{"get":{"description":"Returns detailed health status of all system modules","operationId":"HealthController_getSystemHealth","parameters":[],"responses":{"200":{"description":"System health status retrieved","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SystemHealthDto"}}}}},"security":[{"X-API-Key":[]}],"summary":"Comprehensive system health check","tags":["Health"]}},"/health/module/{moduleName}":{"get":{"description":"Returns health status of a specific module","operationId":"HealthController_getModuleHealth","parameters":[{"name":"moduleName","required":true,"in":"path","description":"Name of the module to check","schema":{"example":"database","type":"string"}}],"responses":{"200":{"description":"Module health status retrieved","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ModuleHealthDto"}}}},"404":{"description":"Module not found"}},"security":[{"X-API-Key":[]}],"summary":"Check specific module health","tags":["Health"]}},"/localities/countries":{"post":{"description":"Crea un nuevo país en el sistema de localidades","operationId":"CountriesController_create","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateCountryDto"}}}},"responses":{"201":{"description":"País creado exitosamente","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CountryEntity"}}}},"409":{"description":"Ya existe un país con ese código"}},"security":[{"bearer":[]}],"summary":"Crear un nuevo país","tags":["localities/countries"]},"get":{"description":"Obtiene todos los países del catálogo con soporte para paginación y filtros avanzados","operationId":"CountriesController_findAll","parameters":[{"name":"page","required":false,"in":"query","description":"Número de página","schema":{"minimum":1,"default":1,"example":1,"type":"number"}},{"name":"limit","required":false,"in":"query","description":"Registros por página","schema":{"minimum":1,"default":10,"example":10,"type":"number"}},{"name":"sortBy","required":false,"in":"query","description":"Campo por el cual ordenar","schema":{"default":"name","example":"name","type":"string"}},{"name":"sortOrder","required":false,"in":"query","description":"Orden ascendente o descendente","schema":{"default":"ASC","example":"ASC","type":"string","enum":["ASC","DESC"]}},{"name":"search","required":false,"in":"query","description":"Búsqueda por nombre, código o nacionalidad","schema":{"example":"República","type":"string"}},{"name":"isActive","required":false,"in":"query","description":"Filtrar por estado activo","schema":{"example":true,"type":"boolean"}},{"name":"includeStates","required":false,"in":"query","description":"Incluir relaciones de estados","schema":{"default":false,"example":false,"type":"boolean"}}],"responses":{"200":{"description":"Lista de países obtenida exitosamente"}},"security":[{"bearer":[]}],"summary":"Obtener lista de países con paginación","tags":["localities/countries"]}},"/localities/countries/search":{"get":{"description":"Busca países por nombre, nacionalidad o código","operationId":"CountriesController_search","parameters":[{"name":"q","required":true,"in":"query","description":"Término de búsqueda","schema":{"type":"string"}}],"responses":{"200":{"description":"Resultados de búsqueda obtenidos","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/CountryEntity"}}}}}},"security":[{"bearer":[]}],"summary":"Buscar países","tags":["localities/countries"]}},"/localities/countries/popular":{"get":{"description":"Obtiene los países más utilizados ordenados por prioridad","operationId":"CountriesController_getPopular","parameters":[{"name":"limit","required":false,"in":"query","description":"Límite de resultados (por defecto 10)","schema":{"type":"number"}}],"responses":{"200":{"description":"Países populares obtenidos","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/CountryEntity"}}}}}},"security":[{"bearer":[]}],"summary":"Obtener países populares","tags":["localities/countries"]}},"/localities/countries/{code}":{"get":{"description":"Obtiene un país específico por su código","operationId":"CountriesController_findOne","parameters":[{"name":"code","required":true,"in":"path","description":"Código del país (ej: 0001, 0002)","schema":{"example":"0001","type":"string"}}],"responses":{"200":{"description":"País obtenido exitosamente","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CountryEntity"}}}},"404":{"description":"País no encontrado"}},"security":[{"bearer":[]}],"summary":"Obtener país por código","tags":["localities/countries"]},"patch":{"description":"Actualiza los datos de un país existente","operationId":"CountriesController_update","parameters":[{"name":"code","required":true,"in":"path","description":"Código del país","schema":{"example":"0001","type":"string"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateCountryDto"}}}},"responses":{"200":{"description":"País actualizado exitosamente","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CountryEntity"}}}},"404":{"description":"País no encontrado"}},"security":[{"bearer":[]}],"summary":"Actualizar país","tags":["localities/countries"]},"delete":{"description":"Elimina un país del catálogo","operationId":"CountriesController_remove","parameters":[{"name":"code","required":true,"in":"path","description":"Código del país","schema":{"example":"0001","type":"string"}}],"responses":{"200":{"description":"País eliminado exitosamente"},"404":{"description":"País no encontrado"}},"security":[{"bearer":[]}],"summary":"Eliminar país","tags":["localities/countries"]}},"/localities/states":{"post":{"description":"Crea un nuevo estado o provincia en el sistema de localidades","operationId":"StatesController_create","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateStateDto"}}}},"responses":{"201":{"description":"Estado creado exitosamente","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StateEntity"}}}},"409":{"description":"Ya existe un estado con ese código en el país"}},"security":[{"bearer":[]}],"summary":"Crear un nuevo estado/provincia","tags":["localities/states"]},"get":{"description":"Obtiene todos los estados con soporte para paginación y filtros avanzados","operationId":"StatesController_findAll","parameters":[{"name":"page","required":false,"in":"query","description":"Número de página","schema":{"minimum":1,"default":1,"example":1,"type":"number"}},{"name":"limit","required":false,"in":"query","description":"Registros por página","schema":{"minimum":1,"default":10,"example":10,"type":"number"}},{"name":"sortBy","required":false,"in":"query","description":"Campo por el cual ordenar","schema":{"default":"name","example":"name","type":"string"}},{"name":"sortOrder","required":false,"in":"query","description":"Orden ascendente o descendente","schema":{"default":"ASC","example":"ASC","type":"string","enum":["ASC","DESC"]}},{"name":"search","required":false,"in":"query","description":"Búsqueda por nombre, código o abreviación","schema":{"example":"Romana","type":"string"}},{"name":"countryCode","required":false,"in":"query","description":"Filtrar por código de país","schema":{"example":"0001","type":"string"}},{"name":"isActive","required":false,"in":"query","description":"Filtrar por estado activo","schema":{"example":true,"type":"boolean"}},{"name":"includeCountry","required":false,"in":"query","description":"Incluir relación con país","schema":{"default":false,"example":false,"type":"boolean"}},{"name":"includeCities","required":false,"in":"query","description":"Incluir relación con ciudades","schema":{"default":false,"example":false,"type":"boolean"}},{"name":"select","required":false,"in":"query","description":"Columnas específicas a retornar (separadas por coma)","schema":{"example":"id,name,code,countryCode","type":"string"}}],"responses":{"200":{"description":"Lista de estados obtenida exitosamente"}},"security":[{"bearer":[]}],"summary":"Obtener lista de estados con paginación","tags":["localities/states"]}},"/localities/states/search":{"get":{"description":"Busca estados por nombre, código o abreviación","operationId":"StatesController_search","parameters":[{"name":"q","required":true,"in":"query","schema":{"type":"string"}},{"name":"countryCode","required":true,"in":"query","schema":{"type":"string"}}],"responses":{"200":{"description":"Resultados de búsqueda obtenidos","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/StateEntity"}}}}}},"security":[{"bearer":[]}],"summary":"Buscar estados","tags":["localities/states"]}},"/localities/states/country/{countryCode}":{"get":{"description":"Obtiene todos los estados de un país específico","operationId":"StatesController_findByCountry","parameters":[{"name":"countryCode","required":true,"in":"path","description":"Código del país","schema":{"example":"0001","type":"string"}},{"name":"includeCities","required":true,"in":"query","schema":{"type":"boolean"}}],"responses":{"200":{"description":"Estados obtenidos exitosamente","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/StateEntity"}}}}}},"security":[{"bearer":[]}],"summary":"Obtener estados por país","tags":["localities/states"]}},"/localities/states/{id}":{"get":{"description":"Obtiene un estado específico por su ID","operationId":"StatesController_findOne","parameters":[{"name":"id","required":true,"in":"path","description":"ID del estado","schema":{"type":"number"}},{"name":"includeCities","required":true,"in":"query","schema":{"type":"boolean"}}],"responses":{"200":{"description":"Estado obtenido exitosamente","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StateEntity"}}}},"404":{"description":"Estado no encontrado"}},"security":[{"bearer":[]}],"summary":"Obtener estado por ID","tags":["localities/states"]},"patch":{"description":"Actualiza los datos de un estado existente","operationId":"StatesController_update","parameters":[{"name":"id","required":true,"in":"path","description":"ID del estado","schema":{"type":"number"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateStateDto"}}}},"responses":{"200":{"description":"Estado actualizado exitosamente","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StateEntity"}}}},"404":{"description":"Estado no encontrado"}},"security":[{"bearer":[]}],"summary":"Actualizar estado","tags":["localities/states"]},"delete":{"description":"Elimina un estado del catálogo","operationId":"StatesController_remove","parameters":[{"name":"id","required":true,"in":"path","description":"ID del estado","schema":{"type":"number"}}],"responses":{"200":{"description":"Estado eliminado exitosamente"},"404":{"description":"Estado no encontrado"}},"security":[{"bearer":[]}],"summary":"Eliminar estado","tags":["localities/states"]}},"/localities/cities":{"post":{"description":"Crea una nueva ciudad en el sistema de localidades","operationId":"CitiesController_create","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateCityDto"}}}},"responses":{"201":{"description":"Ciudad creada exitosamente","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CityEntity"}}}},"409":{"description":"Ya existe una ciudad con ese código en el estado"}},"security":[{"bearer":[]}],"summary":"Crear una nueva ciudad","tags":["localities/cities"]},"get":{"description":"Obtiene todas las ciudades con soporte para paginación y filtros avanzados","operationId":"CitiesController_findAll","parameters":[{"name":"page","required":false,"in":"query","description":"Número de página","schema":{"minimum":1,"default":1,"example":1,"type":"number"}},{"name":"limit","required":false,"in":"query","description":"Registros por página","schema":{"minimum":1,"default":10,"example":10,"type":"number"}},{"name":"sortBy","required":false,"in":"query","description":"Campo por el cual ordenar","schema":{"default":"name","example":"name","type":"string"}},{"name":"sortOrder","required":false,"in":"query","description":"Orden ascendente o descendente","schema":{"default":"ASC","example":"ASC","type":"string","enum":["ASC","DESC"]}},{"name":"search","required":false,"in":"query","description":"Búsqueda por nombre o nombre completo","schema":{"example":"Santo","type":"string"}},{"name":"stateId","required":false,"in":"query","description":"Filtrar por ID de estado","schema":{"example":1,"type":"number"}},{"name":"countryCode","required":false,"in":"query","description":"Filtrar por código de país","schema":{"example":"0001","type":"string"}},{"name":"isCapital","required":false,"in":"query","description":"Filtrar solo capitales","schema":{"example":true,"type":"boolean"}},{"name":"isActive","required":false,"in":"query","description":"Filtrar por estado activo","schema":{"example":true,"type":"boolean"}},{"name":"includeState","required":false,"in":"query","description":"Incluir relación con estado","schema":{"default":false,"example":false,"type":"boolean"}},{"name":"includeSectors","required":false,"in":"query","description":"Incluir relación con sectores","schema":{"default":false,"example":false,"type":"boolean"}},{"name":"select","required":false,"in":"query","description":"Columnas específicas a retornar (separadas por coma)","schema":{"example":"id,name,stateId,isCapital","type":"string"}}],"responses":{"200":{"description":"Lista de ciudades obtenida exitosamente"}},"security":[{"bearer":[]}],"summary":"Obtener lista de ciudades con paginación","tags":["localities/cities"]}},"/localities/cities/search":{"get":{"description":"Busca ciudades por nombre o nombre completo","operationId":"CitiesController_search","parameters":[{"name":"q","required":true,"in":"query","schema":{"type":"string"}},{"name":"stateId","required":true,"in":"query","schema":{"type":"number"}}],"responses":{"200":{"description":"Resultados de búsqueda obtenidos","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/CityEntity"}}}}}},"security":[{"bearer":[]}],"summary":"Buscar ciudades","tags":["localities/cities"]}},"/localities/cities/capitals":{"get":{"description":"Obtiene todas las ciudades que son capitales de estado/provincia","operationId":"CitiesController_findCapitals","parameters":[{"name":"stateId","required":true,"in":"query","schema":{"type":"number"}}],"responses":{"200":{"description":"Capitales obtenidas exitosamente","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/CityEntity"}}}}}},"security":[{"bearer":[]}],"summary":"Obtener ciudades capitales","tags":["localities/cities"]}},"/localities/cities/state/{stateId}":{"get":{"description":"Obtiene todas las ciudades de un estado específico","operationId":"CitiesController_findByState","parameters":[{"name":"stateId","required":true,"in":"path","description":"ID del estado","schema":{"type":"number"}},{"name":"includeSectors","required":true,"in":"query","schema":{"type":"boolean"}}],"responses":{"200":{"description":"Ciudades obtenidas exitosamente","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/CityEntity"}}}}}},"security":[{"bearer":[]}],"summary":"Obtener ciudades por estado","tags":["localities/cities"]}},"/localities/cities/code/{code}":{"get":{"description":"Obtiene una ciudad específica por su código","operationId":"CitiesController_findByCode","parameters":[{"name":"code","required":true,"in":"path","description":"Código de la ciudad","schema":{"type":"number"}}],"responses":{"200":{"description":"Ciudad obtenida exitosamente","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CityEntity"}}}},"404":{"description":"Ciudad no encontrada"}},"security":[{"bearer":[]}],"summary":"Obtener ciudad por código","tags":["localities/cities"]}},"/localities/cities/{id}":{"get":{"description":"Obtiene una ciudad específica por su ID","operationId":"CitiesController_findOne","parameters":[{"name":"id","required":true,"in":"path","description":"ID de la ciudad","schema":{"type":"number"}},{"name":"includeSectors","required":true,"in":"query","schema":{"type":"boolean"}}],"responses":{"200":{"description":"Ciudad obtenida exitosamente","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CityEntity"}}}},"404":{"description":"Ciudad no encontrada"}},"security":[{"bearer":[]}],"summary":"Obtener ciudad por ID","tags":["localities/cities"]},"patch":{"description":"Actualiza los datos de una ciudad existente","operationId":"CitiesController_update","parameters":[{"name":"id","required":true,"in":"path","description":"ID de la ciudad","schema":{"type":"number"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateCityDto"}}}},"responses":{"200":{"description":"Ciudad actualizada exitosamente","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CityEntity"}}}},"404":{"description":"Ciudad no encontrada"}},"security":[{"bearer":[]}],"summary":"Actualizar ciudad","tags":["localities/cities"]},"delete":{"description":"Elimina una ciudad del catálogo","operationId":"CitiesController_remove","parameters":[{"name":"id","required":true,"in":"path","description":"ID de la ciudad","schema":{"type":"number"}}],"responses":{"200":{"description":"Ciudad eliminada exitosamente"},"404":{"description":"Ciudad no encontrada"}},"security":[{"bearer":[]}],"summary":"Eliminar ciudad","tags":["localities/cities"]}},"/localities/sectors":{"post":{"description":"Crea un nuevo sector en el sistema de localidades","operationId":"SectorsController_create","parameters":[],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateSectorDto"}}}},"responses":{"201":{"description":"Sector creado exitosamente","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SectorEntity"}}}},"409":{"description":"Ya existe un sector con ese código en la ciudad"}},"security":[{"bearer":[]}],"summary":"Crear un nuevo sector","tags":["localities/sectors"]},"get":{"description":"Obtiene todos los sectores con soporte para paginación y filtros avanzados","operationId":"SectorsController_findAll","parameters":[{"name":"page","required":false,"in":"query","description":"Número de página","schema":{"minimum":1,"default":1,"example":1,"type":"number"}},{"name":"limit","required":false,"in":"query","description":"Registros por página","schema":{"minimum":1,"default":10,"example":10,"type":"number"}},{"name":"sortBy","required":false,"in":"query","description":"Campo por el cual ordenar","schema":{"default":"name","example":"name","type":"string"}},{"name":"sortOrder","required":false,"in":"query","description":"Orden ascendente o descendente","schema":{"default":"ASC","example":"ASC","type":"string","enum":["ASC","DESC"]}},{"name":"search","required":false,"in":"query","description":"Búsqueda por nombre o zona","schema":{"example":"Centro","type":"string"}},{"name":"cityCode","required":false,"in":"query","description":"Filtrar por código de ciudad","schema":{"example":1,"type":"number"}},{"name":"stateId","required":false,"in":"query","description":"Filtrar por ID de estado","schema":{"example":1,"type":"number"}},{"name":"countryCode","required":false,"in":"query","description":"Filtrar por código de país","schema":{"example":"0001","type":"string"}},{"name":"zone","required":false,"in":"query","description":"Filtrar por zona específica","schema":{"example":"Zona Colonial","type":"string"}},{"name":"isActive","required":false,"in":"query","description":"Filtrar por estado activo","schema":{"example":true,"type":"boolean"}},{"name":"includeCity","required":false,"in":"query","description":"Incluir relación con ciudad","schema":{"default":false,"example":false,"type":"boolean"}},{"name":"includeAll","required":false,"in":"query","description":"Incluir relación completa (ciudad, estado, país)","schema":{"default":false,"example":false,"type":"boolean"}},{"name":"select","required":false,"in":"query","description":"Columnas específicas a retornar (separadas por coma)","schema":{"example":"id,name,cityCode,zone","type":"string"}}],"responses":{"200":{"description":"Lista de sectores obtenida exitosamente"}},"security":[{"bearer":[]}],"summary":"Obtener lista de sectores con paginación","tags":["localities/sectors"]}},"/localities/sectors/search":{"get":{"description":"Busca sectores por nombre o zona","operationId":"SectorsController_search","parameters":[{"name":"q","required":true,"in":"query","description":"Término de búsqueda","schema":{"type":"string"}},{"name":"cityId","required":false,"in":"query","description":"ID de la ciudad para filtrar búsqueda","schema":{"type":"number"}}],"responses":{"200":{"description":"Resultados de búsqueda obtenidos","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/SectorEntity"}}}}}},"security":[{"bearer":[]}],"summary":"Buscar sectores","tags":["localities/sectors"]}},"/localities/sectors/city/{cityId}":{"get":{"description":"Obtiene todos los sectores de una ciudad específica","operationId":"SectorsController_findByCity","parameters":[{"name":"cityId","required":true,"in":"path","description":"ID de la ciudad","schema":{"type":"number"}}],"responses":{"200":{"description":"Sectores de la ciudad obtenidos exitosamente","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/SectorEntity"}}}}}},"security":[{"bearer":[]}],"summary":"Obtener sectores por ciudad","tags":["localities/sectors"]}},"/localities/sectors/{id}":{"get":{"description":"Obtiene un sector específico por su ID","operationId":"SectorsController_findOne","parameters":[{"name":"id","required":true,"in":"path","description":"ID del sector","schema":{"type":"number"}}],"responses":{"200":{"description":"Sector obtenido exitosamente","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SectorEntity"}}}},"404":{"description":"Sector no encontrado"}},"security":[{"bearer":[]}],"summary":"Obtener sector por ID","tags":["localities/sectors"]},"patch":{"description":"Actualiza los datos de un sector existente","operationId":"SectorsController_update","parameters":[{"name":"id","required":true,"in":"path","description":"ID del sector","schema":{"type":"number"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UpdateSectorDto"}}}},"responses":{"200":{"description":"Sector actualizado exitosamente","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SectorEntity"}}}},"404":{"description":"Sector no encontrado"},"409":{"description":"Conflicto con código existente"}},"security":[{"bearer":[]}],"summary":"Actualizar sector","tags":["localities/sectors"]},"delete":{"description":"Desactiva un sector (eliminación suave)","operationId":"SectorsController_remove","parameters":[{"name":"id","required":true,"in":"path","description":"ID del sector","schema":{"type":"number"}}],"responses":{"200":{"description":"Sector eliminado exitosamente"},"404":{"description":"Sector no encontrado"}},"security":[{"bearer":[]}],"summary":"Eliminar sector","tags":["localities/sectors"]}}},"info":{"title":"SGM API v2.1","description":"Sistema de Gestión de Membresía - API RESTful","version":"2.1.0","contact":{}},"tags":[],"servers":[],"components":{"securitySchemes":{"JWT":{"scheme":"bearer","bearerFormat":"JWT","type":"http","description":"Enter JWT token"},"X-API-Key":{"type":"apiKey","in":"header","name":"X-API-Key","description":"API Key for authentication"}},"schemas":{"CreateCloudProviderDto":{"type":"object","properties":{}},"UpdateCloudProviderDto":{"type":"object","properties":{}},"UpdateCredentialsDto":{"type":"object","properties":{}},"CreateStorageTypeDto":{"type":"object","properties":{}},"UpdateStorageTypeDto":{"type":"object","properties":{}},"CreateStorageCategoryDto":{"type":"object","properties":{}},"UpdateStorageCategoryDto":{"type":"object","properties":{}},"CreateRedundancyConfigDto":{"type":"object","properties":{}},"UpdateRedundancyConfigDto":{"type":"object","properties":{}},"UpdateFileDto":{"type":"object","properties":{"description":{"type":"string","description":"Nueva descripción"},"visibility":{"type":"string","description":"Nueva visibilidad","enum":["public","private","internal","restricted"]},"metadata":{"type":"object","description":"Metadata adicional"}}},"CreateUserDto":{"type":"object","properties":{"username":{"type":"string","description":"Username for the new user","example":"john.doe"},"email":{"type":"string","description":"Email address","example":"john.doe@example.com"},"password":{"type":"string","description":"Password for the new user","example":"password123","minLength":6},"name":{"type":"string","description":"First name","example":"John"},"lastname":{"type":"string","description":"Last name","example":"Doe"},"church":{"type":"string","description":"Church/Location ID","example":"MAH01"},"profileCode":{"type":"number","description":"Profile code","example":100,"default":100},"status":{"type":"boolean","description":"User status (active/inactive)","example":false,"default":false}},"required":["username","email","password","church"]},"UpdateUserDto":{"type":"object","properties":{"name":{"type":"string","description":"First name","example":"John"},"lastname":{"type":"string","description":"Last name","example":"Doe"},"email":{"type":"string","description":"Email address","example":"john.doe@example.com"},"username":{"type":"string","description":"Username","example":"john.doe"},"password":{"type":"string","description":"New password","minLength":6},"status":{"type":"boolean","description":"User status (active/inactive)","example":true},"church":{"type":"string","description":"Church/Location ID","example":"MAH01"},"profileCode":{"type":"number","description":"Profile code","example":100}}},"CreateProfileDto":{"type":"object","properties":{"code":{"type":"number","description":"Código del perfil","example":101},"name":{"type":"string","description":"Nombre del perfil","example":"Administrador"},"description":{"type":"string","description":"Descripción del perfil","example":"Perfil con permisos de administrador"},"status":{"type":"boolean","description":"Estado del perfil","example":true,"default":true}},"required":["code","name"]},"UpdateProfileDto":{"type":"object","properties":{"name":{"type":"string","description":"Nombre del perfil","example":"Administrador"},"description":{"type":"string","description":"Descripción del perfil","example":"Perfil con permisos de administrador"},"status":{"type":"boolean","description":"Estado del perfil","example":true}}},"BloodTypeDto":{"type":"object","properties":{"id":{"type":"number","example":1},"type":{"type":"string","example":"A+"},"antigens":{"example":["A","Rh"],"type":"array","items":{"type":"string"}},"canDonateTo":{"example":["A+","AB+"],"type":"array","items":{"type":"string"}},"canReceiveFrom":{"example":["A+","A-","O+","O-"],"type":"array","items":{"type":"string"}}},"required":["id","type","antigens","canDonateTo","canReceiveFrom"]},"AllergyCatalogOptionDto":{"type":"object","properties":{"id":{"type":"number"},"code":{"type":"string"},"name":{"type":"string"},"categoryId":{"type":"number"},"aliases":{"type":"array","items":{"type":"string"}},"active":{"type":"boolean"}},"required":["id","code","name","active"]},"AllergyCatalogsDto":{"type":"object","properties":{"categories":{"type":"array","items":{"$ref":"#/components/schemas/AllergyCatalogOptionDto"}},"allergens":{"type":"array","items":{"$ref":"#/components/schemas/AllergyCatalogOptionDto"}},"allergyTypes":{"type":"array","items":{"$ref":"#/components/schemas/AllergyCatalogOptionDto"}},"clinicalStatuses":{"type":"array","items":{"$ref":"#/components/schemas/AllergyCatalogOptionDto"}},"verificationStatuses":{"type":"array","items":{"$ref":"#/components/schemas/AllergyCatalogOptionDto"}},"reactions":{"type":"array","items":{"$ref":"#/components/schemas/AllergyCatalogOptionDto"}},"reactionSeverities":{"type":"array","items":{"$ref":"#/components/schemas/AllergyCatalogOptionDto"}},"criticalityLevels":{"type":"array","items":{"$ref":"#/components/schemas/AllergyCatalogOptionDto"}}},"required":["categories","allergens","allergyTypes","clinicalStatuses","verificationStatuses","reactions","reactionSeverities","criticalityLevels"]},"ActivityScheduleDto":{"type":"object","properties":{"day":{"type":"string","description":"Día de la sesión","example":"Monday o 2026-01-23"},"dateFrom":{"type":"string","description":"Fecha desde (alternativa a day)","example":"2026-01-23"},"dateTo":{"type":"string","description":"Fecha hasta (alternativa a day)","example":"2026-01-23"},"startTime":{"type":"string","description":"Hora de inicio","example":"09:00"},"endTime":{"type":"string","description":"Hora de fin","example":"12:00"},"topic":{"type":"string","description":"Tema de la sesión"},"facilitator":{"type":"string","description":"Facilitador de la sesión"},"location":{"type":"string","description":"Ubicación específica de la sesión"}},"required":["day","startTime","endTime"]},"ActivitySchedulesDto":{"type":"object","properties":{"sessions":{"description":"Sesiones de la actividad","type":"array","items":{"$ref":"#/components/schemas/ActivityScheduleDto"}},"timezone":{"type":"string","description":"Zona horaria","example":"America/Santo_Domingo"},"duration":{"type":"number","description":"Duración total en minutos"}}},"ActivityRequirementsDto":{"type":"object","properties":{"minimumAge":{"type":"number","description":"Edad mínima requerida"},"maximumAge":{"type":"number","description":"Edad máxima permitida"},"membershipRequired":{"type":"boolean","description":"Membresía requerida"},"specialSkills":{"description":"Habilidades especiales requeridas","example":["swimming","hiking"],"type":"array","items":{"type":"string"}},"documents":{"description":"Documentos requeridos","example":["ID copy","medical certificate"],"type":"array","items":{"type":"string"}},"prerequisites":{"description":"Prerrequisitos de cursos","type":"array","items":{"type":"string"}},"healthRequirements":{"description":"Requisitos de salud","type":"array","items":{"type":"string"}},"equipmentRequired":{"description":"Equipo requerido","type":"array","items":{"type":"string"}}}},"ActivitySettingsDto":{"type":"object","properties":{"allowWaitingList":{"type":"boolean","description":"Permitir lista de espera"},"autoConfirmRegistration":{"type":"boolean","description":"Confirmar registro automáticamente"},"requiresApproval":{"type":"boolean","description":"Requiere aprobación manual"},"allowCancellation":{"type":"boolean","description":"Permitir cancelaciones"},"cancellationDeadline":{"type":"string","description":"Fecha límite para cancelaciones"},"refundPolicy":{"type":"string","description":"Política de reembolso","enum":["full","partial","none"],"example":"partial"},"partialRefundPercentage":{"type":"number","description":"Porcentaje de reembolso parcial"},"allowPartialPayments":{"type":"boolean","description":"Permitir pagos parciales"}}},"CreateActivityDto":{"type":"object","properties":{"church":{"type":"string","description":"Localidad donde se realiza la actividad","example":"MLR","maxLength":5},"name":{"type":"string","description":"Nombre de la actividad","example":"Conferencia de Liderazgo 2025"},"type":{"type":"string","description":"Tipo de actividad","enum":["1","2","3","4","5","6","7"],"example":"7"},"startDate":{"type":"string","description":"Fecha y hora de inicio","example":"2025-12-01T09:00:00Z"},"endDate":{"type":"string","description":"Fecha y hora de finalización","example":"2025-12-03T17:00:00Z"},"schedules":{"description":"Horarios detallados de la actividad","allOf":[{"$ref":"#/components/schemas/ActivitySchedulesDto"}]},"description":{"type":"string","description":"Descripción detallada de la actividad","example":"Conferencia de tres días enfocada en el desarrollo de líderes cristianos..."},"currency":{"type":"string","description":"Moneda del costo","enum":["USD","DOP","EUR"],"default":"USD"},"cost":{"type":"number","description":"Costo de participación","example":150,"minimum":0},"maxQuota":{"type":"number","description":"Cupo máximo de participantes","example":50,"minimum":1},"locationPlace":{"type":"string","description":"Lugar específico del evento","example":"Auditorio Principal, Iglesia Manantiales"},"registrationDeadline":{"type":"string","description":"Fecha límite para inscripciones","example":"2025-11-25T23:59:59Z"},"requirements":{"description":"Requisitos para participación","allOf":[{"$ref":"#/components/schemas/ActivityRequirementsDto"}]},"activitySettings":{"description":"Configuraciones especiales","allOf":[{"$ref":"#/components/schemas/ActivitySettingsDto"}]},"categories":{"description":"Categorías de la actividad","example":["conferencia","liderazgo","capacitación"],"type":"array","items":{"type":"string"}},"tags":{"description":"Tags para búsqueda","example":["leadership","training","2025"],"type":"array","items":{"type":"string"}},"organizingMinistryId":{"type":"number","description":"ID del ministerio organizador"},"responsibleUserId":{"type":"number","description":"ID del usuario responsable"}},"required":["church","name","type","startDate","description","responsibleUserId"]},"ActivityResponseDto":{"type":"object","properties":{"id":{"type":"number","description":"ID de la actividad"},"location":{"type":"string","description":"Localidad"},"activityName":{"type":"string","description":"Nombre de la actividad"},"activityType":{"type":"string","description":"Tipo de actividad","enum":["1","2","3","4","5","6","7"]},"startDate":{"format":"date-time","type":"string","description":"Fecha de inicio"},"endDate":{"format":"date-time","type":"string","description":"Fecha de finalización"},"schedules":{"type":"object","description":"Horarios detallados"},"description":{"type":"string","description":"Descripción"},"currency":{"type":"string","description":"Moneda","enum":["USD","DOP","EUR"]},"cost":{"type":"number","description":"Costo"},"maxQuota":{"type":"number","description":"Cupo máximo"},"currentQuota":{"type":"number","description":"Cupo actual"},"status":{"type":"string","description":"Estado: '0'=Cerrada, '1'=Abierta","example":"1"},"locationPlace":{"type":"string","description":"Lugar específico"},"isActive":{"type":"boolean","description":"Está activa"},"registrationDeadline":{"format":"date-time","type":"string","description":"Fecha límite de inscripciones"},"requirements":{"type":"object","description":"Requisitos"},"activitySettings":{"type":"object","description":"Configuraciones"},"categories":{"description":"Categorías","type":"array","items":{"type":"string"}},"tags":{"description":"Tags","type":"array","items":{"type":"string"}},"organizingMinistryId":{"type":"number","description":"ID del ministerio organizador"},"responsibleUserId":{"type":"number","description":"ID del usuario responsable"},"createdBy":{"type":"string","description":"Usuario que creó"},"createdAt":{"format":"date-time","type":"string","description":"Fecha de creación"},"updatedBy":{"type":"string","description":"Usuario que actualizó"},"updatedAt":{"format":"date-time","type":"string","description":"Fecha de actualización"},"availableQuota":{"type":"number","description":"Cupos disponibles"},"hasAvailableQuota":{"type":"boolean","description":"Hay cupos disponibles"},"occupancyPercentage":{"type":"number","description":"Porcentaje de ocupación"},"durationInDays":{"type":"number","description":"Duración en días"},"isUpcoming":{"type":"boolean","description":"Está por venir"},"isInProgress":{"type":"boolean","description":"Está en progreso"},"isPast":{"type":"boolean","description":"Ya terminó"},"isRegistrationOpen":{"type":"boolean","description":"Inscripciones abiertas"},"daysUntilStart":{"type":"number","description":"Días hasta inicio"}},"required":["id","location","activityName","activityType","startDate","endDate","description","currency","cost","currentQuota","status","isActive","responsibleUserId","createdBy","createdAt","updatedBy","updatedAt","hasAvailableQuota","occupancyPercentage","durationInDays","isUpcoming","isInProgress","isPast","isRegistrationOpen","daysUntilStart"]},"PaginatedActivitiesResponseDto":{"type":"object","properties":{"data":{"description":"Lista de actividades","type":"array","items":{"$ref":"#/components/schemas/ActivityResponseDto"}},"total":{"type":"number","description":"Total de registros"},"page":{"type":"number","description":"Página actual"},"limit":{"type":"number","description":"Registros por página"},"totalPages":{"type":"number","description":"Total de páginas"},"hasPreviousPage":{"type":"boolean","description":"Tiene página anterior"},"hasNextPage":{"type":"boolean","description":"Tiene página siguiente"}},"required":["data","total","page","limit","totalPages","hasPreviousPage","hasNextPage"]},"ActivityAvailabilityDto":{"type":"object","properties":{"activityId":{"type":"number","description":"ID de la actividad"},"activityName":{"type":"string","description":"Nombre de la actividad"},"maxQuota":{"type":"number","description":"Cupo máximo"},"currentQuota":{"type":"number","description":"Cupo actual"},"availableQuota":{"type":"number","description":"Cupos disponibles"},"hasAvailableQuota":{"type":"boolean","description":"Hay cupos disponibles"},"occupancyPercentage":{"type":"number","description":"Porcentaje de ocupación"},"allowWaitingList":{"type":"boolean","description":"Permite lista de espera"},"waitingListCount":{"type":"number","description":"Número de personas en lista de espera"},"isRegistrationOpen":{"type":"boolean","description":"Inscripciones abiertas"},"registrationDeadline":{"format":"date-time","type":"string","description":"Fecha límite de inscripciones"},"daysUntilRegistrationDeadline":{"type":"number","description":"Días restantes para inscripción"}},"required":["activityId","activityName","maxQuota","currentQuota","availableQuota","hasAvailableQuota","occupancyPercentage","allowWaitingList","waitingListCount","isRegistrationOpen","registrationDeadline","daysUntilRegistrationDeadline"]},"UpdateActivityDto":{"type":"object","properties":{"church":{"type":"string","description":"Localidad donde se realiza la actividad","example":"MLR","maxLength":5},"name":{"type":"string","description":"Nombre de la actividad","example":"Conferencia de Liderazgo 2025"},"type":{"type":"string","description":"Tipo de actividad","enum":["1","2","3","4","5","6","7"],"example":"7"},"startDate":{"type":"string","description":"Fecha y hora de inicio","example":"2025-12-01T09:00:00Z"},"endDate":{"type":"string","description":"Fecha y hora de finalización","example":"2025-12-03T17:00:00Z"},"schedules":{"description":"Horarios detallados de la actividad","allOf":[{"$ref":"#/components/schemas/ActivitySchedulesDto"}]},"description":{"type":"string","description":"Descripción detallada de la actividad","example":"Conferencia de tres días enfocada en el desarrollo de líderes cristianos..."},"currency":{"type":"string","description":"Moneda del costo","enum":["USD","DOP","EUR"],"default":"USD"},"cost":{"type":"number","description":"Costo de participación","example":150,"minimum":0},"maxQuota":{"type":"number","description":"Cupo máximo de participantes","example":50,"minimum":1},"locationPlace":{"type":"string","description":"Lugar específico del evento","example":"Auditorio Principal, Iglesia Manantiales"},"registrationDeadline":{"type":"string","description":"Fecha límite para inscripciones","example":"2025-11-25T23:59:59Z"},"requirements":{"description":"Requisitos para participación","allOf":[{"$ref":"#/components/schemas/ActivityRequirementsDto"}]},"activitySettings":{"description":"Configuraciones especiales","allOf":[{"$ref":"#/components/schemas/ActivitySettingsDto"}]},"categories":{"description":"Categorías de la actividad","example":["conferencia","liderazgo","capacitación"],"type":"array","items":{"type":"string"}},"tags":{"description":"Tags para búsqueda","example":["leadership","training","2025"],"type":"array","items":{"type":"string"}},"organizingMinistryId":{"type":"number","description":"ID del ministerio organizador"},"responsibleUserId":{"type":"number","description":"ID del usuario responsable"}}},"AddonSelectionDto":{"type":"object","properties":{"addonId":{"type":"number","example":1},"quantity":{"type":"number","example":2,"default":1}},"required":["addonId","quantity"]},"EmergencyContactDto":{"type":"object","properties":{"name":{"type":"string","description":"Nombre del contacto de emergencia","example":"Juan Pérez"},"phone":{"type":"string","description":"Teléfono del contacto","example":"809-555-0123"},"relationship":{"type":"string","description":"Relación con el participante","example":"padre"}},"required":["name","phone","relationship"]},"ParticipantAdditionalInfoDto":{"type":"object","properties":{"emergencyContact":{"description":"Contacto de emergencia","allOf":[{"$ref":"#/components/schemas/EmergencyContactDto"}]},"dietaryRestrictions":{"description":"Restricciones dietéticas","example":["vegetarian","gluten-free"],"type":"array","items":{"type":"string"}},"medicalInfo":{"type":"string","description":"Información médica importante","example":"Alérgico a mariscos"},"transportationNeeds":{"type":"string","description":"Necesidades de transporte","example":"bus"},"roomingPreferences":{"type":"string","description":"Preferencias de alojamiento","example":"single"},"specialRequests":{"type":"string","description":"Solicitudes especiales","example":"Necesita silla accesible"},"groupPreferences":{"description":"Preferencias de grupo","type":"array","items":{"type":"string"}},"previousExperience":{"type":"boolean","description":"Tiene experiencia previa en actividades similares"},"skillLevel":{"type":"string","description":"Nivel de habilidad","enum":["beginner","intermediate","advanced"]},"equipmentProvided":{"description":"Equipo que puede proporcionar","type":"array","items":{"type":"string"}},"additionalDocuments":{"description":"Documentos adicionales proporcionados","type":"array","items":{"type":"string"}}}},"NotificationPreferencesDto":{"type":"object","properties":{"email":{"type":"boolean","description":"Recibir notificaciones por email","default":true},"sms":{"type":"boolean","description":"Recibir notificaciones por SMS","default":false},"push":{"type":"boolean","description":"Recibir notificaciones push","default":true},"reminders":{"type":"boolean","description":"Recibir recordatorios","default":true},"updates":{"type":"boolean","description":"Recibir actualizaciones de la actividad","default":true},"marketing":{"type":"boolean","description":"Recibir material de marketing","default":false}}},"CreateParticipantDto":{"type":"object","properties":{"activityId":{"type":"number","description":"ID de la actividad"},"memberId":{"type":"number","description":"ID del miembro participante (requerido para actividades de membresía)"},"participantName":{"type":"string","description":"Nombre completo del participante (requerido si no se proporciona memberId)","example":"Juan Pérez"},"participantEmail":{"type":"string","description":"Email del participante (opcional, recomendado para notificaciones)","example":"juan.perez@example.com"},"participantPhone":{"type":"string","description":"Teléfono del participante","example":"809-555-0123"},"participantIdentification":{"type":"string","description":"Identificación/cédula del participante (opcional, usado para verificación de duplicados)","example":"001-1234567-8"},"paymentDeadline":{"type":"string","description":"Fecha límite de pago personalizada","example":"2025-12-15T23:59:59Z"},"totalAmount":{"type":"number","description":"Monto total personalizado (override del costo de actividad)"},"addons":{"description":"Add-ons seleccionados durante el registro","type":"array","items":{"$ref":"#/components/schemas/AddonSelectionDto"}},"comment":{"type":"string","description":"Comentarios sobre la inscripción"},"schedules":{"type":"string","description":"Horarios de la actividad (JSON string)","example":"[{\"from\":\"2025-12-12\",\"to\":\"2025-12-13\",\"houre\":\"\"}]"},"additionalInfo":{"description":"Información adicional del participante","allOf":[{"$ref":"#/components/schemas/ParticipantAdditionalInfoDto"}]},"notificationPreferences":{"description":"Preferencias de notificación","allOf":[{"$ref":"#/components/schemas/NotificationPreferencesDto"}]}},"required":["activityId"]},"BulkCreateParticipantDto":{"type":"object","properties":{"activityId":{"type":"number","description":"ID de la actividad"},"memberIds":{"description":"Lista de IDs de miembros para registrar","example":[1,2,3,4,5],"type":"array","items":{"type":"number"}},"paymentDeadline":{"type":"string","description":"Fecha límite de pago para todos"},"totalAmount":{"type":"number","description":"Monto total personalizado para todos"},"addons":{"description":"Add-ons a registrar para todos los participantes del lote","type":"array","items":{"$ref":"#/components/schemas/AddonSelectionDto"}},"comment":{"type":"string","description":"Comentarios para todos los registros"}},"required":["activityId","memberIds"]},"UpdateParticipantDto":{"type":"object","properties":{"participationStatus":{"type":"string","description":"Estado de participación","enum":["REGISTERED","CONFIRMED","WAITING","ATTENDED","ABSENT","CANCELLED","WITHDRAWN","PENDING_REDEMPTION"]},"paymentStatus":{"type":"string","description":"Estado de pago","enum":["PENDING","PAID","PARTIAL","EXONERATED","REFUNDED","DUE","NOT_APPLICABLE"]},"totalAmount":{"type":"number","description":"Monto total"},"paidAmount":{"type":"number","description":"Monto pagado"},"pendingAmountValue":{"type":"number","description":"Monto pendiente"},"allowFinancialEdit":{"type":"boolean","description":"Habilita la edición de campos financieros (total/pagado/pendiente) en este cambio","example":false,"default":false},"financialEditReason":{"type":"string","description":"Motivo del cambio de datos financieros","example":"Ajuste autorizado por reembolso parcial"},"discount":{"type":"number","description":"Descuento acumulado aplicado al participante"},"paymentDeadline":{"type":"string","description":"Fecha límite de pago"},"paymentReference":{"type":"string","description":"Referencia de pago"},"comment":{"type":"string","description":"Comentarios"},"additionalInfo":{"description":"Información adicional","allOf":[{"$ref":"#/components/schemas/ParticipantAdditionalInfoDto"}]},"notificationPreferences":{"description":"Preferencias de notificación","allOf":[{"$ref":"#/components/schemas/NotificationPreferencesDto"}]},"evaluationScore":{"type":"number","description":"Puntuación de evaluación (1-10)"},"evaluationComments":{"type":"string","description":"Comentarios de evaluación"},"certificateIssued":{"type":"string","description":"Certificado emitido"},"isActive":{"type":"boolean","description":"Participante activo"},"status":{"type":"string","description":"Estado legacy (0=cancelado, 1=activo)","example":"1"}}},"CheckInParticipantDto":{"type":"object","properties":{"comment":{"type":"string","description":"Comentarios del check-in"}}},"CheckOutParticipantDto":{"type":"object","properties":{"comment":{"type":"string","description":"Comentarios del check-out"},"evaluationScore":{"type":"number","description":"Puntuación de evaluación (1-10)"},"evaluationComments":{"type":"string","description":"Comentarios de evaluación"}}},"BulkConfirmParticipantsDto":{"type":"object","properties":{"participantIds":{"description":"IDs de participantes para la acción masiva","type":"array","items":{"type":"number"}},"comment":{"type":"string","description":"Comentario para la acción masiva"},"confirmedAt":{"type":"string","description":"Fecha de confirmación personalizada"}},"required":["participantIds"]},"BulkCheckInParticipantsDto":{"type":"object","properties":{"participantIds":{"description":"IDs de participantes para la acción masiva","type":"array","items":{"type":"number"}},"comment":{"type":"string","description":"Comentario para la acción masiva"},"checkedInAt":{"type":"string","description":"Fecha de check-in personalizada"}},"required":["participantIds"]},"BulkCheckOutParticipantsDto":{"type":"object","properties":{"participantIds":{"description":"IDs de participantes para la acción masiva","type":"array","items":{"type":"number"}},"comment":{"type":"string","description":"Comentario para la acción masiva"},"checkedOutAt":{"type":"string","description":"Fecha de check-out personalizada"}},"required":["participantIds"]},"RemoveParticipantDto":{"type":"object","properties":{"activityId":{"type":"number","description":"ID de la actividad"},"reason":{"type":"string","description":"Motivo de la cancelación","default":"Cancelado por administrador"},"notifyMember":{"type":"boolean","description":"Notificar al miembro","default":false}}},"RestoreParticipantDto":{"type":"object","properties":{"reason":{"type":"string","description":"Reason for restoring the participant","example":"Payment issue resolved, restoring registration","maxLength":500},"forceWaitingList":{"type":"boolean","description":"Force participant to waiting list even if quota is available","example":false,"default":false}}},"ActivityAttendanceScanEventEntity":{"type":"object","properties":{"id":{"type":"number"},"activityId":{"type":"number"},"participantId":{"type":"number"},"action":{"type":"string","enum":["LOOKUP","CHECKIN","CHECKOUT"]},"result":{"type":"string","enum":["SUCCESS","REJECTED"]},"scanCode":{"type":"string"},"reason":{"type":"string"},"notes":{"type":"string"},"previousParticipationStatus":{"type":"string","enum":["REGISTERED","CONFIRMED","WAITING","ATTENDED","ABSENT","CANCELLED","WITHDRAWN","PENDING_REDEMPTION"]},"newParticipationStatus":{"type":"string","enum":["REGISTERED","CONFIRMED","WAITING","ATTENDED","ABSENT","CANCELLED","WITHDRAWN","PENDING_REDEMPTION"]},"checkedInAt":{"format":"date-time","type":"string"},"checkedOutAt":{"format":"date-time","type":"string"},"createdBy":{"type":"string"},"createdAt":{"format":"date-time","type":"string"}},"required":["id","activityId","action","result","scanCode","createdAt"]},"ActivityParticipantScanCodeResponseDto":{"type":"object","properties":{"participantId":{"type":"number"},"activityId":{"type":"number"},"memberCode":{"type":"string"},"participantName":{"type":"string"},"barcodeValue":{"type":"string","description":"Valor oficial para codigo de barra","example":"ACTP-CODE-Q2R4R7M6H8K1P9S3T5V0X2Y4"},"qrPayload":{"type":"string","description":"Valor oficial para QR. Debe ser igual al codigo de barra.","example":"ACTP-CODE-Q2R4R7M6H8K1P9S3T5V0X2Y4"},"generatedAt":{"type":"string"}},"required":["participantId","activityId","participantName","barcodeValue","qrPayload","generatedAt"]},"ActivityParticipantScanCodeResendDto":{"type":"object","properties":{"channel":{"type":"string","description":"Canal de reenvio solicitado. Actualmente se usa correo cuando esta disponible.","enum":["email"],"default":"email"}}},"ActivityParticipantScanCodeResendResponseDto":{"type":"object","properties":{"success":{"type":"boolean"},"message":{"type":"string"},"participantId":{"type":"number"},"activityId":{"type":"number"},"channel":{"type":"string"},"recipientEmail":{"type":"string"},"emailId":{"type":"number"},"scanCode":{"type":"string"},"queuedAt":{"type":"string"}},"required":["success","message","participantId","activityId","channel","recipientEmail","emailId","scanCode","queuedAt"]},"ActivityCheckInOutScanDto":{"type":"object","properties":{"activityId":{"type":"number","description":"ID de la actividad donde se opera el ingreso/salida. Opcional cuando el codigo escaneado identifica una participacion unica."},"scanCode":{"type":"string","description":"QR, codigo de barra, ID de participante, codigo de miembro o identificacion","example":"ACTP-CODE-Q2R4R7M6H8K1P9S3T5V0X2Y4"},"comment":{"type":"string","description":"Comentario operativo del escaneo"},"scannedAt":{"type":"string","description":"Fecha/hora operacional enviada por el cliente"}},"required":["scanCode"]},"ActivityCheckOutScanDto":{"type":"object","properties":{"activityId":{"type":"number","description":"ID de la actividad donde se opera el ingreso/salida. Opcional cuando el codigo escaneado identifica una participacion unica."},"scanCode":{"type":"string","description":"QR, codigo de barra, ID de participante, codigo de miembro o identificacion","example":"ACTP-CODE-Q2R4R7M6H8K1P9S3T5V0X2Y4"},"comment":{"type":"string","description":"Comentario operativo del escaneo"},"scannedAt":{"type":"string","description":"Fecha/hora operacional enviada por el cliente"},"evaluationScore":{"type":"number","description":"Puntuacion de evaluacion (1-10)"},"evaluationComments":{"type":"string","description":"Comentarios de evaluacion"}},"required":["scanCode"]},"PersonAllergyReactionDto":{"type":"object","properties":{"reactionId":{"type":"number"},"customReactionName":{"type":"string"},"severityId":{"type":"number"},"notes":{"type":"string"}}},"PersonAllergyDto":{"type":"object","properties":{"id":{"type":"number"},"allergenId":{"type":"number"},"customAllergenName":{"type":"string"},"categoryId":{"type":"number"},"allergyTypeId":{"type":"number"},"clinicalStatusId":{"type":"number"},"verificationStatusId":{"type":"number"},"criticalityId":{"type":"number"},"exposureContext":{"type":"string","enum":["FOOD","MEDICATION","PROCEDURE","ENVIRONMENT","BIOLOGIC","OTHER"]},"reactions":{"type":"array","items":{"$ref":"#/components/schemas/PersonAllergyReactionDto"}},"notes":{"type":"string"},"isActive":{"type":"boolean"}}},"MemberChildDto":{"type":"object","properties":{}},"CreateMemberDto":{"type":"object","properties":{"documentType":{"type":"string","description":"Tipo de documento de identificación (ID_CARD=Cédula, PASSPORT=Pasaporte, RNC, NOT_SPECIFIED)","enum":["ID_CARD","PASSPORT","RNC","NOT_SPECIFIED"],"default":"NOT_SPECIFIED"},"sex":{"type":"string","description":"Sexo (MALE=Masculino, FEMALE=Femenino)","enum":["MALE","FEMALE"]},"maritalStatus":{"type":"string","description":"Estado civil (SINGLE, MARRIED, DIVORCED, WIDOWER, COMMON_LAW_MARRIAGE)","enum":["SINGLE","MARRIED","DIVORCED","WIDOWER","COMMON_LAW_MARRIAGE"],"default":"SINGLE"},"memberType":{"type":"string","description":"Tipo de membresía","enum":["REGULAR","TRANSFERRED","ADHERENT"],"default":"REGULAR"},"allergyRecords":{"description":"Registros estructurados de alergias o intolerancias","type":"array","items":{"$ref":"#/components/schemas/PersonAllergyDto"}},"childrenDetails":{"description":"Datos opcionales de hijos del miembro","type":"array","items":{"$ref":"#/components/schemas/MemberChildDto"}},"recordState":{"type":"string","description":"Estado de captura progresiva del registro","enum":["DRAFT","IN_PROGRESS","INCOMPLETE","COMPLETE"],"default":"COMPLETE"}},"required":["sex"]},"UpdateMemberDto":{"type":"object","properties":{}},"AddMemberMinistriesDto":{"type":"object","properties":{"ministryIds":{"description":"IDs de ministerios a agregar","example":[1,3,5],"type":"array","items":{"type":"number"}}},"required":["ministryIds"]},"AddMemberMinistryGroupsDto":{"type":"object","properties":{"groupIds":{"description":"IDs de grupos de ministerio a agregar","example":[2,4,6],"type":"array","items":{"type":"number"}}},"required":["groupIds"]},"RemoveMemberMinistriesDto":{"type":"object","properties":{"ministryIds":{"description":"IDs de ministerios a remover","example":[1,3],"type":"array","items":{"type":"number"}}},"required":["ministryIds"]},"RemoveMemberMinistryGroupsDto":{"type":"object","properties":{"groupIds":{"description":"IDs de grupos de ministerio a remover","example":[2,4],"type":"array","items":{"type":"number"}}},"required":["groupIds"]},"SyncMemberMinistriesDto":{"type":"object","properties":{"ministryIds":{"description":"IDs de ministerios a sincronizar (reemplaza todos los existentes)","example":[1,3,5,7],"type":"array","items":{"type":"number"}},"groupIds":{"description":"IDs de grupos de ministerio a sincronizar (reemplaza todos los existentes)","example":[2,4,6],"type":"array","items":{"type":"number"}}}},"SetMinistryLeaderDto":{"type":"object","properties":{"ministryId":{"type":"number","description":"ID del ministerio","example":1},"isLeader":{"type":"boolean","description":"Si el miembro es líder del ministerio","example":true}},"required":["ministryId","isLeader"]},"SetMinistryGroupLeaderDto":{"type":"object","properties":{"groupId":{"type":"number","description":"ID del grupo de ministerio","example":1},"isLeader":{"type":"boolean","description":"Si el miembro es líder del grupo","example":true}},"required":["groupId","isLeader"]},"UpdateMinistriesLeadershipDto":{"type":"object","properties":{"ministries":{"description":"Array de ministerios con su estado de liderazgo","example":[{"ministryId":1,"isLeader":true},{"ministryId":2,"isLeader":false}],"type":"array","items":{"$ref":"#/components/schemas/SetMinistryLeaderDto"}}},"required":["ministries"]},"UpdateMinistryGroupsLeadershipDto":{"type":"object","properties":{"groups":{"description":"Array de grupos con su estado de liderazgo","example":[{"groupId":1,"isLeader":true},{"groupId":2,"isLeader":false}],"type":"array","items":{"$ref":"#/components/schemas/SetMinistryGroupLeaderDto"}}},"required":["groups"]},"AddMemberAsLeaderDto":{"type":"object","properties":{"ministryIds":{"description":"IDs de los ministerios donde será líder","example":[1,3,5],"type":"array","items":{"type":"number"}},"groupIds":{"description":"IDs de los grupos de ministerio donde será líder","example":[2,4],"type":"array","items":{"type":"number"}}}},"CreateImageDto":{"type":"object","properties":{"ownerId":{"type":"number","description":"ID del propietario de la imagen","example":123},"ownerType":{"type":"string","description":"Tipo de propietario de la imagen","example":"user"},"type":{"type":"string","description":"Tipo de imagen","example":"profile"},"visibility":{"type":"string","description":"Visibilidad de la imagen","example":"public"},"description":{"type":"string","description":"Descripción de la imagen","example":"Foto de perfil del usuario"},"tags":{"description":"Etiquetas asociadas a la imagen","example":["perfil","usuario"],"type":"array","items":{"type":"string"}},"allowedRoles":{"description":"Roles permitidos para acceder a la imagen","example":["admin","editor"],"type":"array","items":{"type":"string"}},"allowedUsers":{"description":"Usuarios permitidos para acceder a la imagen","example":["user1","user2"],"type":"array","items":{"type":"string"}},"isPrimary":{"type":"boolean","description":"Indica si la imagen es la principal","example":true},"sortOrder":{"type":"number","description":"Orden de clasificación de la imagen","example":1},"notes":{"type":"string","description":"Notas adicionales sobre la imagen","example":"Imagen tomada en la sesión de fotos de verano"}},"required":["ownerType","type"]},"UpdateImageDto":{"type":"object","properties":{"status":{"type":"string","description":"Estado de la imagen","example":"active"},"visibility":{"type":"string","description":"Visibilidad de la imagen","example":"public"}}},"MaritalChildDecisionDto":{"type":"object","properties":{"childKey":{"type":"string"},"action":{"type":"string","enum":["KEEP_VISIBLE","HIDE_CURRENT_SUMMARY","HISTORY_ONLY"]},"pastoralNote":{"type":"string","maxLength":500}},"required":["childKey","action"]},"CreateMaritalProcessDto":{"type":"object","properties":{"processType":{"type":"string","enum":["CLOSE_LINK","CORRECT_LINK","CHANGE_SPOUSE","ADMIN_REPAIR"]},"personAType":{"type":"string","enum":["member","new_believer"]},"personAId":{"type":"number"},"personBType":{"type":"string","enum":["member","new_believer"]},"personBId":{"type":"number"},"church":{"type":"string","maxLength":5},"spouseLinkId":{"type":"number"},"reason":{"type":"string","enum":["DIVORCE","SEPARATION","WIDOWHOOD","ADMIN_CORRECTION","CAPTURE_ERROR_ANNULMENT","OTHER"]},"reasonDetail":{"type":"string","maxLength":200},"eventDate":{"type":"string","example":"2026-06-24"},"notes":{"type":"string"},"requestedBy":{"type":"string","maxLength":100},"metadata":{"type":"object"},"childDecisions":{"type":"array","items":{"$ref":"#/components/schemas/MaritalChildDecisionDto"}}},"required":["processType","personAType","personAId","personBType","personBId"]},"UpdateMaritalProcessDto":{"type":"object","properties":{"status":{"type":"string","enum":["DRAFT","IN_REVIEW","COMPLETED","CANCELLED","REJECTED"]},"reason":{"type":"string","enum":["DIVORCE","SEPARATION","WIDOWHOOD","ADMIN_CORRECTION","CAPTURE_ERROR_ANNULMENT","OTHER"]},"reasonDetail":{"type":"string","maxLength":200},"eventDate":{"type":"string","example":"2026-06-24"},"notes":{"type":"string"},"requestedBy":{"type":"string","maxLength":100},"metadata":{"type":"object"},"childDecisions":{"type":"array","items":{"$ref":"#/components/schemas/MaritalChildDecisionDto"}}}},"CompleteMaritalProcessDto":{"type":"object","properties":{"notes":{"type":"string"}}},"CancelMaritalProcessDto":{"type":"object","properties":{"cancelReason":{"type":"string"}},"required":["cancelReason"]},"CreateFormationDto":{"type":"object","properties":{"code":{"type":"integer","description":"Código único de la formación","example":1},"name":{"type":"string","description":"Nombre de la formación académica","example":"INGENIERÍA DE SISTEMAS","maxLength":80},"studyType":{"type":"string","description":"Tipo de estudio","example":"UNIVERSITARIA","enum":["PRIMARIA","SECUNDARIA","TECNICO UNIVERSITARIO","TECNICO NO UNIVERSITARIO","TECNOLOGICA","INGENIERIA","UNIVERSITARIO","ESPECIALIZACION","MAESTRIA","DOCTORADO"]},"activo":{"type":"boolean","description":"Estado activo/inactivo","example":true,"default":true}},"required":["name","studyType"]},"UpdateFormationDto":{"type":"object","properties":{"code":{"type":"integer","description":"Código único de la formación","example":1},"name":{"type":"string","description":"Nombre de la formación académica","example":"INGENIERÍA DE SISTEMAS","maxLength":80},"studyType":{"type":"string","description":"Tipo de estudio","example":"UNIVERSITARIA","enum":["PRIMARIA","SECUNDARIA","TECNICO UNIVERSITARIO","TECNICO NO UNIVERSITARIO","TECNOLOGICA","INGENIERIA","UNIVERSITARIO","ESPECIALIZACION","MAESTRIA","DOCTORADO"]},"activo":{"type":"boolean","description":"Estado activo/inactivo","example":true,"default":true}}},"AssignFormationDto":{"type":"object","properties":{"memberId":{"type":"number","example":123,"description":"ID del miembro"},"formationCode":{"type":"number","example":8,"description":"Código de la formación académica (del catálogo)"},"status":{"type":"string","enum":["EN_CURSO","COMPLETADO","INCOMPLETO"],"example":"COMPLETADO","description":"Estado de la formación"},"institution":{"type":"string","example":"Universidad Autónoma de Santo Domingo","description":"Institución educativa"},"startDate":{"type":"string","example":"2015-01-15","description":"Fecha de inicio de la formación (formato YYYY-MM-DD)"},"endDate":{"type":"string","example":"2019-12-20","description":"Fecha de finalización de la formación (formato YYYY-MM-DD)"},"isPrimary":{"type":"boolean","example":false,"description":"Marcar como formación principal del miembro"}},"required":["memberId","formationCode"]},"UpdateMemberFormationDto":{"type":"object","properties":{"status":{"type":"string","enum":["EN_CURSO","COMPLETADO","INCOMPLETO"],"description":"Actualizar estado de la formación"},"institution":{"type":"string","description":"Actualizar institución educativa"},"startDate":{"type":"string","description":"Actualizar fecha de inicio"},"endDate":{"type":"string","description":"Actualizar fecha de finalización"},"isPrimary":{"type":"boolean","description":"Actualizar flag de formación principal"}}},"CreateTradeDto":{"type":"object","properties":{"code":{"type":"integer","description":"Código único del oficio","example":1},"name":{"type":"string","description":"Nombre del oficio","example":"INGENIERO","maxLength":25},"isActive":{"type":"boolean","description":"Estado activo/inactivo","example":true,"default":true}},"required":["name"]},"UpdateTradeDto":{"type":"object","properties":{"code":{"type":"integer","description":"Código único del oficio","example":1},"name":{"type":"string","description":"Nombre del oficio","example":"INGENIERO","maxLength":25},"isActive":{"type":"boolean","description":"Estado activo/inactivo","example":true,"default":true}}},"AssignTradeDto":{"type":"object","properties":{"memberId":{"type":"number","example":123,"description":"ID del miembro"},"tradeCode":{"type":"number","example":5,"description":"Código del oficio (del catálogo)"},"proficiencyLevel":{"type":"string","enum":["BASICO","INTERMEDIO","AVANZADO","EXPERTO"],"example":"INTERMEDIO","description":"Nivel de dominio en el oficio"},"yearsExperience":{"type":"number","example":5,"description":"Años de experiencia en el oficio","minimum":0,"maximum":80},"certifications":{"type":"string","example":"Certificado de electricista, Curso OSHA","description":"Certificaciones relevantes separadas por comas"},"isPrimary":{"type":"boolean","example":false,"description":"Marcar como oficio principal del miembro"}},"required":["memberId","tradeCode"]},"UpdateMemberTradeDto":{"type":"object","properties":{"proficiencyLevel":{"type":"string","enum":["BASICO","INTERMEDIO","AVANZADO","EXPERTO"],"description":"Actualizar nivel de dominio"},"yearsExperience":{"type":"number","description":"Actualizar años de experiencia","minimum":0,"maximum":80},"certifications":{"type":"string","description":"Actualizar certificaciones"},"isPrimary":{"type":"boolean","description":"Actualizar flag de oficio principal"}}},"CreateKnowledgeAreaDto":{"type":"object","properties":{"name":{"type":"string","example":"Ingeniería de Software","description":"Nombre del área de conocimiento"},"description":{"type":"string","example":"Desarrollo, arquitectura y diseño de software","description":"Descripción del área"},"isActive":{"type":"boolean","example":true,"description":"Indica si el área está activa","default":true}},"required":["name"]},"UpdateKnowledgeAreaDto":{"type":"object","properties":{"name":{"type":"string","example":"Ingeniería de Software","description":"Nombre del área de conocimiento"},"description":{"type":"string","example":"Desarrollo, arquitectura y diseño de software","description":"Descripción del área"},"isActive":{"type":"boolean","example":true,"description":"Indica si el área está activa","default":true}}},"AssignKnowledgeAreaDto":{"type":"object","properties":{"memberId":{"type":"number","example":123,"description":"ID del miembro"},"areaCode":{"type":"number","example":5,"description":"Código del área de conocimiento (del catálogo)"},"proficiencyLevel":{"type":"string","enum":["BASICO","INTERMEDIO","AVANZADO","EXPERTO"],"example":"AVANZADO","description":"Nivel de dominio en el área"},"yearsExperience":{"type":"number","example":8,"description":"Años de experiencia en el área","minimum":0,"maximum":80},"certifications":{"type":"string","example":"AWS Solutions Architect, Scrum Master","description":"Certificaciones relevantes separadas por comas"}},"required":["memberId","areaCode"]},"UpdateMemberKnowledgeAreaDto":{"type":"object","properties":{"proficiencyLevel":{"type":"string","enum":["BASICO","INTERMEDIO","AVANZADO","EXPERTO"],"description":"Actualizar nivel de dominio"},"yearsExperience":{"type":"number","description":"Actualizar años de experiencia","minimum":0,"maximum":80},"certifications":{"type":"string","description":"Actualizar certificaciones"}}},"CreateAddonDto":{"type":"object","properties":{"code":{"type":"string","example":"KIT-CAMP-2026"},"name":{"type":"string","example":"Kit de Campamento"},"description":{"type":"string"},"category":{"type":"string","enum":["PRODUCTO","SERVICIO","ACCESO"]},"basePrice":{"type":"number","example":1500},"currency":{"type":"string","example":"DOP","default":"DOP"},"hasStock":{"type":"boolean","default":false},"stockQty":{"type":"number","example":100},"imageUrl":{"type":"string"},"isGlobal":{"type":"boolean","default":true},"activityIds":{"description":"Actividades a vincular al crear/actualizar el add-on","type":"array","items":{"type":"number"}},"status":{"type":"string","enum":["ACTIVE","INACTIVE"],"default":"ACTIVE"}},"required":["name","basePrice"]},"AddonEntity":{"type":"object","properties":{"id":{"type":"number"},"code":{"type":"string","example":"KIT-CAMP-2026"},"name":{"type":"string","example":"Kit de Campamento"},"description":{"type":"string"},"category":{"type":"string","enum":["PRODUCTO","SERVICIO","ACCESO"]},"basePrice":{"type":"number","example":1500},"currency":{"type":"string","example":"DOP"},"hasStock":{"type":"boolean","default":false},"stockQty":{"type":"number"},"imageUrl":{"type":"string"},"isGlobal":{"type":"boolean","default":true},"status":{"type":"string","enum":["ACTIVE","INACTIVE"],"default":"ACTIVE"},"createdBy":{"type":"string"},"createdAt":{"format":"date-time","type":"string"},"updatedBy":{"type":"string"},"updatedAt":{"format":"date-time","type":"string"}},"required":["id","code","name","basePrice","currency","hasStock","isGlobal","status","createdAt","updatedAt"]},"UpdateAddonDto":{"type":"object","properties":{"code":{"type":"string","example":"KIT-CAMP-2026"},"name":{"type":"string","example":"Kit de Campamento"},"description":{"type":"string"},"category":{"type":"string","enum":["PRODUCTO","SERVICIO","ACCESO"]},"basePrice":{"type":"number","example":1500},"currency":{"type":"string","example":"DOP","default":"DOP"},"hasStock":{"type":"boolean","default":false},"stockQty":{"type":"number","example":100},"imageUrl":{"type":"string"},"isGlobal":{"type":"boolean","default":true},"activityIds":{"description":"Actividades a vincular al crear/actualizar el add-on","type":"array","items":{"type":"number"}},"status":{"type":"string","enum":["ACTIVE","INACTIVE"],"default":"ACTIVE"}}},"ActivityAddonConfigEntity":{"type":"object","properties":{"id":{"type":"number"},"activityId":{"type":"number"},"addonId":{"type":"number"},"customPrice":{"type":"number"},"bundlePrice":{"type":"number"},"maxQtyPerParticipant":{"type":"number","default":1},"displayOrder":{"type":"number","default":0},"isActive":{"type":"boolean","default":true},"isIncluded":{"type":"boolean","default":false},"includedQty":{"type":"number","default":1},"autoAssignOnRegistration":{"type":"boolean","default":false},"requiresDelivery":{"type":"boolean","default":true},"createdAt":{"format":"date-time","type":"string"},"updatedAt":{"format":"date-time","type":"string"}},"required":["id","activityId","addonId","maxQtyPerParticipant","displayOrder","isActive","isIncluded","includedQty","autoAssignOnRegistration","requiresDelivery","createdAt","updatedAt"]},"ActivityAddonConfigDto":{"type":"object","properties":{"addonId":{"type":"number","example":1},"customPrice":{"type":"number","example":1200},"bundlePrice":{"type":"number","example":1000},"maxQtyPerParticipant":{"type":"number","example":2,"default":1},"displayOrder":{"type":"number","example":0},"isActive":{"type":"boolean","default":true},"isIncluded":{"type":"boolean","default":false},"includedQty":{"type":"number","example":1,"default":1},"autoAssignOnRegistration":{"type":"boolean","default":false},"requiresDelivery":{"type":"boolean","default":true}},"required":["addonId"]},"AddonQuoteRequestDto":{"type":"object","properties":{"selections":{"type":"array","items":{"$ref":"#/components/schemas/AddonSelectionDto"}}},"required":["selections"]},"ParticipantAddonEntity":{"type":"object","properties":{"id":{"type":"number"},"participantId":{"type":"number"},"activityId":{"type":"number"},"addonId":{"type":"number"},"paymentId":{"type":"number"},"quantity":{"type":"number","default":1},"unitPrice":{"type":"number"},"totalPrice":{"type":"number"},"currency":{"type":"string","example":"DOP"},"pricingMode":{"type":"string","enum":["BASE","CUSTOM","BUNDLE"],"default":"BASE"},"paymentStatus":{"type":"string","enum":["PENDING","PAID","CANCELLED","REFUNDED"],"default":"PENDING"},"deliveryStatus":{"type":"string","enum":["PENDING","PARTIAL","DELIVERED"],"default":"PENDING"},"deliveredQty":{"type":"number","default":0},"deliveredAt":{"format":"date-time","type":"string"},"deliveredBy":{"type":"string"},"notes":{"type":"string"},"createdBy":{"type":"string"},"createdAt":{"format":"date-time","type":"string"},"updatedBy":{"type":"string"},"updatedAt":{"format":"date-time","type":"string"}},"required":["id","participantId","activityId","addonId","quantity","unitPrice","totalPrice","currency","pricingMode","paymentStatus","deliveryStatus","deliveredQty","createdAt","updatedAt"]},"DeliverAddonDto":{"type":"object","properties":{"participantAddonIds":{"example":[1,2,3],"type":"array","items":{"type":"number"}},"notes":{"type":"string"}},"required":["participantAddonIds"]},"DeliverParticipantAddonLineDto":{"type":"object","properties":{"participantAddonId":{"type":"number","example":10},"quantity":{"type":"number","example":1,"default":1},"notes":{"type":"string"},"scanCode":{"type":"string"}},"required":["participantAddonId"]},"ParticipantAddonDeliveryEventEntity":{"type":"object","properties":{"id":{"type":"number"},"participantAddonId":{"type":"number"},"participantId":{"type":"number"},"activityId":{"type":"number"},"addonId":{"type":"number"},"quantityDelivered":{"type":"number"},"previousDeliveredQty":{"type":"number"},"newDeliveredQty":{"type":"number"},"previousDeliveryStatus":{"type":"string","enum":["PENDING","PARTIAL","DELIVERED"]},"newDeliveryStatus":{"type":"string","enum":["PENDING","PARTIAL","DELIVERED"]},"scanCode":{"type":"string"},"result":{"type":"string","enum":["SUCCESS","REJECTED"]},"reason":{"type":"string"},"notes":{"type":"string"},"createdBy":{"type":"string"},"createdAt":{"format":"date-time","type":"string"}},"required":["id","quantityDelivered","previousDeliveredQty","newDeliveredQty","result","createdAt"]},"ScanDeliverParticipantAddonDto":{"type":"object","properties":{"activityId":{"type":"number","example":123},"participantId":{"type":"number","example":456},"addonCode":{"type":"string","example":"KIT-001"},"quantity":{"type":"number","example":1,"default":1},"notes":{"type":"string"}},"required":["activityId","participantId","addonCode"]},"QuoteAddonSaleDto":{"type":"object","properties":{"selections":{"type":"array","items":{"$ref":"#/components/schemas/AddonSelectionDto"}}},"required":["selections"]},"CreateAddonSaleDto":{"type":"object","properties":{"selections":{"description":"Add-ons a vender","type":"array","items":{"$ref":"#/components/schemas/AddonSelectionDto"}},"buyerMemberCode":{"type":"string","description":"Codigo del miembro comprador (opcional)"},"buyerName":{"type":"string","description":"Nombre del comprador (no miembro)"},"buyerEmail":{"type":"string"},"buyerPhone":{"type":"string"},"buyerSourceType":{"type":"string","enum":["PARTICIPANT","MEMBER","NEW_BELIEVER","EXTERNAL"]},"buyerSourceId":{"type":"number"},"buyerDocumentType":{"type":"string"},"buyerDocument":{"type":"string"},"notes":{"type":"string","description":"Notas internas de la venta"}},"required":["selections"]},"AddonSaleEntity":{"type":"object","properties":{"id":{"type":"number"},"churchId":{"type":"number"},"saleNumber":{"type":"string"},"buyerMemberCode":{"type":"string"},"buyerName":{"type":"string"},"buyerEmail":{"type":"string"},"buyerPhone":{"type":"string"},"buyerSourceType":{"type":"string","enum":["PARTICIPANT","MEMBER","NEW_BELIEVER","EXTERNAL"]},"buyerSourceId":{"type":"number"},"buyerDocumentType":{"type":"string"},"buyerDocument":{"type":"string"},"currency":{"type":"string","example":"DOP"},"subtotal":{"type":"number"},"discountTotal":{"type":"number"},"total":{"type":"number"},"paidAmount":{"type":"number"},"paymentStatus":{"type":"string","enum":["PENDING","PAID","REFUNDED","CANCELLED"],"default":"PENDING"},"paymentId":{"type":"number"},"status":{"type":"string","enum":["OPEN","CANCELLED"],"default":"OPEN"},"cancelledAt":{"format":"date-time","type":"string"},"cancelledBy":{"type":"string"},"cancellationReason":{"type":"string"},"notes":{"type":"string"},"createdBy":{"type":"string"},"createdAt":{"format":"date-time","type":"string"},"updatedBy":{"type":"string"},"updatedAt":{"format":"date-time","type":"string"}},"required":["id","churchId","saleNumber","currency","subtotal","discountTotal","total","paidAmount","paymentStatus","status","createdAt","updatedAt"]},"UpdateAddonSaleDto":{"type":"object","properties":{"selections":{"description":"Reemplaza las lineas de la venta. Solo permitido si la venta no esta pagada.","type":"array","items":{"$ref":"#/components/schemas/AddonSelectionDto"}},"buyerMemberCode":{"type":"string"},"buyerName":{"type":"string"},"buyerEmail":{"type":"string"},"buyerPhone":{"type":"string"},"buyerSourceType":{"type":"string","enum":["PARTICIPANT","MEMBER","NEW_BELIEVER","EXTERNAL"]},"buyerSourceId":{"type":"number"},"buyerDocumentType":{"type":"string"},"buyerDocument":{"type":"string"},"notes":{"type":"string"}}},"CancelAddonSaleDto":{"type":"object","properties":{"reason":{"type":"string","description":"Razon de la cancelacion"}},"required":["reason"]},"DeliverAddonSaleLineDto":{"type":"object","properties":{"lineId":{"type":"number","description":"ID de la linea a entregar"},"quantity":{"type":"number","description":"Cantidad a entregar (si parcial). Por defecto entrega todo lo restante."},"notes":{"type":"string"}},"required":["lineId"]},"DeliverAddonSaleDto":{"type":"object","properties":{"lines":{"type":"array","items":{"$ref":"#/components/schemas/DeliverAddonSaleLineDto"}},"generalNotes":{"type":"string"}},"required":["lines"]},"SocialMediaDto":{"type":"object","properties":{"facebook":{"type":"string","description":"URL de Facebook","example":"https://facebook.com/mahanaim"},"instagram":{"type":"string","description":"URL de Instagram","example":"https://instagram.com/mahanaim"},"youtube":{"type":"string","description":"URL de YouTube","example":"https://youtube.com/mahanaim"},"tiktok":{"type":"string","description":"URL de TikTok","example":"https://tiktok.com/@mahanaim"},"twitter":{"type":"string","description":"URL de Twitter","example":"https://twitter.com/mahanaim"}}},"MinistryConfigDto":{"type":"object","properties":{"hasYouthMinistry":{"type":"boolean","description":"Tiene ministerio juvenil","example":true},"hasChildrenMinistry":{"type":"boolean","description":"Tiene ministerio de niños","example":true},"hasWomenMinistry":{"type":"boolean","description":"Tiene ministerio de mujeres","example":true},"hasMenMinistry":{"type":"boolean","description":"Tiene ministerio de hombres","example":true},"hasWorshipTeam":{"type":"boolean","description":"Tiene equipo de alabanza","example":true},"hasNetworkSystem":{"type":"boolean","description":"Usa sistema de redes (R1, R2, R3)","example":true},"allowsOnlineServices":{"type":"boolean","description":"Permite servicios en línea","example":true},"allowsOnlineGiving":{"type":"boolean","description":"Permite ofrendas en línea","example":true}}},"CreateChurchDto":{"type":"object","properties":{"code":{"type":"string","description":"Código único de la iglesia","example":"MLR","maxLength":10},"name":{"type":"string","description":"Nombre de la iglesia","example":"Mahanaim La Romana","maxLength":150},"fullName":{"type":"string","description":"Nombre completo oficial","example":"Iglesia Cristiana Mahanaim La Romana","maxLength":200},"denomination":{"type":"string","description":"Denominación o red de iglesias","example":"Mahanaim","maxLength":50,"default":"Mahanaim"},"address":{"type":"string","description":"Dirección completa","example":"C/ Castillo Márquez #74, esq. Fray Juan de Utrera, La Romana"},"phone":{"type":"string","description":"Teléfono principal","example":"+1-809-555-0123","maxLength":20},"email":{"type":"string","description":"Email institucional","example":"info@mahanaim.org","maxLength":100},"website":{"type":"string","description":"Sitio web oficial","example":"https://mahanaim.org","maxLength":100},"countryId":{"type":"string","description":"ID del país donde se ubica (código de 4 dígitos)","example":"0001"},"stateId":{"type":"number","description":"ID del estado/provincia donde se ubica","example":13},"cityId":{"type":"number","description":"ID de la ciudad donde se ubica","example":1},"sectorId":{"type":"number","description":"ID del sector donde se ubica","example":1025},"latitude":{"type":"number","description":"Latitud geográfica","example":18.427551},"longitude":{"type":"number","description":"Longitud geográfica","example":-68.972259},"postalCode":{"type":"string","description":"Código postal","example":"22000","maxLength":20},"foundingDate":{"type":"string","description":"Fecha de fundación","example":"1985-06-15"},"seniorPastor":{"type":"string","description":"Nombre del pastor principal","example":"Pastor Juan Pérez","maxLength":100},"assistantPastor":{"type":"string","description":"Nombre del pastor asistente","example":"Pastor María García","maxLength":100},"capacity":{"type":"number","description":"Capacidad del templo","example":500},"averageAttendance":{"type":"number","description":"Asistencia promedio","example":350,"default":0},"churchType":{"type":"string","description":"Tipo de iglesia","enum":["MAIN","BRANCH","CELL_GROUP","MISSION","EXTENSION"],"example":"BRANCH","default":"BRANCH"},"status":{"type":"string","description":"Estado operativo","enum":["ACTIVE","INACTIVE","UNDER_CONSTRUCTION","CLOSED","MERGED"],"example":"ACTIVE","default":"ACTIVE"},"isActive":{"type":"boolean","description":"Iglesia activa en el sistema","example":true,"default":true},"displayOrder":{"type":"number","description":"Orden de visualización","example":1,"default":0},"timezone":{"type":"string","description":"Zona horaria","example":"America/Santo_Domingo","maxLength":50,"default":"America/Santo_Domingo"},"currencyCode":{"type":"string","description":"Código de moneda","example":"DOP","maxLength":3,"default":"DOP"},"languageCode":{"type":"string","description":"Código de idioma","example":"es-DO","maxLength":5,"default":"es-DO"},"socialMedia":{"description":"Redes sociales de la iglesia","allOf":[{"$ref":"#/components/schemas/SocialMediaDto"}]},"ministryConfig":{"description":"Configuración ministerial","allOf":[{"$ref":"#/components/schemas/MinistryConfigDto"}]}},"required":["code","name"]},"ChurchEntity":{"type":"object","properties":{}},"UpdateChurchDto":{"type":"object","properties":{}},"ChurchLocationUpdateDto":{"type":"object","properties":{"countryId":{"type":"string","description":"ID del país (código de 4 dígitos)","example":"0001"},"stateId":{"type":"number","description":"ID del estado"},"cityId":{"type":"number","description":"ID de la ciudad"},"sectorId":{"type":"number","description":"ID del sector"},"address":{"type":"string","description":"Dirección completa"},"latitude":{"type":"number","description":"Latitud"},"longitude":{"type":"number","description":"Longitud"},"postalCode":{"type":"string","description":"Código postal"}}},"LoginDto":{"type":"object","properties":{"username":{"type":"string","description":"Username for authentication","example":"john.doe"},"password":{"type":"string","description":"Password for authentication","example":"password123","minLength":4}},"required":["username","password"]},"UpdateCurrentProfileDto":{"type":"object","properties":{"name":{"type":"string","description":"Nombre del usuario autenticado","example":"Eliezer"},"lastname":{"type":"string","description":"Apellido del usuario autenticado","example":"Molina"},"email":{"type":"string","description":"Correo del usuario autenticado","example":"usuario@iglesia.local"}}},"ForgotPasswordDto":{"type":"object","properties":{"email":{"type":"string","example":"usuario@ejemplo.com","description":"Email del usuario que solicita restablecer contraseña"}},"required":["email"]},"ResetPasswordDto":{"type":"object","properties":{"token":{"type":"string","example":"abc123token","description":"Token de restablecimiento enviado por email"},"newPassword":{"type":"string","example":"NuevaContraseña123!","description":"Nueva contraseña (mínimo 8 caracteres, debe incluir mayúscula, minúscula y número)"},"confirmPassword":{"type":"string","example":"NuevaContraseña123!","description":"Confirmación de la nueva contraseña"}},"required":["token","newPassword","confirmPassword"]},"CreateEmailDto":{"type":"object","properties":{"type":{"type":"string","enum":["transactional","marketing","notification","system"],"example":"transactional"},"recipientEmail":{"type":"string","example":"john@example.com","description":"Recipient email address"},"recipientName":{"type":"string","example":"John Doe","description":"Recipient name"},"senderEmail":{"type":"string","example":"admin@church.com","description":"Sender email address"},"senderName":{"type":"string","example":"Church Admin","description":"Sender name"},"subject":{"type":"string","example":"Welcome to our church!","description":"Email subject"},"bodyHtml":{"type":"string","example":"<p>Welcome message...</p>","description":"HTML email body"},"bodyText":{"type":"string","example":"Welcome message...","description":"Plain text email body"},"ccEmails":{"description":"CC email addresses","type":"array","items":{"type":"string"}},"bccEmails":{"description":"BCC email addresses","type":"array","items":{"type":"string"}},"priority":{"type":"string","enum":["low","normal","high","urgent"],"example":"normal"},"templateId":{"type":"number","example":1,"description":"Template ID"},"templateVariables":{"type":"object","example":{"name":"John","date":"2024-11-17"},"description":"Template variables"},"scheduledAt":{"type":"string","example":"2024-11-20T10:30:00Z","description":"Schedule send time"}},"required":["type","recipientEmail","senderEmail","subject","bodyHtml"]},"Email":{"type":"object","properties":{"id":{"type":"number","example":1,"description":"Unique identifier for the email"},"type":{"type":"string","enum":["transactional","marketing","notification","system"],"example":"transactional"},"recipientEmail":{"type":"string","example":"member@church.com","description":"Recipient email address"},"recipientName":{"type":"string","example":"Juan Pérez","description":"Recipient name"},"senderEmail":{"type":"string","example":"iglesia@sgm.com","description":"Sender email address"},"senderName":{"type":"string","example":"Iglesia SGM","description":"Sender name"},"subject":{"type":"string","example":"Bienvenido a la iglesia","description":"Email subject"},"bodyHtml":{"type":"string","description":"Email body in HTML format"},"bodyText":{"type":"string","description":"Email body in plain text format"},"ccEmails":{"description":"CC email addresses","type":"array","items":{"type":"string"}},"bccEmails":{"description":"BCC email addresses","type":"array","items":{"type":"string"}},"priority":{"type":"string","enum":["low","normal","high","urgent"],"example":"normal"},"status":{"type":"string","enum":["draft","pending","sent","cancelled"],"example":"pending"},"deliveryStatus":{"type":"string","enum":["pending","sent","delivered","failed","bounced","rejected"],"example":"pending"},"templateId":{"type":"number","description":"Associated template ID"},"templateVariables":{"type":"object","description":"Variables used for template rendering"},"sentAt":{"format":"date-time","type":"string","description":"When the email was sent"},"scheduledAt":{"format":"date-time","type":"string","description":"When the email is scheduled to be sent"},"deliveredAt":{"format":"date-time","type":"string","description":"When the email was delivered"},"openedAt":{"format":"date-time","type":"string","description":"When the email was first opened"},"clickedAt":{"format":"date-time","type":"string","description":"When links in the email were first clicked"},"externalId":{"type":"string","description":"External provider message ID"},"deliveryAttempts":{"type":"number","description":"Number of delivery attempts"},"retryCount":{"type":"number","description":"Number of retry attempts"},"error":{"type":"string","description":"Error message if delivery failed"},"createdBy":{"type":"string","description":"User who created the email"},"updatedBy":{"type":"string","description":"User who last updated the email"},"createdAt":{"format":"date-time","type":"string","description":"Creation timestamp"},"updatedAt":{"format":"date-time","type":"string","description":"Last update timestamp"},"deletedAt":{"format":"date-time","type":"string","description":"Deletion timestamp"}},"required":["id","type","recipientEmail","recipientName","senderEmail","senderName","subject","bodyHtml","bodyText","ccEmails","bccEmails","priority","status","deliveryStatus","templateId","templateVariables","sentAt","scheduledAt","deliveredAt","openedAt","clickedAt","externalId","deliveryAttempts","retryCount","error","createdBy","updatedBy","createdAt","updatedAt","deletedAt"]},"SendEmailDto":{"type":"object","properties":{"type":{"type":"string","enum":["transactional","marketing","notification","system"],"example":"transactional"},"recipientEmail":{"type":"string","example":"member@church.com","description":"Recipient email address"},"recipientName":{"type":"string","example":"Juan Pérez","description":"Recipient name"},"senderEmail":{"type":"string","example":"iglesia@sgm.com","description":"Sender email address"},"senderName":{"type":"string","example":"Iglesia SGM","description":"Sender name"},"subject":{"type":"string","example":"Bienvenido a la iglesia","description":"Email subject"},"bodyHtml":{"type":"string","description":"Email body in HTML format"},"bodyText":{"type":"string","description":"Email body in plain text format"},"ccEmails":{"description":"CC email addresses","type":"array","items":{"type":"string"}},"bccEmails":{"description":"BCC email addresses","type":"array","items":{"type":"string"}},"priority":{"type":"string","enum":["low","normal","high","urgent"],"example":"normal"},"scheduledAt":{"type":"string","description":"When the email is scheduled to be sent"}},"required":["recipientEmail","senderEmail","subject","bodyHtml"]},"SendTemplateEmailDto":{"type":"object","properties":{"templateCode":{"type":"string","example":"welcome-new-member","description":"Template code to use"},"recipientEmail":{"type":"string","example":"john@example.com","description":"Recipient email address"},"recipientName":{"type":"string","example":"John Doe","description":"Recipient name"},"senderEmail":{"type":"string","example":"admin@church.com","description":"Override sender email"},"senderName":{"type":"string","example":"Church Admin","description":"Override sender name"},"variables":{"type":"object","example":{"memberName":"John Doe","churchName":"First Baptist Church"},"description":"Template variables"},"language":{"type":"string","example":"es","description":"Language for localized template"},"ccEmails":{"description":"CC email addresses","type":"array","items":{"type":"string"}},"bccEmails":{"description":"BCC email addresses","type":"array","items":{"type":"string"}},"priority":{"type":"string","enum":["low","normal","high","urgent"],"example":"normal"},"scheduledAt":{"type":"string","example":"2024-11-20T10:30:00Z","description":"Schedule send time"}},"required":["templateCode","recipientEmail","variables"]},"BulkRecipientDto":{"type":"object","properties":{"email":{"type":"string","example":"john@example.com","description":"Recipient email address"},"name":{"type":"string","example":"John Doe","description":"Recipient name"},"templateData":{"type":"object","example":{"memberName":"John Doe","membershipDate":"2024-01-15"},"description":"Recipient-specific template variables"},"entityId":{"type":"number","example":123,"description":"Related entity ID for this recipient"}},"required":["email","templateData"]},"BulkSendEmailDto":{"type":"object","properties":{"templateCode":{"type":"string","example":"monthly-newsletter","description":"Template code to use"},"recipients":{"description":"Array of recipients with their data","example":[{"email":"john@example.com","name":"John Doe","templateData":{"memberName":"John Doe"},"entityId":123}],"type":"array","items":{"$ref":"#/components/schemas/BulkRecipientDto"}},"commonData":{"type":"object","example":{"churchName":"First Baptist Church","month":"November"},"description":"Common template variables for all recipients"},"language":{"type":"string","example":"es","description":"Language for localized template"},"priority":{"type":"string","enum":["low","normal","high","urgent"],"example":"normal"},"type":{"type":"string","enum":["transactional","marketing","notification","system"],"example":"marketing"},"entityType":{"type":"string","example":"member","description":"Related entity type"},"scheduledAt":{"type":"string","example":"2024-11-20T10:30:00Z","description":"Schedule send time for all emails"},"senderEmail":{"type":"string","example":"admin@church.com","description":"Override sender email"},"senderName":{"type":"string","example":"Church Admin","description":"Override sender name"},"batchSize":{"type":"number","example":50,"description":"Batch size for sending (to avoid rate limits)"},"batchDelay":{"type":"number","example":5000,"description":"Delay between batches in milliseconds"}},"required":["templateCode","recipients"]},"UpdateEmailDto":{"type":"object","properties":{"type":{"type":"string","enum":["transactional","marketing","notification","system"],"example":"transactional"},"recipientEmail":{"type":"string","example":"john@example.com","description":"Recipient email address"},"recipientName":{"type":"string","example":"John Doe","description":"Recipient name"},"senderEmail":{"type":"string","example":"admin@church.com","description":"Sender email address"},"senderName":{"type":"string","example":"Church Admin","description":"Sender name"},"subject":{"type":"string","example":"Welcome to our church!","description":"Email subject"},"bodyHtml":{"type":"string","example":"<p>Welcome message...</p>","description":"HTML email body"},"bodyText":{"type":"string","example":"Welcome message...","description":"Plain text email body"},"ccEmails":{"description":"CC email addresses","type":"array","items":{"type":"string"}},"bccEmails":{"description":"BCC email addresses","type":"array","items":{"type":"string"}},"priority":{"type":"string","enum":["low","normal","high","urgent"],"example":"normal"},"templateId":{"type":"number","example":1,"description":"Template ID"},"templateVariables":{"type":"object","example":{"name":"John","date":"2024-11-17"},"description":"Template variables"},"scheduledAt":{"type":"string","example":"2024-11-20T10:30:00Z","description":"Schedule send time"},"status":{"type":"string","enum":["draft","pending","sent","cancelled"],"example":"sent"},"errorMessage":{"type":"string","example":"SMTP error: Connection timeout","description":"Error message"},"externalId":{"type":"string","example":"msg_1234567890","description":"External provider message ID"},"provider":{"type":"string","example":"mailgun","description":"Email provider used"},"providerData":{"type":"object","example":{"messageId":"abc123"},"description":"Provider metadata"},"sentAt":{"type":"string","example":"2024-11-17T10:30:00Z","description":"When email was sent"},"deliveredAt":{"type":"string","example":"2024-11-17T10:32:00Z","description":"When email was delivered"},"openedAt":{"type":"string","example":"2024-11-17T10:35:00Z","description":"When email was opened"},"clickedAt":{"type":"string","example":"2024-11-17T10:40:00Z","description":"When email link was clicked"}}},"CreateEmailTemplateDto":{"type":"object","properties":{"code":{"type":"string","example":"welcome-new-member","description":"Unique template code"},"name":{"type":"string","example":"Welcome New Member","description":"Template display name"},"description":{"type":"string","example":"Template for welcoming new church members","description":"Template description"},"type":{"type":"string","enum":["transactional","marketing","notification","system"],"example":"transactional"},"subjectTemplate":{"type":"string","example":"Welcome to {{churchName}}, {{memberName}}!","description":"Email subject template"},"bodyHtmlTemplate":{"type":"string","example":"<h1>Welcome {{memberName}}</h1><p>...</p>","description":"HTML body template"},"bodyTextTemplate":{"type":"string","example":"Welcome {{memberName}}...","description":"Plain text body template"},"variablesSchema":{"type":"object","example":{"memberName":{"type":"string","required":true,"description":"Member full name"},"churchName":{"type":"string","required":false,"default":"Our Church"}},"description":"Template variables schema"},"defaultSenderEmail":{"type":"string","example":"admin@church.com","description":"Default sender email"},"defaultSenderName":{"type":"string","example":"Church Admin","description":"Default sender name"},"status":{"type":"string","enum":["active","inactive","draft"],"example":"active"},"isDefault":{"type":"boolean","example":true,"description":"Is this the default template for this type"},"category":{"type":"string","example":"category-membership","description":"Template category for organization"},"supportedLanguages":{"example":["es","en"],"description":"Supported languages","type":"array","items":{"type":"string"}},"defaultLanguage":{"type":"string","example":"es","description":"Default language"},"localizations":{"type":"object","example":{"en":{"subject":"Welcome to {{churchName}}, {{memberName}}!","bodyHtml":"<h1>Welcome {{memberName}}</h1>","bodyText":"Welcome {{memberName}}"}},"description":"Localized templates"}},"required":["code","name","subjectTemplate","bodyHtmlTemplate"]},"EmailTemplate":{"type":"object","properties":{"id":{"type":"number","example":1,"description":"Template ID"},"code":{"type":"string","example":"welcome-new-member","description":"Unique template code"},"name":{"type":"string","example":"Welcome New Member","description":"Template display name"},"description":{"type":"string","example":"Template for welcoming new church members","description":"Template description"},"type":{"type":"string","enum":["transactional","marketing","notification","system"],"example":"transactional"},"subjectTemplate":{"type":"string","example":"Welcome to {{churchName}}, {{memberName}}!","description":"Email subject template"},"bodyHtmlTemplate":{"type":"string","example":"<h1>Welcome {{memberName}}</h1><p>...</p>","description":"HTML body template"},"bodyTextTemplate":{"type":"string","example":"Welcome {{memberName}}...","description":"Plain text body template"},"variablesSchema":{"type":"object","example":{"memberName":{"type":"string","required":true,"description":"Member full name"},"churchName":{"type":"string","required":false,"default":"Our Church"}},"description":"Template variables schema"},"defaultSenderEmail":{"type":"string","example":"admin@church.com","description":"Default sender email"},"defaultSenderName":{"type":"string","example":"Church Admin","description":"Default sender name"},"status":{"type":"string","enum":["active","inactive","draft"],"example":"active"},"isDefault":{"type":"boolean","example":true,"description":"Is this the default template for this type"},"version":{"type":"number","example":1,"description":"Template version number"},"category":{"type":"string","example":"category-membership","description":"Template category for organization"},"supportedLanguages":{"example":["es","en"],"description":"Supported languages","type":"array","items":{"type":"string"}},"defaultLanguage":{"type":"string","example":"es","description":"Default language"},"localizations":{"type":"object","example":{"en":{"subject":"Welcome to {{churchName}}, {{memberName}}!","bodyHtml":"<h1>Welcome {{memberName}}</h1>","bodyText":"Welcome {{memberName}}"}},"description":"Localized templates"},"createdBy":{"type":"string","example":"user123","description":"User who created the template"},"updatedBy":{"type":"string","example":"user456","description":"User who last updated the template"},"createdAt":{"format":"date-time","type":"string","example":"2024-11-17T10:30:00Z","description":"Creation timestamp"},"updatedAt":{"format":"date-time","type":"string","example":"2024-11-17T10:35:00Z","description":"Last update timestamp"}},"required":["id","code","name","description","type","subjectTemplate","bodyHtmlTemplate","bodyTextTemplate","variablesSchema","defaultSenderEmail","defaultSenderName","status","isDefault","version","category","supportedLanguages","defaultLanguage","localizations","createdBy","updatedBy","createdAt","updatedAt"]},"UpdateEmailTemplateDto":{"type":"object","properties":{"code":{"type":"string","example":"welcome-new-member","description":"Unique template code"},"name":{"type":"string","example":"Welcome New Member","description":"Template display name"},"description":{"type":"string","example":"Template for welcoming new church members","description":"Template description"},"type":{"type":"string","enum":["transactional","marketing","notification","system"],"example":"transactional"},"subjectTemplate":{"type":"string","example":"Welcome to {{churchName}}, {{memberName}}!","description":"Email subject template"},"bodyHtmlTemplate":{"type":"string","example":"<h1>Welcome {{memberName}}</h1><p>...</p>","description":"HTML body template"},"bodyTextTemplate":{"type":"string","example":"Welcome {{memberName}}...","description":"Plain text body template"},"variablesSchema":{"type":"object","example":{"memberName":{"type":"string","required":true,"description":"Member full name"},"churchName":{"type":"string","required":false,"default":"Our Church"}},"description":"Template variables schema"},"defaultSenderEmail":{"type":"string","example":"admin@church.com","description":"Default sender email"},"defaultSenderName":{"type":"string","example":"Church Admin","description":"Default sender name"},"status":{"type":"string","enum":["active","inactive","draft"],"example":"active"},"isDefault":{"type":"boolean","example":true,"description":"Is this the default template for this type"},"category":{"type":"string","example":"category-membership","description":"Template category for organization"},"supportedLanguages":{"example":["es","en"],"description":"Supported languages","type":"array","items":{"type":"string"}},"defaultLanguage":{"type":"string","example":"es","description":"Default language"},"localizations":{"type":"object","example":{"en":{"subject":"Welcome to {{churchName}}, {{memberName}}!","bodyHtml":"<h1>Welcome {{memberName}}</h1>","bodyText":"Welcome {{memberName}}"}},"description":"Localized templates"},"version":{"type":"number","example":2,"description":"Template version number"}}},"CreateCurrencyDto":{"type":"object","properties":{}},"Currency":{"type":"object","properties":{}},"UpdateCurrencyDto":{"type":"object","properties":{}},"CreateExchangeRateDto":{"type":"object","properties":{}},"ExchangeRate":{"type":"object","properties":{}},"ConvertCurrencyDto":{"type":"object","properties":{"amount":{"type":"number","example":100,"description":"Amount to convert"},"fromCurrency":{"type":"string","example":"USD","description":"Source currency code"},"toCurrency":{"type":"string","example":"DOP","description":"Target currency code"},"date":{"type":"string","example":"2024-01-15","description":"Date for the conversion (optional, uses current date if not provided)"}},"required":["amount","fromCurrency","toCurrency"]},"UpdateExchangeRateDto":{"type":"object","properties":{}},"PaymentType":{"type":"string","enum":["OFRENDA","DIEZMO","ACTIVIDAD","EDUCACION","MINISTERIO","DONACION","MEMBRESIA","CERTIFICADO","OTRO"],"description":"Payment type - determines which cashbox will be used"},"CustomerInfoDto":{"type":"object","properties":{"name":{"type":"string","description":"Customer name"},"email":{"type":"string","description":"Customer email"},"phone":{"type":"string","description":"Customer phone"},"identification":{"type":"string","description":"Customer identification"},"address":{"type":"string","description":"Customer address"}}},"CreateInternalPaymentDto":{"type":"object","properties":{"location":{"type":"string","description":"Payment location (church code)","default":"MLR"},"church":{"type":"string","description":"Church code (alias for location)","default":"MLR"},"batchNumber":{"type":"number","description":"Batch number for grouping payments"},"correctionBatchNumber":{"type":"string","description":"Lote reabierto en modo corrección al que debe vincularse explícitamente este pago"},"memberCode":{"type":"string","description":"Member code"},"participantId":{"type":"number","description":"Participant ID for activity/event payments"},"addonSelections":{"description":"Add-ons nuevos seleccionados durante el pago de actividad","type":"array","items":{"$ref":"#/components/schemas/AddonSelectionDto"}},"participantAddonIds":{"description":"IDs de lineas participant_addons pendientes que se desean liquidar","type":"array","items":{"type":"number"}},"origin":{"type":"string","description":"Payment origin"},"internalReference":{"type":"string","description":"Internal reference"},"externalReference":{"type":"string","description":"External reference"},"bankAccount":{"type":"string","description":"Bank account for transfers"},"paymentMethod":{"type":"string","description":"Payment method","example":"EFECTIVO"},"currency":{"type":"string","description":"Currency","example":"DOP","default":"DOP"},"amount":{"type":"number","description":"Payment amount","example":1000.5},"discount":{"type":"number","description":"Discount applied","default":0},"discountCode":{"type":"string","description":"Single discount code to apply. Use discountCodes for multiple codes.","example":"VERANO2026"},"discountCodes":{"description":"Multiple discount codes to apply (if stacking is enabled). Max 5 codes.","example":["VERANO2026","VCH-ABC123"],"type":"array","items":{"type":"string"}},"excludedPromotionCodes":{"description":"Automatic promotion codes excluded by the user for activity payment quote","example":["PROMO10"],"type":"array","items":{"type":"string"}},"beneficiaryIdentification":{"type":"string","description":"Cedula/identificacion para autoaplicar certificados de compra"},"beneficiaryEmail":{"type":"string","description":"Correo para autoaplicar certificados de compra si no hay cedula"},"beneficiaryPhone":{"type":"string","description":"Telefono para autoaplicar certificados de compra si no hay cedula/correo"},"comment":{"type":"string","description":"Payment comment"},"paymentDate":{"type":"string","description":"Payment date"},"receivedBy":{"type":"string","description":"Received by user"},"cardFinalNumber":{"type":"string","description":"Last 4 digits of card number (from Veriphone voucher). Required for CREDIT_CARD/DEBIT_CARD payments.","example":"4532"},"approval":{"type":"string","description":"Approval/Authorization code from card processor (from Veriphone voucher). Required for CREDIT_CARD/DEBIT_CARD payments.","example":"123456"},"paypalEmail":{"type":"string","description":"PayPal email address. Required for PAYPAL payments.","example":"user@example.com"},"paymentType":{"description":"Payment type - determines which cashbox will be used","example":"OFRENDA","allOf":[{"$ref":"#/components/schemas/PaymentType"}]},"processorId":{"type":"number","description":"Payment processor ID for external payments"},"relatedEntityType":{"type":"string","description":"Related entity type (activity, education, etc.)"},"relatedEntityId":{"type":"number","description":"Related entity ID"},"customerInfo":{"description":"Customer information for external payments","allOf":[{"$ref":"#/components/schemas/CustomerInfoDto"}]},"metadata":{"type":"object","description":"Additional metadata"},"successUrl":{"type":"string","description":"Success URL for external payment redirect"},"cancelUrl":{"type":"string","description":"Cancel URL for external payment redirect"},"webhookUrl":{"type":"string","description":"Webhook URL for payment notifications"},"isAnnulled":{"type":"number","description":"Mark as annulled (0=no, 1=yes)","default":0},"status":{"type":"string","description":"Payment status","example":"COMPLETADO"},"annulledReason":{"type":"string","description":"Reason for annulment if annulled"},"annulledDate":{"type":"string","description":"Date of annulment (YYYY-MM-DD)"}},"required":["paymentMethod","currency","amount","paymentType"]},"Payment":{"type":"object","properties":{}},"CreatePaymentDto":{"type":"object","properties":{"location":{"type":"string","description":"Payment location (church code)","default":"MLR"},"church":{"type":"string","description":"Church code (alias for location)","default":"MLR"},"batchNumber":{"type":"number","description":"Batch number for grouping payments"},"correctionBatchNumber":{"type":"string","description":"Lote reabierto en modo corrección al que debe vincularse explícitamente este pago"},"memberCode":{"type":"string","description":"Member code"},"participantId":{"type":"number","description":"Participant ID for activity/event payments"},"addonSelections":{"description":"Add-ons nuevos seleccionados durante el pago de actividad","type":"array","items":{"$ref":"#/components/schemas/AddonSelectionDto"}},"participantAddonIds":{"description":"IDs de lineas participant_addons pendientes que se desean liquidar","type":"array","items":{"type":"number"}},"origin":{"type":"string","description":"Payment origin"},"internalReference":{"type":"string","description":"Internal reference"},"externalReference":{"type":"string","description":"External reference"},"bankAccount":{"type":"string","description":"Bank account for transfers"},"paymentMethod":{"type":"string","description":"Payment method","example":"EFECTIVO"},"currency":{"type":"string","description":"Currency","example":"DOP","default":"DOP"},"amount":{"type":"number","description":"Payment amount","example":1000.5},"discount":{"type":"number","description":"Discount applied","default":0},"discountCode":{"type":"string","description":"Single discount code to apply. Use discountCodes for multiple codes.","example":"VERANO2026"},"discountCodes":{"description":"Multiple discount codes to apply (if stacking is enabled). Max 5 codes.","example":["VERANO2026","VCH-ABC123"],"type":"array","items":{"type":"string"}},"excludedPromotionCodes":{"description":"Automatic promotion codes excluded by the user for activity payment quote","example":["PROMO10"],"type":"array","items":{"type":"string"}},"beneficiaryIdentification":{"type":"string","description":"Cedula/identificacion para autoaplicar certificados de compra"},"beneficiaryEmail":{"type":"string","description":"Correo para autoaplicar certificados de compra si no hay cedula"},"beneficiaryPhone":{"type":"string","description":"Telefono para autoaplicar certificados de compra si no hay cedula/correo"},"comment":{"type":"string","description":"Payment comment"},"paymentDate":{"type":"string","description":"Payment date"},"receivedBy":{"type":"string","description":"Received by user"},"cardFinalNumber":{"type":"string","description":"Last 4 digits of card number (from Veriphone voucher). Required for CREDIT_CARD/DEBIT_CARD payments.","example":"4532"},"approval":{"type":"string","description":"Approval/Authorization code from card processor (from Veriphone voucher). Required for CREDIT_CARD/DEBIT_CARD payments.","example":"123456"},"paypalEmail":{"type":"string","description":"PayPal email address. Required for PAYPAL payments.","example":"user@example.com"},"paymentType":{"description":"Payment type - determines which cashbox will be used","example":"OFRENDA","allOf":[{"$ref":"#/components/schemas/PaymentType"}]},"processorId":{"type":"number","description":"Payment processor ID for external payments"},"relatedEntityType":{"type":"string","description":"Related entity type (activity, education, etc.)"},"relatedEntityId":{"type":"number","description":"Related entity ID"},"customerInfo":{"description":"Customer information for external payments","allOf":[{"$ref":"#/components/schemas/CustomerInfoDto"}]},"metadata":{"type":"object","description":"Additional metadata"},"successUrl":{"type":"string","description":"Success URL for external payment redirect"},"cancelUrl":{"type":"string","description":"Cancel URL for external payment redirect"},"webhookUrl":{"type":"string","description":"Webhook URL for payment notifications"}},"required":["paymentMethod","currency","amount","paymentType"]},"CardTokenDto":{"type":"object","properties":{"token":{"type":"string","description":"Tokenized card data from Azul.js or similar tokenization service","example":"tok_abc123xyz789"},"last4":{"type":"string","description":"Last 4 digits for display purposes only","example":"1111"},"cardBrand":{"type":"string","description":"Card brand (VISA, MASTERCARD, AMEX, etc)","example":"VISA"}},"required":["token"]},"DirectCardDataDto":{"type":"object","properties":{"cardNumber":{"type":"string","description":"Card number (13-19 digits)","example":"4111111111111111"},"cardHolder":{"type":"string","description":"Cardholder name as shown on card","example":"JUAN PEREZ"},"expirationMonth":{"type":"string","description":"Expiration month (01-12)","example":"12"},"expirationYear":{"type":"string","description":"Expiration year (2 or 4 digits)","example":"27"},"cvv":{"type":"string","description":"Card verification code (3-4 digits)","example":"123"}},"required":["cardNumber","cardHolder","expirationMonth","expirationYear","cvv"]},"ProcessExternalPaymentDto":{"type":"object","properties":{"processorId":{"type":"number","description":"Payment processor ID"},"paymentData":{"description":"Base payment data","allOf":[{"$ref":"#/components/schemas/CreatePaymentDto"}]},"returnUrls":{"type":"object","description":"Return URLs for payment flow"},"cardToken":{"description":"Tokenized card data (RECOMMENDED - use when tokenization is available)","allOf":[{"$ref":"#/components/schemas/CardTokenDto"}]},"cardData":{"description":"Direct card data (FALLBACK ONLY - requires PCI compliance)","allOf":[{"$ref":"#/components/schemas/DirectCardDataDto"}]},"processingType":{"type":"string","description":"Payment processing type: hosted (redirect to payment page), direct (immediate processing with card data), online_payment (alias for direct)","enum":["hosted","direct","online_payment"],"example":"hosted"},"saveCard":{"type":"boolean","description":"Whether to save card token for future use. Only works for registered members (memberCode exists in maestro_miembros). Ignored for external/guest users.","default":false},"participantIds":{"description":"Array of participant IDs for multiple payment (activity registrations). If provided, the payment will be distributed among all participants. Total amount must match the sum of pending amounts. All participants must have ZERO previous payments (no partial payments allowed).","example":[123,124,125],"type":"array","items":{"type":"number"}},"processorOptions":{"type":"object","description":"Additional processor-specific options"}},"required":["processorId","paymentData"]},"PayWithSavedCardDto":{"type":"object","properties":{"savedMethodId":{"type":"number","description":"Saved payment method ID"},"amount":{"type":"number","description":"Payment amount","example":1000.5},"currency":{"type":"string","description":"Currency","example":"DOP","default":"DOP"},"cvv":{"type":"string","description":"Card verification code","example":"123"},"comment":{"type":"string","description":"Payment description/comment"},"location":{"type":"string","description":"Payment location (church code)"},"church":{"type":"string","description":"Church code (alias for location)"},"memberCode":{"type":"string","description":"Member code"},"paymentType":{"type":"string","description":"Payment type"},"relatedEntityType":{"type":"string","description":"Related entity type"},"relatedEntityId":{"type":"number","description":"Related entity id"},"participantId":{"type":"number","description":"Participant ID for activity payments"},"addonSelections":{"description":"Add-ons nuevos seleccionados durante el pago con tarjeta guardada","type":"array","items":{"$ref":"#/components/schemas/AddonSelectionDto"}},"participantAddonIds":{"description":"IDs de lineas participant_addons pendientes que se desean liquidar","type":"array","items":{"type":"number"}}},"required":["savedMethodId","amount","currency","cvv"]},"UpdatePaymentDto":{"type":"object","properties":{"comment":{"type":"string","description":"Nota administrativa del pago"}}},"ReassignPaymentDto":{"type":"object","properties":{"paymentId":{"type":"number","description":"ID del pago a reasignar","example":1234},"fromEntityId":{"type":"number","description":"ID de la entidad origen actual","example":100},"toEntityId":{"type":"number","description":"ID de la entidad destino","example":200},"reason":{"type":"string","description":"Razón de la reasignación","example":"Pago realizado por familiar de otro participante","minLength":10,"maxLength":500}},"required":["paymentId","fromEntityId","toEntityId","reason"]},"AttachApprovalDto":{"type":"object","properties":{"approvalCode":{"type":"string","description":"Authorization/approval code from external payment","example":"AUTH123456"},"reference":{"type":"string","description":"Transaction reference or RRN number","example":"123456789012"},"last4":{"type":"string","description":"Last 4 digits of card used","example":"1111"},"transactionDate":{"type":"string","description":"Transaction date from external system","example":"2026-01-04T10:30:00Z"},"notes":{"type":"string","description":"Additional notes or comments"}},"required":["approvalCode","last4"]},"BulkPaymentActionDto":{"type":"object","properties":{"paymentIds":{"description":"Payment IDs to process","type":"array","items":{"type":"number"}},"action":{"type":"string","description":"Action to perform","enum":["annul","restore","export"]},"reason":{"type":"string","description":"Reason for the action (required for annul and restore actions, min 5 characters)","minLength":5,"maxLength":500},"performedBy":{"type":"string","description":"Performed by user"}}},"CreateProcessorDto":{"type":"object","properties":{"name":{"type":"string","description":"Processor name","example":"stripe-main"},"type":{"type":"string","description":"Processor type","enum":["STRIPE","PAYPAL","AZUL","PLACETOPAY","MERCADOPAGO","CUSTOM"],"example":"STRIPE"},"displayName":{"type":"string","description":"Display name for UI","example":"Stripe Payments"},"description":{"type":"string","description":"Processor description"},"status":{"type":"string","description":"Processor status","enum":["ACTIVE","INACTIVE","TESTING","MAINTENANCE"],"default":"ACTIVE"},"isActive":{"type":"boolean","description":"Is processor active","default":true},"isTestMode":{"type":"boolean","description":"Is test mode enabled","default":false},"supportedCurrencies":{"description":"Supported currencies","default":["USD","DOP"],"type":"array","items":{"type":"string"}},"feePercentage":{"type":"number","description":"Fee percentage (0.0-1.0)","default":0},"fixedFee":{"type":"number","description":"Fixed fee amount","default":0},"minAmount":{"type":"number","description":"Minimum payment amount","default":0},"maxAmount":{"type":"number","description":"Maximum payment amount"},"configuration":{"type":"object","description":"Processor configuration (API keys, etc.)"},"webhookUrl":{"type":"string","description":"Webhook URL"},"apiBaseUrl":{"type":"string","description":"API base URL"},"successUrlTemplate":{"type":"string","description":"Success URL template"},"cancelUrlTemplate":{"type":"string","description":"Cancel URL template"},"logoUrl":{"type":"string","description":"Logo URL"},"sortOrder":{"type":"number","description":"Sort order for UI","default":0}},"required":["name","type","displayName","apiBaseUrl"]},"PaymentProcessor":{"type":"object","properties":{}},"UpdateProcessorDto":{"type":"object","properties":{"displayName":{"type":"string","description":"Processor display name"},"description":{"type":"string","description":"Processor description"},"status":{"type":"string","description":"Processor status","enum":["ACTIVE","INACTIVE","TESTING","MAINTENANCE"]},"isActive":{"type":"boolean","description":"Is processor active"},"isTestMode":{"type":"boolean","description":"Is test mode enabled"},"supportedCurrencies":{"description":"Supported currencies","type":"array","items":{"type":"string"}},"feePercentage":{"type":"number","description":"Fee percentage (0.0-1.0)"},"fixedFee":{"type":"number","description":"Fixed fee amount"},"minAmount":{"type":"number","description":"Minimum payment amount"},"maxAmount":{"type":"number","description":"Maximum payment amount"},"configuration":{"type":"object","description":"Processor configuration"},"webhookUrl":{"type":"string","description":"Webhook URL"},"apiBaseUrl":{"type":"string","description":"API base URL"},"successUrlTemplate":{"type":"string","description":"Success URL template"},"cancelUrlTemplate":{"type":"string","description":"Cancel URL template"},"logoUrl":{"type":"string","description":"Logo URL"},"sortOrder":{"type":"number","description":"Sort order for UI"}}},"CreatePaymentLinkDto":{"type":"object","properties":{"methodCode":{"type":"string","description":"Metodo hosted/link que se usara para el pago","enum":["PAGINA_PAGO_AZUL","PAGINA_PAGO_STRIPE","PAGINA_PAGO_PAYPAL"],"example":"PAGINA_PAGO_AZUL"},"amount":{"type":"number","description":"Monto a cobrar","example":1900},"currency":{"type":"string","description":"Moneda ISO 4217","example":"DOP","default":"DOP"},"discountAmount":{"type":"number","description":"Descuento aplicado al link","example":0,"default":0},"processorId":{"type":"number","description":"ID del procesador a usar"},"memberCode":{"type":"string","description":"Codigo de miembro/cliente"},"customerName":{"type":"string","description":"Nombre del cliente"},"customerEmail":{"type":"string","description":"Correo del cliente"},"customerPhone":{"type":"string","description":"Telefono del cliente"},"relatedEntityType":{"type":"string","description":"Tipo de entidad relacionada","example":"ACTIVITY_PARTICIPANT"},"relatedEntityId":{"type":"number","description":"ID de la entidad relacionada"},"participantId":{"type":"number","description":"ID del participante de actividad"},"batchNumber":{"type":"string","description":"Lote asociado al pago"},"idempotencyKey":{"type":"string","description":"Llave de idempotencia enviada por el cliente para evitar links duplicados"},"expiresInMinutes":{"type":"number","description":"Tiempo de expiracion en minutos","default":1440,"minimum":5,"maximum":10080},"metadata":{"type":"object","description":"Metadata no sensible para auditoria"},"deliveryChannel":{"type":"string","description":"Canal de envio del link. EMAIL se registra en cola y se procesa en segundo plano.","enum":["EMAIL","SMS","WHATSAPP","COPY"]},"deliveryRecipient":{"type":"string","description":"Destinatario del canal de envio. Para EMAIL debe ser un correo valido."},"deliverySubject":{"type":"string","description":"Asunto personalizado para envio por email"}},"required":["methodCode","amount"]},"CancelPaymentLinkDto":{"type":"object","properties":{"reason":{"type":"string","description":"Motivo de cancelacion del link"},"replaceWithNewLink":{"type":"boolean","description":"Indica si la cancelacion se hace como reemplazo por un nuevo link"}}},"DeliverPaymentLinkDto":{"type":"object","properties":{"deliveryChannel":{"type":"string","description":"Canal para reenviar o registrar la entrega del link","enum":["EMAIL","SMS","WHATSAPP","COPY"]},"deliveryRecipient":{"type":"string","description":"Destinatario del canal seleccionado"},"deliverySubject":{"type":"string","description":"Asunto personalizado para envio por email"}},"required":["deliveryChannel","deliveryRecipient"]},"UpdatePaymentMethodStatusDto":{"type":"object","properties":{"isEnabled":{"type":"boolean","description":"Activa o desactiva el metodo globalmente"},"isVisible":{"type":"boolean","description":"Muestra u oculta el metodo en UI"},"isDefaultForActivities":{"type":"boolean","description":"Hace que el metodo este disponible por defecto en todas las actividades"},"providerCode":{"type":"string","description":"Codigo del proveedor asociado al metodo","example":"AZUL","nullable":true},"processorId":{"type":"number","description":"ID del procesador asociado al metodo","nullable":true},"configuration":{"type":"object","description":"Configuracion no sensible propia del metodo"}}},"UpdateActivityPaymentMethodDto":{"type":"object","properties":{"availabilityMode":{"type":"string","description":"Modo de disponibilidad del metodo en la actividad","enum":["INHERIT","ENABLED","DISABLED"]},"configuration":{"type":"object","description":"Configuracion adicional no sensible"}},"required":["availabilityMode"]},"CreatePaymentRefundDto":{"type":"object","properties":{"paymentId":{"type":"number","example":8143},"amount":{"type":"number","example":150},"disposition":{"type":"string","enum":["MONEY_RETURN","REFUND_VOUCHER"]},"reason":{"type":"string","example":"El participante solicito una devolucion parcial."},"idempotencyKey":{"type":"string","description":"Clave estable generada por el cliente para evitar solicitudes duplicadas."}},"required":["paymentId","amount","disposition","reason","idempotencyKey"]},"Object":{"type":"object","properties":{}},"ProcessPaymentRefundDto":{"type":"object","properties":{"channel":{"type":"string","enum":["MANUAL","ORIGINAL_PROVIDER"]},"sourceCashboxId":{"type":"number","description":"Caja o fondo que entrega el dinero cuando el reembolso es manual."},"refundMethod":{"type":"string","example":"TRANSFER"}},"required":["channel"]},"CancelPaymentRefundDto":{"type":"object","properties":{"reason":{"type":"string","example":"La solicitud fue registrada con un monto incorrecto."}},"required":["reason"]},"ApplyCreditNoteDto":{"type":"object","properties":{"amount":{"type":"number","example":150},"relatedEntityType":{"type":"string","example":"activity_participant"},"relatedEntityId":{"type":"number"},"beneficiaryReference":{"type":"string","example":"actP_123"},"targetPaymentId":{"type":"number"},"idempotencyKey":{"type":"string"}},"required":["amount","relatedEntityType","relatedEntityId","beneficiaryReference","idempotencyKey"]},"QuoteCreditNoteApplicationDto":{"type":"object","properties":{"amount":{"type":"number","example":150},"relatedEntityType":{"type":"string","example":"activity_participant"},"relatedEntityId":{"type":"number"},"beneficiaryReference":{"type":"string","example":"actP_123"}},"required":["amount","relatedEntityType","relatedEntityId","beneficiaryReference"]},"ReverseCreditNoteApplicationDto":{"type":"object","properties":{"reason":{"type":"string"}},"required":["reason"]},"TransferCreditNoteDto":{"type":"object","properties":{"amount":{"type":"number"},"beneficiaryReference":{"type":"string"},"reason":{"type":"string"},"idempotencyKey":{"type":"string"}},"required":["amount","beneficiaryReference","reason","idempotencyKey"]},"CancelCreditNoteDto":{"type":"object","properties":{"reason":{"type":"string"}},"required":["reason"]},"UnlinkPaymentDto":{"type":"object","properties":{"paymentId":{"type":"number","description":"ID del pago a desvincular","example":1234},"reason":{"type":"string","description":"Razón de la desvinculación","example":"Pago asignado incorrectamente al participante","minLength":10,"maxLength":500}},"required":["paymentId","reason"]},"CorrectionResponseDto":{"type":"object","properties":{"success":{"type":"boolean","description":"Indica si la operación fue exitosa","example":true},"message":{"type":"string","description":"Mensaje descriptivo del resultado","example":"Pago desvinculado exitosamente"},"paymentId":{"type":"number","description":"ID del pago afectado","example":1234},"action":{"type":"string","description":"Acción realizada","enum":["UNLINK","LINK","REASSIGN","TRANSFER","CHANGE_TYPE"],"example":"UNLINK"},"previousState":{"type":"object","description":"Estado anterior del pago"},"newState":{"type":"object","description":"Nuevo estado del pago"},"recalculatedAmounts":{"description":"Montos recalculados (si aplica)","type":"array","items":{"type":"string"}}},"required":["success","message","paymentId","action"]},"LinkPaymentDto":{"type":"object","properties":{"paymentId":{"type":"number","description":"ID del pago a vincular","example":1234},"targetEntityType":{"type":"string","description":"Tipo de entidad destino","enum":["ACTIVITY_PARTICIPANT","OFFERING","TITHE","DONATION","ADDON_SALE"],"example":"ACTIVITY_PARTICIPANT"},"targetEntityId":{"type":"number","description":"ID de la entidad destino","example":5678},"reason":{"type":"string","description":"Razón de la vinculación","example":"Pago correspondiente a inscripción del participante","minLength":10,"maxLength":500}},"required":["paymentId","targetEntityType","targetEntityId","reason"]},"TransferPaymentDto":{"type":"object","properties":{"paymentId":{"type":"number","description":"ID del pago a transferir","example":1234},"newEntityType":{"type":"string","description":"Nuevo tipo de entidad","enum":["ACTIVITY_PARTICIPANT","OFFERING","TITHE","DONATION","ADDON_SALE"],"example":"OFFERING"},"newEntityId":{"type":"number","description":"ID de la nueva entidad. Es obligatorio para participantes de actividad y ventas add-on; opcional para ofrendas, diezmos y donaciones generales.","example":5678},"reason":{"type":"string","description":"Razón de la transferencia","example":"Pago fue registrado como actividad pero era ofrenda","minLength":10,"maxLength":500}},"required":["paymentId","newEntityType","reason"]},"CleanLogsDto":{"type":"object","properties":{"startDate":{"type":"string","description":"Fecha de inicio del rango a eliminar (inclusive)","example":"2025-01-01"},"endDate":{"type":"string","description":"Fecha de fin del rango a eliminar (inclusive)","example":"2025-01-31"},"type":{"type":"string","enum":["request","response","error"],"description":"Tipo de log a eliminar. Si no se especifica, elimina todos los tipos"},"environment":{"type":"string","enum":["localhost","production","sandbox","unknown"],"description":"Ambiente específico a limpiar. Si no se especifica, usa el ambiente activo del backend"},"confirm":{"type":"boolean","description":"Confirmación explícita para eliminar logs. Debe ser true","default":false}},"required":["startDate","endDate"]},"CleanLogsResponseDto":{"type":"object","properties":{}},"Cashbox":{"type":"object","properties":{"id":{"type":"number","description":"ID único de la caja"},"name":{"type":"string","description":"Nombre de la caja","example":"LIBRERIA"},"currentBatchNumber":{"type":"string","description":"Lote activo actual","nullable":true},"status":{"type":"string","description":"Estado de la caja","example":"1"}},"required":["id","name","currentBatchNumber","status"]},"OpenBatchDto":{"type":"object","properties":{"cashboxId":{"type":"number","description":"ID de la caja a aperturar","example":100},"initialFund":{"type":"number","description":"Fondo inicial de caja","example":500,"default":0},"notes":{"type":"string","description":"Anotaciones de apertura","example":"Apertura turno matutino"},"reason":{"type":"string","description":"Razón operativa. Es obligatoria al abrir manualmente la caja ONLINE","example":"Corrección de conciliación solicitada por supervisión"}},"required":["cashboxId"]},"CashBatch":{"type":"object","properties":{"id":{"type":"number","description":"ID único del lote"},"batch":{"type":"string","description":"Número de lote","example":"200151"},"uid":{"type":"string","description":"UID único del lote"},"cashBoxId":{"type":"number","description":"ID de la caja"},"userUid":{"type":"string","description":"UID del usuario responsable"},"status":{"type":"number","description":"Estado del lote","enum":[1,0,2,3,4],"example":1},"openDate":{"type":"string","description":"Fecha de apertura"},"openBy":{"type":"string","description":"Usuario que aperturó"},"closeDate":{"type":"string","description":"Fecha de cierre","nullable":true},"closeBy":{"type":"string","description":"Usuario que cerró","nullable":true},"reopenBy":{"type":"string","description":"Usuario que reabrió","nullable":true},"reopenDate":{"type":"string","description":"Fecha de reapertura","nullable":true},"reopenMode":{"type":"string","description":"Modo de reapertura del lote","enum":["CORRECTION","OPERATIONAL"],"nullable":true},"approvedBy":{"type":"string","description":"Usuario que aprobó","nullable":true},"approvedDate":{"type":"string","description":"Fecha de aprobación","nullable":true}},"required":["id","batch","uid","cashBoxId","userUid","status","openDate","openBy","closeDate","closeBy","reopenBy","reopenDate","reopenMode","approvedBy","approvedDate"]},"CloseBatchDto":{"type":"object","properties":{"notes":{"type":"string","description":"Anotaciones de cierre","example":"Cierre sin novedades"}}},"ApproveBatchDto":{"type":"object","properties":{"approvalNotes":{"type":"string","description":"Comentarios de aprobación","example":"Cuadre correcto"}}},"RejectBatchDto":{"type":"object","properties":{"reason":{"type":"string","description":"Razón de rechazo","example":"Diferencia en efectivo no justificada"}},"required":["reason"]},"ReopenBatchDto":{"type":"object","properties":{"reason":{"type":"string","description":"Razón de reapertura","example":"Corrección de error de cálculo"},"activateAsCurrent":{"type":"boolean","description":"Si es true, el lote reabierto vuelve a ser operativo y se marca como lote actual de la caja","default":false}},"required":["reason"]},"CashSettlement":{"type":"object","properties":{"id":{"type":"number","description":"ID único del cuadre"},"location":{"type":"string","description":"Código de localidad"},"username":{"type":"string","description":"Usuario operador"},"cashboxId":{"type":"number","description":"Número de caja"},"batchNumber":{"type":"string","description":"Número de lote - matches cajas_lotes.batch (VARCHAR)"},"initialFund":{"type":"number","description":"Fondo inicial de caja"},"totalCash":{"type":"number","description":"Total en caja DOP"},"totalCashUsd":{"type":"number","description":"Total en caja USD"},"totalCashEur":{"type":"number","description":"Total en caja EUR"},"cashDop":{"type":"number","description":"Efectivo DOP"},"cashUsd":{"type":"number","description":"Efectivo USD"},"cashEur":{"type":"number","description":"Efectivo EUR"},"creditCardDop":{"type":"number","description":"Tarjeta crédito DOP"},"creditCardUsd":{"type":"number","description":"Tarjeta crédito USD"},"creditCardEur":{"type":"number","description":"Tarjeta crédito EUR"},"debitCardDop":{"type":"number","description":"Tarjeta débito DOP"},"debitCardUsd":{"type":"number","description":"Tarjeta débito USD"},"debitCardEur":{"type":"number","description":"Tarjeta débito EUR"},"transferDop":{"type":"number","description":"Transferencias DOP"},"transferUsd":{"type":"number","description":"Transferencias USD"},"transferEur":{"type":"number","description":"Transferencias EUR"},"depositDop":{"type":"number","description":"Depósitos DOP"},"depositUsd":{"type":"number","description":"Depósitos USD"},"depositEur":{"type":"number","description":"Depósitos EUR"},"paypalDop":{"type":"number","description":"PayPal DOP"},"paypalUsd":{"type":"number","description":"PayPal USD"},"paypalEur":{"type":"number","description":"PayPal EUR"},"discountDop":{"type":"number","description":"Descuentos DOP"},"discountUsd":{"type":"number","description":"Descuentos USD"},"discountEur":{"type":"number","description":"Descuentos EUR"},"paymentsReceived":{"type":"number","description":"Cantidad de pagos recibidos"},"origin":{"type":"string","description":"Origen del cuadre"},"status":{"type":"string","description":"Estado del cuadre"},"openDate":{"type":"string","description":"Fecha de apertura"},"openBy":{"type":"string","description":"Usuario que aperturó"},"closeDate":{"type":"string","description":"Fecha de cierre"},"closeBy":{"type":"string","description":"Usuario que cerró"},"approvedDate":{"type":"string","description":"Fecha de aprobación"},"approvedBy":{"type":"string","description":"Usuario que aprobó"},"reopenDate":{"type":"string","description":"Fecha de reapertura"},"reopenBy":{"type":"string","description":"Usuario que reabrió"},"notes":{"type":"string","description":"Anotaciones del cuadre"}},"required":["id","location","username","cashboxId","batchNumber","initialFund","totalCash","totalCashUsd","totalCashEur","cashDop","cashUsd","cashEur","creditCardDop","creditCardUsd","creditCardEur","debitCardDop","debitCardUsd","debitCardEur","transferDop","transferUsd","transferEur","depositDop","depositUsd","depositEur","paypalDop","paypalUsd","paypalEur","discountDop","discountUsd","discountEur","paymentsReceived","origin","status","openDate","openBy","closeDate","closeBy","approvedDate","approvedBy","reopenDate","reopenBy","notes"]},"SettlementSummaryByCurrencyDto":{"type":"object","properties":{"currency":{"type":"string","description":"Código de moneda","example":"DOP"},"count":{"type":"number","description":"Cantidad de pagos en esta moneda","example":100},"total":{"type":"number","description":"Total en esta moneda","example":150000},"totalDiscount":{"type":"number","description":"Total de descuentos en esta moneda","example":5000},"byMethod":{"type":"object","description":"Desglose por método de pago"}},"required":["currency","count","total","totalDiscount","byMethod"]},"SettlementSummaryByMethodDto":{"type":"object","properties":{"method":{"type":"string","description":"Método de pago","enum":["CASH","CREDIT_CARD","DEBIT_CARD","TRANSFER","DEPOSIT","PAYPAL","OTHER"],"example":"CASH"},"count":{"type":"number","description":"Cantidad de pagos con este método","example":25},"totals":{"type":"object","description":"Totales por moneda"},"totalInDOP":{"type":"number","description":"Total general convertido a DOP (para ordenamiento)","example":75000}},"required":["method","count","totals","totalInDOP"]},"SettlementSummaryByConceptDto":{"type":"object","properties":{"concept":{"type":"string","description":"Nombre del concepto (actividad)","example":"Retiro de Jóvenes 2026"},"activityId":{"type":"number","description":"ID de la actividad (si aplica)","example":45,"nullable":true},"count":{"type":"number","description":"Cantidad de pagos para este concepto","example":15},"uniqueParticipants":{"type":"number","description":"Cantidad de participantes únicos","example":15},"totals":{"type":"object","description":"Totales por moneda"}},"required":["concept","activityId","count","uniqueParticipants","totals"]},"PaymentDetailDto":{"type":"object","properties":{"paymentId":{"type":"number","description":"ID único del pago","example":12345},"paymentDate":{"format":"date-time","type":"string","description":"Fecha del pago","example":"2026-01-15"},"paymentMethod":{"type":"string","description":"Método de pago normalizado","enum":["CASH","CREDIT_CARD","DEBIT_CARD","TRANSFER","DEPOSIT","PAYPAL","OTHER"],"example":"CASH"},"currency":{"type":"string","description":"Moneda","example":"DOP"},"amount":{"type":"number","description":"Monto del pago","example":1500},"amountInDop":{"type":"number","description":"Monto equivalente en DOP","example":1500},"discount":{"type":"number","description":"Descuento aplicado","example":100},"internalReference":{"type":"string","description":"Referencia interna","example":"REF-001"},"externalReference":{"type":"string","description":"Referencia externa/bancaria","example":"TRF-12345"},"participantName":{"type":"string","description":"Nombre del participante (cuando aplica)","example":"Juan Pérez","nullable":true},"memberCode":{"type":"string","description":"Código del miembro (cuando aplica)","example":"MBR-001","nullable":true},"concept":{"type":"string","description":"Concepto del pago (ej: nombre de actividad)","example":"Retiro de Jóvenes 2026"},"relatedEntityType":{"type":"string","description":"Tipo de entidad relacionada","example":"ACTIVITY_PARTICIPANT","nullable":true},"relatedEntityId":{"type":"number","description":"ID de la entidad relacionada","example":567,"nullable":true},"paymentStatus":{"type":"string","description":"Estado del pago","example":"PAID"},"comment":{"type":"string","description":"Comentario del pago","example":"Pago parcial acordado"}},"required":["paymentId","paymentDate","paymentMethod","currency","amount","participantName","memberCode","concept","relatedEntityType","relatedEntityId"]},"DetailedSettlementResponseDto":{"type":"object","properties":{"batchNumber":{"type":"string","description":"Número de lote","example":"MLR-2026-001"},"batchOpenDate":{"type":"object","description":"Fecha de apertura del lote","nullable":true},"batchCloseDate":{"type":"object","description":"Fecha de cierre del lote","nullable":true},"batchStatus":{"type":"string","description":"Estado del lote","example":"CLOSED"},"batchOwnerUid":{"type":"string","description":"UID del propietario del lote/cuadre","nullable":true},"batchOwnerName":{"type":"string","description":"Nombre del propietario del lote/cuadre","nullable":true},"batchApprovedDate":{"type":"object","description":"Fecha de aprobación del lote","nullable":true},"batchReopenDate":{"type":"object","description":"Fecha de reapertura del lote","nullable":true},"batchReopenMode":{"type":"string","description":"Modo de reapertura del lote","nullable":true},"totalPayments":{"type":"number","description":"Total de pagos en el lote","example":150},"uniqueParticipants":{"type":"number","description":"Total de participantes únicos","example":120},"summaryByCurrency":{"description":"Resumen general por moneda","type":"array","items":{"$ref":"#/components/schemas/SettlementSummaryByCurrencyDto"}},"summaryByMethod":{"description":"Resumen por método de pago","type":"array","items":{"$ref":"#/components/schemas/SettlementSummaryByMethodDto"}},"summaryByConcept":{"description":"Resumen por concepto (actividad)","type":"array","items":{"$ref":"#/components/schemas/SettlementSummaryByConceptDto"}},"paymentDetails":{"description":"Detalle de cada pago individual","type":"array","items":{"$ref":"#/components/schemas/PaymentDetailDto"}},"metadata":{"type":"object","description":"Metadatos del cuadre"}},"required":["batchNumber","batchOpenDate","batchCloseDate","batchStatus","batchOwnerUid","batchOwnerName","batchApprovedDate","batchReopenDate","batchReopenMode","totalPayments","uniqueParticipants","summaryByCurrency","summaryByMethod","summaryByConcept","paymentDetails","metadata"]},"BatchDashboardDto":{"type":"object","properties":{"batchNumber":{"type":"string","description":"Número de lote","example":"MLR-2026-001"},"status":{"type":"string","description":"Estado del lote"},"openDate":{"format":"date-time","type":"string","description":"Fecha de apertura"},"closeDate":{"format":"date-time","type":"string","description":"Fecha de cierre","nullable":true},"userId":{"type":"string","description":"Usuario cajero"},"cashboxId":{"type":"string","description":"Caja asignada"},"kpis":{"type":"object","description":"KPIs principales"},"distributionByMethod":{"description":"Distribución por método de pago","type":"array","items":{"type":"string"}},"topActivities":{"description":"Top 5 actividades por ingresos","type":"array","items":{"type":"string"}},"discrepancyStatus":{"type":"object","description":"Estado de discrepancias"}},"required":["batchNumber","status","openDate","closeDate","userId","cashboxId","kpis","distributionByMethod","topActivities","discrepancyStatus"]},"DiscrepancyDetailDto":{"type":"object","properties":{"currency":{"type":"string","description":"Moneda afectada","example":"DOP"},"calculatedTotal":{"type":"number","description":"Total calculado del sistema","example":15000},"declaredTotal":{"type":"number","description":"Total declarado por el cajero","example":14500},"difference":{"type":"number","description":"Diferencia (declarado - calculado)","example":-500},"differencePercentage":{"type":"number","description":"Porcentaje de diferencia","example":3.33},"severity":{"type":"string","description":"Severidad de la discrepancia"},"explanation":{"type":"string","description":"Explicación de la discrepancia"}},"required":["currency","calculatedTotal","declaredTotal","difference","differencePercentage","severity","explanation"]},"DiscrepancyValidationResponseDto":{"type":"object","properties":{"batchNumber":{"type":"string","description":"Número de lote"},"validatedAt":{"format":"date-time","type":"string","description":"Fecha de validación"},"hasDiscrepancies":{"type":"boolean","description":"¿Tiene discrepancias?"},"overallSeverity":{"type":"string","description":"Severidad general"},"summary":{"type":"object","description":"Resumen de totales"},"detailsByCurrency":{"description":"Detalle por moneda","type":"array","items":{"$ref":"#/components/schemas/DiscrepancyDetailDto"}},"detailsByMethod":{"description":"Detalle por método de pago","type":"array","items":{"type":"string"}},"recommendations":{"description":"Recomendaciones","type":"array","items":{"type":"string"}}},"required":["batchNumber","validatedAt","hasDiscrepancies","overallSeverity","summary","detailsByCurrency","detailsByMethod","recommendations"]},"ApplyDiscountDto":{"type":"object","properties":{"code":{"type":"string","description":"Código del descuento a aplicar","example":"VERANO2026"},"amount":{"type":"number","description":"Monto sobre el cual aplicar el descuento","example":500},"paymentType":{"type":"string","description":"Tipo de pago","example":"ACTIVIDAD"},"memberCode":{"type":"string","description":"Código del miembro","example":"M001"},"church":{"type":"string","description":"Código de la iglesia","example":"MLR"},"currency":{"type":"string","description":"Moneda del pago","example":"DOP"},"obligationCurrency":{"type":"string","description":"Moneda de la obligacion"},"activityId":{"type":"number","description":"ID de la actividad (si aplica)"},"participantId":{"type":"number","description":"ID del participante en la operación actual (si aplica)"},"productId":{"type":"number","description":"ID del producto (si aplica)"},"courseId":{"type":"number","description":"ID del curso (si aplica)"},"quantity":{"type":"number","description":"Cantidad de items","default":1},"addonsAmount":{"type":"number","description":"Fase 10 (add-ons): monto total de add-ons asociados al pago. Si el descuento tiene appliesToAddons=true, este monto se suma a la base del descuento y el resultado se prorratea entre matricula y add-ons.","example":150}},"required":["code","amount","paymentType"]},"DiscountApplicationResponseDto":{"type":"object","properties":{"valid":{"type":"boolean","description":"¿El descuento es válido?"},"discountId":{"type":"number","description":"ID del descuento"},"code":{"type":"string","description":"Código del descuento"},"name":{"type":"string","description":"Nombre del descuento"},"discountType":{"type":"string","description":"Tipo de descuento (percent/fixed_amount)"},"originalValue":{"type":"number","description":"Valor original (% o monto)"},"discountAmount":{"type":"number","description":"Monto calculado del descuento"},"originalAmount":{"type":"number","description":"Monto original"},"finalAmount":{"type":"number","description":"Monto final después del descuento"},"message":{"type":"string","description":"Mensaje descriptivo"},"warnings":{"description":"Advertencias","type":"array","items":{"type":"string"}},"errorCode":{"type":"string","description":"Código de error (si no es válido)"}},"required":["valid","message"]},"DiscountQuoteRequestDto":{"type":"object","properties":{"amount":{"type":"number","description":"Monto base de matricula/servicio antes de descuentos","example":3000},"paymentType":{"type":"string","description":"Tipo de pago u operacion","example":"ACTIVIDAD"},"activityId":{"type":"number","description":"ID de actividad en contexto"},"participantId":{"type":"number","description":"ID del participante en contexto"},"productId":{"type":"number","description":"ID de producto en contexto"},"courseId":{"type":"number","description":"ID de curso en contexto"},"memberCode":{"type":"string","description":"Codigo de miembro/persona","example":"1001"},"church":{"type":"string","description":"Codigo de iglesia/localidad","example":"MLR"},"beneficiaryIdentification":{"type":"string","description":"Cedula/identificacion del beneficiario para certificados de compra"},"beneficiaryEmail":{"type":"string","description":"Correo del beneficiario para certificados de compra"},"beneficiaryPhone":{"type":"string","description":"Telefono del beneficiario para certificados de compra"},"currency":{"type":"string","description":"Moneda del pago","example":"DOP"},"obligationCurrency":{"type":"string","description":"Moneda de la obligacion. En actividades se valida contra el participante/actividad.","example":"USD"},"quantity":{"type":"number","description":"Cantidad de items/participaciones","default":1},"addonsAmount":{"type":"number","description":"Monto de add-ons asociados al pago","example":500},"manualCodes":{"description":"Codigos manuales introducidos, buscados o escaneados","example":["VCH-ABC123"],"type":"array","items":{"type":"string"}},"excludedPromotionCodes":{"description":"Promociones automaticas que el usuario decidio no aplicar","example":["PROMO10"],"type":"array","items":{"type":"string"}}},"required":["amount","paymentType"]},"DiscountQuoteRejectedDto":{"type":"object","properties":{"code":{"type":"string","description":"Codigo evaluado"},"reason":{"type":"string","description":"Razon legible del rechazo"},"errorCode":{"type":"string","description":"Codigo tecnico del rechazo"}},"required":["code","reason"]},"DiscountQuoteResponseDto":{"type":"object","properties":{"originalAmount":{"type":"number","description":"Monto total considerado antes de descuentos"},"paymentCurrency":{"type":"string","description":"Moneda en que se presenta y cobra la cotizacion"},"obligationCurrency":{"type":"string","description":"Moneda de la obligacion reducida por los descuentos"},"automaticPromotions":{"description":"Promociones aplicadas automaticamente","type":"array","items":{"type":"string"}},"manualDiscounts":{"description":"Descuentos manuales aplicados","type":"array","items":{"type":"string"}},"certificateCredits":{"description":"Creditos/certificados aplicados","type":"array","items":{"type":"string"}},"otherApplicablePromotions":{"description":"Promociones aplicables pero no autoaplicadas","type":"array","items":{"type":"string"}},"availablePromotionsCount":{"type":"number","description":"Cantidad de promociones aplicables disponibles para consulta bajo demanda"},"rejected":{"description":"Codigos rechazados","type":"array","items":{"$ref":"#/components/schemas/DiscountQuoteRejectedDto"}},"totalDiscount":{"type":"number","description":"Total descontado"},"finalAmount":{"type":"number","description":"Monto final a pagar"},"messages":{"description":"Mensajes no invasivos para la UI","type":"array","items":{"type":"string"}}},"required":["originalAmount","automaticPromotions","manualDiscounts","certificateCredits","otherApplicablePromotions","availablePromotionsCount","rejected","totalDiscount","finalAmount","messages"]},"AvailablePromotionsRequestDto":{"type":"object","properties":{"amount":{"type":"number","description":"Monto base de matricula/servicio antes de descuentos","example":3000},"paymentType":{"type":"string","description":"Tipo de pago u operacion","example":"ACTIVIDAD"},"activityId":{"type":"number","description":"ID de actividad en contexto"},"participantId":{"type":"number","description":"ID del participante en contexto"},"productId":{"type":"number","description":"ID de producto en contexto"},"courseId":{"type":"number","description":"ID de curso en contexto"},"memberCode":{"type":"string","description":"Codigo de miembro/persona","example":"1001"},"church":{"type":"string","description":"Codigo de iglesia/localidad","example":"MLR"},"beneficiaryIdentification":{"type":"string","description":"Cedula/identificacion del beneficiario para certificados de compra"},"beneficiaryEmail":{"type":"string","description":"Correo del beneficiario para certificados de compra"},"beneficiaryPhone":{"type":"string","description":"Telefono del beneficiario para certificados de compra"},"currency":{"type":"string","description":"Moneda del pago","example":"DOP"},"obligationCurrency":{"type":"string","description":"Moneda de la obligacion. En actividades se valida contra el participante/actividad.","example":"USD"},"quantity":{"type":"number","description":"Cantidad de items/participaciones","default":1},"addonsAmount":{"type":"number","description":"Monto de add-ons asociados al pago","example":500},"manualCodes":{"description":"Codigos manuales introducidos, buscados o escaneados","example":["VCH-ABC123"],"type":"array","items":{"type":"string"}},"excludedPromotionCodes":{"description":"Promociones automaticas que el usuario decidio no aplicar","example":["PROMO10"],"type":"array","items":{"type":"string"}},"limit":{"type":"number","description":"Cantidad maxima de promociones a devolver","default":20},"offset":{"type":"number","description":"Cantidad de promociones a omitir","default":0}},"required":["amount","paymentType"]},"AvailablePromotionsResponseDto":{"type":"object","properties":{"promotions":{"description":"Promociones aplicables no aplicadas automaticamente","type":"array","items":{"type":"string"}},"total":{"type":"number","description":"Total de promociones disponibles en este contexto"},"limit":{"type":"number","description":"Limite usado para la respuesta"},"offset":{"type":"number","description":"Desplazamiento usado para la respuesta"},"hasMore":{"type":"boolean","description":"Indica si existen mas promociones disponibles"}},"required":["promotions","total","limit","offset","hasMore"]},"PaymentTypeConditionsDto":{"type":"object","properties":{"include":{"description":"Tipos de pago permitidos","example":["ACTIVIDAD","EDUCACION"],"type":"array","items":{"type":"string"}},"exclude":{"description":"Tipos de pago excluidos","example":["DIEZMO"],"type":"array","items":{"type":"string"}}}},"EntityConditionsDto":{"type":"object","properties":{"activities":{"description":"IDs de actividades","example":[1,2,3],"type":"array","items":{"type":"string"}},"products":{"description":"IDs de productos","example":[10,20],"type":"array","items":{"type":"string"}},"courses":{"description":"IDs de cursos","example":[5,6],"type":"array","items":{"type":"string"}},"memberships":{"description":"IDs de tipos de membresía","example":[1],"type":"array","items":{"type":"string"}}}},"MemberConditionsDto":{"type":"object","properties":{"type":{"type":"string","description":"Tipo de restricción","enum":["all","specific","groups"],"example":"all"},"codes":{"description":"Códigos de miembros específicos","example":["M001","M002"],"type":"array","items":{"type":"string"}},"groups":{"description":"Grupos/ministerios","example":["LIDERES","JOVENES"],"type":"array","items":{"type":"string"}},"ministryIds":{"description":"IDs de ministerios permitidos","example":[1,2],"type":"array","items":{"type":"string"}},"ministryGroupIds":{"description":"IDs de grupos de ministerio permitidos","example":[10,11],"type":"array","items":{"type":"string"}},"memberOnly":{"type":"boolean","description":"Solo miembros registrados","example":true},"newBelieverOnly":{"type":"boolean","description":"Solo nuevos creyentes","example":false},"minMembershipDays":{"type":"number","description":"Mínimo días como miembro","example":90}}},"ChurchConditionsDto":{"type":"object","properties":{"include":{"description":"Códigos de iglesias permitidas","example":["MLR","STI"],"type":"array","items":{"type":"string"}},"exclude":{"description":"Códigos de iglesias excluidas","example":["TEST"],"type":"array","items":{"type":"string"}}}},"QuantityConditionsDto":{"type":"object","properties":{"minItems":{"type":"number","description":"Mínimo de items","example":3},"maxItems":{"type":"number","description":"Máximo de items","example":10}}},"DiscountConditionsDto":{"type":"object","properties":{"scope":{"type":"string","description":"Alcance: global (aplica a todo) o specific (según reglas)","enum":["global","specific"],"default":"global"},"minAmount":{"type":"number","description":"Monto mínimo para aplicar","example":100},"maxAmount":{"type":"number","description":"Monto máximo para aplicar","example":10000},"paymentTypes":{"description":"Condiciones de tipos de pago","allOf":[{"$ref":"#/components/schemas/PaymentTypeConditionsDto"}]},"entities":{"description":"Condiciones de entidades específicas","allOf":[{"$ref":"#/components/schemas/EntityConditionsDto"}]},"members":{"description":"Condiciones de miembros","allOf":[{"$ref":"#/components/schemas/MemberConditionsDto"}]},"churches":{"description":"Condiciones de iglesias","allOf":[{"$ref":"#/components/schemas/ChurchConditionsDto"}]},"quantity":{"description":"Condiciones de cantidad","allOf":[{"$ref":"#/components/schemas/QuantityConditionsDto"}]},"stackable":{"type":"boolean","description":"Combinable con otros descuentos","default":false},"customRules":{"type":"object","description":"Reglas personalizadas (JSON libre)"}}},"CreatePromotionDto":{"type":"object","properties":{"code":{"type":"string","description":"Código único del descuento (se genera automáticamente si no se proporciona)","example":"VERANO2026"},"name":{"type":"string","description":"Nombre descriptivo (usa el código si no se proporciona)","example":"Promoción de Verano"},"description":{"type":"string","description":"Descripción detallada"},"discountType":{"type":"string","description":"Tipo de descuento","enum":["percent","fixed_amount"],"example":"percent"},"value":{"type":"number","description":"Valor del descuento (porcentaje 0-100 o monto fijo)","example":20},"currency":{"type":"string","description":"Moneda del valor o de referencia para porcentajes","example":"DOP","default":"DOP"},"isMultiCurrency":{"type":"boolean","description":"Si true, el descuento puede aplicarse a obligaciones en otra moneda","default":false},"appliesToAddons":{"type":"boolean","description":"Si true, el descuento incluye los add-ons en la base de calculo y se prorratea entre matricula y add-ons","default":false},"maxDiscountAmount":{"type":"number","description":"Monto máximo de descuento (solo para porcentajes)","example":500},"startDate":{"type":"string","description":"Fecha de inicio de vigencia","example":"2026-06-01"},"endDate":{"type":"string","description":"Fecha de fin de vigencia","example":"2026-08-31"},"conditions":{"description":"Condiciones de aplicación","allOf":[{"$ref":"#/components/schemas/DiscountConditionsDto"}]},"maxUsesTotal":{"type":"number","description":"Límite máximo de usos totales","example":100},"maxUsesPerMember":{"type":"number","description":"Límite máximo de usos por miembro","example":1}},"required":["discountType","value"]},"Discount":{"type":"object","properties":{"id":{"type":"number","description":"ID único del descuento"},"code":{"type":"string","description":"Código único del descuento"},"name":{"type":"string","description":"Nombre descriptivo"},"description":{"type":"string","description":"Descripción detallada"},"kind":{"type":"string","description":"Tipo: promotion o voucher","enum":["promotion","voucher"]},"discountType":{"type":"string","description":"Tipo de descuento: percent o fixed_amount","enum":["percent","fixed_amount"]},"value":{"type":"number","description":"Valor del descuento (porcentaje o monto fijo)"},"currency":{"type":"string","description":"Moneda del valor (relevante para fixed_amount)","example":"DOP"},"isMultiCurrency":{"type":"boolean","description":"Si true, fixed_amount se convierte a la moneda del pago automáticamente"},"maxDiscountAmount":{"type":"number","description":"Monto máximo de descuento (para porcentajes)"},"startDate":{"format":"date-time","type":"string","description":"Fecha de inicio de vigencia"},"endDate":{"format":"date-time","type":"string","description":"Fecha de fin de vigencia"},"maxUsesTotal":{"type":"number","description":"Límite máximo de usos totales"},"maxUsesPerMember":{"type":"number","description":"Límite máximo de usos por miembro"},"currentUses":{"type":"number","description":"Contador de usos actuales"},"originalBalance":{"type":"number","description":"Balance original del voucher"},"currentBalance":{"type":"number","description":"Balance actual del voucher"},"issuedTo":{"type":"string","description":"Miembro para quien fue emitido el voucher"},"issuedBy":{"type":"string","description":"Usuario que emitió el voucher"},"batchId":{"type":"string","description":"ID del lote de generación (vouchers batch)"},"redeemedBy":{"type":"string","description":"Miembro que redimió el voucher"},"redeemedAt":{"format":"date-time","type":"string","description":"Fecha de redención del voucher"},"conditions":{"type":"object","description":"Condiciones de aplicación (JSON)"},"appliesToAddons":{"type":"boolean","description":"Fase 10: si true, el monto de add-ons se suma a la base del descuento y se prorratea entre matricula y add-ons.","default":false},"status":{"type":"string","description":"Estado del descuento","enum":["active","inactive","expired","depleted"]},"createdBy":{"type":"string","description":"Usuario que creó el registro"},"updatedBy":{"type":"string","description":"Usuario que actualizó el registro"}},"required":["id","code","name","kind","discountType","value","currentUses","conditions","appliesToAddons","status"]},"UpdatePromotionDto":{"type":"object","properties":{"name":{"type":"string","description":"Nombre descriptivo (usa el código si no se proporciona)","example":"Promoción de Verano"},"description":{"type":"string","description":"Descripción detallada"},"discountType":{"type":"string","description":"Tipo de descuento","enum":["percent","fixed_amount"],"example":"percent"},"value":{"type":"number","description":"Valor del descuento (porcentaje 0-100 o monto fijo)","example":20},"currency":{"type":"string","description":"Moneda del valor o de referencia para porcentajes","example":"DOP","default":"DOP"},"isMultiCurrency":{"type":"boolean","description":"Si true, el descuento puede aplicarse a obligaciones en otra moneda","default":false},"appliesToAddons":{"type":"boolean","description":"Si true, el descuento incluye los add-ons en la base de calculo y se prorratea entre matricula y add-ons","default":false},"maxDiscountAmount":{"type":"number","description":"Monto máximo de descuento (solo para porcentajes)","example":500},"startDate":{"type":"string","description":"Fecha de inicio de vigencia","example":"2026-06-01"},"endDate":{"type":"string","description":"Fecha de fin de vigencia","example":"2026-08-31"},"conditions":{"description":"Condiciones de aplicación","allOf":[{"$ref":"#/components/schemas/DiscountConditionsDto"}]},"maxUsesTotal":{"type":"number","description":"Límite máximo de usos totales","example":100},"maxUsesPerMember":{"type":"number","description":"Límite máximo de usos por miembro","example":1}}},"CreateVoucherDto":{"type":"object","properties":{"code":{"type":"string","description":"Código único (se genera automáticamente si no se proporciona)","example":"REGALO-ABC123"},"name":{"type":"string","description":"Nombre descriptivo","example":"Vale de Regalo"},"description":{"type":"string","description":"Descripción"},"discountType":{"type":"string","description":"Tipo de descuento del voucher","enum":["percent","fixed_amount"],"default":"fixed_amount"},"value":{"type":"number","description":"Valor/Balance del voucher","example":500},"currency":{"type":"string","description":"Moneda del voucher","example":"DOP","default":"DOP"},"isMultiCurrency":{"type":"boolean","description":"Si true, el voucher se convierte automáticamente a la moneda del pago","default":false},"appliesToAddons":{"type":"boolean","description":"Si true, el voucher incluye los add-ons en la base de aplicacion y se prorratea entre matricula y add-ons","default":false},"maxUsesPerMember":{"type":"number","description":"Límite máximo de canjes por participante/miembro","example":1},"issuedTo":{"type":"string","description":"Miembro para quien se emite (código)"},"endDate":{"type":"string","description":"Fecha de expiración","example":"2026-12-31"},"conditions":{"description":"Condiciones de aplicación","allOf":[{"$ref":"#/components/schemas/DiscountConditionsDto"}]}},"required":["name","value"]},"GenerateVoucherBatchDto":{"type":"object","properties":{"count":{"type":"number","description":"Cantidad de vouchers a generar","example":50},"value":{"type":"number","description":"Valor de cada voucher","example":500},"currency":{"type":"string","description":"Moneda del voucher","example":"DOP","default":"DOP"},"isMultiCurrency":{"type":"boolean","description":"Si true, se convierte a la moneda del pago","default":false},"appliesToAddons":{"type":"boolean","description":"Si true, los vouchers generados incluyen los add-ons en la base de aplicacion y se prorratean entre matricula y add-ons","default":false},"maxUsesPerMember":{"type":"number","description":"Límite máximo de canjes por participante/miembro para cada voucher","example":1},"prefix":{"type":"string","description":"Prefijo para los códigos","example":"REGALO"},"name":{"type":"string","description":"Nombre base para los vouchers","example":"Vale de Regalo"},"description":{"type":"string","description":"Descripción"},"endDate":{"type":"string","description":"Fecha de expiración","example":"2026-12-31"},"conditions":{"description":"Condiciones de aplicación","allOf":[{"$ref":"#/components/schemas/DiscountConditionsDto"}]}},"required":["count","value","name"]},"VoucherLookupDto":{"type":"object","properties":{"code":{"type":"string","description":"Código del descuento a aplicar","example":"VERANO2026"},"amount":{"type":"number","description":"Monto sobre el cual aplicar el descuento","example":500},"paymentType":{"type":"string","description":"Tipo de pago","example":"ACTIVIDAD"},"memberCode":{"type":"string","description":"Código del miembro","example":"M001"},"church":{"type":"string","description":"Código de la iglesia","example":"MLR"},"currency":{"type":"string","description":"Moneda del pago","example":"DOP"},"obligationCurrency":{"type":"string","description":"Moneda de la obligacion"},"activityId":{"type":"number","description":"ID de la actividad (si aplica)"},"participantId":{"type":"number","description":"ID del participante en la operación actual (si aplica)"},"productId":{"type":"number","description":"ID del producto (si aplica)"},"courseId":{"type":"number","description":"ID del curso (si aplica)"},"quantity":{"type":"number","description":"Cantidad de items","default":1},"addonsAmount":{"type":"number","description":"Fase 10 (add-ons): monto total de add-ons asociados al pago. Si el descuento tiene appliesToAddons=true, este monto se suma a la base del descuento y el resultado se prorratea entre matricula y add-ons.","example":150}},"required":["code","amount","paymentType"]},"UpdateVoucherDto":{"type":"object","properties":{"name":{"type":"string","description":"Nombre descriptivo","example":"Vale de Regalo"},"description":{"type":"string","description":"Descripción"},"currency":{"type":"string","description":"Moneda del voucher","example":"DOP","default":"DOP"},"isMultiCurrency":{"type":"boolean","description":"Si true, el voucher se convierte automáticamente a la moneda del pago","default":false},"appliesToAddons":{"type":"boolean","description":"Si true, el voucher incluye los add-ons en la base de aplicacion y se prorratea entre matricula y add-ons","default":false},"maxUsesPerMember":{"type":"number","description":"Límite máximo de canjes por participante/miembro","example":1},"issuedTo":{"type":"string","description":"Miembro para quien se emite (código)"},"endDate":{"type":"string","description":"Fecha de expiración","example":"2026-12-31"},"conditions":{"description":"Condiciones de aplicación","allOf":[{"$ref":"#/components/schemas/DiscountConditionsDto"}]}}},"CreateDiscountCertificateDto":{"type":"object","properties":{"type":{"type":"string","enum":["purchase_person","purchase_person_activity","gift_activity","gift_credit"],"description":"Tipo de certificado"},"publicCode":{"type":"string","description":"Codigo publico. Si no se envia, se genera automaticamente"},"buyerMemberCode":{"type":"string","description":"Codigo de miembro comprador/donante"},"buyerName":{"type":"string","description":"Nombre del comprador/donante"},"buyerEmail":{"type":"string","description":"Correo del comprador/donante"},"buyerPhone":{"type":"string","description":"Telefono del comprador/donante"},"beneficiaryIdentification":{"type":"string","description":"Cedula/identificacion del beneficiario. Se normaliza y almacena hasheada"},"beneficiaryEmail":{"type":"string","description":"Correo del beneficiario. Se almacena hasheado y enmascarado"},"beneficiaryPhone":{"type":"string","description":"Telefono del beneficiario. Se almacena hasheado y enmascarado"},"beneficiaryDisplayName":{"type":"string","description":"Nombre visible/parcial del beneficiario"},"activityId":{"type":"number","description":"Actividad asociada cuando aplica"},"participantId":{"type":"number","description":"Participacion asociada cuando ya exista"},"originalAmount":{"type":"number","description":"Monto original del certificado"},"originalCurrency":{"type":"string","description":"Moneda del certificado","default":"DOP"},"paymentId":{"type":"number","description":"ID de pago asociado cuando ya exista"},"redemptionDeadline":{"type":"string","description":"Fecha limite de redencion para regalos/actividad"},"metadata":{"type":"object","description":"Metadatos internos no sensibles"}},"required":["type","originalAmount"]},"CreateGiftActivityCertificateDto":{"type":"object","properties":{"activityId":{"type":"number","description":"Actividad cuya participacion sera cubierta al 100%"},"buyerMemberCode":{"type":"string","description":"Codigo de miembro comprador/donante"},"buyerName":{"type":"string","description":"Nombre del comprador/donante"},"buyerEmail":{"type":"string","description":"Correo del comprador/donante"},"buyerPhone":{"type":"string","description":"Telefono del comprador/donante"},"redemptionDeadline":{"type":"string","description":"Fecha limite de redencion"},"metadata":{"type":"object","description":"Metadatos internos no sensibles"}},"required":["activityId"]},"CreatePurchasePersonCertificateDto":{"type":"object","properties":{"originalAmount":{"type":"number","description":"Monto comprado como credito para una persona"},"originalCurrency":{"type":"string","description":"Moneda del certificado","default":"DOP"},"buyerMemberCode":{"type":"string","description":"Codigo de miembro comprador/donante"},"buyerName":{"type":"string","description":"Nombre del comprador/donante"},"buyerEmail":{"type":"string","description":"Correo del comprador/donante"},"buyerPhone":{"type":"string","description":"Telefono del comprador/donante"},"beneficiaryIdentification":{"type":"string","description":"Cedula/identificacion del beneficiario"},"beneficiaryEmail":{"type":"string","description":"Correo del beneficiario"},"beneficiaryPhone":{"type":"string","description":"Telefono del beneficiario"},"beneficiaryDisplayName":{"type":"string","description":"Nombre visible/parcial del beneficiario"},"metadata":{"type":"object","description":"Metadatos internos no sensibles"}},"required":["originalAmount"]},"CreatePurchasePersonActivityCertificateDto":{"type":"object","properties":{"buyerMemberCode":{"type":"string","description":"Codigo de miembro comprador/donante"},"buyerName":{"type":"string","description":"Nombre del comprador/donante"},"buyerEmail":{"type":"string","description":"Correo del comprador/donante"},"buyerPhone":{"type":"string","description":"Telefono del comprador/donante"},"beneficiaryIdentification":{"type":"string","description":"Cedula/identificacion del beneficiario"},"beneficiaryEmail":{"type":"string","description":"Correo del beneficiario"},"beneficiaryPhone":{"type":"string","description":"Telefono del beneficiario"},"beneficiaryDisplayName":{"type":"string","description":"Nombre visible/parcial del beneficiario"},"metadata":{"type":"object","description":"Metadatos internos no sensibles"},"activityId":{"type":"number","description":"Actividad cubierta por el certificado de compra persona+actividad"}},"required":["activityId"]},"QuotePurchaseCertificateCreditsDto":{"type":"object","properties":{"amount":{"type":"number","description":"Monto restante a cubrir despues de promociones/vouchers"},"currency":{"type":"string","description":"Moneda objetivo de la operacion","default":"DOP"},"activityId":{"type":"number","description":"Actividad en contexto"},"participantId":{"type":"number","description":"Participante en contexto"},"beneficiaryIdentification":{"type":"string","description":"Cedula/identificacion a usar para autoaplicar"},"beneficiaryEmail":{"type":"string","description":"Correo a usar si no hay cedula"},"beneficiaryPhone":{"type":"string","description":"Telefono a usar si no hay cedula ni correo"}},"required":["amount"]},"RedeemPurchaseCertificateCreditsDto":{"type":"object","properties":{"amount":{"type":"number","description":"Monto restante a cubrir despues de promociones/vouchers"},"currency":{"type":"string","description":"Moneda objetivo de la operacion","default":"DOP"},"activityId":{"type":"number","description":"Actividad en contexto"},"participantId":{"type":"number","description":"Participante en contexto"},"beneficiaryIdentification":{"type":"string","description":"Cedula/identificacion a usar para autoaplicar"},"beneficiaryEmail":{"type":"string","description":"Correo a usar si no hay cedula"},"beneficiaryPhone":{"type":"string","description":"Telefono a usar si no hay cedula ni correo"},"paymentId":{"type":"number","description":"ID del pago que consume el credito"},"expectedCredits":{"description":"Creditos esperados desde la cotizacion previa","type":"array","items":{"type":"string"}}},"required":["amount","paymentId"]},"LookupCertificateRedemptionDto":{"type":"object","properties":{"publicCode":{"type":"string","description":"Codigo publico del certificado"},"redeemToken":{"type":"string","description":"Token opaco de redencion"}},"required":["publicCode","redeemToken"]},"RedeemGiftActivityCertificateDto":{"type":"object","properties":{"publicCode":{"type":"string","description":"Codigo publico del certificado"},"redeemToken":{"type":"string","description":"Token opaco de redencion"},"participantName":{"type":"string","description":"Nombre completo del participante que redime"},"participantEmail":{"type":"string","description":"Correo del participante"},"participantPhone":{"type":"string","description":"Telefono del participante"},"participantIdentification":{"type":"string","description":"Identificacion/cedula del participante"}},"required":["publicCode","redeemToken","participantName"]},"ActivateGiftActivityCertificateDto":{"type":"object","properties":{"paymentId":{"type":"number","description":"Pago confirmado que activa el certificado"}}},"ConvertGiftActivityCertificateToCreditDto":{"type":"object","properties":{"force":{"type":"boolean","description":"Permite conversion administrativa antes de vencer la ventana"},"reason":{"type":"string","description":"Razon administrativa de la conversion"}}},"SplitGiftCreditCertificateDto":{"type":"object","properties":{"amount":{"type":"number","description":"Monto a separar del credito principal en la moneda del credito"},"beneficiaryIdentification":{"type":"string","description":"Cedula/identificacion del beneficiario del nuevo credito"},"beneficiaryEmail":{"type":"string","description":"Correo del beneficiario del nuevo credito"},"beneficiaryPhone":{"type":"string","description":"Telefono del beneficiario del nuevo credito"},"beneficiaryDisplayName":{"type":"string","description":"Nombre visible/parcial del beneficiario"},"reason":{"type":"string","description":"Razon administrativa del split"}},"required":["amount"]},"ReassignGiftCreditToPersonActivityDto":{"type":"object","properties":{"activityId":{"type":"number","description":"Actividad destino para crear certificado persona+actividad"},"additionalPaymentId":{"type":"number","description":"Pago de diferencia cuando la actividad cuesta mas que el credito disponible"},"beneficiaryIdentification":{"type":"string","description":"Cedula/identificacion del beneficiario destino"},"beneficiaryEmail":{"type":"string","description":"Correo del beneficiario destino"},"beneficiaryPhone":{"type":"string","description":"Telefono del beneficiario destino"},"beneficiaryDisplayName":{"type":"string","description":"Nombre visible/parcial del beneficiario"},"reason":{"type":"string","description":"Razon administrativa de la reasignacion"}},"required":["activityId"]},"SendCertificateNotificationDto":{"type":"object","properties":{"eventType":{"type":"string","description":"Evento de notificacion del certificado","enum":["created_pending_payment","activated","sent","redeemed","buyer_limited_confirmation","redemption_deadline_soon","converted_to_credit","reassigned","cancelled","refunded"]},"recipientEmail":{"type":"string","description":"Correo destino. Si no se envia, usa correo del comprador cuando exista"},"recipientName":{"type":"string","description":"Nombre destino no sensible"},"redeemToken":{"type":"string","description":"Token opaco solo para construir link/QR en el correo; nunca se persiste"},"publicBaseUrl":{"type":"string","description":"URL base publica para construir link de redencion futuro"},"sendNow":{"type":"boolean","description":"Enviar inmediatamente en vez de solo encolar"},"metadata":{"type":"object","description":"Metadatos internos no sensibles del evento"}},"required":["eventType"]},"ActivatePurchaseCertificateDto":{"type":"object","properties":{"paymentId":{"type":"number","description":"Pago confirmado que activa el certificado"}}},"PublicLookupCertificateRedemptionDto":{"type":"object","properties":{"publicCode":{"type":"string","description":"Codigo publico del certificado"},"redeemToken":{"type":"string","description":"Token opaco de redencion"}},"required":["publicCode","redeemToken"]},"PublicRedeemGiftActivityCertificateDto":{"type":"object","properties":{"publicCode":{"type":"string","description":"Codigo publico del certificado"},"redeemToken":{"type":"string","description":"Token opaco de redencion"},"participantName":{"type":"string","description":"Nombre completo del participante que redime"},"participantEmail":{"type":"string","description":"Correo del participante"},"participantPhone":{"type":"string","description":"Telefono del participante"},"participantIdentification":{"type":"string","description":"Identificacion/cedula del participante"}},"required":["publicCode","redeemToken","participantName"]},"CreateHarvestDto":{"type":"object","properties":{}},"UpdateHarvestDto":{"type":"object","properties":{}},"AddMemberToHarvestDto":{"type":"object","properties":{}},"AddMultipleMembersToHarvestDto":{"type":"object","properties":{}},"UpdateHarvestMemberDto":{"type":"object","properties":{}},"NewMemberHarvestResultRecordDto":{"type":"object","properties":{"newBelieverId":{"type":"number","description":"ID del registro R1"},"attended":{"type":"boolean","description":"Indica si asistio/queda seleccionado para promocion"},"reason":{"type":"string","description":"Razon cuando no asistio o fue desmarcado"}},"required":["newBelieverId","attended"]},"NewMemberHarvestResultDto":{"type":"object","properties":{"church":{"type":"string","description":"Codigo de iglesia para filtrar"},"harvestNumber":{"type":"string","description":"Numero de cosecha confirmada"},"records":{"type":"array","items":{"$ref":"#/components/schemas/NewMemberHarvestResultRecordDto"}}},"required":["harvestNumber","records"]},"NetworkHarvestProcessingRunTotalsDto":{"type":"object","properties":{"total":{"type":"number"},"processable":{"type":"number"},"notProcessable":{"type":"number"},"selected":{"type":"number"},"processed":{"type":"number"},"notAttended":{"type":"number"},"rejected":{"type":"number"},"errors":{"type":"number"}},"required":["total","processable","notProcessable","selected","processed","notAttended","rejected","errors"]},"NetworkHarvestProcessingResultMemberDto":{"type":"object","properties":{"id":{"type":"number"},"memberId":{"type":"number"},"memberCode":{"type":"number","nullable":true},"code":{"type":"number","nullable":true},"fullName":{"type":"string","nullable":true},"church":{"type":"string","nullable":true},"sourceNetworkId":{"type":"number","nullable":true},"entryType":{"type":"string","enum":["REGULAR","VISITOR","TRANSFERRED","ADHERENT"],"nullable":true},"processStatus":{"type":"string","enum":["IN_PREPARATION","INTERVIEW_PENDING","READY_FOR_BAPTISM","BAPTISM_NOT_ATTENDED","SUITABLE_MEMBERSHIP","LOCKED","PROCESSED"],"nullable":true}},"required":["id","memberId"]},"NetworkHarvestProcessingResultActionRecordDto":{"type":"object","properties":{"id":{"type":"number"},"fullName":{"type":"string","nullable":true},"processStatus":{"type":"string","enum":["IN_PREPARATION","INTERVIEW_PENDING","READY_FOR_BAPTISM","BAPTISM_NOT_ATTENDED","SUITABLE_MEMBERSHIP","LOCKED","PROCESSED"],"nullable":true},"reason":{"type":"string","nullable":true},"action":{"type":"string"}},"required":["id","action"]},"NetworkHarvestProcessingResultErrorDto":{"type":"object","properties":{"id":{"type":"number"},"error":{"type":"string"}},"required":["id","error"]},"NetworkHarvestProcessingResultSnapshotDto":{"type":"object","properties":{"harvestNumber":{"type":"string"},"church":{"type":"string"},"total":{"type":"number"},"processed":{"type":"number"},"notAttended":{"type":"number"},"rejected":{"type":"number"},"errorCount":{"type":"number"},"members":{"type":"array","items":{"$ref":"#/components/schemas/NetworkHarvestProcessingResultMemberDto"}},"notAttendedRecords":{"type":"array","items":{"$ref":"#/components/schemas/NetworkHarvestProcessingResultActionRecordDto"}},"rejectedRecords":{"type":"array","items":{"$ref":"#/components/schemas/NetworkHarvestProcessingResultActionRecordDto"}},"errors":{"type":"array","items":{"$ref":"#/components/schemas/NetworkHarvestProcessingResultErrorDto"}},"generatedAt":{"type":"string"}},"required":["harvestNumber","church","total","processed","notAttended","rejected","errorCount","members","notAttendedRecords","rejectedRecords","errors","generatedAt"]},"NetworkHarvestProcessingRunReportDto":{"type":"object","properties":{"storageItemId":{"type":"string","nullable":true},"path":{"type":"string","nullable":true},"url":{"type":"string","nullable":true},"hash":{"type":"string","nullable":true}}},"NetworkHarvestProcessingRunDto":{"type":"object","properties":{"id":{"type":"number"},"church":{"type":"string"},"harvestNumber":{"type":"string"},"status":{"type":"string","enum":["PENDING","PROCESSING","COMPLETED","COMPLETED_WITH_ERRORS","FAILED","REPORT_FAILED"]},"requestedBy":{"type":"string","nullable":true},"startedAt":{"format":"date-time","type":"string","nullable":true},"finishedAt":{"format":"date-time","type":"string","nullable":true},"totals":{"$ref":"#/components/schemas/NetworkHarvestProcessingRunTotalsDto"},"inputSnapshot":{"type":"object","nullable":true},"previewSnapshot":{"type":"object","nullable":true},"resultSnapshot":{"nullable":true,"allOf":[{"$ref":"#/components/schemas/NetworkHarvestProcessingResultSnapshotDto"}]},"report":{"$ref":"#/components/schemas/NetworkHarvestProcessingRunReportDto"},"terminal":{"type":"boolean"},"canCloseHarvest":{"type":"boolean"},"blocksHarvestClosure":{"type":"boolean"},"blockingReason":{"type":"string","nullable":true},"warningReason":{"type":"string","nullable":true},"reportRegenerationAvailable":{"type":"boolean"},"attempts":{"type":"number"},"errorMessage":{"type":"string","nullable":true},"createdAt":{"format":"date-time","type":"string"},"updatedAt":{"format":"date-time","type":"string"}},"required":["id","church","harvestNumber","status","totals","report","terminal","canCloseHarvest","blocksHarvestClosure","reportRegenerationAvailable","attempts","createdAt","updatedAt"]},"NetworkHarvestProcessingRunResponseDto":{"type":"object","properties":{"message":{"type":"string"},"run":{"$ref":"#/components/schemas/NetworkHarvestProcessingRunDto"}},"required":["message","run"]},"CreateNetworkBelieverGroupDto":{"type":"object","properties":{"code":{"type":"string","example":"R1"},"name":{"type":"string","example":"Nuevo Creyente"},"description":{"type":"string"},"entryType":{"type":"string","enum":["REGULAR","VISITOR","TRANSFERRED","ADHERENT"]},"scope":{"type":"string","enum":["GLOBAL","CHURCH"]},"church":{"type":"string"},"isDefaultForEntryType":{"type":"boolean","default":false}},"required":["code","name","entryType","scope"]},"UpdateNetworkBelieverGroupDto":{"type":"object","properties":{"code":{"type":"string","example":"R1"},"name":{"type":"string","example":"Nuevo Creyente"},"description":{"type":"string"},"entryType":{"type":"string","enum":["REGULAR","VISITOR","TRANSFERRED","ADHERENT"]},"scope":{"type":"string","enum":["GLOBAL","CHURCH"]},"church":{"type":"string"},"isDefaultForEntryType":{"type":"boolean","default":false}}},"CreateNetworkPreparationPolicyDto":{"type":"object","properties":{"believerGroupId":{"type":"number"},"requiresCbb":{"type":"boolean","default":false},"cbbSeriesVersionId":{"type":"number"},"requiredInterviewCount":{"type":"number","minimum":0,"maximum":10,"default":1},"allowsExternalBaptism":{"type":"boolean","default":false},"promotesToMembership":{"type":"boolean","default":true},"defaultProcessStatus":{"type":"string","enum":["IN_PREPARATION","INTERVIEW_PENDING","READY_FOR_BAPTISM","BAPTISM_NOT_ATTENDED","SUITABLE_MEMBERSHIP","LOCKED","PROCESSED"]}},"required":["believerGroupId"]},"UpdateNetworkPreparationPolicyDto":{"type":"object","properties":{"believerGroupId":{"type":"number"},"requiresCbb":{"type":"boolean","default":false},"cbbSeriesVersionId":{"type":"number"},"requiredInterviewCount":{"type":"number","minimum":0,"maximum":10,"default":1},"allowsExternalBaptism":{"type":"boolean","default":false},"promotesToMembership":{"type":"boolean","default":true},"defaultProcessStatus":{"type":"string","enum":["IN_PREPARATION","INTERVIEW_PENDING","READY_FOR_BAPTISM","BAPTISM_NOT_ATTENDED","SUITABLE_MEMBERSHIP","LOCKED","PROCESSED"]}}},"CreateNetworkCbbSeriesVersionDto":{"type":"object","properties":{"code":{"type":"string","example":"CBB"},"version":{"type":"number","minimum":1},"name":{"type":"string","example":"Curso Biblico Basico 2026"},"description":{"type":"string"},"status":{"type":"string","enum":["DRAFT","ACTIVE","RETIRED"]},"effectiveFrom":{"type":"string"},"effectiveTo":{"type":"string"}},"required":["code","version","name"]},"UpdateNetworkCbbSeriesVersionDto":{"type":"object","properties":{"code":{"type":"string","example":"CBB"},"version":{"type":"number","minimum":1},"name":{"type":"string","example":"Curso Biblico Basico 2026"},"description":{"type":"string"},"status":{"type":"string","enum":["DRAFT","ACTIVE","RETIRED"]},"effectiveFrom":{"type":"string"},"effectiveTo":{"type":"string"}}},"LinkNetworkCbbSeriesCourseDto":{"type":"object","properties":{"courseId":{"type":"number"},"sequenceOrder":{"type":"number","minimum":1},"isRequired":{"type":"boolean","default":true},"minPassingGrade":{"type":"number","minimum":0,"maximum":100},"minAttendancePercentage":{"type":"number","minimum":0,"maximum":100},"church":{"type":"string"}},"required":["courseId","sequenceOrder"]},"UpdateNetworkCbbSeriesCourseLinkDto":{"type":"object","properties":{"courseId":{"type":"number"},"sequenceOrder":{"type":"number","minimum":1},"isRequired":{"type":"boolean","default":true},"minPassingGrade":{"type":"number","minimum":0,"maximum":100},"minAttendancePercentage":{"type":"number","minimum":0,"maximum":100},"church":{"type":"string"}}},"ReconcileNetworkPreparationDto":{"type":"object","properties":{"newBelieverIds":{"description":"IDs especificos para reconciliacion manual.","type":"array","items":{"type":"number"}},"limit":{"type":"number","minimum":1,"maximum":100,"default":25},"church":{"type":"string","description":"Iglesia/localidad a reconciliar cuando el usuario tenga alcance global."},"reason":{"type":"string","example":"Reconciliacion controlada de progreso CBB."}}},"OverrideNetworkPreparationDto":{"type":"object","properties":{"requiresCbb":{"type":"boolean","description":"Indica si el R1 debe cumplir CBB."},"cbbSeriesVersionId":{"type":"number","description":"Version CBB aplicable cuando CBB sea requerido."},"requiredInterviewCount":{"type":"number","minimum":0,"maximum":10,"description":"Cantidad de entrevistas requeridas."},"reason":{"type":"string","example":"Excepcion pastoral aprobada para este registro."}},"required":["reason"]},"RecalculateNetworkPreparationDto":{"type":"object","properties":{"reason":{"type":"string","example":"Recalculo manual despues de actualizar requisitos CBB."}}},"NewBelieverChildDto":{"type":"object","properties":{}},"CreateNewBelieverDto":{"type":"object","properties":{"entryType":{"type":"string","description":"Tipo de ingreso para preparacion Networks","enum":["REGULAR","VISITOR","TRANSFERRED","ADHERENT"],"example":"REGULAR"},"believerGroupId":{"type":"number","description":"Grupo de creyente asignado para preparacion Networks","example":1},"externalBaptismDate":{"type":"string","description":"Fecha de bautismo externo para transferidos/adherentes","example":"2024-05-12"},"externalBaptismChurchName":{"type":"string","description":"Iglesia donde fue bautizado externamente","maxLength":200},"externalBaptismNotes":{"type":"string","description":"Notas de bautismo externo"},"church":{"type":"string","description":"Código de iglesia","example":"SGM01","maxLength":5},"harvestNumber":{"type":"string","description":"Número de cosecha asociada","example":"COS2025001"},"firstName":{"type":"string","description":"Nombres del nuevo creyente","example":"Juan Carlos","maxLength":150},"lastName":{"type":"string","description":"Apellidos del nuevo creyente","example":"Pérez García","maxLength":150},"identification":{"type":"string","description":"Número de identificación/cédula","example":"00112345678","maxLength":30},"documentType":{"type":"string","description":"Tipo de documento de identificación","example":"ID_CARD","maxLength":20},"sex":{"type":"string","description":"Sexo (MALE=Masculino, FEMALE=Femenino)","example":"MALE","enum":["MALE","FEMALE"]},"maritalStatus":{"type":"string","description":"Estado civil","example":"SINGLE","maxLength":30},"nationality":{"type":"string","description":"Código de nacionalidad","example":"0001","maxLength":10},"birthDate":{"type":"string","description":"Fecha de nacimiento (timestamp o fecha)","example":"1990-05-15"},"email":{"type":"string","description":"Correo electrónico","example":"juan.perez@email.com"},"homePhone":{"type":"string","description":"Teléfono de casa","example":"809-555-1234","maxLength":20},"cellPhone":{"type":"string","description":"Teléfono celular","example":"809-555-1234","maxLength":20},"address":{"type":"string","description":"Dirección completa","maxLength":250},"sector":{"type":"string","description":"Sector","maxLength":100},"houseNumber":{"type":"string","description":"Número de casa","maxLength":20},"addressComplement":{"type":"string","description":"Referencia de dirección","maxLength":250},"city":{"type":"string","description":"Ciudad","maxLength":255},"workplace":{"type":"string","description":"Lugar de trabajo","maxLength":250},"workPosition":{"type":"string","description":"Cargo o puesto laboral","maxLength":150},"workPhone":{"type":"string","description":"Teléfono de trabajo","maxLength":20},"workAddress":{"type":"string","description":"Dirección de trabajo","maxLength":250},"memberType":{"type":"string","description":"Tipo de miembro esperado al procesar a membresía","maxLength":20},"conversionDate":{"type":"string","description":"Fecha de conversión (timestamp o fecha)"},"baptismDate":{"type":"string","description":"Fecha de bautismo vinculada a la cosecha"},"membershipDate":{"type":"string","description":"Fecha de membresía al procesar o registrar"},"marriageDate":{"type":"string","description":"Fecha de matrimonio"},"marriedInChurch":{"type":"string","description":"Si fue casado en iglesia"},"conversionPlace":{"type":"string","description":"Lugar donde se convirtió","maxLength":250},"howCameToChurch":{"type":"string","description":"Cómo llegó a la iglesia","maxLength":200},"whoInvited":{"type":"string","description":"Quién lo trajo a la iglesia","maxLength":200},"wasChristian":{"type":"string","description":"Si fue cristiano antes","enum":["SI","NO",""]},"previousChurch":{"type":"string","description":"Iglesia anterior si aplica","maxLength":200},"receivedBy":{"type":"string","description":"Persona que recibió al nuevo creyente","maxLength":200},"knowsSomeone":{"type":"string","description":"Persona conocida dentro de la iglesia","maxLength":200},"assignedMinister":{"type":"string","description":"Ministro de redes asignado","maxLength":100},"assignedMinisterId":{"type":"integer","description":"ID del ministro asignado"},"spouse":{"type":"string","description":"Cónyuge","maxLength":200},"children":{"type":"integer","description":"Cantidad de hijos"},"childrenDetails":{"description":"Datos opcionales de hijos del nuevo creyente","type":"array","items":{"$ref":"#/components/schemas/NewBelieverChildDto"}},"familyCode":{"type":"integer","description":"Código familiar"},"baptized":{"type":"string","description":"Si ya fue bautizado","enum":["SI","NO",""]},"baptizedInChristianChurch":{"type":"string","description":"Si fue bautizado en iglesia cristiana"},"baptizedInHolySpirit":{"type":"string","description":"Si fue bautizado en el Espíritu Santo"},"convertedInMahanaim":{"type":"string","description":"Si se convirtió en Mahanaim"},"academicTraining":{"type":"string","description":"Formación académica"},"knowledgeArea":{"type":"string","description":"Área de conocimiento"},"occupation":{"type":"integer","description":"Oficio"},"canRead":{"type":"string","description":"Si sabe leer"},"canWrite":{"type":"string","description":"Si sabe escribir"},"allergies":{"type":"string","description":"Alergias conocidas"},"allergyRecords":{"description":"Registros estructurados de alergias o intolerancias","type":"array","items":{"$ref":"#/components/schemas/PersonAllergyDto"}},"bloodType":{"type":"string","description":"Tipo de sangre"},"familyContactName":{"type":"string","description":"Nombre de contacto familiar","maxLength":150},"familyContactPhone":{"type":"string","description":"Teléfono de contacto familiar","maxLength":20},"status":{"type":"string","description":"Estado del proceso R1","enum":["NUEVO","EN_PROCESO","ENTREVISTA_1","ENTREVISTA_2","ENTREVISTA_3","LISTO_MEMBRESIA","PROCESADO","INACTIVO"],"default":"NUEVO"},"isActive":{"type":"string","description":"Si está activo en el proceso","enum":["1","0"]},"additionalNotes":{"type":"string","description":"Notas adicionales del proceso"},"createdBy":{"type":"string","description":"Usuario que crea el registro","maxLength":100},"recordState":{"type":"string","description":"Estado de captura progresiva del registro","enum":["DRAFT","IN_PROGRESS","INCOMPLETE","COMPLETE"],"default":"COMPLETE"}},"required":["church","firstName","lastName","sex"]},"UpdateNewBelieverDto":{"type":"object","properties":{"entryType":{"type":"string","description":"Tipo de ingreso para preparacion Networks","enum":["REGULAR","VISITOR","TRANSFERRED","ADHERENT"],"example":"REGULAR"},"believerGroupId":{"type":"number","description":"Grupo de creyente asignado para preparacion Networks","example":1},"externalBaptismDate":{"type":"string","description":"Fecha de bautismo externo para transferidos/adherentes","example":"2024-05-12"},"externalBaptismChurchName":{"type":"string","description":"Iglesia donde fue bautizado externamente","maxLength":200},"externalBaptismNotes":{"type":"string","description":"Notas de bautismo externo"},"church":{"type":"string","description":"Código de iglesia","example":"SGM01","maxLength":5},"harvestNumber":{"type":"string","description":"Número de cosecha asociada","example":"COS2025001"},"firstName":{"type":"string","description":"Nombres del nuevo creyente","example":"Juan Carlos","maxLength":150},"lastName":{"type":"string","description":"Apellidos del nuevo creyente","example":"Pérez García","maxLength":150},"identification":{"type":"string","description":"Número de identificación/cédula","example":"00112345678","maxLength":30},"documentType":{"type":"string","description":"Tipo de documento de identificación","example":"ID_CARD","maxLength":20},"sex":{"type":"string","description":"Sexo (MALE=Masculino, FEMALE=Femenino)","example":"MALE","enum":["MALE","FEMALE"]},"maritalStatus":{"type":"string","description":"Estado civil","example":"SINGLE","maxLength":30},"nationality":{"type":"string","description":"Código de nacionalidad","example":"0001","maxLength":10},"birthDate":{"type":"string","description":"Fecha de nacimiento (timestamp o fecha)","example":"1990-05-15"},"email":{"type":"string","description":"Correo electrónico","example":"juan.perez@email.com"},"homePhone":{"type":"string","description":"Teléfono de casa","example":"809-555-1234","maxLength":20},"cellPhone":{"type":"string","description":"Teléfono celular","example":"809-555-1234","maxLength":20},"address":{"type":"string","description":"Dirección completa","maxLength":250},"sector":{"type":"string","description":"Sector","maxLength":100},"houseNumber":{"type":"string","description":"Número de casa","maxLength":20},"addressComplement":{"type":"string","description":"Referencia de dirección","maxLength":250},"city":{"type":"string","description":"Ciudad","maxLength":255},"workplace":{"type":"string","description":"Lugar de trabajo","maxLength":250},"workPosition":{"type":"string","description":"Cargo o puesto laboral","maxLength":150},"workPhone":{"type":"string","description":"Teléfono de trabajo","maxLength":20},"workAddress":{"type":"string","description":"Dirección de trabajo","maxLength":250},"memberType":{"type":"string","description":"Tipo de miembro esperado al procesar a membresía","maxLength":20},"conversionDate":{"type":"string","description":"Fecha de conversión (timestamp o fecha)"},"baptismDate":{"type":"string","description":"Fecha de bautismo vinculada a la cosecha"},"membershipDate":{"type":"string","description":"Fecha de membresía al procesar o registrar"},"marriageDate":{"type":"string","description":"Fecha de matrimonio"},"marriedInChurch":{"type":"string","description":"Si fue casado en iglesia"},"conversionPlace":{"type":"string","description":"Lugar donde se convirtió","maxLength":250},"howCameToChurch":{"type":"string","description":"Cómo llegó a la iglesia","maxLength":200},"whoInvited":{"type":"string","description":"Quién lo trajo a la iglesia","maxLength":200},"wasChristian":{"type":"string","description":"Si fue cristiano antes","enum":["SI","NO",""]},"previousChurch":{"type":"string","description":"Iglesia anterior si aplica","maxLength":200},"receivedBy":{"type":"string","description":"Persona que recibió al nuevo creyente","maxLength":200},"knowsSomeone":{"type":"string","description":"Persona conocida dentro de la iglesia","maxLength":200},"assignedMinister":{"type":"string","description":"Ministro de redes asignado","maxLength":100},"assignedMinisterId":{"type":"integer","description":"ID del ministro asignado"},"spouse":{"type":"string","description":"Cónyuge","maxLength":200},"children":{"type":"integer","description":"Cantidad de hijos"},"childrenDetails":{"description":"Datos opcionales de hijos del nuevo creyente","type":"array","items":{"$ref":"#/components/schemas/NewBelieverChildDto"}},"familyCode":{"type":"integer","description":"Código familiar"},"baptized":{"type":"string","description":"Si ya fue bautizado","enum":["SI","NO",""]},"baptizedInChristianChurch":{"type":"string","description":"Si fue bautizado en iglesia cristiana"},"baptizedInHolySpirit":{"type":"string","description":"Si fue bautizado en el Espíritu Santo"},"convertedInMahanaim":{"type":"string","description":"Si se convirtió en Mahanaim"},"academicTraining":{"type":"string","description":"Formación académica"},"knowledgeArea":{"type":"string","description":"Área de conocimiento"},"occupation":{"type":"integer","description":"Oficio"},"canRead":{"type":"string","description":"Si sabe leer"},"canWrite":{"type":"string","description":"Si sabe escribir"},"allergies":{"type":"string","description":"Alergias conocidas"},"allergyRecords":{"description":"Registros estructurados de alergias o intolerancias","type":"array","items":{"$ref":"#/components/schemas/PersonAllergyDto"}},"bloodType":{"type":"string","description":"Tipo de sangre"},"familyContactName":{"type":"string","description":"Nombre de contacto familiar","maxLength":150},"familyContactPhone":{"type":"string","description":"Teléfono de contacto familiar","maxLength":20},"status":{"type":"string","description":"Estado del proceso R1","enum":["NUEVO","EN_PROCESO","ENTREVISTA_1","ENTREVISTA_2","ENTREVISTA_3","LISTO_MEMBRESIA","PROCESADO","INACTIVO"],"default":"NUEVO"},"isActive":{"type":"string","description":"Si está activo en el proceso","enum":["1","0"]},"additionalNotes":{"type":"string","description":"Notas adicionales del proceso"},"createdBy":{"type":"string","description":"Usuario que crea el registro","maxLength":100},"recordState":{"type":"string","description":"Estado de captura progresiva del registro","enum":["DRAFT","IN_PROGRESS","INCOMPLETE","COMPLETE"],"default":"COMPLETE"},"updatedBy":{"type":"string","description":"Usuario que actualiza el registro","maxLength":100}}},"UpdateInterviewDto":{"type":"object","properties":{"interviewDate":{"type":"string","description":"Fecha de la entrevista","example":"2025-11-16T10:30:00.000Z"},"comments":{"type":"string","description":"Comentarios de la entrevista"},"updatedBy":{"type":"string","description":"Usuario que registra la entrevista","maxLength":100}},"required":["interviewDate"]},"ProcessToMembershipDto":{"type":"object","properties":{"comments":{"type":"string","description":"Comentarios del procesamiento"},"processedBy":{"type":"string","description":"Usuario que procesa a membresía","maxLength":100}}},"BulkProcessToMembershipDto":{"type":"object","properties":{"newBelieverIds":{"description":"IDs de los nuevos creyentes a procesar","example":[1,2,3,4,5],"type":"array","items":{"type":"number"}},"comments":{"type":"string","description":"Comentarios del procesamiento masivo"},"processedBy":{"type":"string","description":"Usuario que procesa a membresía","maxLength":100}},"required":["newBelieverIds"]},"CreateConsolidationR2Dto":{"type":"object","properties":{"memberId":{"type":"number","description":"ID del miembro a inscribir en R2","example":45001},"programId":{"type":"number","description":"ID del programa de consolidación","example":5},"programName":{"type":"string","description":"Nombre personalizado del programa","example":"Fundamentos de Fe 2025-A","maxLength":150},"programType":{"type":"string","enum":["basic_faith","church_membership","ministry_prep","youth_track","adult_track","couples_track"],"description":"Tipo de programa de consolidación","example":"basic_faith"},"consolidatorId":{"type":"number","description":"ID del miembro consolidador asignado","example":30001},"startDate":{"type":"string","description":"Fecha de inicio del programa (ISO 8601)","example":"2025-01-15"},"durationWeeks":{"type":"number","description":"Duración en semanas (1-52)","example":12,"minimum":1,"maximum":52},"totalSessions":{"type":"number","description":"Total de sesiones programadas","example":12,"minimum":0},"ministryInterests":{"description":"Áreas de interés ministerial del candidato","example":["niños","jovenes","musica"],"type":"array","items":{"type":"string"}},"location":{"type":"string","description":"Código de localidad/iglesia","example":"SGM01","maxLength":10},"initialNotes":{"type":"string","description":"Notas iniciales sobre el candidato"}},"required":["memberId","programType"]},"ConsolidationR2":{"type":"object","properties":{"id":{"type":"number","description":"ID único del registro R2"},"memberId":{"type":"number","description":"ID del miembro en maestro_miembros","example":45001},"programId":{"type":"number","description":"ID del programa de consolidación","example":5},"programName":{"type":"string","description":"Nombre del programa","example":"Fundamentos de Fe 2025"},"programType":{"type":"string","enum":["basic_faith","church_membership","ministry_prep","youth_track","adult_track","couples_track"],"description":"Tipo de programa de consolidación"},"consolidatorId":{"type":"number","description":"ID del miembro consolidador asignado","example":30001},"status":{"type":"string","enum":["enrolled","in_progress","evaluation","completed","ready_leadership","promoted_r3","inactive"],"description":"Estado actual en el proceso R2"},"startDate":{"format":"date-time","type":"string","description":"Fecha de inicio del programa"},"expectedEndDate":{"format":"date-time","type":"string","description":"Fecha esperada de finalización"},"actualEndDate":{"format":"date-time","type":"string","description":"Fecha real de finalización"},"durationWeeks":{"type":"number","description":"Duración en semanas del programa","example":12},"currentWeek":{"type":"number","description":"Semana actual del programa","example":6},"completionPercentage":{"type":"number","description":"Porcentaje de completitud","example":45.5},"attendanceSessions":{"type":"number","description":"Número de sesiones asistidas","example":8},"totalSessions":{"type":"number","description":"Total de sesiones del programa","example":12},"evaluationScore":{"type":"number","description":"Puntuación de evaluación final","example":85.5},"spiritualGiftsIdentified":{"description":"Dones espirituales identificados","example":["enseñanza","evangelismo"],"type":"array","items":{"type":"string"}},"ministryInterests":{"description":"Áreas de interés ministerial","example":["niños","jovenes","musica"],"type":"array","items":{"type":"string"}},"consolidatorNotes":{"type":"string","description":"Notas del consolidador sobre el progreso"},"participantFeedback":{"type":"string","description":"Retroalimentación del participante"},"challengesFaced":{"description":"Desafíos enfrentados durante el proceso","type":"array","items":{"type":"string"}},"nextStepsRecommended":{"type":"string","description":"Próximos pasos recomendados"},"readyForR3Date":{"format":"date-time","type":"string","description":"Fecha cuando fue marcado como listo para R3"},"promotedToR3Date":{"format":"date-time","type":"string","description":"Fecha de promoción a R3"},"location":{"type":"string","description":"Código de localidad/iglesia","example":"SGM01"},"createdBy":{"type":"string","description":"Usuario que creó el registro"},"createdAt":{"format":"date-time","type":"string","description":"Fecha de creación del registro"},"updatedBy":{"type":"string","description":"Usuario que actualizó por última vez"},"updatedAt":{"format":"date-time","type":"string","description":"Fecha de última actualización"},"isReadyForR3":{"type":"boolean","description":"Si está listo para promover a R3"},"progressPercentage":{"type":"number","description":"Progreso en porcentaje basado en semana actual"},"attendanceRate":{"type":"number","description":"Tasa de asistencia en porcentaje"},"displayStatus":{"type":"string","description":"Estado legible del proceso"},"timeInProgram":{"type":"string","description":"Tiempo transcurrido en el programa"},"canPromoteToR3":{"type":"boolean","description":"Si puede ser promovido a R3"}},"required":["id","memberId","programId","programName","programType","consolidatorId","status","startDate","expectedEndDate","actualEndDate","durationWeeks","currentWeek","completionPercentage","attendanceSessions","totalSessions","evaluationScore","spiritualGiftsIdentified","ministryInterests","consolidatorNotes","participantFeedback","challengesFaced","nextStepsRecommended","readyForR3Date","promotedToR3Date","location","createdBy","createdAt","updatedBy","updatedAt","isReadyForR3","progressPercentage","attendanceRate","displayStatus","timeInProgram","canPromoteToR3"]},"ConsolidationR2StatisticsDto":{"type":"object","properties":{"totalRecords":{"type":"number","description":"Total de registros R2"},"activeInProcess":{"type":"number","description":"Registros activos en proceso"},"completed":{"type":"number","description":"Registros completados"},"readyForR3":{"type":"number","description":"Registros listos para R3"},"averageCompletion":{"type":"number","description":"Promedio de completitud"},"r3PromotionRate":{"type":"number","description":"Tasa de promoción a R3"},"byStatus":{"type":"object","description":"Estadísticas por estado"},"byProgramType":{"type":"object","description":"Estadísticas por tipo de programa"},"topConsolidators":{"description":"Top 5 consolidadores por cantidad","type":"array","items":{"type":"string"}}},"required":["totalRecords","activeInProcess","completed","readyForR3","averageCompletion","r3PromotionRate","byStatus","byProgramType","topConsolidators"]},"UpdateConsolidationR2Dto":{"type":"object","properties":{"status":{"type":"string","enum":["enrolled","in_progress","evaluation","completed","ready_leadership","promoted_r3","inactive"],"description":"Estado actual en el proceso R2"},"consolidatorId":{"type":"number","description":"ID del consolidador asignado"},"currentWeek":{"type":"number","description":"Semana actual del programa (1-52)","minimum":1,"maximum":52},"completionPercentage":{"type":"number","description":"Porcentaje de completitud (0-100)","minimum":0,"maximum":100},"attendanceSessions":{"type":"number","description":"Número de sesiones asistidas","minimum":0},"evaluationScore":{"type":"number","description":"Puntuación de evaluación (0-100)","minimum":0,"maximum":100},"spiritualGiftsIdentified":{"description":"Dones espirituales identificados","type":"array","items":{"type":"string"}},"ministryInterests":{"description":"Áreas de interés ministerial actualizadas","type":"array","items":{"type":"string"}},"consolidatorNotes":{"type":"string","description":"Notas del consolidador sobre el progreso"},"participantFeedback":{"type":"string","description":"Retroalimentación del participante"},"challengesFaced":{"description":"Desafíos enfrentados durante el proceso","type":"array","items":{"type":"string"}},"nextStepsRecommended":{"type":"string","description":"Próximos pasos recomendados"},"actualEndDate":{"type":"string","description":"Fecha de finalización del programa"}}},"PromoteToR3Dto":{"type":"object","properties":{"r2Id":{"type":"number","description":"ID del registro R2 a promover","example":123},"promotionComments":{"type":"string","description":"Comentarios sobre la promoción"},"promotionDate":{"type":"string","description":"Fecha de promoción (por defecto hoy)"},"mentorId":{"type":"number","description":"ID del mentor a asignar en R3"},"recommendedTrack":{"type":"string","description":"Pista de liderazgo recomendada para R3","example":"cell_leadership"}},"required":["r2Id"]},"CreateLeadershipR3Dto":{"type":"object","properties":{"memberId":{"type":"number","description":"ID del miembro a inscribir en R3","example":45001},"r2Id":{"type":"number","description":"ID del registro R2 completado","example":123},"track":{"type":"string","enum":["cell_leadership","youth_ministry","worship_ministry","teaching_ministry","pastoral_ministry","ministry_leadership","pastoral_leadership","evangelism_leadership","administration","evangelism","counseling"],"description":"Pista de liderazgo escogida","example":"cell_leadership"},"targetCertification":{"type":"string","enum":["basic_leader","cell_leader","ministry_coordinator","ministry_leader","department_head","associate_pastor","senior_pastor","senior_leader"],"description":"Certificación objetivo","example":"cell_leader"},"mentorId":{"type":"number","description":"ID del mentor asignado","example":25001},"startDate":{"type":"string","description":"Fecha de inicio en R3 (ISO 8601)","example":"2025-02-01"},"expectedCertificationDate":{"type":"string","description":"Fecha esperada de certificación","example":"2026-02-01"},"trainingModulesTotal":{"description":"Módulos de entrenamiento requeridos para el track","example":["predicacion_basica","liderazgo_celular","discipulado_personal"],"type":"array","items":{"type":"string"}},"location":{"type":"string","description":"Código de localidad/iglesia","example":"SGM01","maxLength":10},"initialMentorNotes":{"type":"string","description":"Notas iniciales del mentor"}},"required":["memberId","track"]},"LeadershipR3":{"type":"object","properties":{"id":{"type":"number","description":"ID único del registro R3"},"memberId":{"type":"number","description":"ID del miembro en maestro_miembros","example":45001},"r2Id":{"type":"number","description":"ID del registro R2 que completó","example":123},"track":{"type":"string","enum":["cell_leadership","youth_ministry","worship_ministry","teaching_ministry","pastoral_ministry","ministry_leadership","pastoral_leadership","evangelism_leadership","administration","evangelism","counseling"],"description":"Pista de liderazgo escogida"},"status":{"type":"string","enum":["enrolled","leadership_training","cell_leader_prep","cell_leader","ministry_leader","pastor_track","certified_leader","active","inactive"],"description":"Estado actual en el proceso R3"},"currentLevel":{"type":"number","description":"Nivel actual de liderazgo (1-6)","example":3},"targetCertification":{"type":"string","enum":["basic_leader","cell_leader","ministry_coordinator","ministry_leader","department_head","associate_pastor","senior_pastor","senior_leader"],"description":"Certificación objetivo"},"currentCertification":{"type":"string","enum":["basic_leader","cell_leader","ministry_coordinator","ministry_leader","department_head","associate_pastor","senior_pastor","senior_leader"],"description":"Certificación actual obtenida"},"mentorId":{"type":"number","description":"ID del mentor/líder supervisor","example":25001},"startDate":{"format":"date-time","type":"string","description":"Fecha de inicio en R3"},"expectedCertificationDate":{"format":"date-time","type":"string","description":"Fecha esperada de certificación"},"actualCertificationDate":{"format":"date-time","type":"string","description":"Fecha real de certificación"},"trainingModulesCompleted":{"description":"Módulos de entrenamiento completados","example":["predicacion_basica","liderazgo_celular"],"type":"array","items":{"type":"string"}},"trainingModulesTotal":{"description":"Total de módulos requeridos para el track","type":"array","items":{"type":"string"}},"practicalAssignments":{"description":"Asignaciones prácticas completadas","type":"array","items":{"type":"string"}},"leadershipResponsibilities":{"description":"Responsabilidades actuales de liderazgo","type":"array","items":{"type":"string"}},"peopleMentoring":{"type":"number","description":"Cantidad de personas que está mentoreando","example":3},"cellsLeading":{"type":"number","description":"Cantidad de células que está liderando","example":1},"ministryInvolvement":{"description":"Ministerios en los que está involucrado","type":"array","items":{"type":"string"}},"spiritualCompetencies":{"description":"Competencias espirituales evaluadas","type":"array","items":{"type":"string"}},"leadershipSkills":{"description":"Habilidades de liderazgo evaluadas","type":"array","items":{"type":"string"}},"mentorEvaluations":{"description":"Evaluaciones del mentor","type":"array","items":{"type":"string"}},"conferenceAttendance":{"description":"Conferencias y eventos de liderazgo asistidos","type":"array","items":{"type":"string"}},"booksRead":{"description":"Libros de liderazgo y crecimiento completados","type":"array","items":{"type":"string"}},"currentGoals":{"description":"Metas actuales de desarrollo","type":"array","items":{"type":"string"}},"performanceMetrics":{"description":"Métricas de rendimiento en liderazgo","type":"array","items":{"type":"string"}},"mentorNotes":{"type":"string","description":"Notas del mentor sobre el desarrollo"},"selfAssessment":{"type":"string","description":"Auto-evaluación del líder en desarrollo"},"nextPromotionTarget":{"type":"string","description":"Próximo objetivo de promoción"},"overallPerformanceScore":{"type":"number","description":"Puntuación general de rendimiento","example":85.5},"readyForCertification":{"type":"boolean","description":"Si está listo para certificación (manual override)"},"trainingProgressOverride":{"type":"number","description":"Progreso de entrenamiento manual (override del cálculo automático)"},"location":{"type":"string","description":"Código de localidad/iglesia","example":"SGM01"},"createdBy":{"type":"string","description":"Usuario que creó el registro"},"createdAt":{"format":"date-time","type":"string","description":"Fecha de creación del registro"},"updatedBy":{"type":"string","description":"Usuario que actualizó por última vez"},"updatedAt":{"format":"date-time","type":"string","description":"Fecha de última actualización"},"trainingProgress":{"type":"number","description":"Progreso de entrenamiento en porcentaje"},"isReadyForCertification":{"type":"boolean","description":"Si está listo para certificación"},"displayStatus":{"type":"string","description":"Estado legible del liderazgo"},"timeInLeadership":{"type":"string","description":"Tiempo en liderazgo"},"averageMentorScore":{"type":"number","description":"Evaluación promedio del mentor"},"canPromoteToNextLevel":{"type":"boolean","description":"Si puede ser promovido al siguiente nivel"},"nextCertificationGoal":{"type":"string","description":"Próxima meta de certificación"}},"required":["id","memberId","r2Id","track","status","currentLevel","targetCertification","currentCertification","mentorId","startDate","expectedCertificationDate","actualCertificationDate","trainingModulesCompleted","trainingModulesTotal","practicalAssignments","leadershipResponsibilities","peopleMentoring","cellsLeading","ministryInvolvement","spiritualCompetencies","leadershipSkills","mentorEvaluations","conferenceAttendance","booksRead","currentGoals","performanceMetrics","mentorNotes","selfAssessment","nextPromotionTarget","overallPerformanceScore","readyForCertification","trainingProgressOverride","location","createdBy","createdAt","updatedBy","updatedAt","trainingProgress","isReadyForCertification","displayStatus","timeInLeadership","averageMentorScore","canPromoteToNextLevel","nextCertificationGoal"]},"LeadershipR3StatisticsDto":{"type":"object","properties":{"totalRecords":{"type":"number","description":"Total de registros R3"},"activeLeaders":{"type":"number","description":"Líderes activos"},"certifiedLeaders":{"type":"number","description":"Líderes certificados"},"activeCellLeaders":{"type":"number","description":"Líderes de célula activos"},"totalBeingMentored":{"type":"number","description":"Total de personas siendo mentoreadas"},"totalCellsLed":{"type":"number","description":"Total de células siendo lideradas"},"averageTrainingProgress":{"type":"number","description":"Promedio de progreso de entrenamiento"},"certificationRate":{"type":"number","description":"Tasa de certificación"},"byStatus":{"type":"object","description":"Estadísticas por estado"},"byTrack":{"type":"object","description":"Estadísticas por track de liderazgo"},"byLevel":{"type":"object","description":"Estadísticas por nivel"},"topMentors":{"description":"Top 5 mentores por cantidad de mentees","type":"array","items":{"type":"string"}}},"required":["totalRecords","activeLeaders","certifiedLeaders","activeCellLeaders","totalBeingMentored","totalCellsLed","averageTrainingProgress","certificationRate","byStatus","byTrack","byLevel","topMentors"]},"UpdateLeadershipR3Dto":{"type":"object","properties":{"status":{"type":"string","enum":["enrolled","leadership_training","cell_leader_prep","cell_leader","ministry_leader","pastor_track","certified_leader","active","inactive"],"description":"Estado actual en el proceso R3"},"currentLevel":{"type":"number","description":"Nivel actual de liderazgo (1-6)","minimum":1,"maximum":6},"currentCertification":{"type":"string","enum":["basic_leader","cell_leader","ministry_coordinator","ministry_leader","department_head","associate_pastor","senior_pastor","senior_leader"],"description":"Certificación actual obtenida"},"mentorId":{"type":"number","description":"ID del mentor supervisor"},"trainingModulesCompleted":{"description":"Módulos de entrenamiento completados","type":"array","items":{"type":"string"}},"peopleMentoring":{"type":"number","description":"Cantidad de personas que está mentoreando","minimum":0},"cellsLeading":{"type":"number","description":"Cantidad de células que está liderando","minimum":0},"mentorNotes":{"type":"string","description":"Notas del mentor sobre el desarrollo"},"selfAssessment":{"type":"string","description":"Auto-evaluación del líder"},"nextPromotionTarget":{"type":"string","description":"Próximo objetivo de promoción"},"actualCertificationDate":{"type":"string","description":"Fecha real de certificación"}}},"PracticalAssignmentDto":{"type":"object","properties":{"assignmentId":{"type":"string","description":"ID único de la asignación","example":"PRED_001"},"title":{"type":"string","description":"Título de la asignación","example":"Primera Predicación en Célula"},"completedDate":{"type":"string","description":"Fecha de completitud"},"score":{"type":"number","description":"Puntuación obtenida (0-100)","minimum":0,"maximum":100},"feedback":{"type":"string","description":"Retroalimentación del evaluador"}},"required":["assignmentId","title"]},"AddPracticalAssignmentDto":{"type":"object","properties":{"r3Id":{"type":"number","description":"ID del registro R3","example":456},"assignment":{"description":"Datos de la asignación práctica","allOf":[{"$ref":"#/components/schemas/PracticalAssignmentDto"}]}},"required":["r3Id","assignment"]},"MentorEvaluationDto":{"type":"object","properties":{"evaluationDate":{"type":"string","description":"Fecha de la evaluación"},"overallScore":{"type":"number","description":"Puntuación general (0-100)","minimum":0,"maximum":100},"strengths":{"description":"Fortalezas identificadas","example":["Comunicación efectiva","Liderazgo natural"],"type":"array","items":{"type":"string"}},"areasForGrowth":{"description":"Áreas para crecimiento","example":["Gestión del tiempo","Delegación"],"type":"array","items":{"type":"string"}},"recommendations":{"type":"string","description":"Recomendaciones del mentor"},"readyForPromotion":{"type":"boolean","description":"Si está listo para promoción"}},"required":["evaluationDate","overallScore","strengths","areasForGrowth","recommendations","readyForPromotion"]},"AddMentorEvaluationDto":{"type":"object","properties":{"r3Id":{"type":"number","description":"ID del registro R3","example":456},"evaluation":{"description":"Datos de la evaluación del mentor","allOf":[{"$ref":"#/components/schemas/MentorEvaluationDto"}]}},"required":["r3Id","evaluation"]},"CreateDiscipleshipCourseDto":{"type":"object","properties":{"codigo":{"type":"string","description":"Código único del curso","example":"DISC001"},"nombre":{"type":"string","description":"Nombre del curso","example":"Fundamentos de la Fe"},"descripcion":{"type":"string","description":"Descripción detallada del curso"},"tema":{"type":"string","description":"Tema del curso"},"level":{"type":"string","enum":["BASICO","INTERMEDIO","AVANZADO","ESPECIALIDAD"],"description":"Nivel del curso"},"type":{"type":"string","enum":["S","E","ES","T"],"description":"Tipo de curso"},"durationWeeks":{"type":"number","description":"Duración en semanas","minimum":1,"maximum":52},"maxCapacity":{"type":"number","description":"Capacidad máxima de estudiantes","minimum":1},"aula":{"type":"string","description":"Aula donde se imparte"},"minAttendancePercentage":{"type":"number","description":"Porcentaje mínimo de asistencia (0-100)","minimum":0,"maximum":100},"minPassingGrade":{"type":"number","description":"Nota mínima para aprobar (0-100)","minimum":0,"maximum":100},"facilitator1Id":{"type":"number","description":"ID del facilitador principal"},"facilitator1Type":{"type":"string","description":"Tipo del facilitador principal","enum":["member","user"]},"facilitator2Id":{"type":"number","description":"ID del facilitador secundario"},"facilitator2Type":{"type":"string","description":"Tipo del facilitador secundario","enum":["member","user"]},"prerequisiteId":{"type":"number","description":"ID del curso prerequisito"},"nextCourseId":{"type":"number","description":"ID del siguiente curso en secuencia"},"requiresCertificate":{"type":"boolean","description":"Requiere certificado previo"},"generatesCertificate":{"type":"boolean","description":"Genera certificado al completar"},"hasPracticalComponent":{"type":"boolean","description":"Tiene componente práctico"},"hasMidtermExam":{"type":"boolean","description":"Tiene examen parcial"},"hasFinalExam":{"type":"boolean","description":"Tiene examen final"},"autoReenrollFlag":{"type":"string","description":"Configuración de re-matriculación","enum":["A","M","N"]},"allowedStudentTypes":{"type":"array","description":"Tipos de estudiantes permitidos. Si se omite o queda vacío, permite todos.","items":{"type":"string","enum":["MIEMBRO","NUEVO_CREYENTE","VISITANTE","EX_MIEMBRO"]}},"schedule":{"description":"Horarios del curso","type":"array","items":{"type":"string"}},"materials":{"description":"Materiales del curso","type":"array","items":{"type":"string"}},"conCosto":{"type":"boolean","description":"Indica si el curso tiene costo"},"costo":{"type":"number","description":"Costo base del curso","minimum":0}},"required":["codigo","nombre","level","type","durationWeeks","maxCapacity"]},"UpdateDiscipleshipCourseDto":{"type":"object","properties":{"nombre":{"type":"string","description":"Nombre del curso"},"descripcion":{"type":"string","description":"Descripción detallada del curso"},"tema":{"type":"string","description":"Tema principal del curso"},"nivel":{"type":"string","enum":["BASICO","INTERMEDIO","AVANZADO","ESPECIALIDAD"],"description":"Nivel del curso"},"tipoCurso":{"type":"string","enum":["S","E","ES","T"],"description":"Tipo de curso"},"aula":{"type":"string","description":"Aula donde se imparte"},"duracionSemanas":{"type":"number","description":"Duración en semanas"},"horasPorSesion":{"type":"number","description":"Horas por sesión"},"sesionesPorSemana":{"type":"number","description":"Sesiones por semana"},"capacidadMaxima":{"type":"number","description":"Capacidad máxima de estudiantes"},"capacidadMinima":{"type":"number","description":"Capacidad mínima de estudiantes"},"notaMinimaAprobacion":{"type":"number","description":"Nota mínima para aprobar (0-100)"},"asistenciaMinimaRequerida":{"type":"number","description":"Asistencia mínima requerida (0-100)"},"facilitador1Id":{"type":"number","description":"ID del facilitador principal"},"facilitador1Tipo":{"type":"string","description":"Tipo del facilitador principal","enum":["member","user"]},"facilitador2Id":{"type":"number","description":"ID del facilitador secundario"},"facilitador2Tipo":{"type":"string","description":"Tipo del facilitador secundario","enum":["member","user"]},"prerrequisitoId":{"type":"number","description":"ID del curso prerrequisito"},"siguienteCursoId":{"type":"number","description":"ID del siguiente curso en la secuencia"},"requiereCertificado":{"type":"boolean","description":"Requiere certificado previo"},"generaCertificado":{"type":"boolean","description":"Genera certificado al completar"},"tieneComponentePractico":{"type":"boolean","description":"Tiene componente practico"},"tieneExamenParcial":{"type":"boolean","description":"Tiene examen parcial"},"tieneExamenFinal":{"type":"boolean","description":"Tiene examen final"},"flagReinscripcion":{"type":"string","description":"Configuracion de rematriculacion","enum":["A","M","N"]},"permiteInscripcionAutomatica":{"type":"boolean","description":"Permite inscripción automática"},"requiereEntrevista":{"type":"boolean","description":"Requiere entrevista previa"},"tieneCosto":{"type":"boolean","description":"Tiene costo asociado"},"costo":{"type":"number","description":"Costo del curso"},"horarios":{"description":"Horarios del curso","type":"array","items":{"type":"string"}},"materiales":{"description":"Materiales del curso","type":"array","items":{"type":"string"}},"observaciones":{"type":"string","description":"Observaciones adicionales"},"allowedStudentTypes":{"type":"array","description":"Tipos de estudiantes permitidos. Si se omite o queda vacío, permite todos.","items":{"type":"string","enum":["MIEMBRO","NUEVO_CREYENTE","VISITANTE","EX_MIEMBRO"]}}}},"UpdateDiscipleshipCourseStatusDto":{"type":"object","properties":{"status":{"type":"string","enum":["A","I","M","D"],"description":"Estado operativo del curso. A = activo, I = inactivo."}},"required":["status"]},"CreateDiscipleshipEnrollmentDto":{"type":"object","properties":{"courseId":{"type":"number","description":"ID del curso. Requerido si no se envia sessionId"},"periodId":{"type":"number","description":"ID del periodo. Requerido si no se envia sessionId"},"sessionId":{"type":"number","description":"ID de la sesion canonica seleccionada para derivar curso, periodo y fecha de inscripcion"},"studentType":{"type":"string","enum":["MIEMBRO","NUEVO_CREYENTE","VISITANTE","EX_MIEMBRO"],"description":"Tipo de estudiante. Si se omite, se infiere desde la fuente del estudiante."},"memberId":{"type":"number","description":"ID del miembro (si es miembro)"},"newBelieverId":{"type":"number","description":"ID del nuevo creyente (si es nuevo creyente)"},"externalStudentId":{"type":"number","description":"ID del estudiante externo canonico (si ya existe)"},"studentName":{"type":"string","description":"Nombre del estudiante externo"},"studentEmail":{"type":"string","description":"Email del estudiante externo"},"studentPhone":{"type":"string","description":"Teléfono del estudiante externo"},"studentIdentification":{"type":"string","description":"Identificación del estudiante externo"},"studentBirthDate":{"format":"date-time","type":"string","description":"Fecha de nacimiento del estudiante externo"},"studentSex":{"type":"string","description":"Género del estudiante externo"},"studentAddress":{"type":"string","description":"Dirección del estudiante externo"},"enrollmentDate":{"format":"date-time","type":"string","description":"Fecha de inscripción"},"enrollmentObservations":{"type":"string","description":"Observaciones de la inscripción"}}},"CreateDiscipleshipPaymentLinkDto":{"type":"object","properties":{"methodCode":{"type":"string","description":"Metodo hosted/link que se usara para cobrar la inscripcion","enum":["PAGINA_PAGO_AZUL","PAGINA_PAGO_STRIPE","PAGINA_PAGO_PAYPAL"],"example":"PAGINA_PAGO_AZUL"},"amount":{"type":"number","description":"Monto a cobrar. Si se omite, se usa el saldo pendiente completo."},"currency":{"type":"string","description":"Moneda del link. Por ahora Discipleship solo acepta DOP.","default":"DOP"},"processorId":{"type":"number","description":"ID del procesador a usar"},"idempotencyKey":{"type":"string","description":"Llave de idempotencia del cliente para evitar links duplicados"},"expiresInMinutes":{"type":"number","description":"Tiempo de expiracion en minutos","default":1440,"minimum":5,"maximum":10080},"customerName":{"type":"string","description":"Nombre del cliente para el link. Si se omite, se resuelve desde la inscripcion."},"customerEmail":{"type":"string","description":"Correo del cliente para el link. Si se omite, se resuelve desde la inscripcion."},"customerPhone":{"type":"string","description":"Telefono del cliente para el link. Si se omite, se resuelve desde la inscripcion."},"deliveryChannel":{"type":"string","description":"Canal de envio del link. EMAIL se registra en cola y se procesa en segundo plano.","enum":["EMAIL","SMS","WHATSAPP","COPY"]},"deliveryRecipient":{"type":"string","description":"Destinatario del canal de envio. Para EMAIL debe ser un correo valido."},"deliverySubject":{"type":"string","description":"Asunto personalizado para envio por email"},"metadata":{"type":"object","description":"Metadata no sensible para auditoria"}},"required":["methodCode"]},"RegisterDiscipleshipPaymentDto":{"type":"object","properties":{"amount":{"type":"number","description":"Monto del pago"},"paymentMethod":{"type":"string","description":"Metodo de pago"},"currency":{"type":"string","description":"Moneda del pago. Por ahora Discipleship solo acepta DOP en este endpoint.","default":"DOP"},"reference":{"type":"string","description":"Referencia externa legacy"},"internalReference":{"type":"string","description":"Referencia interna del pago"},"externalReference":{"type":"string","description":"Referencia externa del pago"},"bankAccount":{"type":"string","description":"Cuenta bancaria para transferencia/deposito"},"comment":{"type":"string","description":"Comentario del pago"},"paymentDate":{"type":"string","description":"Fecha del pago"},"receivedBy":{"type":"string","description":"Usuario o persona que recibio el pago"},"discount":{"type":"number","description":"Descuento aplicado al pago"},"cardFinalNumber":{"type":"string","description":"Ultimos 4 digitos de tarjeta"},"approval":{"type":"string","description":"Codigo de aprobacion de tarjeta"},"paypalEmail":{"type":"string","description":"Correo PayPal si aplica"}},"required":["amount","paymentMethod"]},"UpdateAcademicGradesDto":{"type":"object","properties":{"practicalGrade":{"type":"number","description":"Nota de practica (0-100)"},"midtermGrade":{"type":"number","description":"Nota de examen parcial (0-100)"},"finalGrade":{"type":"number","description":"Nota de examen final (0-100)"},"finalize":{"type":"boolean","description":"Finalizar resultado academico y marcar aprobado/reprobado si la evidencia esta completa"}}},"UpdateDiscipleshipEnrollmentDto":{"type":"object","properties":{"enrollmentObservations":{"type":"string","description":"Observaciones de la inscripción"}}},"UpdateDiscipleshipEnrollmentStatusDto":{"type":"object","properties":{"status":{"type":"string","enum":["INSCRITO","CONFIRMADO","EN_PROGRESO","APROBADO","REPROBADO","RETIRADO","CANCELADO","TRANSFERIDO"],"description":"Nuevo estado operativo de la inscripcion"},"reason":{"type":"string","description":"Motivo del retiro. Es obligatorio cuando el nuevo estado es RETIRADO."}},"required":["status"]},"StudentInfoDto":{"type":"object","properties":{"sourceId":{"type":"number","description":"ID único del estudiante en la fuente original"},"sourceType":{"type":"string","description":"Tipo de fuente del estudiante","enum":["MEMBER","NEW_BELIEVER","EXTERNAL","MANUAL"],"example":"MEMBER"},"studentType":{"type":"string","description":"Tipo de estudiante según categorización del sistema","enum":["MIEMBRO","NUEVO_CREYENTE","VISITANTE","EX_MIEMBRO"]},"fullName":{"type":"string","description":"Nombre completo del estudiante"},"firstName":{"type":"string","description":"Primer nombre"},"lastName":{"type":"string","description":"Apellido"},"cellPhone":{"type":"string","description":"Teléfono celular"},"homePhone":{"type":"string","description":"Teléfono fijo"},"email":{"type":"string","description":"Correo electrónico"},"identification":{"type":"string","description":"Documento de identidad (cédula)"},"birthDate":{"format":"date-time","type":"string","description":"Fecha de nacimiento"},"sex":{"type":"string","description":"Sexo","enum":["M","F"]},"address":{"type":"string","description":"Dirección"},"civilStatus":{"type":"string","description":"Estado civil"},"photoUrl":{"type":"string","description":"URL de la foto"},"isActive":{"type":"boolean","description":"Indica si el estudiante está activo"},"additionalInfo":{"type":"object","description":"Información adicional específica del tipo de estudiante"}},"required":["sourceId","sourceType","studentType","fullName"]},"EnrollmentWithStudentDto":{"type":"object","properties":{"enrollmentId":{"type":"number","description":"ID de la inscripción"},"enrollmentNumber":{"type":"string","description":"Número de matrícula"},"student":{"description":"Información del estudiante","allOf":[{"$ref":"#/components/schemas/StudentInfoDto"}]},"courseId":{"type":"number","description":"ID del curso"},"courseName":{"type":"string","description":"Nombre del curso"},"periodId":{"type":"number","description":"ID del período"},"periodName":{"type":"string","description":"Nombre del período"},"status":{"type":"string","description":"Estado de la inscripción"},"enrollmentDate":{"format":"date-time","type":"string","description":"Fecha de inscripción"},"attendancePercentage":{"type":"number","description":"Porcentaje de asistencia"},"finalAverage":{"type":"number","description":"Promedio final"},"passedCourse":{"type":"boolean","description":"Indica si aprobó el curso"}},"required":["enrollmentId","enrollmentNumber","student","courseId","periodId","status","enrollmentDate"]},"StudentSummaryDto":{"type":"object","properties":{"sourceId":{"type":"number","description":"ID único del estudiante en la fuente original"},"sourceType":{"type":"string","description":"Tipo de fuente del estudiante","enum":["MEMBER","NEW_BELIEVER","EXTERNAL","MANUAL"]},"fullName":{"type":"string","description":"Nombre completo del estudiante"},"phone":{"type":"string","description":"Teléfono de contacto"},"email":{"type":"string","description":"Correo electrónico"},"studentType":{"type":"string","description":"Tipo de estudiante","enum":["MIEMBRO","NUEVO_CREYENTE","VISITANTE","EX_MIEMBRO"]}},"required":["sourceId","sourceType","fullName","studentType"]},"DiscipleshipStudentCandidateDto":{"type":"object","properties":{"sourceType":{"type":"string","enum":["MEMBER","NEW_BELIEVER","EXTERNAL"]},"sourceId":{"type":"number"},"studentType":{"type":"string","enum":["MIEMBRO","NUEVO_CREYENTE","VISITANTE","EX_MIEMBRO"]},"fullName":{"type":"string"},"phone":{"type":"string"},"email":{"type":"string"},"identification":{"type":"string"},"isActive":{"type":"boolean"},"sourceLabel":{"type":"string"},"additionalInfo":{"type":"object"}},"required":["sourceType","sourceId","studentType","fullName"]},"DiscipleshipStudentCandidateListDto":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/DiscipleshipStudentCandidateDto"}},"total":{"type":"number"},"search":{"type":"string"}},"required":["data","total","search"]},"CreateDiscipleshipMeetingDto":{"type":"object","properties":{"courseId":{"type":"number","description":"ID del curso de discipulado"},"periodId":{"type":"number","description":"ID del periodo asociado"},"sessionNumber":{"type":"number","description":"Numero de sesion dentro del curso o periodo"},"title":{"type":"string","description":"Titulo visible de la reunion"},"provider":{"type":"string","enum":["JITSI","ZOOM","GOOGLE_MEET","EXTERNAL"],"default":"JITSI"},"startsAt":{"type":"string","description":"Fecha y hora de inicio en formato ISO"},"endsAt":{"type":"string","description":"Fecha y hora de cierre en formato ISO"},"externalJoinUrl":{"type":"string","description":"URL externa para Google Meet u otro proveedor"},"externalHostUrl":{"type":"string","description":"URL administrativa externa para el facilitador"},"metadata":{"type":"object","description":"Metadatos internos de integracion"}},"required":["courseId"]},"UpdateDiscipleshipMeetingDto":{"type":"object","properties":{"title":{"type":"string","description":"Titulo visible de la reunion"},"startsAt":{"type":"string","description":"Fecha y hora de inicio en formato ISO"},"endsAt":{"type":"string","description":"Fecha y hora de cierre en formato ISO"},"externalJoinUrl":{"type":"string","description":"URL externa para Google Meet u otro proveedor"},"externalHostUrl":{"type":"string","description":"URL administrativa externa para el facilitador"},"metadata":{"type":"object","description":"Metadatos internos de integracion"}}},"CancelDiscipleshipMeetingDto":{"type":"object","properties":{"reason":{"type":"string","description":"Motivo de cancelacion"}}},"CreateDiscipleshipCourseSessionDto":{"type":"object","properties":{"courseId":{"type":"number","description":"ID del curso"},"periodId":{"type":"number","description":"ID del periodo"},"sessionNumber":{"type":"number","description":"Numero de sesion dentro del curso y periodo"},"meetingId":{"type":"number","description":"ID de reunion virtual asociada"},"title":{"type":"string","description":"Titulo visible de la sesion"},"description":{"type":"string","description":"Descripcion o tema de la sesion"},"modality":{"type":"string","enum":["PRESENCIAL","VIRTUAL","HIBRIDA"],"default":"PRESENCIAL"},"startsAt":{"type":"string","description":"Fecha y hora de inicio en formato ISO"},"endsAt":{"type":"string","description":"Fecha y hora de cierre en formato ISO"},"location":{"type":"string","description":"Aula, salon o ubicacion presencial"},"metadata":{"type":"object","description":"Metadatos internos no sensibles"}},"required":["courseId","periodId","sessionNumber"]},"UpdateDiscipleshipCourseSessionDto":{"type":"object","properties":{"meetingId":{"type":"number","description":"ID de reunion virtual asociada"},"title":{"type":"string","description":"Titulo visible de la sesion"},"description":{"type":"string","description":"Descripcion o tema de la sesion"},"modality":{"type":"string","enum":["PRESENCIAL","VIRTUAL","HIBRIDA"]},"startsAt":{"type":"string","description":"Fecha y hora de inicio en formato ISO"},"endsAt":{"type":"string","description":"Fecha y hora de cierre en formato ISO"},"location":{"type":"string","description":"Aula, salon o ubicacion presencial"},"metadata":{"type":"object","description":"Metadatos internos no sensibles"}}},"CancelDiscipleshipCourseSessionDto":{"type":"object","properties":{"reason":{"type":"string","description":"Motivo de cancelacion"}}},"DiscipleshipSessionAttendanceRecordDto":{"type":"object","properties":{"enrollmentId":{"type":"number","description":"ID de la inscripcion"},"status":{"type":"string","enum":["PRESENTE","TARDE","AUSENTE","JUSTIFICADO"],"description":"Estado de asistencia"},"lateMinutes":{"type":"number","description":"Minutos de tardanza","minimum":0,"maximum":600},"observations":{"type":"string","description":"Observaciones de la asistencia"},"metadata":{"type":"object","description":"Metadatos internos no sensibles"}},"required":["enrollmentId","status"]},"UpsertDiscipleshipSessionAttendanceDto":{"type":"object","properties":{"records":{"description":"Registros de asistencia para la sesion","type":"array","items":{"$ref":"#/components/schemas/DiscipleshipSessionAttendanceRecordDto"}}},"required":["records"]},"DiscipleshipMeetingAttendanceRecordDto":{"type":"object","properties":{"enrollmentId":{"type":"number","description":"ID de la inscripcion"},"status":{"type":"string","enum":["PRESENTE","TARDE","AUSENTE","JUSTIFICADO"],"description":"Estado de asistencia"},"lateMinutes":{"type":"number","description":"Minutos de tardanza","minimum":0,"maximum":600},"observations":{"type":"string","description":"Observaciones de la asistencia"},"metadata":{"type":"object","description":"Metadatos internos no sensibles"},"providerParticipantId":{"type":"string","description":"ID del participante reportado por el proveedor de reunion"},"providerDisplayName":{"type":"string","description":"Nombre detectado en la reunion virtual"},"providerEmail":{"type":"string","description":"Correo detectado en la reunion virtual"},"joinedAt":{"type":"string","description":"Fecha y hora de entrada detectada en formato ISO"},"leftAt":{"type":"string","description":"Fecha y hora de salida detectada en formato ISO"},"durationMinutes":{"type":"number","description":"Minutos detectados en la reunion","minimum":0,"maximum":1440}},"required":["enrollmentId","status"]},"UpsertDiscipleshipMeetingAttendanceDto":{"type":"object","properties":{"records":{"description":"Registros de asistencia detectados o confirmados desde una reunion","type":"array","items":{"$ref":"#/components/schemas/DiscipleshipMeetingAttendanceRecordDto"}}},"required":["records"]},"GenerateEnrollmentCertificateDto":{"type":"object","properties":{"certificateType":{"type":"string","enum":["CURSO_INDIVIDUAL","NIVEL_COMPLETO","PROGRAMA_COMPLETO","PARTICIPACION"],"description":"Tipo de certificado a generar"},"issuedDate":{"format":"date-time","type":"string","description":"Fecha de emisión"},"expiryDate":{"format":"date-time","type":"string","description":"Fecha de expiración"},"authorizedBy":{"type":"string","description":"Autorizado por"},"signedByPastor":{"type":"string","description":"Firmado por pastor"},"signedByDirector":{"type":"string","description":"Firmado por director"},"observations":{"type":"string","description":"Observaciones"}}},"CertificateRegeneratePdfDto":{"type":"object","properties":{"reason":{"type":"string","description":"Motivo de regeneración del PDF oficial"}},"required":["reason"]},"CertificateDeliveryDto":{"type":"object","properties":{"deliveredTo":{"type":"string","description":"Entregado a"},"deliveryMethod":{"type":"string","description":"Método de entrega"},"deliveryNotes":{"type":"string","description":"Notas de entrega"},"deliveredDate":{"format":"date-time","type":"string","description":"Fecha de entrega"}},"required":["deliveredTo","deliveryMethod"]},"CertificateVoidDto":{"type":"object","properties":{"reason":{"type":"string","description":"Motivo de anulación"}},"required":["reason"]},"CertificateReprintDto":{"type":"object","properties":{"reason":{"type":"string","description":"Motivo de reimpresión"}},"required":["reason"]},"CreateDiscipleshipCertificateTemplateDto":{"type":"object","properties":{"code":{"type":"string","description":"Codigo estable del template","example":"DISCIPLESHIP_BASIC_GLOBAL"},"name":{"type":"string","description":"Nombre administrativo del template"},"version":{"type":"string","description":"Version del template","example":"basic-v1"},"status":{"type":"string","enum":["ACTIVE","INACTIVE","ARCHIVED"],"default":"ACTIVE"},"description":{"type":"string","description":"Descripcion operativa del template"},"courseId":{"type":"number","description":"Curso al que aplica el template"},"periodId":{"type":"number","description":"Periodo al que aplica el template"},"churchId":{"type":"number","description":"Iglesia/localidad institucional como scope logico"},"localityCode":{"type":"string","description":"Codigo de localidad como scope logico"},"effectiveFrom":{"type":"string","description":"Fecha inicial de vigencia"},"effectiveTo":{"type":"string","description":"Fecha final de vigencia. Nulo significa vigente sin cierre programado."},"layoutConfig":{"type":"object","description":"Configuracion visual e institucional del template"}},"required":["code","name","version","effectiveFrom","layoutConfig"]},"UpdateDiscipleshipCertificateTemplateDto":{"type":"object","properties":{"code":{"type":"string","description":"Codigo estable del template"},"name":{"type":"string","description":"Nombre administrativo del template"},"version":{"type":"string","description":"Version del template"},"status":{"type":"string","enum":["ACTIVE","INACTIVE","ARCHIVED"]},"description":{"type":"string","description":"Descripcion operativa del template"},"courseId":{"type":"number","description":"Curso al que aplica el template"},"periodId":{"type":"number","description":"Periodo al que aplica el template"},"churchId":{"type":"number","description":"Iglesia/localidad institucional como scope logico"},"localityCode":{"type":"string","description":"Codigo de localidad como scope logico"},"effectiveFrom":{"type":"string","description":"Fecha inicial de vigencia"},"effectiveTo":{"type":"string","description":"Fecha final de vigencia. Nulo significa vigente sin cierre programado."},"layoutConfig":{"type":"object","description":"Configuracion visual e institucional del template"}}},"CertificatePublicAccessTokenRevokeDto":{"type":"object","properties":{"reason":{"type":"string","description":"Motivo de revocacion del acceso publico"}},"required":["reason"]},"CertificatePublicAccessRequestDto":{"type":"object","properties":{"email":{"type":"string","description":"Correo del participante registrado en la inscripcion o certificado"},"certificateNumber":{"type":"string","description":"Numero de certificado si el participante desea uno especifico"}},"required":["email"]},"AutoGradeRequestDto":{"type":"object","properties":{"asistenciaWeight":{"type":"number","description":"Peso de asistencia en el promedio final (%)","default":20,"minimum":0,"maximum":100},"practicaWeight":{"type":"number","description":"Peso de práctica en el promedio final (%)","default":25,"minimum":0,"maximum":100},"parcialWeight":{"type":"number","description":"Peso de examen parcial en el promedio final (%)","default":25,"minimum":0,"maximum":100},"finalWeight":{"type":"number","description":"Peso de examen final en el promedio final (%)","default":30,"minimum":0,"maximum":100},"minimumPassingGrade":{"type":"number","description":"Nota mínima para aprobar el curso","default":70,"minimum":0,"maximum":100},"minimumAttendance":{"type":"number","description":"Porcentaje mínimo de asistencia requerido","default":75,"minimum":0,"maximum":100},"courseId":{"type":"string","description":"ID del curso"},"period":{"type":"string","description":"Período académico"},"dryRun":{"type":"boolean","description":"Modo de simulación - no guarda cambios","default":false}},"required":["courseId","period"]},"StudentGradeDetailDto":{"type":"object","properties":{"studentCode":{"type":"string","description":"Código del estudiante"},"previousGrade":{"type":"number","description":"Calificación anterior"},"newGrade":{"type":"number","description":"Nueva calificación calculada"},"passed":{"type":"boolean","description":"Indica si el estudiante pasó el curso"},"notes":{"type":"string","description":"Notas adicionales sobre la calificación"}},"required":["studentCode","previousGrade","newGrade","passed"]},"AutoGradeResultDto":{"type":"object","properties":{"success":{"type":"boolean","description":"Indica si el proceso fue exitoso"},"studentsProcessed":{"type":"number","description":"Número total de estudiantes procesados"},"studentsUpdated":{"type":"number","description":"Número de estudiantes con calificaciones actualizadas"},"errors":{"description":"Lista de errores ocurridos","type":"array","items":{"type":"string"}},"warnings":{"description":"Lista de advertencias","type":"array","items":{"type":"string"}},"details":{"description":"Detalles por estudiante","type":"array","items":{"$ref":"#/components/schemas/StudentGradeDetailDto"}}},"required":["success","studentsProcessed","studentsUpdated","errors","warnings","details"]},"GradeStatsDto":{"type":"object","properties":{"totalStudents":{"type":"number","description":"Total de estudiantes en el curso"},"studentsWithCompleteGrades":{"type":"number","description":"Estudiantes con todas las calificaciones"},"averageGrade":{"type":"number","description":"Promedio general del curso"},"passedStudents":{"type":"number","description":"Estudiantes que pasaron el curso"},"failedStudents":{"type":"number","description":"Estudiantes que reprobaron el curso"},"pendingGrades":{"description":"Estudiantes con calificaciones pendientes","type":"array","items":{"type":"string"}}},"required":["totalStudents","studentsWithCompleteGrades","averageGrade","passedStudents","failedStudents","pendingGrades"]},"ProcessTmpNotesResultDto":{"type":"object","properties":{"processed":{"type":"number","description":"Notas temporales procesadas"},"applied":{"type":"number","description":"Notas temporales aplicadas automáticamente"},"rejected":{"type":"number","description":"Notas temporales rechazadas"},"errors":{"description":"Errores durante el procesamiento","type":"array","items":{"type":"string"}}},"required":["processed","applied","rejected","errors"]},"GradeValidationDto":{"type":"object","properties":{"studentCode":{"type":"string","description":"Código del estudiante"},"courseId":{"type":"string","description":"ID del curso"},"period":{"type":"string","description":"Período académico"},"asistencia":{"type":"number","description":"Calificación de asistencia"},"practica":{"type":"number","description":"Calificación de práctica"},"examenParcial":{"type":"number","description":"Calificación de examen parcial"},"examenFinal":{"type":"number","description":"Calificación de examen final"}},"required":["studentCode","courseId","period","asistencia","practica","examenParcial","examenFinal"]},"GradingCriteriaDto":{"type":"object","properties":{"asistenciaWeight":{"type":"number","description":"Peso de asistencia en el promedio final (%)","default":20,"minimum":0,"maximum":100},"practicaWeight":{"type":"number","description":"Peso de práctica en el promedio final (%)","default":25,"minimum":0,"maximum":100},"parcialWeight":{"type":"number","description":"Peso de examen parcial en el promedio final (%)","default":25,"minimum":0,"maximum":100},"finalWeight":{"type":"number","description":"Peso de examen final en el promedio final (%)","default":30,"minimum":0,"maximum":100},"minimumPassingGrade":{"type":"number","description":"Nota mínima para aprobar el curso","default":70,"minimum":0,"maximum":100},"minimumAttendance":{"type":"number","description":"Porcentaje mínimo de asistencia requerido","default":75,"minimum":0,"maximum":100}}},"GradeValidationResultDto":{"type":"object","properties":{"isValid":{"type":"boolean","description":"Indica si las calificaciones son válidas"},"calculatedAverage":{"type":"number","description":"Promedio calculado con las calificaciones proporcionadas"},"wouldPass":{"type":"boolean","description":"Indica si el estudiante pasaría con estas calificaciones"},"missingGrades":{"description":"Calificaciones faltantes para completar","type":"array","items":{"type":"string"}},"warnings":{"description":"Advertencias sobre las calificaciones","type":"array","items":{"type":"string"}},"criteriaUsed":{"description":"Criterios de calificación utilizados","allOf":[{"$ref":"#/components/schemas/GradingCriteriaDto"}]}},"required":["isValid","calculatedAverage","wouldPass","missingGrades","warnings","criteriaUsed"]},"CreateMinistryDto":{"type":"object","properties":{"name":{"type":"string","description":"Name of the ministry","example":"Ministerio de Jóvenes","maxLength":60},"description":{"type":"string","description":"Ministry description","example":"Ministerio dedicado al trabajo con jóvenes de la iglesia"},"leaderId":{"type":"number","description":"ID of the ministry leader","example":123},"secretaryId":{"type":"number","description":"ID of the ministry secretary","example":456},"location":{"type":"string","description":"Ministry location code","example":"MLR","default":"MLR","maxLength":5},"activeMembers":{"type":"number","description":"Number of active members","example":50}},"required":["name","location"]},"UpdateMinistryDto":{"type":"object","properties":{"name":{"type":"string","description":"Name of the ministry","example":"Ministerio de Jóvenes","maxLength":60},"description":{"type":"string","description":"Ministry description","example":"Ministerio dedicado al trabajo con jóvenes de la iglesia"},"leaderId":{"type":"number","description":"ID of the ministry leader","example":123},"secretaryId":{"type":"number","description":"ID of the ministry secretary","example":456},"location":{"type":"string","description":"Ministry location code","example":"MLR","default":"MLR","maxLength":5},"activeMembers":{"type":"number","description":"Number of active members","example":50}}},"CreateMinistryGroupDto":{"type":"object","properties":{"ministryId":{"type":"number","description":"ID of the ministry this group belongs to","example":1},"name":{"type":"string","description":"Name of the ministry group","example":"Grupo de Alabanza Jóvenes","maxLength":255},"description":{"type":"string","description":"Group description","example":"Grupo dedicado a la alabanza y adoración en el ministerio de jóvenes"},"leaderId":{"type":"number","description":"ID of the group leader","example":123},"secretaryId":{"type":"number","description":"ID of the group secretary","example":123}},"required":["ministryId","name"]},"UpdateMinistryGroupDto":{"type":"object","properties":{"ministryId":{"type":"number","description":"ID of the ministry this group belongs to","example":1},"name":{"type":"string","description":"Name of the ministry group","example":"Grupo de Alabanza Jóvenes","maxLength":255},"description":{"type":"string","description":"Group description","example":"Grupo dedicado a la alabanza y adoración en el ministerio de jóvenes"},"leaderId":{"type":"number","description":"ID of the group leader","example":123},"secretaryId":{"type":"number","description":"ID of the group secretary","example":123},"groupId":{"type":"number","description":"Group ID (for internal use)","example":1}}},"AddMemberToMinistryDto":{"type":"object","properties":{"ministryId":{"type":"number","description":"ID of the ministry","example":1},"memberId":{"type":"number","description":"ID of the member to add","example":123}},"required":["ministryId","memberId"]},"AddMemberToGroupDto":{"type":"object","properties":{"ministryId":{"type":"number","description":"ID of the ministry","example":1},"groupId":{"type":"number","description":"ID of the group","example":2},"memberId":{"type":"number","description":"ID of the member to add","example":123}},"required":["ministryId","groupId","memberId"]},"AddMultipleMembersToGroupDto":{"type":"object","properties":{"ministryId":{"type":"number","description":"ID of the ministry","example":1},"groupId":{"type":"number","description":"ID of the group","example":2},"memberIds":{"description":"Array of member IDs to add","example":[123,456,789],"type":"array","items":{"type":"number"}}},"required":["ministryId","groupId","memberIds"]},"CreateMemberPastoralNoteDto":{"type":"object","properties":{"memberId":{"type":"number","description":"Member ID (maestro_miembros.ID)","example":123},"note":{"type":"string","description":"Pastoral note content","example":"Member showed great spiritual growth during counseling session."},"user":{"type":"string","description":"User who created the note (auto-populated from session)","example":"pastor@church.com"},"origin":{"type":"string","description":"Origin of the note","enum":["COUNSELING","VISIT","PHONE_CALL","MEETING","DISCIPLESHIP","PRAYER_REQUEST","FOLLOW_UP","SPECIAL_EVENT","OTHER"],"example":"COUNSELING"},"ref":{"type":"number","description":"Reference ID","example":456},"date":{"type":"string","description":"Date of the note (will default to current date)","example":"2025-11-14"}},"required":["memberId","note","origin"]},"UpdateMemberPastoralNoteDto":{"type":"object","properties":{"memberId":{"type":"number","description":"Member ID (maestro_miembros.ID)","example":123},"note":{"type":"string","description":"Pastoral note content","example":"Member showed great spiritual growth during counseling session."},"user":{"type":"string","description":"User who created the note (auto-populated from session)","example":"pastor@church.com"},"origin":{"type":"string","description":"Origin of the note","enum":["COUNSELING","VISIT","PHONE_CALL","MEETING","DISCIPLESHIP","PRAYER_REQUEST","FOLLOW_UP","SPECIAL_EVENT","OTHER"],"example":"COUNSELING"},"ref":{"type":"number","description":"Reference ID","example":456},"date":{"type":"string","description":"Date of the note (will default to current date)","example":"2025-11-14"}}},"DashboardCacheMetadataDto":{"type":"object","properties":{"hit":{"type":"boolean","example":false},"store":{"type":"string","example":"redis","enum":["redis","memory","none"]},"ttlSeconds":{"type":"number","example":90},"key":{"type":"string","example":"dashboard:summary:v1:MLR:abc123"}},"required":["hit","store","ttlSeconds","key"]},"DashboardMetadataDto":{"type":"object","properties":{"generatedAt":{"type":"string","example":"2026-04-12T13:10:00.000Z"},"location":{"type":"string","example":"MLR"},"cache":{"$ref":"#/components/schemas/DashboardCacheMetadataDto"}},"required":["generatedAt","location","cache"]},"DashboardMoneyAmountDto":{"type":"object","properties":{"currency":{"type":"string","example":"DOP","enum":["DOP","USD","EUR"]},"amount":{"type":"number","example":12500.5}},"required":["currency","amount"]},"DashboardTrendDto":{"type":"object","properties":{"direction":{"type":"string","example":"up","enum":["up","down","stable"]},"value":{"type":"number","example":12},"label":{"type":"string","example":"12 nuevos este mes"}},"required":["direction","value","label"]},"DashboardCardDto":{"type":"object","properties":{"key":{"type":"string","example":"activeMembers"},"label":{"type":"string","example":"Miembros activos"},"value":{"type":"number","example":1240},"format":{"type":"string","example":"number","enum":["number","currency"]},"currency":{"type":"string","example":"DOP"},"amounts":{"type":"array","items":{"$ref":"#/components/schemas/DashboardMoneyAmountDto"}},"subtitle":{"type":"string","example":"18 nuevos este mes"},"trend":{"$ref":"#/components/schemas/DashboardTrendDto"},"requiredPermission":{"type":"string","example":"R_MEMBERS"}},"required":["key","label","value","format","requiredPermission"]},"DashboardAlertDto":{"type":"object","properties":{"key":{"type":"string","example":"pendingSettlements"},"type":{"type":"string","example":"warning","enum":["info","warning","danger"]},"label":{"type":"string","example":"Hay cuadres pendientes de aprobación"},"value":{"type":"string","example":"3 pendientes"}},"required":["key","type","label","value"]},"DashboardSummaryDto":{"type":"object","properties":{"metadata":{"$ref":"#/components/schemas/DashboardMetadataDto"},"cards":{"type":"array","items":{"$ref":"#/components/schemas/DashboardCardDto"}},"alerts":{"type":"array","items":{"$ref":"#/components/schemas/DashboardAlertDto"}}},"required":["metadata","cards","alerts"]},"DateRangeDto":{"type":"object","properties":{"start":{"format":"date-time","type":"string","description":"Fecha de inicio","example":"2025-01-01"},"end":{"format":"date-time","type":"string","description":"Fecha de fin","example":"2025-12-31"}},"required":["start","end"]},"CreateReportDto":{"type":"object","properties":{"moduleNames":{"description":"Módulos a incluir en el reporte","example":["members","payments","discipleship"],"type":"array","items":{"type":"string"}},"reportType":{"type":"string","description":"Tipo de reporte","enum":["dashboard","detailed","analytics","summary","comparison"],"example":"dashboard"},"exportFormat":{"type":"string","description":"Formato de exportación","enum":["json","excel","pdf","csv"],"default":"json"},"filters":{"description":"Filtros dinámicos a aplicar","type":"array","items":{"type":"object"}},"groupBy":{"description":"Campos de agrupación","example":["location","ministry"],"type":"array","items":{"type":"string"}},"dateRange":{"description":"Rango de fechas para el reporte","allOf":[{"$ref":"#/components/schemas/DateRangeDto"}]},"includeDetails":{"type":"boolean","description":"Incluir datos detallados en el reporte","default":false},"includeComparison":{"type":"boolean","description":"Incluir comparación con período anterior","default":false}},"required":["moduleNames","reportType","exportFormat","includeDetails","includeComparison"]},"ReportResponseDto":{"type":"object","properties":{"metadata":{"type":"object","description":"Metadatos del reporte"},"data":{"type":"object","description":"Datos del reporte"},"kpis":{"description":"KPIs calculados","type":"array","items":{"type":"string"}},"trends":{"description":"Datos de tendencias","type":"array","items":{"type":"string"}},"summary":{"type":"object","description":"Resumen ejecutivo"}},"required":["metadata","data"]},"KPIResponse":{"type":"object","properties":{"key":{"type":"string","description":"Clave del KPI"},"label":{"type":"string","description":"Etiqueta visible"},"value":{"type":"object","description":"Valor actual"},"trend":{"type":"string","description":"Tendencia","enum":["up","down","stable"]},"percentage":{"type":"number","description":"Porcentaje de cambio"},"target":{"type":"number","description":"Objetivo/meta"},"format":{"type":"string","description":"Formato de display","enum":["number","currency","percentage"]}},"required":["key","label","value","trend","percentage","target","format"]},"SimpleHealthDto":{"type":"object","properties":{"status":{"type":"string","example":"OK","description":"Simple health status"},"timestamp":{"type":"string","example":"2024-11-17T10:30:00Z","description":"Timestamp"},"uptime":{"type":"string","example":"2h 45m 30s","description":"Uptime"}},"required":["status","timestamp"]},"HealthOptionsDto":{"type":"object","properties":{"appName":{"type":"string","example":"SGM API v2.0","description":"Application name"},"version":{"type":"string","example":"2.0.0","description":"Application version"},"environment":{"type":"string","example":"production","description":"Environment"},"nodeVersion":{"type":"string","example":"v20.11.0","description":"Node.js version"},"uptime":{"type":"string","example":"2h 45m 30s","description":"System uptime"},"startTime":{"type":"string","example":"2024-11-17T10:30:00Z","description":"Server start time"},"currentTime":{"type":"string","example":"2024-11-17T10:30:00Z","description":"Current server time"},"memoryUsage":{"type":"object","example":{"heapUsed":"45MB","heapTotal":"67MB","rss":"78MB"},"description":"Memory usage information"},"availableModules":{"type":"object","example":{"database":true,"auth":true,"payments":false,"emails":true},"description":"Available modules status"},"implementedEndpoints":{"example":["auth","members","currencies","emails","health"],"description":"Implemented endpoints","type":"array","items":{"type":"string"}},"database":{"type":"object","example":{"type":"postgres","version":"14.2","connected":true},"description":"Database connection info"},"server":{"type":"object","example":{"port":3000,"docs":"/docs","healthEndpoint":"/health"},"description":"Server configuration"}},"required":["appName","version","environment","nodeVersion","uptime","startTime","currentTime","memoryUsage","availableModules","implementedEndpoints","database","server"]},"HealthPreflightIssueDto":{"type":"object","properties":{"severity":{"type":"string","example":"blocker","description":"Issue severity"},"code":{"type":"string","example":"DATABASE_SYNC_ENABLED_IN_PRODUCTION","description":"Stable issue code"},"message":{"type":"string","example":"DATABASE_SYNC=true is not allowed in production.","description":"Human-readable issue"}},"required":["severity","code","message"]},"HealthPreflightDto":{"type":"object","properties":{"status":{"type":"string","example":"ok","description":"Preflight status: ok, warning or blocked"},"timestamp":{"type":"string","example":"2026-07-08T10:30:00.000Z","description":"Timestamp of the preflight"},"app":{"type":"object","description":"Sanitized application environment details"},"database":{"type":"object","description":"Sanitized database connection details"},"redis":{"type":"object","description":"Sanitized Redis/cache details"},"migrations":{"type":"object","description":"Migration and schema behavior details"},"urls":{"type":"object","description":"Sanitized URL and CORS details"},"issues":{"description":"Preflight issues","type":"array","items":{"$ref":"#/components/schemas/HealthPreflightIssueDto"}}},"required":["status","timestamp","app","database","redis","migrations","urls","issues"]},"ModuleHealthDto":{"type":"object","properties":{"module":{"type":"string","example":"database","description":"Module name"},"status":{"type":"string","enum":["healthy","unhealthy","degraded"],"example":"healthy"},"message":{"type":"string","example":"Connection successful","description":"Status message"},"responseTime":{"type":"number","example":45,"description":"Response time in milliseconds"},"details":{"type":"object","example":{"connections":5,"uptime":"2h 30m"},"description":"Additional module details"},"timestamp":{"type":"string","example":"2024-11-17T10:30:00Z","description":"Timestamp of the check"}},"required":["module","status","message","timestamp"]},"SystemHealthDto":{"type":"object","properties":{"status":{"type":"string","enum":["healthy","unhealthy","degraded"],"example":"healthy"},"version":{"type":"string","example":"1.0.0","description":"API version"},"uptime":{"type":"string","example":"2h 45m 30s","description":"System uptime"},"timestamp":{"type":"string","example":"2024-11-17T10:30:00Z","description":"Timestamp of the check"},"modules":{"description":"Health status of individual modules","type":"array","items":{"$ref":"#/components/schemas/ModuleHealthDto"}},"systemMetrics":{"type":"object","example":{"memoryUsage":"256MB","cpuUsage":"15%"},"description":"System metrics"}},"required":["status","version","uptime","timestamp","modules"]},"CreateCountryDto":{"type":"object","properties":{"code":{"type":"string","description":"Código interno de 4 dígitos. En creación lo asigna el backend.","example":"1500","maxLength":4},"name":{"type":"string","description":"Nombre oficial del país","example":"República Dominicana","maxLength":20},"nationality":{"type":"string","description":"Gentilicio/nacionalidad","example":"Dominicana","maxLength":30},"phoneCode":{"type":"string","description":"Código telefónico del país","example":"+1","maxLength":10},"currencyCode":{"type":"string","description":"Código de moneda ISO 4217","example":"DOP","maxLength":3},"isoCode2":{"type":"string","description":"Código ISO 3166-1 alpha-2","example":"DO","maxLength":2},"isActive":{"type":"boolean","description":"Estado activo del país","example":true,"default":true},"displayOrder":{"type":"number","description":"Orden de visualización","example":1,"default":0}},"required":["code","name"]},"CountryEntity":{"type":"object","properties":{}},"UpdateCountryDto":{"type":"object","properties":{}},"CreateStateDto":{"type":"object","properties":{"countryCode":{"type":"string","description":"Código del país al que pertenece el estado","example":"0001"},"code":{"type":"string","description":"Código interno de 4 dígitos. En creación lo asigna el backend.","example":"1500","maxLength":4},"name":{"type":"string","description":"Nombre del estado/provincia/departamento","example":"La Romana","maxLength":100},"fullName":{"type":"string","description":"Nombre completo oficial","example":"Provincia La Romana","maxLength":150},"abbreviation":{"type":"string","description":"Abreviación oficial","example":"LR","maxLength":10},"isActive":{"type":"boolean","description":"Estado activo","example":true,"default":true},"displayOrder":{"type":"number","description":"Orden de visualización","example":1,"default":0}},"required":["countryCode","code","name"]},"StateEntity":{"type":"object","properties":{}},"UpdateStateDto":{"type":"object","properties":{}},"CreateCityDto":{"type":"object","properties":{"stateId":{"type":"number","description":"ID del estado al que pertenece la ciudad","example":1},"code":{"type":"number","description":"Código interno de 4 dígitos. En creación lo asigna el backend.","example":1500},"name":{"type":"string","description":"Nombre de la ciudad","example":"Santo Domingo","maxLength":60},"fullName":{"type":"string","description":"Nombre completo oficial de la ciudad","example":"Santo Domingo de Guzmán","maxLength":150},"postalCode":{"type":"string","description":"Código postal","example":"10100","maxLength":20},"timezone":{"type":"string","description":"Zona horaria","example":"America/Santo_Domingo","maxLength":50},"latitude":{"type":"number","description":"Latitud geográfica","example":18.4861},"longitude":{"type":"number","description":"Longitud geográfica","example":-69.9312},"isCapital":{"type":"boolean","description":"Es capital del estado/provincia","example":true,"default":false},"isActive":{"type":"boolean","description":"Estado activo","example":true,"default":true},"displayOrder":{"type":"number","description":"Orden de visualización","example":1,"default":0}},"required":["stateId","code","name"]},"CityEntity":{"type":"object","properties":{}},"UpdateCityDto":{"type":"object","properties":{}},"CreateSectorDto":{"type":"object","properties":{"cityCode":{"type":"number","description":"Código de la ciudad a la que pertenece el sector","example":1500},"code":{"type":"number","description":"Código interno de 4 dígitos. En creación lo asigna el backend.","example":1500},"name":{"type":"string","description":"Nombre del sector","example":"Centro de la Ciudad","maxLength":60},"zone":{"type":"string","description":"Zona específica dentro del sector","example":"Zona Colonial","maxLength":50},"postalCode":{"type":"string","description":"Código postal específico del sector","example":"10101","maxLength":20},"isActive":{"type":"boolean","description":"Estado activo","example":true,"default":true},"displayOrder":{"type":"number","description":"Orden de visualización","example":1,"default":0}},"required":["cityCode","name"]},"SectorEntity":{"type":"object","properties":{}},"UpdateSectorDto":{"type":"object","properties":{}}}}}