Saltar al contenido

Compraventa de vehículos de ocasión · CRM/DMS a medida

CRM/DMS para un concesionario de ocasión

El cliente es un concesionario que compra y vende coches de ocasión con stock propio, coches de inversores y depósitos de particulares. Para ellos construimos el sistema que lleva el concesionario, conectado con su web, el alta de vehículos y las facturas del correo.

Cliente
Concesionario de vehículos de ocasión
Sector
Compraventa de vehículos de ocasión
Solución
CRM/DMS a medida
Periodo
Desde septiembre de 2025
Estado
En producción En producción en Vercel

Resumen ejecutivo

CRM y DMS a medida para un concesionario de ocasión: stock, ventas, inversores, depósitos, facturación encadenada y fiscalidad REBU e IVA.

El concesionario necesitaba un sistema propio para un negocio con tres orígenes de stock: compra directa, coches de inversores y depósitos de venta. El CRM/DMS reúne vehículos, deals en kanban, clientes particulares y empresas, presupuestos, tasaciones, comisiones y un portal de solo lectura para cada inversor. La facturación emite por series, anula con rectificativas y deja cada alta en un registro encadenado con SHA-256. El módulo fiscal lleva el libro de IVA y REBU, el seguimiento trimestral y los expedientes para la gestoría. Está en producción en Vercel y se coordina con la web pública y con las automatizaciones del concesionario.

El reto

  1. Un coche puede ser propio, de un inversor o estar en depósito, y cada caso cambia qué documento de compra existe, cómo se factura y a quién hay que avisar cuando se reserva o se vende.

  2. Las ventas se facturan en régimen general de IVA o en REBU según a quién se compró el coche, y un error de régimen o de numeración acaba siendo un problema con la gestoría.

  3. Parte de la operación vive en hojas de Google que el equipo sigue editando a mano, así que cualquier sincronización tenía que respetar esos cambios.

  4. Los documentos están en OneDrive, que una aplicación alojada en Vercel no puede leer, y la web pública tenía que reflejar al momento si un coche está reservado o vendido.

La solución

Una aplicación Next.js con PostgreSQL en Supabase, desplegada en Vercel con tareas programadas, que concentra la operación del concesionario. El estado de cada coche llega a la web por un webhook firmado, las facturas emitidas viajan a n8n para archivarse en OneDrive y las tareas que necesitan la PC del concesionario se encolan desde la ficha del vehículo. Lo que no se entrega al momento queda en una bandeja de salida con reintentos.

Funcionalidades

Qué hace, pantalla a pantalla

  • Stock, kanban y depósitos

    Cada vehículo tiene su ficha con origen, costes, documentos y pasos pendientes, y se mueve en un kanban hasta vendido. Los coches en depósito llevan su contrato, un solo depósito abierto por coche y su enlace con la venta.

  • Deals y cierre de venta

    El deal recorre reserva, venta y facturación con sus contratos en PDF. Ninguna venta se cierra sin los datos comerciales: contrato, firma, paso a vendido y factura comparten la misma comprobación y devuelven qué falta.

  • Clientes particulares y empresas

    Particulares e interesados por un lado y empresas profesionales por otro, con su propio flujo de venta, contrato sin garantía y factura REBU. Las ventas de ambos tipos se consultan en una lista única.

  • Portal del inversor

    Cada inversor entra con su propia sesión y solo puede leer sus coches y sus datos. Cuando uno de sus vehículos se reserva o se vende recibe un correo automático, uno solo por coche y evento.

  • Facturación con registro encadenado

    Facturas por series, rectificativas en serie propia en lugar de borrar y conversión entre IVA y REBU sin cambiar el número. Cada alta o anulación deja un registro cuyo hash SHA-256 incluye el del anterior.

  • Módulo fiscal REBU e IVA

    Validación de las facturas de proveedor con comprobación aritmética, maestro de proveedores, libro de IVA y REBU, cierre mensual, seguimiento del IVA por trimestre y registro de quién cambió un dato fiscal y por qué.

  • Expedientes para la gestoría

    Cada venta abre un expediente con la lista de documentos que exige su tipo de operación. Un chequeo por trimestre cruza facturas, carpetas de OneDrive y la hoja de coste y beneficio, y señala lo que no cuadra.

  • Comisiones de la vendedora

    La comisión de cada venta sale del porcentaje financiado y del tipo de garantía, no de una etiqueta de forma de pago, más un bono mensual por tramos de ventas. Se consulta por mes.

  • Presupuestos y tasaciones

    Presupuestos con su motor de cálculo, PDF, envío, página pública de aceptación y vencimiento, enlazados a los interesados del coche. Las tasaciones de coches de entrega tienen pantallas pensadas para hacerse desde el móvil.

Módulos

Qué funciona hoy y qué está propuesto

4 operativos, 2 parciales y 0 propuestos. Los propuestos son diseño de producto: todavía no hay software detrás.

  • Stock, deals, clientes, inversores y depósitos

    Operativo

    Núcleo del CRM en uso desde septiembre de 2025.

  • Facturación, rectificativas y libro IVA/REBU

    Operativo

    Series, rectificativas, conversión de régimen, cierre mensual y manifiesto para la gestoría.

  • Registro de facturación encadenado

    Parcial

    Cadena de integridad interna verificable desde un endpoint. Está pensada como preparación para Verifactu: no envía nada a la AEAT ni está homologada.

  • Alertas diarias y posventa

    Operativo

    Reservas caducadas, cobros pendientes, cambios de nombre sin hacer, stock parado y margen negativo, en una bandeja y un correo diario; mensajes de reseña, ITV y garantía preparados para enviar con un clic.

  • Cola de automatizaciones

    Operativo

    Pedidos desde la ficha del coche que ejecuta la PC del concesionario, con cadenas de pasos.

  • Firma digital

    Parcial

    Integración con un proveedor de firma electrónica detrás de un interruptor; sin la clave configurada los endpoints responden que la función está apagada.

Arquitectura

Cómo está construido

Plano · crm-concesionario 6 capas · 25 piezas
  1. Clientes

    • CRM web para administración y asesora
    • Portal del inversor
    • Páginas públicas de presupuesto
    • Instalación en el móvil (PWA)
    • De Clientes a Interfaz web: navegador y móvil
  2. Interfaz web

    • Next.js 15 (App Router) y React 19
    • TypeScript estricto
    • Tailwind CSS 4
    • Kanban con arrastrar y soltar y gráficas de métricas
    • De Interfaz web a API: cookie de sesión firmada
  3. API

    • 201 rutas en Route Handlers
    • Middleware Edge con sesión firmada por HMAC y roles
    • Contraseñas con scrypt y límite de intentos de acceso
    • Secretos por cabecera para la PC, el agente y los cron
    • De API a Servicios de negocio: permisos por rol
  4. Servicios de negocio

    • Facturación, rectificativas y registro encadenado
    • Fiscal, expedientes y cierres para la gestoría
    • Comisiones, presupuestos y precio mínimo por régimen
    • Alertas, posventa y cola de automatizaciones
    • De Servicios de negocio a Datos: SQL y API de Google
  5. Datos

    • PostgreSQL en Supabase con un único pool compartido
    • 85 migraciones SQL versionadas
    • Vercel Blob para archivos de vehículos
    • Bandeja de salida de webhooks con reintentos
    • Google Sheets (stock y coste/beneficio)
  6. Sistema del concesionario

    • Web WordPress (webhook firmado con HMAC)
    • n8n en un VPS con OneDrive montado
    • PC del concesionario (alta de vehículos)
    • Agente Jarvis (pedidos por chat)

Otros flujos

  • Servicios de negocio → Sistema del concesionario : webhooks firmados y cola de trabajos
  • Sistema del concesionario → API : resultados, snapshots de OneDrive y lecturas de documentos

Tecnologías

Stack verificado en el código

Interfaz

  • Next.js
  • React
  • TypeScript
  • Tailwind CSS
  • PWA

Backend

  • Node.js

Datos

  • PostgreSQL
  • Supabase
  • Google Sheets API

Automatización y vídeo

  • Playwright

Infraestructura

  • Vercel
  • Docker
  • GitHub Actions

Calidad

  • Jest

Ingeniería

Cómo se planteó y se construyó

  1. Primera versión del CRM (septiembre a noviembre de 2025)

    El primer commit ya es un CRM funcional sobre Supabase con vehículos y filtros. Llegan después la sincronización de estados entre vehículo y deal, el kanban, los depósitos de venta con sus recordatorios, el acceso con usuario, los contratos de compraventa y, en noviembre, los archivos en Vercel Blob.

  2. Facturación fiscal y empresas (mayo de 2026)

    Se rehace la numeración de facturas por fases, con la sección de facturación y su historial. Se añade el módulo de clientes profesionales con contrato y factura REBU, y la autenticación pasa a validarse en el servidor con sesiones firmadas.

  3. Gestoría, fiscalidad e integridad (julio de 2026)

    Registro de facturación con hash encadenado, cierre mensual, libro de IVA y REBU, expedientes por tipo de operación, chequeo cruzado con OneDrive, rectificativas, conversión de régimen, comisiones y el módulo fiscal con validación de facturas de proveedor. Los permisos fiscales se comprueban en el servidor.

  4. Operación conectada (septiembre de 2026)

    Alertas diarias, reintento automático de webhooks, sincronización bidireccional con la hoja de stock, presupuestos, tasaciones, posventa, carpetas canónicas en OneDrive, aviso de estado a la web, cola de trabajos para la PC del concesionario y permisos restringidos para la asesora.

  5. Fiscalidad trimestral y agente (octubre de 2026)

    Pestaña para seguir el IVA por trimestre con la gestoría, API para que el agente Jarvis pida cambios por chat con confirmación del dueño, coste total de cada coche y precio mínimo de venta según el régimen de compra.

Retos técnicos resueltos

Que una factura emitida no se pueda borrar ni alterar sin dejar rastro, y poder corregir el régimen fiscal de una factura aún no entregada.
Cada alta o anulación genera un registro cuyo hash SHA-256 cubre NIF, número, fecha, tipo, importe total y el hash anterior, con un endpoint que verifica la cadena. Las anulaciones son rectificativas en serie propia. Como la cuota de IVA no entra en el hash, pasar de IVA a REBU no rompe la cadena.
Escribir en la hoja de coste y beneficio desde varias instancias de Vercel sin que dos emisiones simultáneas calculen la misma fila.
Un lease en tabla con caducidad hace de exclusión mutua. Se descartó el bloqueo consultivo de PostgreSQL porque retiene una conexión de un pool de tres durante segundos de llamadas a Google; el lease se toma y se suelta con dos consultas cortas.
Mantener sincronizada la hoja de stock que el equipo edita a mano con el CRM, sin perder las correcciones de ninguno de los dos lados.
Se guarda la última foto conocida de cada celda compartida. Si solo cambió la hoja se trae al CRM, si solo cambió el CRM se lleva a la hoja y si cambiaron los dos no se toca nada y el conflicto va a la bandeja de revisión.
Avisar a la web y a n8n en cada venta sin que un fallo de red bloquee la emisión ni haga perder el aviso.
Cada envío deja una fila en una bandeja de salida (pendiente, enviado o agotado) con intentos y último error, y un cron la reintenta. Los avisos nunca lanzan excepción, así que la factura se emite aunque el receptor esté caído.
Organizar documentos en OneDrive desde una aplicación que no tiene acceso a OneDrive.
El CRM decide qué carpeta o nombre debe existir y un receptor en el VPS, que monta OneDrive, lo ejecuta. A la vuelta, el VPS envía un inventario con el MD5 de cada archivo, que coincide con el hash de las facturas registradas y permite reconocer un PDF sin mirar su nombre.

Resultados

Lo que se ha medido

Cada cifra lleva su fuente y su fecha. Lo que no se ha medido va aparte, como potencial.

  • 201

    rutas de API y 59 pantallas en un solo sistema para todo el concesionario

    Recuento de route.ts y page.tsx en src/app del repositorio del CRM (PORTFOLIO_EVIDENCE §3.2) · 2026-11

Potencial · sin medición propia

  • Al momento

    el estado reservado o vendido pasa del CRM a la web pública

  • 1 cadena

    verificable de altas y anulaciones de factura

  • 1 aviso diario

    con reservas caducadas, cobros pendientes, stock parado y margen negativo

Cronología

Cómo ha evolucionado

  1. Primera versión en Supabase con vehículos, deals en kanban, depósitos y contratos.

  2. Numeración fiscal de facturas, módulo de empresas con factura REBU y autenticación en servidor.

  3. Registro encadenado, cierres y libro IVA/REBU, expedientes, comisiones y módulo fiscal.

  4. Alertas diarias, presupuestos, tasaciones, aviso de estado a la web y cola de trabajos para la PC.

  5. Seguimiento del IVA por trimestre, API del agente Jarvis y precio mínimo por régimen.

Evolución prevista

Lo siguiente

Trabajo planificado, todavía no disponible.

  1. Previsto · 01

    Envío del registro de facturación a la AEAT

    La cadena de integridad actual se diseñó como preparación para Verifactu. Queda pendiente el envío de los registros a la AEAT y su homologación.

Proyectos relacionados

Más trabajo en esta línea

Ver todos los proyectos
  • Concesionario de vehículos de ocasión En producción

    Plataforma web de un concesionario de ocasión

    Compraventa de vehículos de ocasión · Web y comercio conectados al CRM

    Capa propia sobre la tienda WordPress de un concesionario: estado sincronizado con el CRM, SEO local, ficha PDF con QR y contenidos para buscadores de IA.

    • WordPress
    • WooCommerce
    • PHP
    • GSAP
  • Concesionario de vehículos de ocasión En producción

    Alta de vehículos con IA

    Compraventa de vehículos de ocasión · Automatización de procesos con IA

    Del permiso de circulación y las fotos del móvil al anuncio en borrador: lectura de documentos con IA, fotos de estudio controladas y carteles listos.

    • Python
    • Claude (Anthropic)
    • OpenAI API
    • Google Gemini
  • Concesionario de vehículos de ocasión En producción

    Automatización de facturas con n8n

    Compraventa de vehículos de ocasión · Automatización de procesos

    Las facturas de proveedores que llegan por correo se clasifican y archivan solas en la carpeta del coche y en la de la gestoría, y quedan registradas en el CRM.

    • n8n
    • Docker
    • Node.js
    • Python

Hablemos

¿Necesitas desarrollar una solución similar?

Cuéntanos el problema. Te respondemos con un planteamiento claro: qué haríamos, en cuánto tiempo y con qué entregables.