MADeCa Mini — Guía de instalación y configuración
Instalar MADeCa Mini en un servidor Linux propio y dejarlo listo para emitir el Documento Electrónico de Control Administrativo (DeCA) del transporte de mercancías por carretera. Pensada para el técnico de sistemas que lo instala y para el administrador de la empresa que lo configura.
1. Introducción y propósito
MADeCa emite y gestiona el DeCA, el documento de control que exige la Orden FOM/2861/2012 en cada envío de transporte público de mercancías por carretera, en el formato electrónico que fija la Resolución de 5 de junio de 2026 de la Dirección General de Transporte por Carretera y Ferrocarril (BOE-A-2026-12784): un PDF nativo digital con un código QR que el inspector escanea para descargarlo.
MADeCa Mini es la versión gratuita de MADeCa, obtenida de Masoft.es. Tiene todas las funciones de la aplicación con tres límites (una empresa, 30 DeCA al día y 3 vehículos) y se instala en un servidor propio con un único script.
2. Características principales
Límites de la versión Mini
| Límite | Valor | Qué pasa al llegar |
|---|---|---|
| Empresas | 1 por instalación | No se puede dar de alta otra. |
| DeCA emitidos | 30 al día (día natural en la zona horaria elegida al instalar) | No se emite el n.º 31: lo pendiente sigue en la bandeja y se puede emitir al día siguiente. La API responde 429. Las modificaciones no cuentan como DeCA nuevos. |
| Vehículos | 3 vehículos motor (cabezas tractoras o camiones) | Solo se emiten DeCA con vehículos registrados. Los remolques no cuentan ni se registran. Un vehículo dado de baja ocupa su hueco 30 días. |
Los límites están dentro del programa y de la base de datos: no hay ninguna opción para cambiarlos. Toda la aplicación muestra que es la versión gratuita obtenida de Masoft.es.
3. Requisitos del sistema
| Elemento | Mínimo | Recomendado / notas |
|---|---|---|
| Sistema operativo | Ubuntu 22.04 o 24.04 LTS, o Debian 12 | Servidor dedicado, máquina virtual o VPS. Sin escritorio. |
| Procesador | x86_64 (Intel/AMD), 2 núcleos | El paquete no funciona en ARM (Raspberry Pi, Ampere). |
| Memoria | 2 GB | 4 GB. Con menos de 4 GB y sin memoria de intercambio, el instalador crea 2 GB. |
| Disco | 10 GB libres | 20 GB o más: los DeCA se conservan al menos un año. |
| Software | Ninguno previo | El instalador pone Docker y Docker Compose v2 (repositorio oficial de Docker) si no están. |
| Acceso | Usuario con sudo | Por consola o SSH. |
| Internet | Salida a internet durante la instalación | Descarga Docker, PostgreSQL, Redis y Caddy, y pide el certificado HTTPS. |
Dominio, puertos y HTTPS
El QR del DeCA lo escanea un inspector con su móvil, en carretera. Por eso MADeCa Mini tiene que estar publicado en internet con HTTPS (Apartado Tercero.1: la URL empieza necesariamente por https://). Antes de instalar hace falta:
- Un dominio o subdominio propio, por ejemplo
deca.miempresa.es, con un registro DNS A que apunte a la IP pública del servidor. - Los puertos 80 y 443 (TCP) abiertos desde internet hasta el servidor. Si está detrás de un router, reenvíalos a la IP interna del servidor.
- Que nada más use los puertos 80 y 443 en ese servidor (Apache, nginx...).
El certificado HTTPS lo pide y lo renueva solo Caddy (Let's Encrypt). No hay que comprar nada ni copiar certificados. Basta con que el dominio apunte al servidor y el puerto 80 llegue desde internet.
4. Instalación
Todo se hace con el script madeca.sh del paquete. Queda instalado en /opt/madeca-mini.
4.1 Copiar el paquete al servidor
Desde el equipo donde tengas el paquete (en Windows sirven scp de PowerShell o WinSCP):
scp madeca-mini-0.5.0.tar.gz usuario@IP-DEL-SERVIDOR:/tmp/
En el servidor, descomprímelo:
cd /tmp tar xzf madeca-mini-0.5.0.tar.gz cd madeca-mini-0.5.0
4.2 Ejecutar el instalador
sudo ./madeca.sh instalar
El instalador va paso a paso y se detiene con un mensaje claro si algo no cumple los requisitos:
- Condiciones de uso. Muestra
LICENCIA.txt. EscribeACEPTOpara seguir. - Comprobación del servidor: procesador x86_64, memoria, disco y que los puertos 80 y 443 estén libres.
- Docker: si no está, lo instala desde su repositorio oficial (
download.docker.com), con Docker Compose v2. - Datos de la instalación. Pregunta:
- el dominio (
deca.miempresa.es); - el correo técnico (Let's Encrypt avisa ahí si hay algún problema con el certificado);
- la zona horaria:
peninsula(también Baleares, Ceuta y Melilla) ocanarias. De ella dependen la hora impresa en los DeCA y el «día» del límite diario.
- el dominio (
- Comprobación del dominio: que apunta a la IP pública de este servidor. Si no, avisa y pregunta si continuar.
- Configuración: crea
/opt/madeca-mini/.envcon claves aleatorias propias de la instalación, y la memoria de intercambio si hace falta. Si el cortafuegosufwestá activo, abre los puertos 80 y 443; si no hay cortafuegos activo, no lo toca. - Imagen y arranque: carga la aplicación, crea la base de datos y arranca los servicios.
- HTTPS: espera a que el certificado esté listo y comprueba que la aplicación responde.
- Empresa y administrador. Pregunta el nombre o razón social, el NIF/CIF y el correo del administrador, y muestra su contraseña inicial.
Así queda una instalación completa (salida real en un Ubuntu 24.04 recién instalado, sin Docker, con la empresa ficticia del ejemplo y en modo de prueba local; en una instalación real aparece además el paso 4/9 Comprobación del dominio y el certificado es el de Let's Encrypt). Las líneas debconf: ... son avisos normales de los sistemas mínimos, sin importancia:
$ sudo ./madeca.sh instalar # (respuestas: dominio, correo, zona, empresa, NIF y administrador) MADeCa Mini 0.5.0 — versión totalmente gratuita obtenida de Masoft.es. Sin soporte ni garantía. Prohibida su venta y su modificación. == Condiciones de uso Aceptadas (--acepto-condiciones). == 1/9 Comprobación del servidor Sistema: Ubuntu 24.04.5 LTS Memoria: 15937 MB Disco libre: 944 GB == 2/9 Docker debconf: delaying package configuration, since apt-utils is not installed Instalando Docker desde su repositorio oficial (download.docker.com)... debconf: delaying package configuration, since apt-utils is not installed Docker instalado: Docker version 29.9.1, build dfc520d == 3/9 Datos de la instalación [AVISO] MODO PRUEBA EN RED LOCAL: certificado interno, NO vale para DeCA reales (el móvil del inspector no lo aceptaría). == 5/9 Ficheros en /opt/madeca-mini == 6/9 Configuración, memoria y cortafuegos .env creado con claves aleatorias. No hay ufw activo en el servidor: no se toca. Comprueba tu cortafuegos o router (80 y 443 hacia este servidor). Cargando la imagen (puede tardar unos minutos)... Loaded image: madeca-mini:0.5.0 == 7/9 Base de datos y arranque Base de datos preparada. Servicios en marcha. == 8/9 Comprobación HTTPS MADeCa Mini responde en https://deca.transcanarias.test (certificado de prueba) == 9/9 Empresa y administrador Empresa: TransCanarias Logística SL (B76419027) Administrador: admin@transcanarias.test Contraseña: •••••••••••••••• (aquí sale la contraseña) Guárdala ahora: no se vuelve a mostrar. Al entrar, cámbiala en «Mi cuenta». Si se pierde, se restablece con: sudo /opt/madeca-mini/madeca.sh clave admin@transcanarias.test (Copia en /opt/madeca-mini/estado/ALTA.txt, solo para root: bórrala cuando la hayas guardado.) Instalación terminada: https://deca.transcanarias.test Siguientes pasos (ver la guía): entrar con el administrador, registrar los vehículos, subir el certificado de firma si se usa y crear los usuarios. Desde ahora usa: sudo /opt/madeca-mini/madeca.sh <orden>
/opt/madeca-mini/estado/ALTA.txt, legible solo por root: bórrala cuando la tengas guardada. Si se pierde, se genera otra con sudo /opt/madeca-mini/madeca.sh clave CORREO.4.3 Comprobar
sudo /opt/madeca-mini/madeca.sh estado
Los seis servicios deben estar running: app (la aplicación), caddy (HTTPS), db (PostgreSQL), redis, hotfolder-watcher (carpeta compartida) y conectores (fuentes de datos). Después abre https://TU-DOMINIO en el navegador: debe salir la pantalla de acceso con el candado del navegador correcto.
Comprueba también desde un móvil con datos (fuera de la red de la empresa) que la dirección abre: así la verá el inspector.
4.4 Instalación desatendida
Para instalar sin preguntas (por un script de administración o un sistema de despliegue), pasa todas las respuestas como opciones. Con --acepto-condiciones se aceptan las condiciones de LICENCIA.txt:
sudo ./madeca.sh instalar --acepto-condiciones \ --dominio deca.miempresa.es --correo it@miempresa.es --zona peninsula \ --empresa "Transportes Ejemplo SL" --nif B12345678 --admin admin@miempresa.es
--prueba-local se instala con un certificado interno, sin dominio público. Sirve para ver la aplicación antes de publicarla, no para emitir DeCA reales: el navegador avisa del certificado y el móvil de un inspector no lo aceptaría.5. Configuración inicial
Las capturas de esta guía son de una instalación de prueba con TransCanarias Logística SL, una empresa ficticia: sus datos, NIF y matrículas (serie Z, aún no emitida) son inventados.
5.1 Primer acceso y cambio de contraseña
Abre https://TU-DOMINIO y entra con el correo del administrador y la contraseña inicial.

Lo primero: Mi cuenta → Cambiar la contraseña. La nueva debe tener al menos 12 caracteres; al cambiarla se cierran las demás sesiones abiertas de ese usuario.

Después se ve el Inicio: lo pendiente de revisar, lo que está en tránsito y lo que necesita atención.

5.2 Vehículos
En Vehículos se registran las cabezas tractoras y los camiones de la empresa: la «matrícula del vehículo» del DeCA (art. 6.g de la Orden FOM/2861/2012). Los remolques y semirremolques no se registran: su matrícula se escribe en cada DeCA, como siempre. Solo el administrador puede dar de alta y de baja.


5.3 Usuarios y roles
En Usuarios el administrador crea las cuentas del resto del personal. Cada persona debe tener la suya: la actividad de cada expedición registra quién hizo qué.
| Rol | Puede |
|---|---|
| admin | Todo: usuarios, vehículos, certificados, claves de API, fuentes de datos e historial. |
| operador | Emitir, modificar y dar por entregados DeCA, revisar la bandeja y exportar. |
| lectura | Consultar, sin cambiar nada. |

5.4 Certificado de firma (si se usa)
La firma electrónica avanzada solo es obligatoria en los DeCA con finalidad contractual (Apartado Cuarto). Sin certificado, el resto se emite igualmente, sin firmar. Si la empresa los necesita, sube en Certificados su certificado .p12/.pfx con su contraseña: se guarda cifrado y la aplicación avisa antes de que caduque.

5.5 Conectar el ERP por API
Si el programa de gestión puede llamar a una API, crea en Integraciones ERP una clave para él. La clave completa se muestra una sola vez: cópiala en la configuración del ERP. Se envía en la cabecera X-API-Key.

| Petición | Para qué |
|---|---|
POST /api/v1/expediciones/datos | El ERP manda los datos (JSON) y MADeCa redacta el DeCA. |
POST /api/v1/expediciones | El ERP manda su propio PDF (albarán, carta de porte) y MADeCa le estampa el QR. |
POST /api/v1/expediciones/{id}/modificaciones | Modificación durante el servicio (Apartado Quinto). |
PATCH /api/v1/expediciones/{id}/finalizar | Servicio terminado (entregado o anulado). |
GET /api/v1/expediciones/{id}/pdf y /qr.png | Copia para el conductor (PDF o solo el QR). |
POST /api/v1/borradores/documento | Un documento escaneado o una foto a la bandeja de revisión. |
La descripción completa de cada petición (especificación OpenAPI) está en https://TU-DOMINIO/openapi.json: se abre con cualquier herramienta compatible con OpenAPI, como Postman o Swagger Editor.
5.6 Carpeta compartida
Para un ERP que solo sabe dejar ficheros en una carpeta: lo que se copie en
/opt/madeca-mini/intercambio/hotfolder/incoming/ID-DE-LA-EMPRESA/generico/pdf/ # PDF + .json con los metadatos /opt/madeca-mini/intercambio/hotfolder/incoming/ID-DE-LA-EMPRESA/generico/datos/ # .json o .csv con los datos
se emite solo. Lo procesado pasa a processed/ y lo que falla, a errores/ con un fichero que explica el motivo. El identificador de la empresa lo muestra sudo /opt/madeca-mini/madeca.sh estado. Los ficheros deben pertenecer al usuario 1000 (sudo chown -R 1000:1000 /opt/madeca-mini/intercambio) para que MADeCa pueda moverlos.
5.7 Fuentes de datos
En Fuentes de datos el administrador conecta carpetas en la nube (SharePoint/OneDrive, Google Drive, Dropbox), servidores SFTP, la carpeta /opt/madeca-mini/intercambio/nas/ID-DE-LA-EMPRESA del propio servidor, o un ERP (Business Central, Odoo; SAP Business One y Holded sin verificar todavía con instalaciones reales). Los documentos que lleguen se leen y quedan en la bandeja de revisión: nunca se emite nada sin que una persona lo confirme.

FUENTES_PERMITIR_RED_PRIVADA=true en /opt/madeca-mini/.env y reinicia (sudo /opt/madeca-mini/madeca.sh reiniciar).5.8 Avisos por correo (opcional)
MADeCa puede mandar cada día a los administradores un resumen de lo que necesita atención (certificados por caducar, borradores atascados, fuentes con error). Para activarlo, quita el # de las líneas SMTP_* de /opt/madeca-mini/.env, rellénalas con los datos del servidor de correo de la empresa y reinicia.
6. La aplicación en el día a día







7. Mantenimiento
Copias de seguridad
sudo /opt/madeca-mini/madeca.sh copia
Crea en /opt/madeca-mini/copias/ un único fichero con la base de datos, los PDF, los certificados y las claves de la instalación. Llévalo fuera del servidor (otro equipo, NAS, nube) y guárdalo en lugar seguro: contiene las claves. Los DeCA deben conservarse al menos un año (Apartado Segundo.4). Para hacerla cada noche, por ejemplo a las 2:30, añade con sudo crontab -e:
30 2 * * * /opt/madeca-mini/madeca.sh copia >> /var/log/madeca-copia.log 2>&1
Las copias no se borran solas: revisa de vez en cuando el espacio de /opt/madeca-mini/copias/.
Restaurar
sudo /opt/madeca-mini/madeca.sh restaurar /opt/madeca-mini/copias/madeca-mini-20261014-200306.tar.gz
Sustituye todos los datos actuales por los de la copia (pide escribir RESTAURAR). Sirve también para pasar a otro servidor: instala allí el mismo paquete con el mismo dominio y restaura la copia.
Actualizar a una versión nueva
tar xzf madeca-mini-NUEVA.tar.gz && cd madeca-mini-NUEVA sudo ./madeca.sh actualizar
Hace antes una copia de seguridad, carga la versión nueva, conserva claves y datos, y aplica los cambios de la base de datos.
Servidor
Mantén el sistema al día (sudo apt update && sudo apt upgrade). Los servicios arrancan solos al reiniciar el servidor.
8. Referencia: órdenes y configuración
Órdenes de madeca.sh
| Orden | Qué hace |
|---|---|
| instalar | Instalación completa (desde la carpeta del paquete). |
| actualizar | Copia de seguridad y actualización (desde la carpeta del paquete nuevo). |
| estado | Servicios, versión, empresa, su identificador y uso del día. |
| alta | Alta de la empresa y su administrador, si no se hizo al instalar. |
| clave CORREO | Contraseña nueva para ese usuario (se muestra una vez; cierra sus sesiones). |
| copia | Copia de seguridad completa en /opt/madeca-mini/copias. |
| restaurar FICHERO | Restaura una copia (sustituye los datos actuales). |
| parar · arrancar · reiniciar | Para, arranca o reinicia los servicios. |
| registros [servicio] | Últimas líneas de registro (app, caddy, db...). |
| desinstalar | Quita los servicios; ofrece una copia antes y conserva los datos salvo que se escriba BORRAR DATOS. |
Opciones de «instalar»
| Opción | Descripción |
|---|---|
| --dominioobligatoria | Dominio público de MADeCa Mini. Si falta, se pregunta. |
| --correoobligatoria | Correo técnico para Let's Encrypt. |
| --zonapeninsula | peninsula o canarias. |
| --empresa, --nif, --adminobligatorias | Razón social, NIF/CIF y correo del administrador. |
| --acepto-condicionesopcional | Acepta LICENCIA.txt sin preguntar (instalación desatendida). |
| --siopcional | Continúa aunque el dominio aún no apunte al servidor. |
| --prueba-localopcional | Certificado interno, sin dominio público. Solo para probar, no para DeCA reales. |
Ajustes de /opt/madeca-mini/.env
Lo crea el instalador. Tras cambiarlo: sudo /opt/madeca-mini/madeca.sh reiniciar. No cambies las claves (APP_SECRET_KEY, JWT_SECRET_KEY, POSTGRES_PASSWORD): los certificados guardados y la base de datos dependen de ellas.
| Ajuste | Valor | Descripción |
|---|---|---|
| DOMINIO / APP_BASE_URL | el dominio | Dirección pública. Va dentro de cada QR: no se cambia con DeCA vigentes. |
| ZONA_HORARIA | Europe/Madrid o Atlantic/Canary | Hora de los DeCA y día del límite diario. |
| RETENTION_DAYS | 365 | Días que se conservan los DeCA (mínimo legal: un año). |
| PUBLIC_URL_DEACTIVATION_DAYS | 7 | Días tras el fin del servicio en que la URL del QR deja de descargar (Apartado Tercero.5). |
| FUENTES_PERMITIR_RED_PRIVADA | false | Permite que las fuentes de datos apunten a la red interna. |
| OCR_SIMULTANEOS | 1 | Documentos que se leen a la vez. Súbelo solo con más núcleos. |
| SMTP_HOST, SMTP_PUERTO, SMTP_USUARIO, SMTP_CLAVE, SMTP_REMITENTE | opcional | Servidor de correo para los avisos diarios. SMTP_SEGURIDAD: starttls (por defecto), ssl o ninguna. |
9. Ejemplos
Emitir un DeCA desde el ERP (MADeCa redacta el PDF)
curl -X POST https://deca.miempresa.es/api/v1/expediciones/datos \ -H "X-API-Key: mad_live_..." -H "Content-Type: application/json" \ -d '{ "referencia_externa": "ALB-2026-001", "cargador": {"nombre_razon_social": "Cargador Ejemplo SL", "nif_cif": "B12345674", "domicilio": "Calle Industria 14, 28001 Madrid"}, "transportista": {"nombre_razon_social": "Transportes Ejemplo SL", "nif_cif": "B87654323"}, "origen_direccion": "Calle Industria 14, 28001 Madrid", "destino_direccion": "Polígono Sur, parcela 4, 41001 Sevilla", "mercancia": {"naturaleza": "Palés de material eléctrico", "peso_kg": 850.5}, "fecha_transporte": "2026-10-15T08:00:00+02:00", "matricula_vehiculo": "1234BBC" }' # 201: devuelve el id y la url_publica del QR. # 422: datos que faltan o no válidos (o, en la Mini, vehículo no registrado). # 429: en la Mini, ya se han emitido hoy los 30 DeCA.
Estampar el QR en el PDF del ERP
curl -X POST https://deca.miempresa.es/api/v1/expediciones -H "X-API-Key: mad_live_..." \ -F referencia_externa=ALB-2026-002 -F matricula_vehiculo=1234BBC \ -F fecha_transporte=2026-10-15T08:00:00+02:00 -F archivo=@albaran.pdf
Ver el estado y el uso del día
sudo /opt/madeca-mini/madeca.sh estado (antes, la tabla de servicios) MADeCa Mini 0.5.0 Empresa: TransCanarias Logística SL (B76419027) · usuarios: 3 · DeCA emitidos: 16 Id de la empresa: 1189e380-6bee-471b-a711-0da0cc3783bf # el de la carpeta compartida Hoy: 16 de 30 DeCA · vehículos: 3 de 3 Dirección: https://deca.transcanarias.test
Un usuario ha olvidado su contraseña
sudo /opt/madeca-mini/madeca.sh clave trafico@miempresa.es
10. Resolución de problemas
| Problema | Causa probable | Solución |
|---|---|---|
| El instalador dice que el servidor no es x86_64 | Servidor ARM | Usa un servidor Intel/AMD: la imagen solo existe para x86_64. |
| «El puerto 80 ya lo usa otro programa» | Apache, nginx u otro servicio web en el servidor | Usa un servidor solo para MADeCa Mini o para ese servicio. |
| Instalado, pero la dirección no abre o el navegador avisa del certificado | El dominio no apunta al servidor o el puerto 80/443 no llega desde internet; Let's Encrypt no pudo emitir el certificado | Comprueba el registro A y el reenvío de puertos del router; mira madeca.sh registros caddy. Al corregirlo, Caddy lo reintenta solo. |
| Abre en la oficina pero no desde el móvil con datos | Solo funciona en la red interna (DNS interno, sin reenvío de puertos) | El inspector accede desde internet: publica el dominio y los puertos. |
| «No está entre los vehículos registrados» | Mini: la matrícula del vehículo no está en «Vehículos» | Regístrala (hasta 3) o revisa que esté bien escrita y con su país. |
| «Ya se han emitido hoy los 30 DeCA» | Límite diario de la Mini | Lo pendiente sigue en la bandeja para mañana. Si hace falta más, versión completa. |
| La API responde 401 | Clave de API mal copiada o revocada | Crea otra en «Integraciones ERP» (solo se muestra una vez). |
| Un DeCA con finalidad contractual da error | No hay certificado de firma activo y vigente | Sube el certificado en «Certificados» (Apartado Cuarto). |
| Los ficheros de la carpeta compartida no se procesan | Ruta incorrecta o permisos | Revisa la ruta con el identificador de estado y ejecuta chown -R 1000:1000 /opt/madeca-mini/intercambio. Mira errores/. |
| Un documento de la bandeja aparece sin datos | Escaneo ilegible o fichero dañado | El motivo está en el borrador: rellena los datos a mano o vuelve a escanearlo. |
| «Hubo MADeCa Mini X, más nueva que este paquete» o «no se puede volver atrás» | Se intenta instalar o actualizar con un paquete más antiguo que el de los datos del servidor | Usa el paquete de la versión instalada o una posterior: la base de datos de una versión nueva puede no valer con una anterior. |
| Se perdió la contraseña del administrador | — | sudo /opt/madeca-mini/madeca.sh clave CORREO. |
La aplicación no arranca (app no está running) | Base de datos aún arrancando, o disco lleno | madeca.sh registros app; comprueba el espacio con df -h. |
11. Aviso legal
- Quien la instala y la usa es responsable de su servidor, de su seguridad, de las copias de seguridad y de mantenerlo disponible para que los inspectores puedan descargar los DeCA.
- Es responsable de los datos de cada DeCA y del cumplimiento de la normativa de transporte: Orden FOM/2861/2012 y Resolución de 5 de junio de 2026 de la Dirección General de Transporte por Carretera y Ferrocarril (BOE-A-2026-12784), incluida la conservación de los DeCA durante al menos un año.
- Es el responsable del tratamiento de los datos personales que guarde (Reglamento (UE) 2016/679). Masoft.es no accede a la instalación ni a sus datos.
- Exención de responsabilidad: en la medida en que la ley lo permita, Masoft.es no responde de ningún daño o perjuicio derivado de la instalación, el uso o la imposibilidad de usar MADeCa Mini (pérdida o alteración de datos, interrupciones, DeCA no emitidos o no disponibles para la inspección, sanciones administrativas o pérdida de beneficios).
- Prohibida su venta: no se puede vender, alquilar ni cobrar por ella, sola o dentro de otro producto o servicio.
- Prohibida su modificación: no se puede modificar, descompilar ni desensamblar, ni intentar saltarse sus límites (salvo en los casos que la ley permita expresamente), ni quitar los avisos de versión gratuita o de autoría, ni distribuirla como propia.
- Las referencias a la normativa de esta guía son orientativas: no sustituyen al texto oficial publicado en el BOE ni al asesoramiento profesional.
Condiciones completas en LICENCIA.txt y en la página «Acerca de» de la aplicación.