Synaplan
开源 AI 软件平台,面向企业:自托管 AI 代理,符合 GDPR 的聊天机器人小部件,RAG 知识库,WhatsApp 与 Outlook AI,MCP,多模型路由。支持 Docker、Kubernetes 或在 Germ 托管。
AI 翻译
Proyecto portfolio: MES para plantas que transforman bobinas de acero. Sabe qué bobina se gasta en cada orden, calcula los kilos que quedan a partir del radio y bloquea el material equivocado. Hecho p
翻译准备中
商业Python · TypeScriptGitHub @kavanasystemsinfo-ui在线运营者未确认
试用过了吗? 点一下就好,无需登录。
尚未检测到更新。GitHub 发布版本后会显示在这里。
个人 GitHub 账号下公开仓库的所有者可以登录并验证所有权,自行管理介绍,无需管理员批准。
登录并生成验证文件,在 30 分钟内将其提交到此仓库的默认分支。其他分支或分叉仓库中的文件无效。然后在下方检查文件,即可无需管理员批准直接管理项目。请保留文件以维持管理权限。
如需登录,将前往登录页面。登录后请回到此处,再次点击所选的验证按钮。
在项目文件夹中运行 /nomorevibe verify,即可验证所有权并自行管理介绍。
一分钟完成验证MES especializado en metalurgia: gestión de la producción en perfiladoras y transformación de bobina de acero, de la recepción de la bobina a la orden terminada. Demo con una planta de ejemplo.
翻译准备中
取自仓库 README
正在加载完整 README。
查看完整 README ↗MES/MOM para el sector metalúrgico: control de bobinas de acero, consumo FIFO, reconciliación industrial, OEE, calidad y trazabilidad ISO 9001. Desplegado en producción como demo (Fly.io + Vercel) y construido con desarrollo guiado por tests en las partes críticas (dominio, seguridad y concurrencia).
Este repo es la reconstrucción moderna (v4) de un sistema legacy. La lógica de dominio única (bobinas, FIFO, reconciliación) proviene de años de experiencia real en planta, y se portó a un stack moderno con TDD, ADRs y despliegue profesional.
Este sistema nació en el suelo de la fábrica, de 8 años trabajando como operario en fábricas metalúrgicas (CNC, turnos, empresas medianas y grandes). Nadie lo diseñó en un despacho: lo diseñó alguien que vivió la pérdida de tiempo del papel, los Excel que no cuadraban y los sistemas que se enteraban de lo que pasaba en planta horas o días después.
Es un MES (Manufacturing Execution System) con alcance MOM, especializado en la transformación de bobinas de acero. Cubre las 4 actividades de operaciones del estándar ISA-95: producción, calidad, mantenimiento e inventario. No es un ERP: no gestiona finanzas ni recursos de la empresa, su frontera es la planta.
ADR-001: clasificación del sistema
| Capa | Tecnología |
|---|---|
| Backend | Python + FastAPI + WebSockets |
| Base de datos | PostgreSQL (Alembic) |
| Frontend | React + TypeScript (Vite) |
| Tests | pytest + Vitest |
| Despliegue | Fly.io (backend) + Vercel (frontend) + GitHub Actions |
✅ Reconstrucción completa por fases (0-7). Backend en
steelworks-api.fly.dev con PostgreSQL
gestionado (migraciones + seed demo en el entrypoint) y frontend en Vercel
(steelworks.kavanasystems.com) con
rewrites /api/*. CI verde en cada push: ruff + pytest + migraciones + build
TS + vitest.
Motor FIFO de bobinas: cascada por fecha de entrada con burbuja de
vinculación, herencia entre bobinas, JIT Move y tolerancia de superávit
max(15%, 150kg).
Reconciliación industrial: retales medidos en milímetros de radio, merma oculta entre lo que el FIFO cree y lo que pesa la báscula, coste real por lote.
Fin de bobina: el operario mide el radio en mm y el sistema calcula kg con densidad calibrada (7.7807 kg/dm³). Botón Retirar devuelve picos como sugerencia, nunca imposición.
OEE y KPIs: disponibilidad, rendimiento y calidad con datos reales; sin datos muestra 0, nunca inventa.
Trazabilidad ISO 9001: ProductionLog inmutable (trigger de UPDATE/DELETE) y timeline en el panel Supervisor.
Autocontroles de calidad e incidencias de planta con evidencia fotográfica desde el móvil (sesión QR + validación magic bytes).
WebSockets de planta (ADR-014) con fallback a polling.
Auth JWT 8h con roles (operario, materiales, supervisor, admin) y administración multi-tenant (Fase 7): usuarios, secuencias, puestos, roles.
233+ tests backend (pytest, incluye E2E contra PostgreSQL real y tests de aislamiento cross-tenant) + 71 frontend (vitest), ejecutados en CI.
Asistentes IA con RAG sobre la documentación real (2 bots sobre el mismo
corpus): bot de usuario (POST /api/v1/assistant/ask) que explica el
producto desde el punto de vista de planta, y asistente técnico para
reclutadores (POST /api/v1/assistant/ask-tech) que responde arquitectura,
decisiones (ADRs), seguridad y limitaciones documentadas. TF-IDF en memoria +
OpenRouter; regla de honestidad: si no está en la documentación, lo dice.
Métricas verificables: los números reales se mantienen al día en el changelog
docs/audit/changelog.md.
Este repo es una pieza de portafolio con un solo usuario real: su autor, y está construido para costar ~0 €/mes. Esa restricción no es un detalle de infraestructura: ha decidido el transporte de eventos, dónde viven las fotos, el motor de búsqueda de los asistentes y el tamaño de la máquina. Aquí está cada partida con lo que hay hoy, el porqué y qué cambiaría con usuarios reales y presupuesto. El detalle completo, con alternativas descartadas, está en ADR-017.
cpu_kind = "shared" de 1
CPU y 256 MB con min_machines_running = 0 y auto_stop_machines = "stop",
es decir, se apaga cuando nadie la usa (fly.toml). Con usuarios reales:
réplicas mínimas fijas para eliminar el arranque en frío, más memoria y un
entorno de staging separado de la demo.EventBroker vive en memoria del proceso, así que
el push de WebSockets funciona dentro de una única instancia (ADR-014,
ADR-016). Con usuarios reales: Redis Pub/Sub o PostgreSQL LISTEN/NOTIFY detrás
de la misma interfaz publish/subscribe/consume, sin tocar el dominio ni los
clientes.alembic upgrade head y el seed demo idempotente se
ejecutan en el entrypoint del contenedor (backend/docker-entrypoint.sh), que
es suficiente con una instancia. Con usuarios reales: mover las migraciones a
un flyctl release_command y dejar el seed solo para la demo.incidencias.foto_data), sin Cloudinary ni almacenamiento de objetos: el
legacy usaba Cloudinary y no se portó. Con usuarios reales: object storage +
CDN y liberar esos bytes de la base de datos, conservando el flujo de sesión
de un solo uso por QR.:free; los contadores anti-abuso (15 preguntas/día por IP y 500
caracteres por pregunta) también viven en el proceso. Con usuarios reales:
embeddings con pgvector o un índice gestionado, y rate limit en un almacén
compartido para que valga con varias instancias.<rol>@demo.local, password kavana)
sobre datos ficticios; SECURITY.md dice explícitamente que no debe
desplegarse con datos reales. Con usuarios reales: identidad corporativa
(SSO/IdP), MFA, secretos por entorno y retirada de las cuentas de demo.Lo que no cambia entre los dos escenarios es el dominio y su verificación:
la cascada FIFO con burbuja de vinculación, la conversión radio→kg con densidad
calibrada (7.7807 kg/dm³), la guardia de seguridad max(15%, 150kg) antes de
descontar stock, el ProductionLog inmutable por trigger de PostgreSQL, la
validación de material por características (±2 mm de ancho, ±10 % de espesor) o
el aislamiento por tenant resuelto desde el JWT son decisiones de ingeniería,
no de factura; con un usuario o con cincuenta se implementan igual. Tampoco
cambian las specs extraídas del legacy, los ADRs, el changelog por fases ni la
suite de tests que los respalda: eso es lo que se puede verificar leyendo el
repositorio. Lo que sí cambiaría con presupuesto está escrito arriba y en
ADR-017, no escondido.
docs/audit/changelog.md para el detalle por
fase y docs/decisions-log.md para decisiones.backend/e2e_*.py/health/live/health/ready