Módulo de Abonados
Guía completa del módulo de Abonados de ParkVision. Gestión de clientes fijos, suscripciones, vehículos, facturación y estado de cuenta.
Módulo de Abonados
El módulo de Abonados gestiona los clientes que alquilan una plaza de estacionamiento por un período determinado (mensual, semanal o diario) con un pago prepago. Incluye la gestión de clientes, vehículos, suscripciones, planes, plazas, facturación y estado de cuenta.
Navegación
Desde el menú lateral, bajo la sección Abonados, se accede a:
| Sección | Ruta | Descripción |
|---|---|---|
| Gestión de Clientes | /apps/customers | ABM de clientes con suscripciones |
| Ficha de Cliente | /apps/customer-account | Estado de cuenta por cliente |
| Plazas | /apps/plazas | Gestión de espacios de estacionamiento |
| Planes | /apps/plans | Configuración de planes y tarifas |
| Vehículos | /apps/vehicles | Registro global de vehículos |
| Facturación Pendiente | /apps/billing-suggestions | Sugerencias de facturación automática |
Entidades principales
El módulo se compone de las siguientes entidades que se relacionan entre sí:
Cliente (1) ──→ (N) Vehículo
Cliente (1) ──→ (N) Suscripción
Cliente (1) ──→ (N) Factura
Cliente (1) ──→ (N) Pago
Suscripción (N) ──→ (1) Plan
Suscripción (N) ──→ (1) Plaza
Suscripción (N) ──→ (M) Vehículo (muchos a muchos)
Suscripción (1) ──→ (N) Factura
Suscripción (1) ──→ (N) Sugerencia de Facturación
Plan (1) ──→ (N) Reglas de Vencimiento (recargos)Gestión de Clientes
Listado de clientes
La pantalla principal muestra una tabla paginada con búsqueda por nombre, apellido o documento. Cada fila permite editar, ver o eliminar (soft delete) el cliente.
Formulario de cliente
El formulario de alta/edición tiene 4 pestañas:
1. Datos personales
Información básica del cliente:
- Nombre y Apellido (obligatorios)
- Tipo y Número de Documento
- CUIT (identificación fiscal, necesario para facturación)
- Email (debe ser único)
- Teléfono
- Categoría Fiscal (obligatorio para emitir facturas)
- Notas
2. Vehículos
Gestión de los vehículos del cliente:
- Patente: Se normaliza automáticamente a mayúsculas sin guiones
- Descripción: Marca, modelo, color
- Notas
Un cliente puede tener múltiples vehículos. Un vehículo puede estar asociado a múltiples suscripciones.
3. Suscripciones
Cada suscripción representa el alquiler de una plaza. Al agregar una suscripción se configura:
- Plan: Selecciona el plan tarifario (autocompleta el precio por defecto)
- Plaza: Espacio asignado (opcional)
- Vehículos: Selección múltiple de los vehículos del cliente
- Precio: Se puede sobrescribir el precio del plan
- Días de gracia: De 0 a 30 días antes de aplicar recargo por mora
- Alineación a fin de mes: Si el ciclo de facturación se ajusta al último día del mes
Prorrateo
Al crear una suscripción a mitad de mes, el sistema calcula automáticamente el prorrateo: divide el precio mensual por los días del mes y multiplica por los días restantes. Esto genera una factura inicial por el período parcial.
Estados de suscripción
| Estado | Descripción |
|---|---|
| Activa | Suscripción vigente, se factura automáticamente |
| Suspendida | Temporalmente detenida, no genera facturas |
| Cancelada | Finalizada, no genera facturas |
4. Ficha (Estado de cuenta)
Vista embebida del estado de cuenta del cliente. Ver sección "Estado de Cuenta" más abajo.
Planes
Los planes definen la tarifa y el período de facturación.
Propiedades de un plan
- Nombre: Identificador del plan (ej: "Mensual Auto", "Semanal Moto")
- Período: Día, Semana, Mes o Personalizado
- Cantidad de períodos: Multiplicador (ej: 2 meses)
- Precio por defecto: Tarifa base que se puede sobrescribir por suscripción
- Activo: Solo los planes activos están disponibles para nuevas suscripciones
Reglas de vencimiento (recargos)
Cada plan puede tener múltiples reglas de recargo por mora:
- DayOffset: Días después de la fecha de emisión
- SurchargePercentage: Porcentaje de recargo a aplicar
Ejemplo: Si la factura se emite el 1ro del mes con una regla de 10 días / 10%, a partir del día 11 se aplica un recargo del 10% sobre el total.
Plazas
Las plazas representan los espacios físicos del estacionamiento.
- Código: Identificador de la plaza (ej: "A-01", "B-15")
- Notas: Observaciones sobre la plaza
Una plaza puede estar asignada a una suscripción. Una suscripción puede tener una plaza asignada opcionalmente.
Vehículos
El registro global de vehículos muestra todos los vehículos de todos los clientes con búsqueda y paginación.
Relación con suscripciones
La relación entre vehículos y suscripciones es muchos a muchos:
- Un vehículo puede estar en múltiples suscripciones
- Una suscripción puede incluir múltiples vehículos
Esto permite escenarios como un cliente con dos autos que alternan en la misma plaza, o un auto que usa una plaza de día y otra de noche.
Facturación
Ciclo de facturación automático
El sistema genera facturas automáticamente según las suscripciones activas:
- Cada suscripción tiene una fecha ancla de facturación (
BillingAnchorDate) y una próxima fecha de facturación (NextInvoiceDate) - Un servicio en background (
BillingRunner) verifica diariamente las suscripciones cuyaNextInvoiceDatellegó - Se genera una Sugerencia de Facturación (
BillingSuggestion) con los montos calculados - El operador revisa y confirma o descarta la sugerencia
Sugerencias de facturación
La pantalla de Facturación Pendiente muestra todas las sugerencias pendientes:
- Selección masiva: Confirmar varias sugerencias a la vez
- Edición individual: Ajustar montos antes de confirmar
- Datos: Cliente, Plan, Período, Subtotal, IVA, Total
- Totales: Total seleccionado y total general
Al confirmar una sugerencia:
- Se genera una Factura de tipo "Cuenta Corriente"
- Se asigna un número de factura secuencial
- Se crea una línea de factura con la descripción del plan
- Se vincula la sugerencia a la factura
- Se genera una notificación
Prevención de duplicados
El sistema usa una clave de idempotencia (IdemKey) en facturas, pagos y sugerencias para prevenir la creación de duplicados en caso de errores de red o reintentos.
Tipos de factura
| Tipo | Descripción |
|---|---|
| Cuenta Corriente | Generada desde suscripciones, se paga después |
| Contado | Pago inmediato (usado en estacionamiento rotativo) |
Estados de factura
| Estado | Descripción |
|---|---|
| Pendiente | Emitida, esperando pago |
| Pagada | Completamente pagada |
| Cancelada | Anulada |
Pagos
Los pagos se registran desde el estado de cuenta del cliente:
- Pago total: Cubre el monto completo de las facturas pendientes seleccionadas
- Pago parcial: Se puede ingresar un monto menor
- Método de pago: Efectivo, transferencia, tarjeta, etc.
- Caja: Se asocia a la caja abierta del operador
- Referencia externa: Número de comprobante o transacción
Asignación de pagos
Un pago se asigna a una o más facturas mediante PaymentAllocation:
- Un pago puede cubrir varias facturas
- Una factura puede ser cubierta por varios pagos parciales
- Se registra el monto aplicado a cada factura
Estado de cuenta
El estado de cuenta muestra el historial financiero del cliente:
KPIs principales
- Saldo actual: Balance a la fecha
- Monto vencido: Facturas cuyo plazo de gracia expiró
- Fecha de último pago
- Próximo vencimiento
Movimientos
La tabla de movimientos muestra cronológicamente:
| Tipo | Columna | Descripción |
|---|---|---|
| Factura | DÉBITO | Aumenta el saldo (lo que debe el cliente) |
| Pago | CRÉDITO | Reduce el saldo (lo que pagó el cliente) |
| Reversión | CRÉDITO | Anulación de una factura |
| Nota de crédito | CRÉDITO | Ajuste a favor del cliente |
| Nota de débito | DÉBITO | Ajuste a cargo del cliente |
Cada movimiento muestra el saldo acumulado (running balance).
Filtros
- Rango de fechas: Por defecto últimos 90 días
- El saldo de apertura se calcula según la fecha de inicio del filtro
Acciones disponibles
Desde el estado de cuenta se puede:
- Ver factura: Detalle completo de la factura
- Cobrar: Registrar un pago (abre el diálogo de pago)
- Anular factura: Cancelar una factura pendiente
- Anular pago: Cancelar un pago registrado
API Endpoints
Clientes
| Método | Ruta | Descripción |
|---|---|---|
| GET | /api/v1/Customers | Listar todos los clientes |
| GET | /api/v1/Customers/paged | Clientes paginados con búsqueda |
| GET | /api/v1/Customers/{id} | Obtener cliente por ID |
| POST | /api/v1/Customers | Crear cliente con vehículos y suscripciones |
| POST | /api/v1/Customers/basic | Crear cliente (solo datos básicos) |
| PUT | /api/v1/Customers/{id} | Actualizar cliente completo |
| PUT | /api/v1/Customers/{id}/basic | Actualizar datos básicos |
| DELETE | /api/v1/Customers/{id} | Eliminar cliente (soft delete) |
| GET | /api/v1/Customers/{id}/vehicles | Vehículos del cliente |
| PUT | /api/v1/Customers/{id}/vehicles | Actualizar vehículos |
| GET | /api/v1/Customers/{id}/subscriptions | Suscripciones del cliente |
| PUT | /api/v1/Customers/{id}/subscriptions | Actualizar suscripciones |
| GET | /api/v1/Customers/{id}/account-movements | Estado de cuenta |
Planes
| Método | Ruta | Descripción |
|---|---|---|
| GET | /api/v1/Plans | Listar planes |
| POST | /api/v1/Plans | Crear plan |
| PUT | /api/v1/Plans/{id} | Actualizar plan |
| DELETE | /api/v1/Plans/{id} | Eliminar plan |
Suscripciones
| Método | Ruta | Descripción |
|---|---|---|
| GET | /api/v1/Subscriptions/{id}/proration | Estimar prorrateo |
Consideraciones técnicas
- Multi-tenancy: Todas las entidades tienen
TenantIdpara aislar datos entre estacionamientos - Soft delete: Los registros se marcan como eliminados (
IsDeleted) en lugar de borrarse físicamente - Transacciones: La creación de clientes con vehículos y suscripciones se ejecuta en una transacción para garantizar consistencia
- Normalización de patentes: Las patentes se guardan en mayúsculas sin guiones ni espacios
- Categoría fiscal: Es obligatoria para la emisión de facturas y determina la numeración de comprobantes
- Moneda: Por defecto ARS (pesos argentinos), configurable por tenant