Imported from Cristhian-S1/ondina-erp (
AGENTS.md). Install upstream withnpx skills add Cristhian-S1/ondina-erp. Copyright stays with the author.
Guía Del Agente Ondina
Estado Actual Del Repositorio
- El repo contiene documentación, esquemas SQL, una aplicación frontend funcional en
frontend/(React + Vite + TypeScript), migraciones versionadas ensupabase/migrations/(0001 a 0010), CI/CD con GitHub Actions (.github/workflows/),frontend/vercel.jsony pruebas ejecutables (lint,build,test). - Las migraciones se aplican manualmente con
supabase db push --linkedo vía Supabase MCP (no automatizadas en CI). Verdocs/setup-vercel-supabase-github.mdpara el flujo completo de configuración de Vercel, Supabase y GitHub. - El frontend requiere variables de entorno
VITE_SUPABASE_URLyVITE_SUPABASE_ANON_KEY; existefrontend/.env.examplecomo plantilla. - El módulo de ventas cubre HU-01 a HU-04, HU-07, HU-08 (ranking de vendedores) y HU-09 (consulta de comisión). HU-05 (bidones vacíos) se eliminó del frontend; la vista
v_bidones_vacios_vendedorqueda en la BD para bodega/HU-28. HU-06 (boletas/factura) y Storage upload para receipts (HU-07) están fuera de scope este sprint. - Fixes HU-01 (2026-08-17): productos duplicados deshabilitados dinámicamente en RegistrarVenta (captura del return de
register()para no pisar elonChangede RHF); columna Disponible se actualiza instantáneamente al seleccionar producto; cantidad 0 permitida en validación Zod (.min(0)en vez de.positive()) y filtrada enonSubmit; sidebar sin dual-highlight en/ventas/registrar(NavLinkenddinámico para rutas padre con sub-rutas). - Mejoras HU-01/HU-02/HU-07 (2026-08-21): consenso de UI con
errorTextCls/errorBlockCls/inputErrorClsenlib/ui.ts; Toast unificado (verde éxito, rojo error) en RegistrarVenta, Gastos y RegistrarCliente; máximo 6 productos por venta con botón deshabilitado; Toast rojo al submit sin productos válidos; tabla responsive con CSS single-view (tarjetas en móvil <640px sin duplicar RHF); responsividad en todas las páginas de ventas (375px y 768px);docs/convenciones-frontend.mdcon reglas de mensajes, errores, Toast y comentarios. - Fix compatibilidad Zod v4 (2026-08-21): upgrade
@hookform/resolversv3.10.0 → v5.9.1. Causa raíz: v3 detectabaZodErrorviaerror.errorspero Zod v4 renombró a.issues, causandoUncaught ZodErrory mensajes de validación invisibles. v5 detectaZod4Errorcorrectamente. Tiposz.inputagregados a schemas para separar input (concoerceunknown) de output (con number). - Formato miles vivo + inputs vacíos (2026-08-22): nuevo
frontend/src/lib/format.tsconformatMiles/parseMiles/formatMilesInput(es-CL→1.000). Ventas: DISPONIBLE/CANTIDAD/PRECIO/DESCUENTO con formato vivo, CANTIDAD vacía (placeholder"",0→""), schemas conz.preprocess(parseMilesInput)para parsear"1.000"→1000. Gastos: Monto CLP solo números con formato vivo. Despacho: Nuevo despacho cantidades/bandejas vivo + Stock UNIDADES formateado. Producción: Registrar Cantidad/Incidencias vivo + columnas Productos recientes/Historial/Indicadores/Envases vacíos/Mermas recientes conformatMiles. Build 911KB, 99 tests. - Fixes HU-03 (2026-08-17):
obtenerCargaVendedorusa aliasproducto:productos()para que el nombre llegue correctamente; Carga.tsx y Ventas.tsx filtran items concantidad === 0. - Fix HU-09 (commit 027cc22 de Laoch-11):
obtenerCantidadVentasJornadacuenta ventas reales del día en vez de sumarventas_del_tipode la vista de comisión. - El módulo de bodega cubre HU-13 (despachos, devoluciones de productos y envases, stock). El módulo de producción cubre HU-19 a HU-23.
- Se agregó Mantine UI (
@mantine/core,@mantine/dates,@mantine/hooks) +dayjspara componentes complejos como MonthPickerInput (selector de mes en ranking). El resto del frontend sigue con Tailwind CSS. - Tests: 99 total (ventas 29, bodega 29+4, producción 34) en 15 archivos. Ver
docs/estado-historias-usuario.mdpara el detalle por HU. - Los datos de la base local de Beads viven en
.beads/; se reinicializó el tracker con prefixONDel 2026-08-17.config.yamltienerepos.primary = "."ysync.remoteconfigurado. - Los archivos
.agents/skills/contienen las skills de trabajo (ask-matt, codebase-design, supabase, etc.) y deben versionarse; no se deben borrar en merges entre ramas.
Fuente De Verdad
README.mdydocs/son la fuente principal de alcance, ramas, convenciones, y modelos. LeeREADME.mdantes de tocar código o SQL.docs/Plan De Desarrollo.mddocumenta el alcance y el stack elegido.docs/Problematica.md,docs/Requerimentos RF y RNF.mdydocs/Historias de Usuario.mdcontienen requisitos del negocio. Trata lo pendiente en las notas como no resuelto.- No existe
AGENTS_para_equipo_desarrollo.md(referenciado enREADME.md). No lo busques; la convención real de código/Git/seguridad está enREADME.mdyAGENTS.md. - Para el estado detallado de cada HU (completas, parciales, placeholders, sin UI), ver
docs/estado-historias-usuario.md. Resumen: 16 completas, 3 parciales, 4 placeholders (administración), 4 sin UI, 2 eliminadas.
Frontend
Comandos reales (en frontend/, se necesita Node 22+):
npm install
npm run dev # servidor de desarrollo Vite
npm run build # tsc -b && vite build
npm run lint # eslint .
- TypeScript estricto con
noUnusedLocals,noUnusedParameters,erasableSyntaxOnly, yverbatimModuleSyntax. Usaimport typepara imports solo de tipos (obligatorio porverbatimModuleSyntax). - Los dominios se componen como módulos en
frontend/src/domains/index.tsy cada uno expone unDomainModule. La lógica de tu dominio debe quedar enfrontend/src/domains/<dominio>/, no fuera. - No accedas a Supabase desde componentes de presentación; usa el cliente compartido en
frontend/src/lib/supabase.tsy los servicios de cada dominio. - Componentes en
PascalCase, hooksuseCamelCase, utilidadescamelCase, carpetaskebab-case, mensajes al usuario en español. - Convenciones de UI y comentarios: ver
docs/convenciones-frontend.mdpara reglas de mensajes de validación, errores, Toast y comentarios de código. Resumen: usarerrorTextCls/errorBlockCls/inputErrorClsdelib/ui.tspara todos los errores (no strings inline). Toast verde en éxito, rojo en error. Comentarios//en español explicando el por qué, marcar HU relacionada.
Base De Datos
bd/contiene esquemas SQL, objetos y seed. Archivos reales:ondina_schema_supabase.sql,rls_policies.sql,triggers_negocio.sql,auditoria.sql,vistas.sql,seed.sql,drop_todo.sqlydiagramas_esquemas_mermaid.md.bd/ondina_schema_supabase.sqles el esquema relacional final. Las políticas RLS, triggers de negocio, auditoría, vistas y datos semilla se aplican como archivos separados (rls_policies.sql,triggers_negocio.sql,auditoria.sql,vistas.sql,seed.sql) en el orden documentado en cada cabecera, antes de convertir en migraciones.- No existía
bd/ondina_sql.txt— superado; no lo busques ni despliegues. - Aplica el esquema solo en un entorno Supabase/PostgreSQL aislado. Los cambios definitivos van en migraciones versionadas bajo
supabase/migrations/(0001 a 0010 creadas). - Preserva los invariantes: RLS en tablas expuestas, autorización en la BD, triggers de auditoría, parámetros de negocio configurables y soft-delete/anulación.
- El stock lo mantienen los triggers de BD, no el frontend. Los ajustes de despacho agregan filas dentro de la ventana configurada; no editan ni restan filas existentes.
- Las anulaciones (
anulado: false → true) reversan los movimientos de stock mediante triggers entriggers_negocio.sql(sección 8): venta devuelve carga y resta envases; despacho devuelve stock_bodega y quita carga; devoluciones, producciones y mermas revertían su efecto. Una posterior reactivación NO restaura movimientos. - Auditoría:
auditoria.sqlaplicafn_auditoria(conanulado→ANULACION) a ventas, despachos, producciones, gastos, mermas y devoluciones; yfn_auditoria_simple(INSERT/UPDATE sin ANULACION) aventa_detallesydespacho_detalles. El bloque de devoluciones/detalles está marcado "SUJETO A CAMBIOS" hasta confirmsar con el equipo si los detalles deben ser corregibles. - Vistas:
vistas.sqlexponev_stock_actual,v_cuadre_despacho,v_ventas_diarias,v_ranking_vendedores,v_comision_vendedor,v_clientes_inactivos,v_historial_cliente(RF-04/HU-11) yv_ventas_producto(HU-14). RF-20 (documentos boleta/factura) no se materializa como objeto aparte; se consulta desdeventas. - Índices: el esquema define índices sobre
sucursal_id,vendedor_id,creado_en,venta_id,despacho_id,producto_idy(tabla, registro_id)en auditoria. - Nunca guardes contraseñas en tablas de la aplicación; la autenticación pertenece a Supabase Auth y
perfiles.idreferenciaauth.users.id.
Ramas Y Flujo De Trabajo
- Ramas de dominio:
feature/ventas,feature/bodega,feature/produccion,feature/administracion. mainpublicación/protección,developintegración. Las ramas de dominio nacen dedevelopy se integran por PR con squash.- Protección de
main(configurada 2026-08-14):enforce_admins: false(admin puede push directo),required_pull_request_reviews: 1(el resto del equipo necesita PR + 1 aprobación),allow_force_pushes: false,allow_deletions: false. El admin puede hacer commit + push directo amain; el workflowdeploy-prod.ymlse dispara en push amainy el deploy a producción requiere aprobación manual vía el environmentproductionde GitHub Actions. - Además existen ramas de trabajo locales transitorias:
work/*,context/*,contextura/*,integration/*yclean/*. No las uses como base nueva; nace dedevelop. - Commits con Conventional Commits, en español, en imperativo, máximo 72 caracteres:
<tipo>(<alcance>): <descripción> [HU-XX]. - La sección anterior sobre beads ha sido reemplazada por la integración de Beads más abajo.
Seguimiento De Issues Con Beads
Este proyecto usa bd (beads) para el seguimiento de issues. Ejecuta bd prime para ver el contexto completo del flujo y los comandos.
bd ready # encontrar trabajo disponible
bd show <id> # ver detalles de un issue
bd update <id> --claim # reclamar un issue
bd close <id> # cerrar un issue
bd statistics # resumen del proyecto
Reglas
- Usa
bdpara el seguimiento de TODAS las tareas; no uses TodoWrite, markdown TODO ni tablas de seguimiento por fuera debd. - Ejecuta
bd primepara el flujo detallado de cierre de sesión y las referencias. - Usa
bd remember <texto>para memoria persistente; no uses archivosMEMORY.md. config.yamlde beads solo debe tenerrepos.primary = "."; no agregues la secciónadditional..beads/embeddeddolt/es la fuente de datos local y NO se versiona..beads/issues.jsonles un export pasivo que el hook de beads regenera con cada commit; se eliminó del tracking en git y no debe volver a añadirse. Borrarissues.jsonlno borra los datos reales (viven enembeddeddolt/), y beads puede reimportar desde ese export al cambiar de rama víaimport.auto. Para limpiar del todo, borra del Dolt local conbd deletey luego quita el export en git.
Cierre De Sesión
Al acabar abandonar una sesión, NO estás completo hasta que git push tenga éxito.
- Crea issues para el trabajo pendiente.
- Ejecuta las verificaciones de calidad si hubo código (
npm run lintynpm run buildenfrontend/). - Actualiza el estado de los issues (cierra lo hecho, marca en progreso lo que quede).
- Push obligatorio:
git pull --rebase git push git status # debe mostrar "up to date with origin" - Limpia: descarta
git stashy poda ramas remotas. - Verifica que todo esté commiteado y pusheado.
- Deja contexto del hand‑off para la siguiente sesión.
Nunca dejes que la rama local quede por push; resolver y reintentar hasta que push tenga éxito.
Beads Issue Tracker
Use Beads (bd) for durable task tracking in repositories that include it. Use the beads skill at .agents/skills/beads/SKILL.md (project install) or ~/.agents/skills/beads/SKILL.md (global install) for Beads workflow guidance, then use the bd CLI for issue operations.
Quick Reference
bd ready # Find available work
bd show <id> # View issue details
bd update <id> --claim # Claim work
bd close <id> # Complete work
bd prime # Refresh Beads context
Rules
- Use
bdfor all task tracking; do not create markdown TODO lists. - Run
bd primewhen Beads context is missing or stale. Codex 0.129.0+ can load Beads context automatically through native hooks; use/hooksto inspect or toggle them. - Keep persistent project memory in Beads via
bd remember; do not create ad hoc memory files.
Architecture in one line: issues live in a local Dolt DB; sync uses refs/dolt/data on your git remote; .beads/issues.jsonl is a passive export. See https://github.com/gastownhall/beads/blob/main/docs/SYNC_CONCEPTS.md for details and anti-patterns.