Generador Inteligente de Documentos · Arquitectura del Sistema
tenant_id en los claims.
| Método | Ruta | Descripción | Estado |
|---|---|---|---|
| POST | /api/auth/register |
Crear tenant + usuario → devuelve JWT | ✅ |
| POST | /api/auth/login |
Iniciar sesión → devuelve JWT | ✅ |
| Método | Ruta | Descripción | Auth | Estado |
|---|---|---|---|---|
| GET | /api/plantillas |
Lista plantillas del tenant | 🔐 | ✅ |
| GET | /api/plantillas/{id} |
Obtiene una plantilla | 🔐 | ✅ |
| POST | /api/plantillas |
Sube .docx (multipart) | 🔐 | ✅ |
| DELETE | /api/plantillas/{id} |
Elimina plantilla | 🔐 | ✅ |
| POST | /api/plantillas/{id}/procesar |
Reemplaza {claves} y descarga | 🔐 | ✅ |
{
"valores": {
"cliente": "Juan Pérez",
"fecha": "15/09/2026",
"monto": "$50,000"
}
}
MachotesDB).
Cada registro lleva un tenant_id (UUID) y todas las consultas incluyen
WHERE tenant_id = @actual. Cuando un cliente crezca, se le puede migrar
a su propia DB sin cambiar la interfaz (ver plan abajo).
Cuando un tenant (ej. Cliente Beta) crezca lo suficiente, se le asigna su propia DB sin downtime y sin que el cliente lo note.
beta_db) y aplicar migracionesINSERT ... WHERE tenant_id = '...'TenantDatabases: { "beta-id": "Beta" } en configuración// AppDbContext elige conexión según el tenant
var dbKey = config[$"TenantDatabases:{tenant.TenantId}"];
_connectionString = dbKey != null
? config.GetConnectionString(dbKey)
: config.GetConnectionString("Default");
| Fase | Descripción | Estado |
|---|---|---|
| Fase 1 | Blazor Server — subir, listar, procesar (en memoria) | ✅ Completo |
| Fase 2 | API REST separada + Blazor consumidor via HttpClient | ✅ Completo |
| Fase 3 | PostgreSQL + EF Core — persistencia de metadatos | ✅ Completo |
| Fase 4 | Autenticación JWT + multi-tenancy (DB compartida + tenant_id) | ✅ Completo |
| Fase 5 | Agente de IA — tool use, lenguaje natural | 🚀 Futuro |
| Fase 6 | Despliegue: API en Dokploy / Blazor en servidor Windows | 🚀 Futuro |
OpenXML recorre párrafo por párrafo, une texto partido en múltiples
<w:t>, reemplaza {clave} y devuelve el
resultado. Incluye headers y footers. Si encuentras una llave vacía
sobrante la elimina para evitar que Word pida reparar.
Todos los clientes comparten la misma base de datos. El aislamiento
se garantiza por código: cada consulta incluye
WHERE tenant_id = @actual. Carpeta de archivos separada
por tenant (Uploads/{tenantId}/).
El usuario describe en lenguaje natural qué documento necesita. El agente elige la plantilla, extrae valores y genera el JSON automáticamente. Fase futura.
github.com/romeroipmyp-dev/Machotes-v2
UI Blazor Server, páginas consumidoras.
📚 Documentación aquí — Docs/Arquitectura.md
github.com/romeroipmyp-dev/Machotes-API
API REST con endpoints CRUD + procesar.
📎 Docs → enlace en Readme.md