Inicio
Resumen Funcional por Caso de Uso
1. Autenticación (AuthenticationUseCase)¶
Gestiona el acceso de usuarios mediante un servicio de autenticación externo (RPC). Soporta login con credenciales, renovación de tokens, verificación de tokens de registro y verificación de códigos temporales. Incluye modo super-admin con credenciales configuradas por entorno.
2. Condominios (CondominiumUseCase)¶
CRUD de condominios. Los usuarios pueden listar sus condominios asociados. Los administradores pueden actualizar datos del condominio y gestionar metadatos configurables (logo, dirección, contacto, etc.).
3. Usuarios (UserUseCase + UserFinderUseCase)¶
Gestión completa del ciclo de vida de usuarios: registro, invitación por email, actualización de perfil, recuperación y reseteo de contraseña, activación/desactivación. Los administradores pueden buscar usuarios con filtros paginados y reenviar invitaciones. Valida pertenencia de usuarios a condominios.
4. Propiedades (PropertyUseCase)¶
Gestión de propiedades dentro de un condominio. Permite buscar propiedades con filtros paginados, asignar propietarios (creando el vínculo condominio-usuario si no existe), registrar pagos manuales y generar facturas en PDF. Envía notificaciones por email al propietario tras un pago.
5. Carga Masiva de Propiedades (PropertyBulkloadUseCase)¶
Módulo para cargar propiedades de forma masiva mediante archivos XLSX. (En desarrollo)
6. Configuración de Gastos Comunes (CommonExpenseConfigurationUseCase)¶
Permite a los administradores definir configuraciones de gastos comunes por condominio: montos, rangos de año, fechas de inicio. Valida que no se solapen configuraciones existentes y que los montos sean positivos.
7. Gastos Comunes por Propiedad (CommonExpensePropertyUseCase)¶
Núcleo del cálculo de gastos comunes. Calcula el monto a pagar incluyendo: configuraciones base, intereses por mora, acuerdos de pago y ajustes de saldo. Gestiona la creación de registros de gastos comunes, acuerdos de pago en cuotas, y el estado de deuda de cada propiedad (meses atrasados, meses pendientes, al día).
8. Pagos (PropertyPaymentUseCase)¶
Gestión integral de pagos: consulta con filtros paginados, búsqueda por ID y por propiedad, descarga de reportes en XLSX, cancelación de pagos pendientes (eliminando gastos comunes asociados) y anulación por administradores. Valida permisos de usuario sobre cada pago.
9. Pagos de Terceros (ThirdPartyPaymentUseCase)¶
Integración con pasarelas de pago externas (Transbank). Genera URLs de redirección para pagos de terceros, procesa webhooks de confirmación/annulación verificando firmas HMAC-SHA256, y actualiza el estado de los pagos según la respuesta de la pasarela.
10. Dashboard (DashboardUseCase)¶
Panel de estadísticas para administradores. Genera datos para gráficos de 12 meses y 4 tarjetas resumen: total pagado, pagos autogestionados, dinero entrante del mes (con comparación porcentual vs mes anterior) y usuarios activos.
11. Depósitos de Gastos Comunes (CommonExpenseDepositUseCase)¶
Permite a los administradores registrar abonos (depósitos) para el pago de gastos comunes de una propiedad. El monto se aplica primero como crédito acumulado y cuando cubre un período completo, crea el registro correspondiente del gasto común. Envía notificación por email al propietario. Devuelve el resultado con información del crédito acumulado y si cubrió o no el período actual.
12. Suscripciones (SubscriptionUseCase)¶
Gestión de suscripciones de condominios a la plataforma. Permite buscar suscripciones por condominio, crear nuevas suscripciones vía pago, cancelar suscripciones, consultar el estado de pago del usuario y calcular montos a pagar. Incluye manejo de errores de transacciones de pago.
13. Planes de Suscripción (SubscriptionPlanUseCase)¶
Gestión de los planes de suscripción disponibles en la plataforma. Permite listar todos los planes configurados para que los administradores puedan consultar las opciones disponibles.
14. Notificaciones (NotificationUseCase)¶
Envío y gestión de notificaciones por email: invitaciones a nuevos usuarios, confirmaciones de pago de propiedades, y notificaciones generales del sistema.
15. Control de Acceso (AccessControlUseCase)¶
Registro de entrada y salida de vehículos en el condominio. Gestiona vehículos por patente, crea registros de acceso con detalle y genera reportes en XLSX.
Documentación Técnica de la API¶
Autenticación — /v1/auth¶
| Método | Path | Descripción | Request | Response |
|---|---|---|---|---|
| POST | /login |
Login de usuario | LoginRequest |
LoginResponse (token, userId, roleName) |
Usuarios — /v1/users¶
| Método | Path | Descripción | Request | Response |
|---|---|---|---|---|
| GET | /{id} |
Obtener usuario por ID | PathParam: id | UserResponse |
| GET | /search |
Buscar usuarios | UserFinderRequest (query params) |
Pagination<UserResponse> |
| GET | ?email={email} |
Buscar usuario por email | QueryParam: email | UserResponse |
| PUT | /update-password |
Actualizar contraseña | PasswordUpdateRequest |
- |
| PUT | /deactivate/{id} |
Desactivar usuario | PathParam: id | - |
| GET | /complete/{tenantId} |
Redirigir a completar registro | PathParam: tenantId | - |
| POST | /password-recovery |
Solicitar recuperación de contraseña | PasswordRecoveryRequest |
- |
| PATCH | /reset-password |
Resetear contraseña | ResetPasswordRequest |
- |
Condominios — /v1/condominium¶
| Método | Path | Descripción | Request | Response | Seguridad |
|---|---|---|---|---|---|
| GET | /search |
Buscar condominios | CondominiumFinderRequest (query params) |
Paginado | - |
| GET | ?userId={userId} |
Listar condominios del usuario | QueryParam: userId | List<CondominiumResponse> |
- |
| GET | /{id} |
Obtener condominio por ID | PathParam: id | CondominiumResponse |
user, admin |
| PUT | / |
Actualizar condominio | CondominiumRequest |
- | admin |
| POST | /metadata/{condominiumId} |
Agregar/actualizar metadatos | PathParam + List<MetadataRequest> |
- | admin |
Propiedades — /v1/property¶
| Método | Path | Descripción | Request | Response |
|---|---|---|---|---|
| GET | /{propertyId} |
Obtener propiedad por ID | PathParam: propertyId | PropertyResponse |
| GET | / |
Buscar propiedades con filtros | Query params (condominiumId, number, street, userId, page, rowsPerPage) | Paginado |
| POST | /owner |
Actualizar propietario | UpdateOwnerRequest |
- |
| POST | /payment |
Registrar pago de propiedad | Payment |
- (201) |
| GET | /invoice/{id} |
Descargar factura PDF | PathParam: id | PDF binary |
Pagos — /v1/payment¶
| Método | Path | Descripción | Request | Response |
|---|---|---|---|---|
| GET | / |
Buscar pagos con filtros | PaymentFinderRequest (query params) |
Paginado |
| GET | /download |
Descargar reporte de pagos | QueryParams: condominiumId, from, to | XLSX binary |
| GET | /{id} |
Obtener pago por ID | PathParam: id | PaymentResponse |
| GET | /last/{propertyId} |
Último pago de propiedad | PathParam: propertyId | PaymentResponse |
| PUT | /cancel/{id} |
Cancelar pago | PathParam: id | - |
| PUT | /delete/{id} |
Anular pago (admin) | PathParam: id | - |
Pagos de Terceros — /v1/third-party-payment¶
| Método | Path | Descripción | Request | Response |
|---|---|---|---|---|
| GET | /properties/{paymentId} |
Obtener URL de pago externo | PathParam: paymentId | {"url":"..."} |
| POST | /properties |
Confirmar/anular pago de propiedad | ConfirmPaymentRequest |
ConfirmThirdPartyPaymentResponse |
| POST | /subscription |
Confirmar/anular pago de suscripción | ConfirmPaymentRequest |
ConfirmThirdPartyPaymentResponse |
Gastos Comunes por Propiedad — /v1/common-expense-property¶
| Método | Path | Descripción | Request | Response |
|---|---|---|---|---|
| POST | /amount |
Calcular monto a pagar | GetAmountToPayRequest |
AmountToPayResponse |
| POST | /agreement |
Registrar acuerdo de pago | PropertyAgreementRequest |
- (201) |
| POST | /agreement/amount |
Calcular monto de acuerdo | GetAmountToPayForAgreementRequest |
AmountToPayResponse |
| POST | / |
Crear gasto común de propiedad | NewCommonExpensePropertyRequest |
- (201) |
| GET | /last/{propertyId} |
Último gasto común de propiedad | PathParam: propertyId | CommonExpensePropertyResponse |
| GET | /status/{propertyId} |
Estado de gastos de propiedad | PathParam: propertyId | CommonExpensePropertyStatusResponse |
Configuración de Gastos Comunes — /v1/common-expense-configuration¶
| Método | Path | Descripción | Request | Response |
|---|---|---|---|---|
| GET | ?condominiumId={id} |
Listar configuraciones | QueryParam: condominiumId | List<CommonExpenseConfigurationResponse> |
| POST | / |
Crear configuración | CommonExpenseConfigurationRequest |
- (201) |
Dashboard — /v1/dashboard¶
| Método | Path | Descripción | Request | Response |
|---|---|---|---|---|
| GET | /{condominiumId} |
Obtener datos del dashboard | PathParam: condominiumId | DashboardResponse |
Depósitos — /v1/common-expense-property/deposit¶
| Método | Path | Descripción | Request | Response | Seguridad |
|---|---|---|---|---|---|
| POST | /deposit |
Registrar depósito/abono | DepositRequest |
DepositResult |
admin |
Suscripciones — /v1/subscriptions¶
| Método | Path | Descripción | Request | Response | Seguridad |
|---|---|---|---|---|---|
| GET | /{condominiumId} |
Obtener suscripción del condominio | PathParam: condominiumId | Subscription |
user, admin, platform_admin |
| GET | /search |
Buscar suscripciones con filtros | Query params (page, pageSize, criteria) | Pagination<Subscription> |
user, admin, platform_admin |
| PUT | /cancel/{subscriptionId} |
Cancelar suscripción | PathParam: subscriptionId | - | admin, platform_admin |
| POST | / |
Crear nueva suscripción | Long (condominiumId) | String (payment URL/ID) | admin, platform_admin |
| POST | /confirm |
Confirmar/cancelar pago de suscripción | PaymentConfirmationDto |
void | - |
| GET | /payment-status/{userId} |
Estado de pago del usuario | PathParam: userId | {"inPaymentRange": boolean} |
admin, platform_admin |
| GET | /amount-to-pay/{userId} |
Monto a pagar por suscripción | PathParam: userId | BigDecimal | admin, platform_admin |
Planes de Suscripción — /v1/plans¶
| Método | Path | Descripción | Request | Response | Seguridad |
|---|---|---|---|---|---|
| GET | / |
Listar planes disponibles | - | List<SubscriptionPlan> |
admin, platform_admin |
Health Check — /v1/health¶
| Método | Path | Descripción | Response |
|---|---|---|---|
| GET | / |
Estado del servicio | {"status": "UP"} |
Variables de Entorno¶
| Variable | Descripción | Default |
|---|---|---|
SERVER_PORT |
Puerto del servidor | 8080 |
ENV |
Entorno (local/staging/prod) | local |
APP_VERSION |
Versión de la aplicación | 1.0.0 |
DB_HOST |
Host de PostgreSQL | localhost |
DB_PORT |
Puerto de PostgreSQL | 5432 |
DB_NAME |
Nombre de la base de datos | condominium_api |
DB_USER |
Usuario de la base de datos | - |
DB_PASSWORD |
Contraseña de la base de datos | - |
REDIS_HOST |
Host de Redis | localhost |
REDIS_PORT |
Puerto de Redis | 6379 |
JWT_PUBLIC_KEY |
Clave pública JWT | - |
JWT_PRIVATE_KEY |
Clave privada JWT | - |
TBK_API_KEY_ID |
API Key ID de Transbank | - |
TBK_API_KEY_SECRET |
API Key Secret de Transbank | - |
TBK_RETURNER_URL |
URL de retorno Transbank | - |
PAYMENT_SUCCESS_URL |
URL de pago exitoso | - |
AKEYLESS_USER |
Usuario de Akeyless (vault) | - |
AKEYLESS_PASSWORD |
Contraseña de Akeyless | - |
Docker¶
Build de imagen¶
Ejecutar contenedor¶
docker run -p 8080:8080 \
-e DB_HOST=host.docker.internal \
-e DB_USER=postgres \
-e DB_PASSWORD=secret \
-e REDIS_HOST=host.docker.internal \
residefacil-api
Perfiles de Ejecución¶
| Perfil | Descripción |
|---|---|
dev |
Desarrollo con DevServices (PostgreSQL/Redis en Docker), Swagger UI habilitado |
test |
Testing con Flyway desactivado, Hibernate drop-and-create |
staging |
Staging, Swagger UI deshabilitado |
prod |
Producción, Swagger UI deshabilitado |