Back-office

Doce módulos. Un portal de operador. Grado auditoría desde el primer clic.

El back-office de Connect es el mismo software que usan nuestros propios operadores cada día — mismo RBAC, mismo audit log, mismos reportes. Abajo, cada módulo con la pantalla real, lo que hace y el motor que lo alimenta.

Doce módulos. Un portal de operador. Grado auditoría desde el primer clic.

Sesiones

Cada sesión iniciada, en curso o completada — con el timeline OCPP, traza de pago y estado de devolución/disputa anexos.

  • Vista live + histórico, badges de estado (started, charging, terminated, refunded, disputed)
  • Exportación streaming CSV del set filtrado
  • Acceso al timeline OCPP + timeline de autorización de pago por sesión
  • Force-cancel con auditoría y código de razón atribuido al operador
  • Oculta el pill de offline en sesiones terminales; sella resolved_at + audita force-cancel

Powered by: billing_sessions + session_payment_authorizations · auditoría charging_attempts · OCPP AMQP realtime → state machine

Portal de operador — Lista de sesiones con badges de estado, búsqueda y exportación masiva

Estaciones y Ubicaciones

Vista de flota de estaciones con dashboards por ubicación, panel de averías en tiempo real, clasificación OCPP de conectores y overrides de tarifa por ubicación.

  • Endpoint de dashboard por ubicación con lookup stations-by-location
  • Panel de averías filtrado a faults OCPP reales (códigos del vendor preservados)
  • Clasificación de conector por powerType, no heurística DC hardcodeada
  • Timezone unificada estación-ubicación para alineación de sesión y reporte
  • Dirección + ciudad auto-enriquecidas al crear estación

Powered by: stations + locations + station_connectors · tabla faults · agregador analítico por ubicación

Portal de operador — Dashboard de Estaciones y Ubicaciones con utilización y averías por ubicación

Tarifas y Overrides

Un catálogo de tarifas con overrides por equipo, ubicación y conector — y un snapshot de qué tarifa se aplicó a cada sesión walk-up.

  • Catálogo de tarifas con conteo de overrides por equipo y por ubicación
  • Snapshot de tarifa walk-up enriquecido con contexto de ubicación (timezone correcta)
  • Helper de lookup de tarifa de conector que resuelve por PK de conector Citrine o id OCPP
  • tariffName por equipo + conteo de overrides en el detalle del equipo
  • Todas las ediciones emiten eventos en audit_logs (tariffs.create / update / delete)

Powered by: tariffs + tariff_overrides + connector_tariff_assignments · writer de snapshot walk-up · audit-mirror

Portal de operador — Editor de tarifas con panel de override por ubicación

Reportes

Motor de reportes de 23 plantillas: revenue & P&L, conciliación de settlements, devoluciones, AR aging de flota, efectividad de tarifa, calidad de sesión + SLO, uptime de red, cohortes de crecimiento y retención, GDPR data exports — programados, entregados por URL firmada por email.

  • 23 plantillas en catálogo, cada una tenant-scoped + period-helper compartido
  • Presets guardados + ejecuciones programadas vía report_schedules + tick worker
  • Entrega por URL firmada + endpoints GET /runs + GET /export-audit
  • Exportadores CSV y XLSX con orden de columnas determinista
  • RBAC por plantilla: reports.export / reports.schedule / reports.admin

Powered by: report_runs + report_schedules + report_template_settings + export_audit · template registry · scheduler worker

Portal de operador — Catálogo de Reportes con 23 plantillas, ejecuciones programadas y auditoría de export

Audit Log

Un único timeline append-only de eventos para cada cambio financiero, OCPP, RBAC y de configuración — con hash anchor diario y endpoint de verificación que hace la cadena resistente a manipulación.

  • Fundamentos de audit_logs: financiero, OCPP, RBAC, settings, push/exports
  • Hash anchor diario + retención nocturna + endpoint de verificación de cadena
  • Métricas Prometheus para tasa de emisión, lag, edad del anchor
  • Middleware request_id que hila correlación por cada evento
  • Assertions de emisión cubiertas en tests para refund + locations + stations + settings

Powered by: audit_logs · daily anchor worker · primitivos auditEmit + auditEmitTs · módulos audit-mirror

Portal de operador — Timeline de audit log con hash anchor diario y estado de verificación de cadena

Flotas

Flotas multi-tenant con tarjetas RFID, import bulk CSV, automatización de cobro y scope por equipo en cada reporte. El refactor Teams→Fleets entró en vivo sin downtime.

  • Emisión + binding + revocación de RFID por flota con audit trail
  • Import bulk CSV de RFID con validación contra límite de longitud de IdToken OCPP 1.6 (20 chars)
  • Reporte de aged-receivables + worker de automatización de cobro
  • Scope por flota en cada plantilla de reporte + agregado de dashboard
  • driverUserId requerido al crear tarjeta de flota; tokens unbound → Blocked/TOKEN_UNBOUND limpio

Powered by: fleets + fleet_cards + fleet_invoices · dunning worker · adaptador Citrine para fleets

Portal de operador — Lista de flotas con conteo de RFID, AR aging, estado de cobro e import bulk CSV

Campañas Push

Campañas push del lado operador con segmentación de audiencia, programación y reporte de efectividad de envío. Construidas sobre un cliente APNs HTTP/2 recuperable.

  • BO sort + filter + search + acciones por fila en /admin/push/campaigns
  • Plantilla de efectividad de envío push & email por campaña
  • Sesiones APNs HTTP/2 se recuperan tras timeouts (recuperación de sesiones muertas)
  • Paridad de canal email + push en la misma fila de campaña
  • Opt-out por usuario para el email de resumen de sesión de carga

Powered by: push_campaigns · cliente APNs · plantilla analítica send-effectiveness

Portal de operador — Lista de campañas push con sort, filter, search y acciones por fila

Usuarios y RBAC

Un catálogo de permisos con scopes como reports.export, reports.schedule, users.export, audit.read — agrupados en Departments seedados y asignables por equipo.

  • Catálogo de permisos con action + module + description por cada permiso
  • 5 Departments seedados con bundles de permisos por departamento
  • Reglas allow/deny por equipo aplicadas dentro de las ramas walk-up + fleet
  • Export CSV de usuarios gated por users.export
  • acquisitionSource expuesto en /api/admin/users/:id para reportes de funnel

Powered by: permissions + departments + department_permissions + team_permissions · TeamAccessRule

Portal de operador — Usuarios y RBAC con Departments seedados y acceso scoped por equipo

What's New

Módulo de release notes del lado operador con flag de entrada prominente, títulos y resúmenes localizados, y orden catch-up scroll por published_at.

  • title + short_summary localizados por entrada
  • Flag prominent para releases de alta señal
  • Filtrado por audiencia: operator-only, driver-only, mixed
  • published_at backfilled en cada entrada para que el catch-up scroll ordene correctamente
  • Versionado por línea de release (core, app, operator)

Powered by: whats_new_entries · whatsnew TS module · audience filtering API

Portal de operador — Módulo What's New con flag prominent y entradas localizadas

Erasure Requests

Una superficie GDPR Artículo 17 para recibir, ejecutar y auditar solicitudes de borrado — con cascade-delete de PII, scrub de audit-log y anonimización de auth-tokens.

  • Cascade-delete end-to-end de PII al borrar usuario
  • auth_tokens anonimizados, leads cascade-deleted
  • Audit_logs no críticos con PII scrubbed al borrar usuario
  • UI de operador para triage + ejecución + verificación de cada solicitud
  • Cada paso de erasure emite un evento de audit tipado GDPR

Powered by: erasure_requests · taxonomía de eventos gdpr.* · pipeline de cascade-delete

Portal de operador — Cola de erasure requests GDPR con estado de cascade-delete y audit trail

Settings (Runtime Config)

Configuración runtime con scope de tenant: SMTP, store URLs, EMAIL_FROM_NAME, switch del email de resumen de sesión, flags QR-config — editables sin redeploy.

  • Agrupación SMTP + EMAIL_FROM_NAME + headers FROM por tenant
  • Store URLs (App Store + Play Store) leídas vía runtime-config
  • Flags QR-config (online/offline) sin round-trip de probe a Citrine
  • Copy descriptivo + paridad .env.example por cada clave allowlisted
  • Surface del commit SHA desplegado vía /api/version

Powered by: tabla runtime_config · módulo settings · endpoint /api/version

Portal de operador — Editor de configuración runtime con SMTP, store URLs y knobs por tenant

API y Webhooks

Todo lo que hace el back-office, expuesto como REST con OpenAPI 3.1. Webhooks para inicio/fin de sesión, eventos de pago y cambios de estado de cargador. Credenciales con scope de token.

  • Spec OpenAPI 3.1, browsable in-portal
  • Credenciales con scope de token con RBAC por ruta
  • Log de entrega de webhook con reintento + verificación de firma
  • /health rich (db + amqp + citrine + disk + memory + cpu)
  • Versionado vía /api/version exponiendo commit desplegado + versión de CitrineOS

Powered by: api_tokens + webhook_deliveries + audit-mirror · /health rich · /api/version

Portal de operador — Browser de API y Webhooks con OpenAPI spec, scopes de token y log de webhook

¿Quieres un tour hands-on?

Elige un slot de 30 minutos. Te logueamos en un tenant sandbox con la forma de tu red real — cargadores, tarifas, flotas — y recorremos cada módulo de arriba.