Associated

Associated

ERP Ligero para Colectividades Españolas

Trabajo de Fin de Máster - Big School 2026

Requisitos, bounded contexts, casos de uso, decisiones arquitectónicas... Una especificación trazable de extremo a extremo.

El Problema

Más de 300.000 entidades en España - asociaciones, clubes deportivos, federaciones, colegios profesionales - gestionan sus operaciones diarias con hojas de cálculo, papel y herramientas genéricas no adaptadas a su realidad normativa y organizativa.

Gestión con Excel y papel

Hojas de cálculo compartidas, actas en Word, listados impresos. Sin integridad referencial ni histórico fiable.

Sin cumplimiento RGPD real

Datos personales en ficheros locales sin cifrado, sin control de acceso, sin trazabilidad de consentimientos.

Remesas SEPA manuales

El tesorero genera ficheros XML a mano o con herramientas genéricas. Errores frecuentes, sin conciliación automática.

Software genérico o legacy

ERPs diseñados para empresas, no para colectividades. Funcionalidades innecesarias, carencias específicas, costes elevados.

La Solución

Associated es un ERP ligero multi-tenant diseñado específicamente para colectividades españolas. Seis módulos funcionales cubren el ciclo completo de gestión: desde el alta de un socio hasta la generación de remesas SEPA y la comunicación con los miembros.

Acceso y Seguridad

Multi-tenant, roles, autenticación

Gestión de Socios

Fichas, estados, tipos, años fiscales

Tesorería

Cuotas, cobros, remesas SEPA, contabilidad básica

Eventos y Actividades

Programación, inscripciones, asistencia

Comunicaciones

Email, notificaciones, plantillas

Documentación

Repositorio, actas, archivos

Proceso de Ingeniería

La Cadena de Trazabilidad

32.600 líneas de especificación y ~1.800 referencias cruzadas garantizan que cada decisión técnica se puede rastrear hasta el requisito de negocio que la origina.

Cadena de trazabilidad

RF221

Requisitos Funcionales

003_requisitos-funcionales.md

¿QUÉ necesita el negocio?

RNF66

Requisitos No Funcionales

004_requisitos-no-funcionales.md

¿Cómo debe comportarse?

BC6 BCs

Modelo de Dominio

005_modelo-dominio.md

¿Dónde vive en el dominio?

ADR12

Decisiones Arquitectónicas

006_decisiones-arquitectonicas.md

¿Por qué esta decisión?

Stack

Stack Tecnológico

007_stack-tecnologico.md

¿Con qué herramientas?

RNFT~40+

RNF Técnicos

007b_rnf-tecnicos.md

¿Cómo se implementa?

US202

User Stories

009_user-stories.md

¿Quién hace qué?

UC76

Casos de Uso

010_casos-de-uso.md

¿Cuál es el flujo completo?

Ejemplo: Trazabilidad de "Remesas SEPA"

RFN4RF17 "Remesas SEPA"
RNFRNF-018 "Rendimiento en operaciones masivas"
RNFTRNFT-018 "Prisma Batch + Bull Queue"
ADRADR-004 "Domain Events" + ADR-009 "Capas"
BCBC-Treasury → Aggregate: SepaRemittance
USUS-047, US-048, US-049 "Como Tesorero, quiero generar remesa SEPA"
UCUC-023 "Generación Remesa SEPA"

Documentos de especificación

CódigoDocumentoItemsPregunta
RFRequisitos Funcionales221¿QUÉ necesita el negocio?
RNFRequisitos No Funcionales66¿Cómo debe comportarse?
BCModelo de Dominio6¿Dónde vive en el dominio?
ADRDecisiones Arquitectónicas12¿Por qué esta decisión?
StackStack Tecnológico-¿Con qué herramientas?
RNFTRNF Técnicos~40+¿Cómo se implementa?
USUser Stories202¿Quién hace qué?
UCCasos de Uso76¿Cuál es el flujo completo?

Arquitectura

Domain-Driven Design

Monolito modular con 6 Bounded Contexts alineados al dominio. Comunicación entre contextos mediante Domain Events in-process con patrón Outbox, preparado para evolucionar a microservicios.

MembershipCommunication
MembershipTreasury
TreasuryCommunication
EventsCommunication

Áreas transversales

Import/ExportReportingPortal del SocioCumplimiento Normativo

Decisiones Arquitectónicas (ADRs)

12 Architecture Decision Records documentan cada decisión técnica significativa: el contexto que la motivó, las alternativas evaluadas, la decisión tomada y sus consecuencias positivas y negativas.

Stack Tecnológico

Cada tecnología del stack está justificada en el documento de especificación. Sin decisiones por popularidad - cada elección responde a un requisito concreto o a una decisión arquitectónica documentada.

Backend

NestJS

Framework backend

Node.js 22 LTS

Runtime

Prisma

ORM

Passport + JWT

Autenticación

Argon2

Hashing de contraseñas

Frontend

React 19

UI Library

Vite

Bundler/Dev Server

Mantine UI

Component Library

React Hook Form + Zod

Formularios y validación

TanStack Query

Server State

React Router

Routing

Infraestructura

PostgreSQL 18

Base de datos

MinIO

Object Storage

Docker Compose

Desarrollo local

GitHub Actions

CI/CD

Testing

Vitest

Test runner

Playwright

E2E Testing

Observabilidad

Sentry

Error tracking

MVP - Lo Implementado

19 de 76 casos de uso (25%), distribuidos en 3 fases de entrega. La selección prioriza las tres áreas que hacen operativo el sistema: identidad, gestión de socios y tesorería.

Alcance del MVP

Identity
3 de 5 UCs - 60%
Membership
6 de 10 UCs - 60%
Treasury
7 de 11 UCs - 64%
Transversal
3 de 21 UCs - 14%
Events
0 de 11 UCs - 0%
Communication
0 de 9 UCs - 0%
Documents
0 de 8 UCs - 0%
19/76
Casos de uso
37
Tareas
3/6
Áreas core
3+1
Fases

Estrategia de Fases

0
Scaffold

Infraestructura base, entorno de desarrollo, pipelines de calidad

1
Fase 1

Cimientos + operativa diaria mínima: alta socios, cuotas, cobros

18 tareas
Backend 12 (67%)Frontend 6 (33%)
UC-001UC-002UC-008UC-010UC-007UC-006UC-011UC-013UC-017UC-018UC-019UC-021
2
Fase 2

Capacidades avanzadas: roles, SEPA, importación masiva

13 tareas
Backend 5 (38%)Frontend 8 (62%)
UC-004UC-020UC-056UC-023UC-024
3
Fase 3

Dashboard, gráficos de evolución, administración avanzada

6 tareas
Backend 2 (33%)Frontend 4 (67%)
UC-064UC-065UC-001*UC-010*

Capas de Implementación

Cada capa solo depende de capas anteriores. Dentro de cada capa, los UCs son paralelos.

0
Fundación
UC-001UC-002
1
Configuración
UC-004UC-008
2
Operativa básica
UC-010UC-006UC-017
3
Operativa core
UC-011UC-007UC-018
4
Flujo económico
UC-019UC-020UC-021
5
SEPA
UC-023UC-024
6
Procesos avanzados
UC-013
7
Utilidades
UC-056UC-064UC-065

Ruta crítica: UC-001 → UC-008 → UC-017 → UC-018 → UC-019 → UC-023 → UC-024 (7 nodos)

Identidad de Marca

Associated no es solo codigo. Para ser tomado en serio por las mas de 300.000 asociaciones españolas, necesita una identidad profesional que transmita confianza, funcionalidad y pertenencia cultural.

Concepto del Isotipo

Isotipo de Associated

El isotipo fusiona una “A” con siluetas humanas abstractas conectadas en red, representando el concepto de asociacion y comunidad.

#27343E
Seriedad, confianza
#5B7682
Cercanía, accesibilidad

Variantes del Logo

Isotipo - color
Isotipo - blanco
Isotipo
Horizontal - color
Horizontal - blanco
Horizontal
Stacked - color
Stacked - blanco
Stacked

Paleta de Color

10 tonos derivados del brand primary, de claro a oscuro

50
100
200
300
400
500
600
700
800
900
Success
#40c057
Operaciones exitosas
Error
#fa5252
Errores y alertas criticas
Warning
#fab005
Advertencias
Info
#228be6
Informacion contextual

Principio de Color: 90 / 8 / 2

Funcionalidad sobre decoracion. Personalidad discreta. Sin emojis en notificaciones.

90% Neutrals
90% Neutrals
Fondos, bordes, texto. La base funcional.
8% Brand
Acentos, CTAs, elementos de identidad.
2% Semantic
Solo success, error, warning, info.

Tipografia

Inter
Tipografia principal. Limpia, geometrica, altamente legible.

Bold 700

Semibold 600

Regular 400

Aa Bb Cc Dd Ee Ff Gg Hh Ii Jj Kk 0123456789

JetBrains Mono
Para codigo y datos. Monoespaciada, distingue claramente 0/O, 1/l/I.

Bold 700

Regular 400

const fee = member.quota * 0.21;

0O 1lI {}[]()

Soporte Dark Mode

Paleta oscura personalizada derivada de #27343E, no el dark generico de Mantine. La identidad de marca se mantiene en ambos esquemas.

Light mode
Light
Dark mode
Dark

Cifras y Escala

0
Líneas de especificación
~0
Referencias cruzadas
0
Requisitos funcionales
0
Requisitos no funcionales
0
User Stories
0
Casos de uso
0
Decisiones arquitectónicas
0
Bounded Contexts
0
Matrices de trazabilidad
0
Documentos de especificación

Distribución por volumen

Casos de Uso
15.315(48%)
User Stories
7726(24%)
Requisitos Funcionales
2433(7%)
Modelo de Dominio
1991(6%)
RNF Técnicos
1850(6%)
Requisitos No Funcionales
1412(4%)
Stack Tecnológico
1100(3%)
ADRs
799(2%)

Claude Code como Herramienta de Ingeniería

Claude Code se utilizó como co-piloto de especificación - no como generador de código. El autor dirige, define criterios y valida; la IA ejecuta tareas repetitivas de redacción, formateo y verificación de consistencia entre documentos.

Autor
Claude Codecon skills
Especificación(.md)

doc-spec-generator

Generación y actualización de documentos de especificación siguiendo las convenciones del proyecto

doc-spec-manager

Navegación y consulta de la especificación con trazabilidad entre documentos

Estrategia de Despliegue

De local a producción en un solo comando

Pipeline de despliegue reproducible y automatizado. Docker multi-stage, registro privado en GHCR, migraciones seguras con contenedores efímeros y verificación post-deploy automática.

Pipeline de despliegue

Build

Docker multi-stage build local

Push GHCR

Imagen al GitHub Container Registry

Pull en VPS

SSH + docker compose pull

Migrations

Contenedor one-shot con Prisma

Verificación

Script de post-deploy automático

Topología en producción

IONOS VPS - Ubuntu 24.04
nginx (host)

Reverse proxy + SSL termination (Let's Encrypt)

Docker Compose
nginxFrontend SPA
NestJSAPI REST
PostgreSQL 18Base de datos

Stack de despliegue

Docker + ComposeContainerización y orquestación local
GitHub Container RegistryRegistro de imágenes privado
nginx 1.27Reverse proxy + SSL + SPA serving
PostgreSQL 18-alpineBase de datos relacional
Node.js 22Runtime de la API (NestJS)
PrismaMigraciones de esquema
IONOS VPSUbuntu 24.04 · 4 cores · 8 GB RAM · 240 GB SSD

Características clave

Deploy en un comando

./scripts/deploy.sh --tag v1.0.0

Verificación post-deploy

Script automatizado que valida health, respuestas y SSL

SSL / HTTPS

Certificados Let's Encrypt gestionados por Certbot

Multi-stage builds

Imágenes optimizadas: build → prune → runtime

Migraciones one-shot

Contenedor efímero para cambios de esquema seguros

Seguridad

Red interna Docker

Contenedores sin puertos expuestos al host

nginx como escudo

Reverse proxy protege los contenedores internos

Secrets en .env

Credenciales nunca incluidas en las imágenes

Acceso solo por SSH key

Sin password, autenticación por clave pública

Conclusiones y Futuro

Lo conseguido

  • Especificación exhaustiva y trazable de un ERP completo para colectividades españolas
  • Arquitectura DDD con monolito modular preparado para evolucionar
  • MVP funcional con scaffold completo, multi-tenant, autenticación y primeros flujos
  • Proceso de ingeniería documentado con IA como herramienta de productividad

Próximos pasos

  • Completar la implementación de los Bounded Contexts core (Membership, Treasury)
  • Integración con pasarelas de pago y generación real de remesas SEPA
  • Portal de autoservicio para socios
  • Beta con colectividades reales para validación de producto