Saltar a contenido

Roadmap - APV Business Observer

Fecha: 2026-06-19

Estado: ROADMAP DOCUMENTAL / SOURCE-003 MART LOCAL-DEV CERRADA / FOUNDATION STAGING ABIERTA / PRODUCCION FINAL BLOQUEADA

Scope: tenant

tenant_id: alpuntodeventa

Owner: Gabi / Carlos Canu

Etapas

Etapa 14.1.30 - Staging DDL execution

  • cerrada al 2026-06-19 como DDL STAGING REAL EJECUTADO
  • ejecutar el DDL base autorizado sobre PostgreSQL staging real usando solo los SQL candidates publicados en PDF-004F
  • documento oficial: docs/tenants/alpuntodeventa/business-observer/production/PDF-004G-DDL-BUSINESS-OBSERVER-STAGING-EXECUTION.md
  • resultado: PDF-004G PASS / DB-SCHEMA-ROLES CREATED / VALIDACION POST-DDL PASS / SANDBOX INTACT
  • controles confirmados: SAFE POINT = 170d6520dfff967155d7c1879d03e7246ff9bb02, staging principal running healthy, HostConfig.PortBindings = {}, DB openclaw_business_observer_staging presente, schema business_observer presente, roles staging NOLOGIN presentes, permisos minimos y default privileges validados, tablas de negocio creadas 0, sandbox running healthy
  • seguridad: sin secretos, sin rollback, sin SOURCE-003, sin sync/scheduler, sin tocar La Directa, SGC, produccion, push ni deploy
  • proximo paso: backup post-DDL y candidate/preflight para carga controlada inicial de SOURCE-003 en staging; produccion y sync diaria siguen NO-GO

Etapa 14.1.29 - Staging DDL candidate preflight

  • cerrada al 2026-06-19 como CANDIDATE PREFLIGHT PREPARADO
  • preparar el candidate/preflight final para una futura ejecucion DDL base sobre PostgreSQL staging real
  • documento oficial: docs/tenants/alpuntodeventa/business-observer/production/PDF-004F-DDL-BUSINESS-OBSERVER-STAGING-CANDIDATE-PREFLIGHT.md
  • paquete SQL: infra/business-observer/staging/postgres/ddl/PDF-004F/
  • resultado: GO PDF-004G SOLO CON AUTORIZACION EXPLICITA / NO-GO DDL EN PDF-004F / SANDBOX INTACT
  • controles confirmados: SAFE POINT = d7cdadd552d2709c106b2a7831898dc43751ae89, staging principal running healthy, HostConfig.PortBindings = {}, backup baseline present, restore drill PASS, catalogo con transaction_read_only=on, DB/schema/roles de negocio ausentes, sandbox running healthy
  • seguridad: sin DDL, sin DML, sin secretos, sin dumps/backups/env en Git, sin tocar sandbox, La Directa, SGC, push ni deploy
  • proximo paso: PDF-004G ejecucion DDL real solo con autorizacion explicita separada; produccion y sync diaria siguen NO-GO

Etapa 14.1.28 - Staging Postgres restore drill

  • cerrada al 2026-06-19 como RESTORE DRILL REAL EJECUTADO
  • ejecutar un restore drill real del backup baseline PostgreSQL staging en un entorno temporal aislado del VPS
  • documento oficial: docs/tenants/alpuntodeventa/business-observer/production/PDF-004E-STAGING-POSTGRES-RESTORE-DRILL.md
  • resultado: GO PDF-004F DDL CANDIDATE/PREFLIGHT / NO-GO DDL EJECUCION / SANDBOX INTACT
  • controles confirmados: SAFE POINT = 8f0313d77d8bb64715d3fc98219edff44a44173c, backup baseline 1032 bytes, sha256 402dce45fe93936b12f17a54ee437d637b3c573d02a3ff5c506d83e48a3860c4, pg_restore --list con toc_entries=0, restore final con pg_restore exit_code=0, contenedor temporal healthy y sin host port binding, cleanup completo de container, volume, network, secret y work dir, staging principal running healthy con HostConfig.PortBindings = {}, DB/schema/roles de negocio ausentes, sandbox running healthy
  • seguridad: sin DDL, sin DML, sin leer contenido de secretos, sin guardar dumps en Git, sin tocar sandbox, La Directa, SGC, runtime O4, push ni deploy
  • proximo paso: PDF-004F DDL business observer candidate/preflight; ejecucion DDL, produccion y sync diaria siguen NO-GO

Etapa 14.1.27 - Staging Postgres backup baseline execution

  • cerrada al 2026-06-19 como BASELINE BACKUP EJECUTADO
  • ejecutar el primer backup baseline logico real del PostgreSQL staging-vps de Business Observer
  • documento oficial: docs/tenants/alpuntodeventa/business-observer/production/PDF-004D-STAGING-POSTGRES-BACKUP-BASELINE-EXECUTION.md
  • resultado: GO PDF-004E RESTORE DRILL / NO-GO DDL NEGOCIO / SANDBOX INTACT
  • controles confirmados: SAFE POINT = ffc2b86ac75ef7ea2d5830226b3094e85b87794c, backup fuera de Git en /opt/backups/openclaw/business-observer-staging/postgres/baseline/20260619T170037Z/, filename openclaw-bo-staging-postgres-baseline-20260619T170037Z.dump, formato pg_dump -Fc, tamano 1032 bytes, sha256 402dce45fe93936b12f17a54ee437d637b3c573d02a3ff5c506d83e48a3860c4, pg_restore --list legible, staging running healthy con HostConfig.PortBindings = {}, sandbox running healthy, DB/schema/roles de negocio ausentes
  • seguridad: sin DDL, sin DML, sin leer contenido de secretos, sin guardar dumps en Git, sin tocar sandbox, La Directa, SGC, runtime O4, push ni deploy
  • proximo paso: PDF-004E restore drill; PDF-004 DDL sigue NO-GO

Etapa 14.1.26 - Staging Postgres real target read-only preflight

  • cerrada al 2026-06-19 como READ-ONLY PREFLIGHT COMPLETADO
  • validar el target PostgreSQL staging-vps real ya provisionado sin crear objetos de negocio ni tocar datos
  • documento oficial: docs/tenants/alpuntodeventa/business-observer/production/PDF-004C-STAGING-POSTGRES-REAL-TARGET-READONLY-PREFLIGHT.md
  • resultado: GO BACKUP-RESTORE BASELINE / NO-GO DDL NEGOCIO / SANDBOX INTACT
  • controles confirmados: SAFE POINT = 04feb71ce2d1523e613bbf1ca678493648c95585, target real openclaw-business-observer-postgres-staging, host srv977009, health running healthy, red openclaw-bo-staging-internal, volumen openclaw_bo_postgres_staging_data, HostConfig.PortBindings = {}, secret file validado solo por stat, psql de catalogo validado con transaction_read_only = on, DB staging/prod ausentes, schema business_observer ausente, roles staging ausentes, sandbox healthy e intocado
  • seguridad: sin DDL, sin DML, sin leer contenido de secretos, sin tocar sandbox, La Directa, SGC, runtime O4, push ni deploy
  • proximo paso: PDF-004D backup baseline execution, PDF-004E restore drill, PDF-004F DDL execution candidate/preflight

Etapa 14.1.25 - Staging Postgres stack provisioning

  • cerrada al 2026-06-19 como PROVISIONED / HEALTHY
  • provisionar el stack PostgreSQL staging-vps real para Business Observer creando solo infraestructura Docker
  • documento oficial: docs/tenants/alpuntodeventa/business-observer/production/PDF-004B-STAGING-POSTGRES-STACK-PROVISIONING.md
  • resultado: PROVISIONED / HEALTHY / NO BUSINESS DDL / NO HOST PORT / SANDBOX INTACT
  • controles confirmados: SAFE POINT = 7b07c6e4b7d856224f8ea1bc992c7762fc5d39c2, stack path /opt/stacks/business-observer-staging, contenedor openclaw-business-observer-postgres-staging, red openclaw-bo-staging-internal, volumen openclaw_bo_postgres_staging_data, secret file fuera de Git, host port 5432 no publicado, DB bootstrap postgres, openclaw_business_observer_staging = ABSENT, schema business_observer = ABSENT, roles staging de negocio ABSENT, sandbox healthy e intocado
  • seguridad: sin CREATE DATABASE, sin CREATE ROLE, sin CREATE SCHEMA, sin tablas, sin grants, sin sync diaria, sin scheduler, sin secretos en Git, sin push ni deploy
  • proximo paso: abrir tarea separada solo si se autoriza PDF-004 DDL sobre este target real; produccion sigue bloqueada

Etapa 14.1.24 - Staging Postgres stack preflight plan

  • cerrada al 2026-06-19 como PREFLIGHT + PLAN OPERATIVO
  • preparar un PostgreSQL staging-vps real para Business Observer, sin crearlo todavia
  • documento oficial: docs/tenants/alpuntodeventa/business-observer/production/PDF-004A-STAGING-POSTGRES-STACK-PREFLIGHT-PLAN.md
  • candidates:
  • infra/business-observer/staging/postgres/docker-compose.business-observer-staging.candidate.yml
  • infra/business-observer/staging/postgres/.env.business-observer-staging.example
  • resultado: PREFLIGHT + PLAN OPERATIVO + CANDIDATES / NOT EXECUTED / NO SECRETS / PDF-004B PENDING GO
  • controles confirmados: SAFE POINT = ba941b6562de20e8a65c830aef2c6b2fa8573b73, VPS srv977009, openclaw-postgres-sandbox existe pero queda excluido, no existen container, volumen, red ni path propuestos, no se publica 5432 al host, ruta propuesta /opt/stacks/business-observer-staging
  • seguridad: sin crear contenedor, volumen, red, DB, roles, schema ni tablas; sin SQL, sin docker compose up, sin secretos en Git, sin tocar sandbox, La Directa, SGC, runtime O4, push ni deploy
  • proximo paso: PDF-004B solo con autorizacion explicita; PDF-004 DDL sigue NO-GO

Etapa 14.1.23 - Staging fingerprint read-only evidence

  • cerrada al 2026-06-19 con dictamen BLOCKED
  • registrar evidencia no sensible del fingerprint y del acceso read-only del target real de staging-vps del Business Observer
  • documento oficial: docs/tenants/alpuntodeventa/business-observer/production/PDF-003F-B-STAGING-FINGERPRINT-READONLY-EVIDENCE.md
  • resultado: BLOCKED / READ-ONLY EVIDENCE / NO DDL / NO SECRETS / PDF-004 SIGUE NO-GO
  • controles confirmados: SAFE POINT = 3656f5ae185520bfa5e038467d9e383102fbf940, ultimo commit docs: record business observer staging target intake, target real verificable ausente en el workspace, acceso read-only seguro verificable ausente en el workspace, fingerprint real publicable NO DISPONIBLE, identidad logica documental preservada: alias business-observer-staging-db, DB openclaw_business_observer_staging, schema business_observer, roles logicos staging DECLARADOS / NO VERIFICADOS, DB/schema/roles = UNVERIFIED / BLOCKED, backup/restore baseline real = PENDIENTE / BLOCKED, observabilidad minima operativa = BLOCKED, confirmacion de que openclaw-postgres-sandbox no fue reutilizado como staging real, confirmacion de NO POSTGRES TOUCH y NO DATABASE CHANGES
  • seguridad: sin tocar VPS, sin tocar PostgreSQL, sin ejecutar SQL, sin usar secretos, sin tocar Docker, NPM, Portainer, runtime O4, La Directa, SGC, push ni deploy
  • proximo paso: reabrir el circuito solo cuando exista target real verificable y acceso read-only seguro verificable fuera de Git

Etapa 14.1.22 - Staging target non-sensitive intake

  • cerrada al 2026-06-19
  • registrar documentalmente la recepcion de datos no sensibles del target recomendado para staging de Business Observer
  • documento oficial: docs/tenants/alpuntodeventa/business-observer/production/PDF-003F-A-STAGING-TARGET-NON-SENSITIVE-INTAKE.md
  • resultado: NON-SENSITIVE INTAKE / NO RUNTIME CHANGE / NO SECRETS / PDF-004 SIGUE NO-GO
  • controles confirmados: SAFE POINT = fa437a748eb7a1694335d1505f111450575bd133, ultimo commit docs: prepare business observer staging target handoff, intake publicado con alias no sensible business-observer-staging-db, DB openclaw_business_observer_staging, schema business_observer, responsable operativo APV / OpenClaw Ops, roles logicos, politica de backup, restore drill y observabilidad minima, confirmacion documental publicada de que openclaw-postgres-sandbox no debe usarse como staging real, exclusion explicita de passwords, connection strings, tokens, LOGIN reales sensibles, IPs privadas sensibles y rutas internas sensibles
  • seguridad: sin tocar VPS, sin tocar PostgreSQL, sin ejecutar SQL, sin usar secretos, sin tocar Docker, NPM, Portainer, runtime O4, La Directa, SGC, push ni deploy
  • proximo paso: PDF-003F-B para fingerprint no sensible y evidencia documental minima de acceso read-only seguro; PDF-004 sigue NO-GO

Etapa 14.1.21 - Staging target operational handoff

  • cerrada al 2026-06-19
  • publicar un handoff operativo para cerrar fuera de Git el target real de staging-vps del Business Observer
  • documento oficial: docs/tenants/alpuntodeventa/business-observer/production/PDF-003F-BLOCKER-STAGING-TARGET-OPERATIONAL-HANDOFF.md
  • resultado: HANDOFF / NO RUNTIME CHANGE / PDF-003F SIGUE BLOCKED / PDF-004 SIGUE NO-GO
  • controles confirmados: SAFE POINT = fdae53fcd446cb7ce33ae918aa8d8f213ee680ea, ultimo commit docs: prepare business observer staging backup restore runbook, formulario seguro publicado para completar fuera del repo con target elegido, alias no sensible, acceso publicable, DB, roles logicos, responsable operativo, ventana de cambio, backup location y restore drill target, politica publicada para excluir passwords, connection strings, tokens, LOGIN reales sensibles e IPs privadas sensibles, checklist publicado para volver solo con datos no sensibles
  • seguridad: sin tocar VPS, sin tocar PostgreSQL, sin ejecutar SQL, sin usar secretos, sin tocar Docker, NPM, Portainer, runtime O4, La Directa, SGC, push ni deploy
  • proximo paso: recibir datos no sensibles del target real, publicar fingerprint no sensible y abrir un nuevo preflight read-only solo despues de eso

Etapa 14.1.19 - Staging target provisioning decision record

  • cerrada al 2026-06-19
  • registrar documentalmente la decision de provisioning para el target real de staging-vps del Business Observer
  • documento oficial: docs/tenants/alpuntodeventa/business-observer/production/PDF-003D-STAGING-TARGET-PROVISIONING-DECISION-RECORD.md
  • resultado: DECISION RECORD / NO RUNTIME CHANGE / PDF-004 SIGUE NO-GO
  • controles confirmados: SAFE POINT = 3a3bd0f674b5cf73b367fea91185f8fcac991827, ultimo commit docs: define business observer staging prerequisites, problema consolidado: no existe staging real y solo hay sandbox visible, decision recomendada: staging real separado del sandbox, NO USAR openclaw-postgres-sandbox COMO STAGING REAL, prod-vps futura separada, naming aprobado: openclaw_business_observer_staging, openclaw_business_observer_prod, business_observer, politica publicada para mantener fuera de Git: endpoint real, host/puerto no publico, credenciales, passwords, connection strings y roles LOGIN reales si aplican
  • seguridad: sin provisionar, sin DDL, sin tocar PostgreSQL, sin crear DB, roles, schemas ni tablas, sin tocar Docker, NPM, Portainer, runtime O4, La Directa, SGC, push ni deploy
  • proximo paso: PDF-003E backup/restore runbook candidate, PDF-003F real target read-only preflight, PDF-004 DDL execution only after GO

Etapa 14.1.20 - Staging backup restore runbook candidate

  • cerrada al 2026-06-19
  • publicar documentalmente un runbook candidato de backup/restore para el futuro staging-vps del Business Observer
  • documento oficial: docs/tenants/alpuntodeventa/business-observer/production/PDF-003E-STAGING-BACKUP-RESTORE-RUNBOOK-CANDIDATE.md
  • resultado: RUNBOOK CANDIDATE / NOT EXECUTED / STAGING-VPS ONLY / PDF-004 SIGUE NO-GO
  • controles confirmados: SAFE POINT = f615b777576b9f9d89254548b28d484fb556feac, ultimo commit docs: record business observer staging target decision, runbook marcado como NO SECRETS y REQUIRES EXPLICIT AUTHORIZATION, politica candidata publicada: backup logico pg_dump custom format, naming sin secretos, SHA256, retencion minima sugerida, evidencia requerida, restore drill candidate con destino separado, validaciones post-restore y criterio PASS/FAIL, observabilidad minima publicada para backup age, restore drill age, backup size, last backup status, last restore drill status
  • seguridad: sin tocar PostgreSQL, sin ejecutar SQL, sin pg_dump, sin pg_restore, sin tocar VPS, Docker, NPM, Portainer, runtime O4, La Directa, SGC, push ni deploy
  • proximo paso: PDF-003F real target read-only preflight; backup real y restore drill real solo con tarea separada y autorizacion explicita

Etapa 14.1.18 - Staging prerequisites backup restore access

  • cerrada al 2026-06-19
  • definir documentalmente los prerequisitos operativos obligatorios antes de crear o usar una DB staging real para Business Observer
  • documento oficial: docs/tenants/alpuntodeventa/business-observer/production/PDF-003C-STAGING-PREREQUISITES-BACKUP-RESTORE-ACCESS.md
  • resultado: PREREQUISITOS OPERATIVOS DEFINIDOS / TARGET REAL TODAVIA NO PROVISIONADO / PDF-004 SIGUE NO-GO
  • controles confirmados: SAFE POINT = c8120e31915dd1af0ec048d4e6c12684e3a875ae, ultimo commit docs: define business observer staging target, target real separado del sandbox sigue siendo obligatorio, informacion fuera de Git definida para host/servicio, conectividad, DB, roles LOGIN si aplican, secretos y responsable operativo, fingerprint exacto obligatorio antes de cualquier DDL, politica minima de acceso publicada con application superuser = not allowed y writer without DELETE by default, backup previo obligatorio, restore drill obligatorio, observabilidad minima, rollback/restore esperado y checklist GO/NO-GO publicados
  • seguridad: sin DDL, sin tocar PostgreSQL, sin crear DB, roles, schemas ni tablas, sin tocar Docker, NPM, Portainer, runtime O4, La Directa, SGC, push ni deploy
  • proximo paso: PDF-003D target provisioning decision record, PDF-003E backup/restore runbook candidate, PDF-003F new read-only preflight against real target

Etapa 14.1.17 - Staging target definition after PDF-003

  • cerrada al 2026-06-19
  • definir documentalmente el target real de staging-vps para Business Observer despues del NO-GO de PDF-003
  • documento oficial: docs/tenants/alpuntodeventa/business-observer/production/PDF-003B-STAGING-TARGET-DEFINITION.md
  • resultado: TARGET DEFINITION ONLY / PDF-004 SIGUE NO-GO / CERO CAMBIOS RUNTIME
  • controles confirmados: SAFE POINT = a2b1aa44bda1075fb536e2b8db60a4ce41f23331, ultimo commit docs: preflight business observer staging ddl, problema consolidado: solo existe/visible openclaw-postgres-sandbox, DB staging real ausente, roles staging reales ausentes, backup/restore especifico aun ausente, recomendacion formal: NO USAR openclaw-postgres-sandbox COMO STAGING REAL, target recomendado: staging-vps real separado del sandbox con DB openclaw_business_observer_staging, schema business_observer, roles staging dedicados, backup/restore y acceso propios
  • seguridad: sin DDL, sin tocar PostgreSQL, sin crear DB, roles, schemas ni tablas, sin tocar Docker, NPM, Portainer, runtime O4, La Directa, SGC, push ni deploy
  • proximo paso: cerrar target real + backup/restore + fingerprint y recien despues reintentar PDF-003 contra la DB correcta

Etapa 14.1.16 - Staging DDL preflight read-only

  • cerrada al 2026-06-19
  • ejecutar un preflight estrictamente read-only para validar si el paquete PDF-002 estaba listo para una futura ejecucion en staging-vps
  • documento oficial: docs/tenants/alpuntodeventa/business-observer/production/PDF-003-STAGING-DDL-PREFLIGHT-READONLY.md
  • resultado: PREFLIGHT READ-ONLY COMPLETADO / PDF-004 NO-GO / CERO CAMBIOS
  • controles confirmados: SAFE POINT = 7838b1061b4c9f290a501eb6924b94507d2339d2, ultimo commit docs: prepare business observer staging ddl candidate, acceso read-only seguro por ssh openclaw-vps + docker exec openclaw-postgres-sandbox psql -U openclaw_admin -d openclaw_sandbox, fingerprint observable srv977009|openclaw-postgres-sandbox|172.24.0.3:5432|no-host-port-binding|openclaw_sandbox|openclaw_admin|PostgreSQL 16.14, DB target staging ausente, DB futura prod ausente, schema target no validable en staging por ausencia de DB, roles staging target ausentes, conflictos de naming ausentes, PUBLIC con privilegios por defecto en el cluster visible, backup/restore especifico de staging aun no cerrado
  • seguridad: sin DDL, sin CREATE/ALTER/GRANT/REVOKE/DROP, sin INSERT/UPDATE/DELETE, sin tocar La Directa, SGC, runtime O4, Docker, NPM, Portainer, push ni deploy
  • proximo paso: no ejecutar PDF-004; primero definir target staging real y cerrar backup/restore con un nuevo preflight contra esa DB

Etapa 14.1.15 - Staging DB roles schemas DDL candidate

  • cerrada al 2026-06-19
  • disenar el paquete DDL candidato de staging-vps para DB, roles y schema del Business Observer, sin ejecutar SQL ni tocar PostgreSQL
  • documento oficial: docs/tenants/alpuntodeventa/business-observer/production/PDF-002-STAGING-DB-ROLES-SCHEMAS-DDL-CANDIDATE.md
  • SQL candidate: docs/tenants/alpuntodeventa/business-observer/production/sql/PDF-002-staging-db-roles-schemas-candidate.sql
  • resultado: CANDIDATE PREPARADO / NOT EXECUTED / STAGING-VPS ONLY
  • controles confirmados: SAFE POINT = 45aaa51a2ff85462a485b841863f0e28c2794dff, ultimo commit docs: plan business observer production data foundation, DB staging recomendada openclaw_business_observer_staging, DB futura prod recomendada openclaw_business_observer_prod, schema recomendado business_observer, roles candidatos openclaw_bo_staging_owner, openclaw_bo_staging_writer, openclaw_bo_staging_reader, openclaw_bo_staging_reporting_ro, sin passwords en SQL, PUBLIC sin privilegios, sin SUPERUSER, sin CREATEDB, sin CREATEROLE, fingerprint esperado para PDF-003 publicado
  • seguridad: sin tocar VPS PostgreSQL, sin crear DB/roles/schemas/tablas reales, sin ejecutar SQL, sin secretos/passwords, sin sync diaria, sin scheduler, sin push ni deploy
  • proximo paso: abrir tarea separada para PDF-003 staging DDL preflight

Etapa 14.1.14 - Production Data Foundation intake

  • abierta al 2026-06-19
  • abrir formalmente la etapa Production Data Foundation / staging VPS solo en modo documental y de diseno
  • documento oficial: docs/tenants/alpuntodeventa/business-observer/production/PRODUCTION-DATA-FOUNDATION-INTAKE-001.md
  • resultado: FOUNDATION DESIGN ONLY / STAGING-VPS PLANIFICADO / NO RUNTIME CHANGES
  • controles confirmados: SAFE POINT = 33d28a11b66ce071a2a60b3f7662e4a358ee29f4, ultimo commit docs: close source 003 mart local dev, ambientes propuestos local-dev, staging-vps, prod-vps futuro, modelo RAW -> CORE -> MART obligatorio en VPS, regla formal de no llamar produccion a un entorno sin backups + restore + monitoreo + idempotencia, secuencia de fases 1 a 10 publicada
  • seguridad: sin tocar VPS, PostgreSQL, Docker, NPM, Portainer, runtime O4, La Directa, SGC, secretos, deploy ni push sin crear DB, roles, schemas o tablas sin ejecutar SQL, scheduler, sync diaria ni cargas
  • proximo paso: abrir tarea separada para staging DB roles/schemas DDL candidate

Etapa 14.1.13 - SOURCE-003 cierre formal mart local-dev

  • cerrada al 2026-06-19
  • cerrar formalmente el hito SOURCE-003 MART local-dev con evidencia consolidada y validacion final read-only
  • documento oficial: docs/tenants/alpuntodeventa/business-observer/design/SOURCE-003-BUILD-MART-LOCAL-DEV-CLOSURE-001.md
  • resultado: CERRADA / LOCAL-DEV COMPLETO / SIN ESCRITURAS NUEVAS
  • controles confirmados: SAFE POINT = 36b23814021a02f3a5f3aa06aacf654ca45104c5, ultimo commit docs: add source 003 mart rollback candidate, fingerprint aprobado, postgres-sandbox ausente, RAW = 1886, CORE = 1886, MART = 1/25/173/180, batch autorizado presente en MART = 1/25/173/180, filas fuera del batch 0/0/0/0, duplicados 0/0/0/0, rollback candidate publicado y no ejecutado
  • seguridad: sin build-mart --execute, sin rollback real, sin INSERT, COPY, UPDATE, DELETE, sin produccion, sin sync diaria, sin scheduler, sin tocar La Directa, runtime O4, VPS, Docker, NPM, Portainer, push ni deploy
  • proximo paso: abrir tarea separada para Production Data Foundation / staging VPS

Etapa 14.1.12 - SOURCE-003 rollback candidate mart local-dev

  • cerrada al 2026-06-19
  • documentar y versionar un rollback candidate para python scripts/source_003_importer.py build-mart ya persistido en local-dev, sin ejecutarlo ni modificar la DB
  • documento oficial: docs/tenants/alpuntodeventa/business-observer/design/SOURCE-003-BUILD-MART-ROLLBACK-CANDIDATE-001.md
  • SQL candidate: docs/tenants/alpuntodeventa/business-observer/design/sql/008_source_003_build_mart_rollback_candidate.sql
  • resultado: CANDIDATE / NOT EXECUTED / LOCAL-DEV ONLY / REQUIRES EXPLICIT AUTHORIZATION
  • controles confirmados: SAFE POINT = d9b302ce7ad71b590a53f9ee8392e117d24dcc17, batch autorizado 1827f887-9499-4579-b4f3-234d54f41f7f, orden de borrado seguro sku -> customer -> seller -> daily, prechecks documentados MART = 1/25/173/180, filas fuera del batch 0/0/0/0, duplicados por grain 0/0/0/0, post-checks documentados MART = 0/0/0/0, RAW = 1886, CORE = 1886
  • seguridad: sin rollback real, sin build-mart --execute, sin DELETE, TRUNCATE, UPDATE, INSERT, COPY, sin produccion, sin sync diaria, sin tocar La Directa, runtime O4, VPS, Docker, NPM, Portainer, push ni deploy
  • proximo paso: mantener el candidate congelado hasta una autorizacion explicita futura en tarea separada

Etapa 14.1.11 - SOURCE-003 prueba real de idempotencia mart local-dev

  • cerrada al 2026-06-18
  • ejecutar una sola vez python scripts/source_003_importer.py build-mart --execute con doble gate correcto para validar idempotencia sobre una MART ya persistida
  • documento oficial: docs/tenants/alpuntodeventa/business-observer/design/SOURCE-003-BUILD-MART-IDEMPOTENCY-EXECUTION-001.md
  • resultado: BLOCKED / SIN ESCRITURAS NUEVAS / IDEMPOTENCIA VALIDADA EN LOCAL-DEV
  • controles confirmados: SAFE POINT = 3f491d80f9d633aaf8ed835c54e1a4fcf2d06dab, ultimo commit docs: preflight source 003 mart idempotency, py_compile = PASS, build-mart = FAIL esperado post-write, fingerprint aprobado, postgres-sandbox ausente, RAW = 1886, CORE = 1886, MART = 1/25/173/180, duplicados 0/0/0/0, filas fuera del batch 0/0/0/0, comando real ejecutado exactamente una vez, result = BLOCKED, db_write_attempted = false, transaction_committed = false, data_persisted = false
  • seguridad: sin rollback manual, sin INSERT, COPY, UPDATE, DELETE, sin produccion, sin sync diaria, sin runner, sin scheduler, sin tocar La Directa, runtime O4, VPS, Docker, NPM, Portainer, push ni deploy
  • proximo paso: no reintentar el comando; el comportamiento idempotente esperado ya quedo demostrado por bloqueo sin persistencia

Etapa 14.1.10 - SOURCE-003 preflight read-only para futura idempotencia mart

  • cerrada al 2026-06-18
  • preparar la futura prueba de idempotencia de python scripts/source_003_importer.py build-mart --execute sin reejecutar escritura ni tocar la DB
  • documento oficial: docs/tenants/alpuntodeventa/business-observer/design/SOURCE-003-BUILD-MART-IDEMPOTENCY-PREFLIGHT-001.md
  • resultado: PASS / READ-ONLY IDEMPOTENCY PREFLIGHT / EXECUTE SIGUE BLOQUEADO
  • controles confirmados: SAFE POINT = 8fab80e6af932ec3d6f32df3c8f109f251ce1f2d, ultimo commit docs: review source 003 mart first persistence, py_compile = PASS, build-mart = FAIL esperado post-write, fingerprint aprobado, postgres-sandbox ausente, RAW = 1886, CORE = 1886, MART = 1/25/173/180, duplicados 0/0/0/0, filas fuera del batch 0/0/0/0, filas existentes del batch en MART = 1/25/173/180, resultado esperado de bloqueo: MART inicial no esta vacia: daily=1 seller=25 customer=173 sku=180
  • seguridad: sin build-mart --execute, sin doble gate correcto, sin --commit-local-dev-write, sin rollback, sin produccion, sin sync diaria, sin runner, sin CSV, sin tocar La Directa, runtime O4, VPS, Docker, NPM, Portainer, push ni deploy
  • proximo paso: abrir tarea separada solo si se aprueba una prueba real de idempotencia; en el estado actual deberia quedar BLOCKED/ABORTED sin persistir nada

Etapa 14.1.9 - SOURCE-003 review read-only post-write de la primera persistencia mart

  • cerrada al 2026-06-18
  • auditar en modo read-only el estado real de python scripts/source_003_importer.py build-mart despues del primer COMMIT local-dev, sin reejecutar escritura
  • documento oficial: docs/tenants/alpuntodeventa/business-observer/design/SOURCE-003-BUILD-MART-POST-WRITE-REVIEW-001.md
  • resultado: PASS / READ-ONLY POST-WRITE REVIEW / NO DB WRITES
  • controles confirmados: SAFE POINT = 10cbf63e165428847ad954a0bd0b7e891924750d, ultimo commit docs: record source 003 mart first persistence, py_compile = PASS, build-mart = FAIL esperado por MART ya persistida, build-mart --execute = NO EJECUTADO, fingerprint aprobado, postgres-sandbox ausente, RAW = 1886, CORE = 1886, MART = 1/25/173/180, duplicados 0/0/0/0, filas fuera del batch 0/0/0/0, comparacion MART vs CORE sin diferencias sobre tolerancia 0.0001
  • seguridad: sin idempotencia, sin build-mart --execute, sin rollback, sin produccion, sin sync diaria, sin runner, sin CSV, sin tocar La Directa, runtime O4, VPS, Docker, NPM, Portainer, push ni deploy
  • proximo paso: abrir tarea separada si se aprueba testear idempotencia o rollback candidato; no reejecutar esta persistencia dentro de esta auditoria

Etapa 14.1.8 - SOURCE-003 primera persistencia real mart local-dev

  • cerrada al 2026-06-18
  • ejecutar por primera vez la persistencia real local-dev de python scripts/source_003_importer.py build-mart --execute usando el doble gate correcto
  • documento oficial: docs/tenants/alpuntodeventa/business-observer/design/SOURCE-003-BUILD-MART-FIRST-PERSISTENCE-001.md
  • resultado: PASS / FIRST REAL LOCAL-DEV PERSISTENCE COMMITTED / NO REHEARSAL
  • controles confirmados: SAFE POINT = 4ee4cb42ce0ab3b8c8c750ee4b324116153ef8b9, py_compile = PASS, build-mart = DRY_RUN, fingerprint aprobado, postgres-sandbox ausente, preflight RAW = 1886, CORE = 1886, MART = 0/0/0/0, estimates 1/25/173/180, constraints 43/43, indices 12/12, duplicados 0/0/0/0, BEFORE = 1886 / 1886 / 0/0/0/0, INSIDE_TX = 1/25/173/180, AFTER_COMMIT = 1886 / 1886 / 1/25/173/180
  • seguridad: transaction_committed = true, data_persisted = true, rollback_rehearsal = false, sin produccion, sin sync diaria, sin runner, sin scheduler, sin CSV, sin tocar La Directa, runtime O4, VPS, Docker, NPM, Portainer, push ni deploy
  • proximo paso: abrir una tarea separada para idempotencia o rollback candidato; no reejecutar esta persistencia

Etapa 14.1.7 - SOURCE-003 final go/no-go previo a persistencia mart

  • cerrada al 2026-06-18
  • emitir auditoria final GO/NO-GO antes de una primera persistencia real local-dev de python scripts/source_003_importer.py build-mart --execute
  • documento oficial: docs/tenants/alpuntodeventa/business-observer/design/SOURCE-003-BUILD-MART-PERSISTENCE-GO-NOGO-001.md
  • resultado: GO LOCAL-DEV CONDICIONAL / SIN EJECUTAR PERSISTENCIA EN ESTA TAREA
  • controles confirmados: SAFE POINT = a274bc02e62d82175a13c55915718dff8d4cbaff, py_compile = PASS, build-mart = DRY_RUN, build-mart --execute = BLOCKED, WRONG_TOKEN = BLOCKED, token real sin --commit-local-dev-write bloqueado, commit flag incorrecto bloqueado, fingerprint aprobado, postgres-sandbox ausente, RAW = 1886, CORE = 1886, MART = 0/0/0/0, estimates 1/25/173/180, batch preexistente en MART = 0/0/0/0, duplicados por grain 0/0/0/0, constraints 43/43, indices 12/12
  • seguridad: sin INSERT, COPY, UPDATE, DELETE, sin --rollback-rehearsal, sin commit real, sin produccion, sin sync diaria, sin tocar La Directa, runtime O4, VPS, Docker, NPM, Portainer, push ni deploy
  • proximo paso: si se aprueba avanzar, ejecutar la primera persistencia real solo en una tarea separada y con evidencia propia de COMMIT

Etapa 14.1.6 - SOURCE-003 post-commit-gate rollback rehearsal

  • cerrada al 2026-06-18
  • ejecutar el rehearsal autorizado de python scripts/source_003_importer.py build-mart --execute --confirm-local-dev-write SOURCE003_MART_LOCAL_DEV_1886 --rollback-rehearsal despues de agregar --commit-local-dev-write, sin persistencia final
  • documento oficial: docs/tenants/alpuntodeventa/business-observer/design/SOURCE-003-BUILD-MART-POST-COMMIT-GATE-REHEARSAL-001.md
  • resultado: PASS / ROLLED_BACK / SIN DATOS PERSISTIDOS
  • controles confirmados: SAFE POINT = 4032fb837cd75e7602b9ce5bf9b70b459d34964e, build-mart = DRY_RUN, build-mart --execute = BLOCKED, token real sin rollback ni commit bloqueado, commit flag incorrecto bloqueado, --rollback-rehearsal y --commit-local-dev-write mutuamente excluyentes, BEFORE = 1886 / 1886 / 0/0/0/0, INSIDE_TX = 1/25/173/180, AFTER_ROLLBACK = 1886 / 1886 / 0/0/0/0
  • seguridad: db_write_attempted = true, data_persisted = false, transaction_committed = false, rollback_executed = true, sin produccion, sin sync diaria, sin runner, sin scheduler, sin CSV, sin tocar La Directa, runtime O4, Docker, NPM, Portainer, push ni deploy
  • proximo paso: mantener cualquier COMMIT real como tarea separada con doble gate y evidencia propia

Etapa 14.1.5 - SOURCE-003 build-mart commit gate

  • cerrada al 2026-06-18
  • agregar un segundo gate explicito para futura persistencia real de python scripts/source_003_importer.py build-mart --execute
  • documento oficial: docs/tenants/alpuntodeventa/business-observer/design/SOURCE-003-BUILD-MART-COMMIT-GATE-001.md
  • resultado: SEGUNDO GATE IMPLEMENTADO / NO EJECUTADO / SIN PERSISTENCIA
  • controles confirmados: --commit-local-dev-write SOURCE003_MART_LOCAL_DEV_COMMIT_1886, persistencia futura solo con ambos tokens correctos, --rollback-rehearsal y --commit-local-dev-write mutuamente excluyentes, token real sin commit flag y sin rehearsal bloqueado
  • seguridad: build-mart sigue DRY_RUN, build-mart --execute sigue BLOCKED, RAW = 1886, CORE = 1886, MART = 0/0/0/0, sin COMMIT, sin produccion, sin sync diaria, sin runner, sin scheduler, sin tocar La Directa, runtime O4, Docker, NPM, Portainer, push ni deploy
  • proximo paso: habilitar o ejecutar la ruta persistente solo en una tarea separada con evidencia propia

Etapa 14.1.4 - SOURCE-003 build-mart rollback rehearsal

  • cerrada al 2026-06-18
  • ejecutar el write path real de python scripts/source_003_importer.py build-mart --execute sin persistencia final
  • documento oficial: docs/tenants/alpuntodeventa/business-observer/design/SOURCE-003-BUILD-MART-ROLLBACK-REHEARSAL-001.md
  • resultado: PASS / ROLLED_BACK / SIN DATOS PERSISTIDOS
  • controles confirmados: --rollback-rehearsal obligatorio, token real sin rehearsal bloqueado, fingerprint aprobado, postgres-sandbox ausente, RAW = 1886, CORE = 1886, MART BEFORE = 0/0/0/0, INSIDE_TX = 1/25/173/180, AFTER_ROLLBACK = 0/0/0/0
  • seguridad: no hubo COMMIT, data_persisted = false, sin produccion, sin sync diaria, sin runner, sin CSV, sin tocar La Directa, runtime O4, Docker, NPM, Portainer, push ni deploy
  • proximo paso: mantener cualquier modo persistente futuro como tarea y gate separados

Etapa 14.1.3 - SOURCE-003 build-mart write path implementation

  • cerrada al 2026-06-18
  • implementacion en Python del write path futuro para python scripts/source_003_importer.py build-mart --execute
  • documento oficial: docs/tenants/alpuntodeventa/business-observer/design/SOURCE-003-BUILD-MART-WRITE-PATH-IMPLEMENTATION-001.md
  • resultado: IMPLEMENTADO EN PYTHON / NO EJECUTADO / SIN ESCRITURA DB
  • controles confirmados: gate duro --confirm-local-dev-write, token requerido SOURCE003_MART_LOCAL_DEV_1886, fingerprint DB obligatorio, abort si postgres-sandbox, transaccion unica, revalidacion intra-transaccion de RAW = 1886, CORE = 1886, MART = 0/0/0/0, estimates 1/25/173/180, inserts daily -> seller -> customer -> sku y rollback total
  • seguridad: build-mart sigue DRY_RUN; build-mart --execute y confirmacion incorrecta siguen BLOCKED; no hubo escritura DB, produccion ni sync diaria
  • proximo paso: abrir tarea separada solo si se aprueba ejecutar la escritura real local-dev con el token exacto y evidencia dedicada

Etapa 14.1.2 - SOURCE-003 build-mart write path gate design

  • cerrada al 2026-06-18
  • gate documental del write path futuro para python scripts/source_003_importer.py build-mart --execute
  • documento oficial: docs/tenants/alpuntodeventa/business-observer/design/SOURCE-003-BUILD-MART-WRITE-PATH-GATE-001.md
  • SQL candidato: docs/tenants/alpuntodeventa/business-observer/design/sql/007_source_003_build_mart_write_path_candidate.sql
  • resultado: GATE WRITE PATH DOCUMENTADO / NO IMPLEMENTADO / NO EJECUTADO
  • controles confirmados: fingerprint DB obligatorio, abort si postgres-sandbox, revalidacion intra-transaccion de RAW = 1886, CORE = 1886, MART = 0/0/0/0 y estimates 1/25/173/180, abort si MART no esta vacia para el mismo batch/grain, idempotencia por batch/grain, orden de inserts daily -> seller -> customer -> sku, rollback total y evidencia esperada post-write
  • seguridad: sin escrituras DB, sin CSV, sin runner, sin rollback real, sin tocar scripts/source_003_importer.py, La Directa, runtime O4, Docker, NPM, Portainer, push ni deploy
  • proximo paso: abrir una tarea separada solo si se aprueba implementar el gate en Python y seguir manteniendo produccion y sync diaria bloqueadas

Etapa 14.1.1 - SOURCE-003 build-mart execute preflight read-only

  • cerrada al 2026-06-18
  • preflight read-only ejecutado para el siguiente paso de python scripts/source_003_importer.py build-mart --execute
  • documento oficial: docs/tenants/alpuntodeventa/business-observer/design/SOURCE-003-BUILD-MART-EXECUTE-PREFLIGHT-001.md
  • resultado: SAFE POINT PASS, build-mart = DRY_RUN, build-mart --execute = BLOCKED
  • controles confirmados: fingerprint DB aprobado, postgres-sandbox ausente, RAW = 1886, CORE = 1886, MART = 0/0/0/0, estimates 1/25/173/180, constraints e indices MART presentes y sin duplicados de salida por batch/grain
  • seguridad: sin escrituras DB, sin CSV, sin runner, sin rollback, sin tocar La Directa, runtime O4, Docker, NPM, Portainer, push ni deploy
  • proximo paso: preparar una tarea separada para write-path/idempotencia de build-mart --execute; no ejecutar mientras siga BLOCKED

Etapa 0 - Estructura tenant Business Observer

  • crear el espacio documental propio de APV
  • enlazarlo desde el tenant
  • dejar clara la separacion entre Core y APV

Etapa 1 - Vision APV Business Observer

  • explicar que quiere resolver APV
  • aclarar que capacidades hereda del Core
  • aclarar que decisiones son especificas del tenant

Etapa 1.1 - Modelo de gobierno funcional

  • cerrada documentalmente al 2026-06-04
  • documento rector oficial creado para APV
  • autoridad funcional principal del observer declarada
  • glosario ejecutivo, principios rectores y frontera Core vs Tenant consolidados
  • documento oficial: docs/tenants/alpuntodeventa/business-observer/BUSINESS-OBSERVER-GOVERNANCE-MODEL.md

Etapa 2 - Use Case 001 - Clientes en riesgo comercial

  • consolidar el caso de uso activo para APV
  • enlazar al documento global reusable
  • aclarar la lectura comercial especifica del tenant

Etapa 3 - Reglas comerciales Use Case 001

  • consolidar reglas APV ya aprobadas
  • registrar la alerta fuerte de 14 dias sin comprar
  • registrar la jerarquia oficial de prioridades comerciales

Etapa 4 - Use Case 002 - Crecimiento y colocacion estrategica

  • consolidar el segundo frente activo
  • separar claramente crecimiento de riesgo comercial
  • enlazar al documento global reusable

Etapa 5 - Reglas comerciales Use Case 002

  • cerrada documentalmente al 2026-06-03
  • prioridades de colocacion cerradas
  • criterio comercial de siembra y ampliacion cerrado
  • reglas de oportunidades y seguimiento cerradas
  • documento oficial: docs/tenants/alpuntodeventa/business-observer/GROWTH-PLACEMENT-RULES.md

Etapa 6 - Use Case 003 - Impacto y aprendizaje comercial

  • cerrada conceptualmente al 2026-06-03
  • tercer frente oficial del observer definido para APV
  • foco en impacto de acciones comerciales y aprendizaje acumulado
  • documento oficial: docs/tenants/alpuntodeventa/business-observer/IMPACT-AND-LEARNING.md

Etapa 7 - Use Case 004 - Demanda no atendida y oportunidad economica perdida

  • cerrada funcionalmente al 2026-06-03
  • cuarto frente oficial del observer definido para APV
  • foco en pedidos no atendidos, faltantes, sustitucion y oportunidad economica perdida estimada
  • documento oficial: docs/tenants/alpuntodeventa/business-observer/UNSERVED-DEMAND.md

Etapa 8 - Use Case 005 - Calendario operativo e inteligencia temporal

  • cerrada funcionalmente al 2026-06-03
  • quinto frente oficial del observer definido para APV
  • foco en dias trabajados reales, productividad diaria, forecast y cobertura operativa de stock
  • documento oficial: docs/tenants/alpuntodeventa/business-observer/OPERATING-CALENDAR-AND-TIME-INTELLIGENCE.md

Etapa 9 - Use Case 006 - Inteligencia de Mercado y Pricing

  • cerrada funcionalmente al 2026-06-03
  • sexto frente oficial del observer definido para APV
  • foco en mercado, competencia, costo, precio propio, vigencia temporal y criterio comercial de comparabilidad
  • documento oficial: docs/tenants/alpuntodeventa/business-observer/MARKET-PRICING-INTELLIGENCE.md

Etapa 10 - Use Case 007 - Recomendaciones Comerciales Priorizadas

  • cerrada funcionalmente al 2026-06-03
  • septimo frente oficial del observer definido para APV
  • foco en transformar senales de UC001 a UC006 en recomendaciones explicadas, priorizadas y accionables
  • documento oficial: docs/tenants/alpuntodeventa/business-observer/PRIORITIZED-COMMERCIAL-RECOMMENDATIONS.md

Etapa 11 - Use Case 008 - Inteligencia de Surtido y Mix

  • cerrada funcionalmente al 2026-06-04
  • octavo frente oficial del observer definido para APV
  • foco en detectar huecos de surtido, mix pobre, cliente subdesarrollado, SKU natural siguiente y oportunidades de cross-selling y up-selling
  • documento oficial: docs/tenants/alpuntodeventa/business-observer/ASSORTMENT-AND-MIX-INTELLIGENCE.md

Etapa 12 - Use Case 009 - Inteligencia de Proveedores y Abastecimiento

  • cerrada funcionalmente al 2026-06-04
  • noveno frente oficial del observer definido para APV
  • foco en proveedores, faltantes, quiebres, productos reclamados, SKU criticos, marcas estrategicas e impacto comercial de abastecimiento
  • documento oficial: docs/tenants/alpuntodeventa/business-observer/SUPPLIER-AND-SUPPLY-INTELLIGENCE.md

Etapa 13 - Definicion de datos necesarios

  • cerrada documentalmente al 2026-06-04
  • auditoria de fundacion de datos creada para UC001 a UC009
  • datos minimos, deseables, faltantes probables, entidades y fuentes ya identificados en nivel funcional
  • documento oficial: docs/tenants/alpuntodeventa/business-observer/BUSINESS-OBSERVER-DATA-FOUNDATION-AUDIT-001.md

Etapa 14 - Contrato de fuentes de datos

  • acordar que fuente deberia sostener cada lectura
  • aclarar owner y alcance por tenant
  • mantener trazabilidad con source_system

Etapa 14.0 - Contrato funcional de datos

  • cerrada documentalmente al 2026-06-04
  • contrato funcional creado para ordenar que datos consume cada UC
  • catalogo funcional de datos, matriz UC001-UC009 y niveles MVP consolidados
  • documento oficial: docs/tenants/alpuntodeventa/business-observer/BUSINESS-OBSERVER-DATA-CONTRACT-001.md

Etapa 14.1 - Inventario real de fuentes existentes

  • iniciada documentalmente al 2026-06-05
  • primera fuente real de clientes registrada: SOURCE-001 - ecommerce.dbo.VCLIENTES
  • fuente real de productos registrada: SOURCE-002 - Maestro de productos
  • fuente complementaria real de imagenes registrada: SOURCE-002B - WooCommerce imagenes por SKU
  • fuente real calculada registrada para ventas y comprobantes: SOURCE-003 - Tabla 2 / BalanceCtaCteFinal / vNext candidate
  • preservacion documental cerrada para SOURCE-003: autoridad anterior retenida + nueva query completa vNext candidate
  • decision documental cerrada para SOURCE-003: solo Tabla 2 se sincroniza; Tabla 1/3/4/5/6 quedan como reportes derivados reconstruibles
  • decision documental cerrada para SOURCE-003 vNext: source_003_sales_items queda como base conceptual futura de sync
  • registro oficial de autoridad de fuentes creado: SOURCE-AUTHORITY-REGISTRY
  • preservacion verificada: SOURCE-001 completa, SOURCE-002 completa, SOURCE-003 completa
  • SOURCE-002 queda actualizada como autoridad vigente completa del maestro de productos y ya no solo como catalogo por SKU
  • confirmacion humana incorporada: Gabi confirma que la nueva query de SOURCE-002 es la autoridad vigente y que SKU NOT IN ('0124', '3857', '3998', '3793') es la primera lista conocida de exclusiones operativas
  • razon de negocio incorporada: esos SKU pueden corresponder a articulos del SGC usados para operaciones internas o no tradicionales de compra/venta y por eso no deben importarse como productos comerciales normales
  • SOURCE-001 queda cerrada con la SELECT_CUSTOMERS_SQL preservada desde el script de sincronizacion de clientes aportado por Gabi
  • criterio canonico incorporado para SOURCE-001: tenant_id + codigo_cliente
  • canonicalizacion recomendada incorporada para SOURCE-001: codigo_cliente = NULLIF(LTRIM(RTRIM([Codigo])), '')
  • regla documental cerrada para SOURCE-001: cualquier separacion futura entre customers_core, customers_contact, customers_address, customers_tax, customers_commercial, customers_sales_owner y customers_visit_schedule es logica y no una multiplicacion de clientes
  • regla futura de sync cerrada para SOURCE-001: la extraccion base no debe agregar WHERE Estado = 'CLIENTE ACTIVO'
  • regla futura de preservacion cerrada para SOURCE-001: la base sincronizada debe conservar CLIENTE ACTIVO, CLIENTE SUSPENDIDO y CLIENTE DE BAJA
  • regla futura de consumo cerrada para SOURCE-001: filtros de venta o facturacion solo en vistas o capas de consumo y no en la base sincronizada
  • regla futura de modelado cerrada para SOURCE-001: Estado del SGC debe preservarse como estado_raw
  • regla futura anti hard-delete cerrada para SOURCE-001: suspension o baja comercial no habilitan hard delete en futuro Postgres
  • regla futura de interpretacion cerrada para SOURCE-001: desaparicion de una extraccion completa no equivale a Estado = CLIENTE DE BAJA
  • recovery report de query registrado: SOURCE-002-QUERY-RECOVERY-REPORT
  • fuente funcional futura registrada para inventario diario: SOURCE-002C - Snapshot diario de inventario a las 17:00
  • fuente funcional futura registrada para stock actual liviano: SOURCE-002D - Stock intradiario liviano cada 10 minutos
  • mapeo conceptual futuro documentado para SOURCE-002: SOURCE-002-FUTURE-LAYER-MAPPING
  • decision documental especifica cerrada para la capa economica futura de SOURCE-002: SOURCE-002-ECONOMIC-LAYER
  • regla transversal cerrada documentalmente: historicos por valor de decision para costo, precio, listas, IVA, margen, descuento, quiebres, recuperaciones, ingresos y snapshots utiles
  • validacion documental agregada con ejemplo real: L7 para SKU 0135 y SKU 0128
  • capa funcional futura documentada para eventos derivados de inventario: Inventory Events Layer - Eventos de inventario
  • separacion documental ya cerrada a nivel conceptual para: producto maestro, stock intradiario, snapshot diario y trazabilidad de precios, costos, impuestos, margenes y descuentos
  • criterio estructural ya cerrado: listas de precios como filas normalizadas por SKU + lista_codigo y no como columnas fijas L1..L9 en la capa destino principal
  • criterio canonico ya cerrado: tenant_id + SKU como clave del dominio producto para toda lectura derivada desde SOURCE-002
  • regla documental ya cerrada: proveedor y marca deben analizarse desde los SKU asociados; Cod Proveedor queda como identificador de negocio, Proveedor como nombre legible y Marca como atributo comercial del SKU
  • decision documental ya cerrada para SOURCE-003: la autoridad real es la query completa preservada y no V_VENTAS sola
  • decision documental ya cerrada para SOURCE-003: la logica contempla comprobantes que corrigen o anulan segun tipo y signo
  • decision documental ya cerrada para SOURCE-003: la version hoy preservada queda registrada como vNext candidate y no como autoridad final productiva hasta ampliar la validacion de Tabla 2
  • decision documental ya cerrada para SOURCE-003: la nueva autoridad candidata queda preservada en SOURCE-003-VENTAS-VNEXT-TABLA2-AUTHORITY.sql sin borrar la autoridad anterior SOURCE-003-VENTAS-TABLA2-AUTHORITY.sql
  • validacion real controlada de SOURCE-003 / Tabla 2 vNext: resultado VERDE para ventana 2026-06-08, con line_key_v1 y source_row_hash_v1 propuestos antes de produccion
  • intento posterior de carga piloto real: detenido antes de insertar porque la extraccion actual de 2026-06-08 devolvio 1262 filas contra 1269 esperadas y no concilio importe total ni CMV
  • inventario documental posterior de SOURCE-003 / Tabla 2 V2: el snapshot 2026-06-09 confirma 68 columnas reales, identifica 31 columnas faltantes o solo consolidadas en el DDL piloto previo, crea diccionario completo y mapping CSV/PostgreSQL; aprobacion humana posterior de Gabi acepta cobertura, persistencia de 68 columnas y source_row_hash_v1 para piloto controlado
  • carga piloto controlada posterior de SOURCE-003-SNAPSHOT-001: el CSV congelado de 2026-06-09 quedo cargado en business_observer.source_003_sales_items con 1886 filas, 68/68 columnas de negocio contempladas, line_key_v4 sin duplicados, source_row_hash_v1 completo, conciliacion de importe total / CMV en verde y produccion final bloqueada
  • diseno DDL documental de source_003_sales_items: creado en design/SOURCE-003-SALES-ITEMS-DDL-DESIGN.md con SQL documental no ejecutable en design/sql/001_source_003_sales_items_design.sql
  • paquete DDL piloto revisable para DB dedicada: design/SOURCE-003-DEDICATED-DB-DDL-PILOT-PACKAGE.md, forward, rollback y post-checks preparados como NO EJECUTAR, sin SQL ejecutado y sin datos
  • pendiente futuro documentado: SOURCE-003-PYTHON-POSTGRES-REPLICATION-DESIGN.md para logica original, logica equivalente simplificada y checklist de paridad
  • lectura estructural ya validada: L1..L9 repiten en horizontal el patron MargenLn, PrecioLn, IVAPrecioLn y PrecioNetoLn, por lo que deben convertirse a filas normalizadas en destino
  • normalizacion del origen ya explicita: SOURCE-002 no replica datos crudos sin mas; convierte formatos poco utiles del ERP / SGC mediante CAST, ROUND, RTRIM, calculos de IVA, stock en bultos, palletizado, conversion de fechas y exclusiones configurables de SKU
  • evidencia real agregada al 2026-06-08 para SOURCE-001: consulta de solo lectura ejecutada sobre ecommerce.dbo.VCLIENTES con distribucion agregada de Estado, confirmando solo CLIENTE ACTIVO, CLIENTE DE BAJA y CLIENTE SUSPENDIDO, sin valores inesperados y con Fecha_Baja totalmente alineada con CLIENTE DE BAJA
  • evidencia real agregada al 2026-06-08 para SOURCE-001: consulta de solo lectura ejecutada sobre ecommerce.dbo.VCLIENTES con unicidad perfecta de Codigo normalizado, sin nulos, vacios ni duplicados y con respaldo real para tenant_id + codigo_cliente como clave logica
  • evidencia real agregada al 2026-06-08 para SOURCE-001: consulta de solo lectura ejecutada sobre ecommerce.dbo.VCLIENTES con calidad real de Telefono usado como WhatsApp, observando 7107 informados, 4294 vacios, 350 telefonos repetidos distintos entre clientes y semaforo recomendado AMARILLO
  • evidencia real agregada al 2026-06-08 para SOURCE-001: consulta de solo lectura ejecutada sobre ecommerce.dbo.VCLIENTES con vendedor completo y consistente, observando 11404/11404 Codigo_vendedor y Nombre_Vendedor informados, 76 pares codigo + nombre distintos y relacion 1:1 sin inconsistencias
  • evidencia real agregada al 2026-06-08 para SOURCE-001: consulta de solo lectura ejecutada sobre ecommerce.dbo.VCLIENTES con frecuencia completa y consistente, observando 11404/11404 CodFrec y Frecuencia informados, 4 pares cod_frec + frecuencia consistentes y campos diarios observados solo como S, N y NULL/VACIO
  • evidencia real agregada al 2026-06-08 para SOURCE-001: consulta de solo lectura ejecutada sobre ecommerce.dbo.VCLIENTES con territorialidad completa en Localidad y Provincia, casi completa en Zona, observando 24 provincias, 516 localidades y 365 zonas distintas, con semaforo recomendado AMARILLO por dispersion textual y mezcla multi-provincia en parte del catalogo de zonas
  • primer mapeo origen-destino documentado al 2026-06-08 para SOURCE-001: mappings/SOURCE-001-CLIENTES-MAPPING.md
  • aplicacion documental explicita de DATA-DESIGN-STANDARD en SOURCE-001: identidad fuerte por tenant_id + codigo_cliente, separacion por bloques logicos de cliente, auditoria de sync con source_row_hash, sync_batch_id, extracted_at, last_seen_at, created_at y updated_at, y preservacion de estado_raw, customer_status y can_sell
  • frontera preservada: el mapeo no cierra todavia normalizacion definitiva de WhatsApp, catalogo real de alias territoriales, decision de geocodificacion futura ni estrategia final de tablas fisicas
  • estrategia territorial canonica documentada al 2026-06-08: territory/TERRITORY-NORMALIZATION-STRATEGY.md
  • catalogo documental inicial de alias territoriales documentado al 2026-06-08: territory/TERRITORY-ALIAS-CATALOG-001.md
  • paquete de revision humana documentado al 2026-06-08: territory/TERRITORY-HUMAN-REVIEW-001.md
  • decision documental cerrada para territorio: Provincia y Localidad se preservan como raw + normalized; Zona se preserva como raw + type + normalized, queda definida como agrupacion logistica y no como geografia pura ni como territorio comercial del vendedor
  • decision documental cerrada para ownership: Zona no define vendedor responsable; el ownership sale de Codigo_vendedor / Nombre_Vendedor
  • decision documental cerrada para territorio comercial: la lectura territorial del vendedor debe derivarse de clientes asignados, geografia, ventas y productos
  • vista analitica conceptual futura documentada al 2026-06-09: analytics/SELLER-COMMERCIAL-TERRITORY-VIEW.md
  • documento conceptual futuro documentado al 2026-06-09 para reconciliar vendedor asignado y vendedor transaccional: analytics/SELLER-RECONCILIATION-RULES.md
  • documento conceptual futuro documentado al 2026-06-09 para identificar quien trabaja realmente cada cliente: analytics/CUSTOMER-OWNERSHIP-ANALYTICS.md
  • decision documental cerrada para esa vista futura: capa derivada de analytics, no fuente primaria
  • decision documental cerrada para esa vista futura: granularidad recomendada tenant_id + periodo + vendedor + cliente + SKU
  • decision documental cerrada para esa vista futura: filtros minimos por vendedor, periodo, cliente, estado, geografia, zona logistica, SKU, marca, proveedor y categoria
  • decision documental cerrada para reconciliacion de vendedor: SOURCE-001 define seller_assigned, SOURCE-003 define seller_transactional, las ventas reales se atribuyen al vendedor transaccional y la diferencia entre ambos se preserva como senal analitica
  • validacion real exploratoria agregada al 2026-06-09: ventana 90 dias con 97885 ventas validas exploratorias, 95690 coincidencias assigned vs transactional, 2195 mismatch (2.24%), 47 clientes con ultima venta hecha por otro vendedor y semaforo recomendado AMARILLO por ambiguedad documental de canal compartido / ecommerce
  • taxonomia funcional parcial de canal agregada al 2026-06-09: TRADIC y KIOSCO quedan utilizables como traditional_seller, NULL/VACIO -> SIN ASIGNAR queda utilizable como unassigned y OTROS queda utilizable solo con apoyo de Ramo, sin cerrar todavia ecommerce o shared_channel
  • decision documental cerrada para customer ownership analytics: ownership_assigned sale de SOURCE-001, ownership_last_sale y la autoria real salen de SOURCE-003, ownership_growth debe apoyarse en SOURCE-003 + SOURCE-002 y ownership_effective queda como capa derivada futura con ventana temporal pendiente
  • decision documental cerrada adicional para customer ownership analytics: la etapa deja explicitamente cubiertos abandono, recuperacion, crecimiento, cuentas desarrolladas por terceros y futura alimentacion de KPIs, alertas, automatizaciones, ML e IA
  • frontera preservada adicional: quedan pendientes SQL real, creacion fisica, validacion con datos, performance real y permisos de consumo
  • frontera preservada adicional: quedan pendientes umbrales de abandono, ventana temporal de cuenta trabajada y reglas finales de ecommerce o canales compartidos
  • frontera preservada adicional: quedan pendientes umbrales y ventanas para abandono, recuperacion, crecimiento y ownership efectivo por cliente
  • frontera preservada adicional: el catalogo inventaria aliases y normalizacion de Zona, pero no cierra todavia carga real, aprobacion humana final ni diseno fisico
  • frontera preservada adicional: la revision humana queda preparada para que Gabi valide aliases y casos ambiguos de Zona antes del diseno fisico de SOURCE-001
  • validar campo por campo que datos existen de verdad en APV
  • medir calidad, cobertura y vigencia por entidad
  • confirmar que dato es oficial, relevado o estimado

Etapa 14.2 - Piloto PostgreSQL SOURCE-003 sales items

  • cerrada como piloto controlado al 2026-06-10
  • objeto creado: business_observer.source_003_sales_items
  • ambiente: PostgreSQL 15.15 local, base gestion_de_negocios_core
  • documento oficial: docs/tenants/alpuntodeventa/business-observer/design/SOURCE-003-SALES-ITEMS-PILOT-MIGRATION.md
  • SQL ejecutado: docs/tenants/alpuntodeventa/business-observer/design/sql/002_source_003_sales_items_pilot_migration.sql
  • rollback preparado: docs/tenants/alpuntodeventa/business-observer/design/sql/002_source_003_sales_items_pilot_rollback.sql
  • resultado: migracion en verde, tabla vacia al cierre, insert sintetico validado y borrado, rollback no ejecutado
  • restricciones preservadas: sin VPS, sin Docker, sin OpenClaw, sin NPM, sin sync diaria, sin carga masiva, sin automatizacion y sin produccion final

Etapa 14.3 - Intento carga piloto SOURCE-003 sales items

  • detenida al 2026-06-10
  • documento oficial: docs/tenants/alpuntodeventa/business-observer/design/SOURCE-003-SALES-ITEMS-PILOT-LOAD.md
  • alcance: extraccion real de SOURCE-003 / Tabla 2 vNext para 2026-06-08
  • resultado: 1262 filas observadas contra 1269 esperadas
  • conciliacion: importe total y CMV no pasaron contra la evidencia previa
  • carga: no ejecutada, sin INSERT, sin UPSERT y sin filas persistidas
  • destino: business_observer.source_003_sales_items quedo vacia
  • proximo paso: preservado como historico; la carga piloto exitosa se documenta en la etapa 14.5

Etapa 14.4 - Diccionario y mapping Tabla 2 V2

  • estado: aprobado para piloto controlado / produccion final bloqueada
  • snapshot revisado: SOURCE-003-SNAPSHOT-001 para 2026-06-09
  • resultado: 68 columnas reales inventariadas
  • brecha DDL piloto previo: 31 columnas faltantes o solo consolidadas
  • entregables: data-dictionary/SOURCE-003-TABLA2-COLUMN-DICTIONARY.md y design/SOURCE-003-SALES-ITEMS-COLUMN-MAPPING.md
  • decision: Gabi aprueba diccionario, mapping y persistencia de las 68 columnas reales para piloto controlado desde SOURCE-003-SNAPSHOT-001 contra PostgreSQL local
  • restricciones: sin sync diaria, sin carga masiva y sin produccion final

Etapa 14.5 - Carga piloto 001 SOURCE-003 sales items

  • estado: ejecutada / dataset piloto cargado / produccion final bloqueada
  • fecha: 2026-06-10
  • documento oficial: docs/tenants/alpuntodeventa/business-observer/design/SOURCE-003-SALES-ITEMS-PILOT-LOAD-001.md
  • fuente: SOURCE-003-SNAPSHOT-001, CSV congelado con sha256 07092c284b5b636b8a31cd616ef5b4fa5d0ce499b81c767437842b1f7edfcbc3
  • destino: business_observer.source_003_sales_items, PostgreSQL local, base gestion_de_negocios_core
  • resultado: 1886 filas cargadas, 68/68 columnas de negocio contempladas y 83 columnas fisicas finales
  • conciliacion: importe total 48087486.8300, CMV total 37881269.3025, clientes unicos 173, vendedores unicos 25, SKU unicos 180, comprobantes unicos 428 y Hora vacia 0
  • identidad: line_key_v4 con 1886 distinct y 0 duplicados; line_sequence_v1 y source_row_hash_v1 no nulos
  • rollback: no ejecutado porque las validaciones pasaron y el commit fue exitoso
  • restricciones: sin SGC vivo para cargar, sin VPS, sin Docker, sin OpenClaw, sin NPM, sin sync diaria, sin carga masiva y sin produccion final
  • proximo paso: revision humana de evidencia y decision explicita sobre un siguiente piloto de ventana movil/backfill

Etapa 14.6 - Paquete DDL piloto DB dedicada SOURCE-003

  • estado: preparado / apto para revision / no ejecutar
  • fecha: 2026-06-11
  • destino previsto: openclaw_business_observer_dev.business_observer.source_003_sales_items
  • documento oficial: docs/tenants/alpuntodeventa/business-observer/design/SOURCE-003-DEDICATED-DB-DDL-PILOT-PACKAGE.md
  • SQL forward: docs/tenants/alpuntodeventa/business-observer/design/sql/003_source_003_dedicated_db_ddl_pilot_forward.sql
  • rollback: docs/tenants/alpuntodeventa/business-observer/design/sql/003_source_003_dedicated_db_ddl_pilot_rollback.sql
  • post-checks: docs/tenants/alpuntodeventa/business-observer/design/sql/003_source_003_dedicated_db_ddl_pilot_post_checks.sql
  • alcance: 83 columnas fisicas, 68 columnas reales de negocio, line_key_v4, source_row_hash_v1, indices operativos y grants minimos para roles openclaw_bo_admin, openclaw_bo_writer y openclaw_bo_reader
  • restricciones: no se ejecuto SQL, DDL, DML, carga, sync, Docker, VPS, OpenClaw, NPM ni deploy; gestion_de_negocios_core no se toca para este paquete
  • proximo paso: revision humana y aprobacion explicita antes de cualquier ejecucion

Etapa 14.7 - Preflight carga piloto DB dedicada SOURCE-003

  • estado: preflight pass / listo para autorizacion de carga
  • fecha: 2026-06-11
  • destino previsto: openclaw_business_observer_dev.business_observer.source_003_sales_items
  • documento oficial: docs/tenants/alpuntodeventa/business-observer/design/SOURCE-003-PILOT-LOAD-PREFLIGHT-001.md
  • artefacto validado: C:\APV\openclawai\snapshots\source-003\prepared\SOURCE-003-PILOT-LOAD-DEDICATED-DB-2026-06-09.csv
  • evidencia: 83 columnas, 1886 filas, fecha unica 2026-06-09, sha256 3f16a957a79fc84d4ca37930988287cb81f05166210d057fcf8b45007f184afe, sync_batch_id 1827f887-9499-4579-b4f3-234d54f41f7f, CSV fuera de Git, DB dedicada y SQL preflight autorizado pasados
  • restricciones: no se ejecuto candidate, INSERT, COPY, rollback, sync diaria, carga masiva ni produccion final; tabla final vacia con 0 filas
  • proximo paso: autorizacion humana separada antes de ejecutar candidate load

Etapa 14.8 - Candidate load piloto DB dedicada SOURCE-003

  • estado: carga piloto fallida / rojo
  • fecha: 2026-06-11
  • documento oficial: docs/tenants/alpuntodeventa/business-observer/design/SOURCE-003-PILOT-LOAD-EXECUTION-001.md
  • destino: openclaw_business_observer_dev.business_observer.source_003_sales_items
  • batch autorizado: 1827f887-9499-4579-b4f3-234d54f41f7f
  • evidencia: SAFE POINT exacto en 9d7d622354176daa34ce0762bb97da8eb993695d; CSV preparado local revalidado con 83 columnas, 1886 filas, fecha unica 2026-06-09, sha256 3f16a957a79fc84d4ca37930988287cb81f05166210d057fcf8b45007f184afe; DB destino validada vacia y SQL preflight autorizado pasado
  • resultado: el SQL candidate autorizado fallo en la linea 104 por \copy: error de procesamiento al final de la linea; no se ejecutaron post-checks
  • rollback: no aplica; tabla final 0 filas y batch autorizado 0 filas
  • restricciones: sin sync diaria, sin carga masiva, sin produccion final, sin gestion_de_negocios_core, sin VPS, sin Docker, sin OpenClaw, sin NPM, sin push y sin deploy
  • proximo paso: revision humana del SQL candidate y nueva autorizacion explicita antes de reintentar

Etapa 14.9 - Reintento carga piloto DB dedicada SOURCE-003

  • estado: carga piloto ejecutada / verde
  • fecha: 2026-06-11
  • documento oficial: docs/tenants/alpuntodeventa/business-observer/design/SOURCE-003-PILOT-LOAD-EXECUTION-002.md
  • destino: openclaw_business_observer_dev.business_observer.source_003_sales_items
  • batch autorizado: 1827f887-9499-4579-b4f3-234d54f41f7f
  • evidencia: SAFE POINT exacto en e89cbcca366602190cec9ceb385531f7c68d6957; CSV preparado local revalidado con 83 columnas, 1886 filas, fecha unica 2026-06-09, sha256 3f16a957a79fc84d4ca37930988287cb81f05166210d057fcf8b45007f184afe; DB destino validada vacia y batch ausente
  • resultado: preflight autorizado paso; candidate autorizado ejecuto COPY 1886, INSERT 0 1886 y COMMIT; post-checks autorizados pasaron
  • estado final DB: 1886 filas finales del batch autorizado, fecha unica 2026-06-09, metadata exacta, sin duplicados, sin nulos criticos y conciliacion de importe/CMV en verde
  • rollback: no aplica; candidate y post-checks pasaron
  • restricciones: sin sync diaria, sin carga masiva, sin produccion final, sin gestion_de_negocios_core, sin VPS, sin Docker, sin OpenClaw, sin NPM, sin push y sin deploy
  • proximo paso: revision humana de evidencia y decision separada sobre siguiente piloto de ventana movil o estrategia de operacion futura sobre la DB dedicada

Etapa 14.10 - Generador Python prepared CSV SOURCE-003

  • estado: generador creado / reproducible estructural / sha diferente
  • fecha: 2026-06-11
  • script: scripts/source_003_prepare_csv.py
  • documento oficial: docs/tenants/alpuntodeventa/business-observer/design/SOURCE-003-PREPARED-CSV-PYTHON-GENERATOR-001.md
  • objetivo: generar el CSV preparado de 83 columnas desde el snapshot raw congelado, sin tocar PostgreSQL
  • output generado: snapshots/source-003/prepared/generated/SOURCE-003-PILOT-LOAD-DEDICATED-DB-2026-06-09.generated.csv
  • evidencia: 1886 filas, 83 columnas, raw sha256 07092c284b5b636b8a31cd616ef5b4fa5d0ce499b81c767437842b1f7edfcbc3, output sha256 6fb44d9870a567e728df9bbdcc6b83279d84791bd732626c9e19ccf3a28dc903
  • comparacion: REPRODUCIBLE ESTRUCTURAL / SHA DIFERENTE contra el CSV preparado validado; 82/83 columnas coinciden celda por celda y la diferencia queda acotada a id en 1886 filas
  • restricciones: sin PostgreSQL, sin SQL, sin psql, sin carga de datos, sin sync diaria, sin carga masiva, sin produccion final, sin VPS, sin Docker, sin OpenClaw, sin NPM, sin push y sin deploy
  • proximo paso: decidir si se acepta el UUID v5 deterministico del script o si se recupera la formula exacta del id del CSV validado

Etapa 14.11 - Runner Python controlado SOURCE-003

  • estado: runner creado / solo modo seguro ejecutado
  • fecha: 2026-06-11
  • script: scripts/source_003_pilot_load_runner.py
  • documento oficial: docs/tenants/alpuntodeventa/business-observer/design/SOURCE-003-PILOT-LOAD-PYTHON-RUNNER-001.md
  • objetivo: preparar la futura orquestacion controlada preflight -> candidate load -> post-checks -> rollback seguro
  • comandos implementados: plan, validate-files, dry-run, preflight, status, verify-existing-pilot, post-checks, load, rollback, full
  • alcance ejecutado en esta etapa: solo --help, plan, validate-files y dry-run
  • guardas: cualquier modo con DB exige --execute, --i-understand-this-touches-db, confirmacion exacta de DB, batch y CSV sha256, mas variables APV_BO_LOCAL_POSTGRES_*
  • restriccion adicional vigente: load, rollback y full quedan bloqueados en esta revision porque la evidencia vigente dice que la tabla dedicada ya contiene 1886 filas del batch piloto verde
  • restricciones: sin PostgreSQL, sin SQL, sin psql, sin carga, sin rollback ejecutado, sin sync diaria, sin carga masiva, sin produccion final, sin VPS, sin Docker, sin OpenClaw, sin NPM, sin push y sin deploy
  • proximo paso: abrir un nuevo gate explicito si alguna vez se necesitara volver a tocar la DB dedicada y, por separado, decidir la semantica final de id del CSV preparado

Etapa 14.12 - Semantica status/preflight del runner SOURCE-003

  • estado: semantica definida / documentada / sin tocar DB
  • fecha: 2026-06-12
  • objetivo: separar explicitamente el gate preflight-before-load de la verificacion read-only de un piloto ya cargado
  • documento oficial: docs/tenants/alpuntodeventa/business-observer/design/SOURCE-003-PILOT-LOAD-PYTHON-RUNNER-001.md
  • decision: preflight queda como validacion estricta de tabla vacia antes de una carga nueva; status / verify-existing-pilot quedan definidos como verificacion read-only del piloto ya cargado; post-checks queda como alias legacy
  • alcance funcional de status: batch exacto 1827f887-9499-4579-b4f3-234d54f41f7f, 1886 filas exactas, fecha unica 2026-06-09, metadata exacta, 0 nulos criticos, 0 duplicados y line_key / source_row_hash validos
  • restriccion permanente: ningun PASS de status habilita load, full, rollback, sync diaria, carga masiva ni produccion final
  • proximo paso: si hiciera falta otra validacion DB dedicada en solo lectura, abrir un gate separado y usar status / verify-existing-pilot; reservar preflight para tabla vacia antes de una carga nueva autorizada

Etapa 14.13 - Arquitectura futura de capas Business Observer

  • estado: documentada / no ejecutiva
  • fecha: 2026-06-15
  • documento oficial: docs/tenants/alpuntodeventa/business-observer/design/BUSINESS-OBSERVER-DATA-LAYERS-ARCHITECTURE.md
  • objetivo: definir el patron futuro reutilizable raw -> prepared CSV -> core -> mart -> Python importer/runner -> OpenClaw executor -> sync futura
  • alcance: definicion de capas, estado actual SOURCE-003, bloqueos antes de sync y regla de reutilizacion para futuros frentes de clientes y productos
  • decision: ARQUITECTURA FUTURA DOCUMENTADA / NO EJECUTIVA
  • restricciones: sin sync diaria, sin carga masiva, sin produccion final, sin SQL, sin runner, sin importer formal, sin OpenClaw executor, sin VPS, sin Docker, sin NPM, sin push y sin deploy

Etapa 14.14 - Importer Python seguro SOURCE-003

  • estado: inspect-source, generate-prepared y validate-prepared implementados / no DB
  • fecha: 2026-06-15
  • script: scripts/source_003_importer.py
  • documento oficial: docs/tenants/alpuntodeventa/business-observer/design/SOURCE-003-PYTHON-IMPORTER-SKELETON-001.md
  • evidencia oficial: docs/tenants/alpuntodeventa/business-observer/design/SOURCE-003-IMPORTER-GENERATE-PREPARED-001.md
  • objetivo: implementar comandos locales seguros del importer formal de SOURCE-003 alineados al contrato publicado, sin tocar DB
  • comandos seguros implementados: plan, validate-contract, dry-run, inspect-source y generate-prepared, mas validate-prepared como validacion read-only de CSV prepared historico y generated existente
  • comandos futuros declarados pero bloqueados: load-raw, promote-core, build-mart, status y rollback-batch
  • evidencia: generate-prepared genera snapshots/source-003/prepared/generated/SOURCE-003-PILOT-LOAD-DEDICATED-DB-2026-06-09.generated.csv, con 1886 filas, 83 columnas, sha256 6fb44d9870a567e728df9bbdcc6b83279d84791bd732626c9e19ccf3a28dc903 y comparacion REPRODUCIBLE ESTRUCTURAL ACEPTADO; 82/83 columnas coinciden contra el CSV prepared validado y la diferencia esperada queda en id por UUID v5 deterministico
  • evidencia validate-prepared: prepared historico y generated existente fuera de Git, SHA256 esperados, 1886 filas, 83 columnas, fecha unica 2026-06-09, batch 1827f887-9499-4579-b4f3-234d54f41f7f, record_status = active, source_row_hash y line_key no vacios, comparacion REPRODUCIBLE ESTRUCTURAL ACEPTADO con 82/83 columnas coincidentes y diferencia esperada en id
  • restricciones: sin PostgreSQL, sin SQL, sin psql, sin runner, sin reemplazar el CSV prepared validado, sin carga, sin sync diaria, sin carga masiva, sin produccion final, sin VPS, sin Docker, sin OpenClaw, sin NPM, sin push y sin deploy

Etapa 14.15 - Contrato RAW SOURCE-003

  • estado: documentado / no implementado
  • fecha: 2026-06-15
  • documento oficial: docs/tenants/alpuntodeventa/business-observer/design/SOURCE-003-RAW-LAYER-CONTRACT.md
  • objetivo: formalizar la capa raw de SOURCE-003 como evidencia gobernada del origen antes de prepared CSV, core y mart
  • alcance: proposito de raw, que conserva del origen, diferencia entre raw snapshot, prepared CSV y raw table futura, columnas minimas, metadata obligatoria, batch, idempotencia, deduplicacion, validaciones, errores, rollback por batch y relacion raw -> core
  • decision: CONTRATO RAW DOCUMENTADO / NO IMPLEMENTADO
  • restricciones: sin tabla raw, sin DDL, sin SQL, sin PostgreSQL, sin runner, sin generar CSV, sin carga, sin sync diaria, sin carga masiva, sin produccion final, sin OpenClaw executor, sin VPS, sin Docker, sin NPM, sin push y sin deploy

Etapa 14.16 - Contrato CORE SOURCE-003

  • estado: documentado / no implementado
  • fecha: 2026-06-15
  • documento oficial: docs/tenants/alpuntodeventa/business-observer/design/SOURCE-003-CORE-LAYER-CONTRACT.md
  • objetivo: formalizar la capa core de SOURCE-003 como modelo gobernado de negocio entre evidencia raw / prepared CSV y futuros mart
  • alcance: proposito de core, diferencia entre raw, prepared CSV y core, criterios de promocion raw -> core, columnas candidatas, claves logicas, normalizacion, tipos, deduplicacion, idempotencia, validaciones, errores, rollback logico por batch y relacion core -> mart
  • decision: CONTRATO CORE DOCUMENTADO / NO IMPLEMENTADO
  • restricciones: sin tabla core, sin DDL, sin SQL, sin PostgreSQL, sin runner, sin generar CSV, sin carga, sin sync diaria, sin carga masiva, sin produccion final, sin OpenClaw executor, sin VPS, sin Docker, sin NPM, sin push y sin deploy

Etapa 14.17 - Contrato MART SOURCE-003

  • estado: documentado / no implementado
  • fecha: 2026-06-15
  • documento oficial: docs/tenants/alpuntodeventa/business-observer/design/SOURCE-003-MART-LAYER-CONTRACT.md
  • objetivo: formalizar la capa mart de SOURCE-003 como consumo analitico gobernado desde core, antes de dashboards, reportes, consultas LLM o executor
  • alcance: proposito de mart, diferencia entre raw, core y mart, criterios de promocion core -> mart, marts candidatos iniciales, metricas, dimensiones, granularidad, claves, trazabilidad, validaciones, errores, refresh/rebuild futuro, rollback logico o rebuild por batch y relacion con dashboards, reportes y consultas LLM futuras
  • decision: CONTRATO MART DOCUMENTADO / NO IMPLEMENTADO
  • restricciones: sin tabla mart, sin DDL, sin SQL, sin PostgreSQL, sin runner, sin generar CSV, sin carga, sin sync diaria, sin carga masiva, sin produccion final, sin dashboards productivos, sin consultas LLM operativas, sin OpenClaw executor, sin VPS, sin Docker, sin NPM, sin push y sin deploy

Etapa 14.18 - Hito SOURCE-003 Data Layers publicado

  • estado: documentado / publicado / no implementado en DB
  • fecha: 2026-06-15
  • documento oficial: docs/tenants/alpuntodeventa/business-observer/design/SOURCE-003-DATA-LAYERS-MILESTONE.md
  • HEAD publicado: 8d08ec8f34dd5347833ff7e1cd632a88c0a04cb0
  • alcance: contratos RAW, CORE y MART publicados; separacion raw / prepared CSV / core / mart; trazabilidad por sync_batch_id, line_key y source_row_hash; validaciones e idempotencia documentadas; relacion futura con dashboards, reportes y consultas LLM
  • restricciones: sin sync diaria, sin carga masiva, sin produccion final, sin OpenClaw executor, sin uso de postgres-sandbox como produccion, sin SQL, sin PostgreSQL, sin runner, sin CSV generado, sin carga, sin VPS, sin Docker, sin OpenClaw, sin NPM, sin push y sin deploy
  • proximo paso: plan controlado de load-raw documentado en etapa 14.19, todavia sin implementacion ni ejecucion contra DB

Etapa 14.19 - Plan load-raw importer SOURCE-003

  • estado: documentado / no implementado / no ejecutable
  • fecha: 2026-06-15
  • documento oficial: docs/tenants/alpuntodeventa/business-observer/design/SOURCE-003-IMPORTER-LOAD-RAW-PLAN.md
  • objetivo: definir precondiciones, guardrails, transaccion, idempotencia, deduplicacion, rollback y criterios de aceptacion para el futuro comando python scripts/source_003_importer.py load-raw
  • alcance: solo futuro local-dev o DB dedicada, nunca postgres-sandbox como produccion y nunca VPS produccion sin contrato previo
  • decision: LOAD-RAW PLAN DOCUMENTADO / NO IMPLEMENTADO / NO EJECUTABLE
  • restricciones: sin implementar load-raw, sin modificar Python, sin tocar PostgreSQL, sin SQL, sin DDL, sin tablas, sin runner, sin CSV generado, sin carga de datos, sin sync diaria, sin carga masiva, sin produccion, sin OpenClaw executor, sin jobs automaticos, sin VPS, sin Docker, sin OpenClaw, sin NPM, sin push y sin deploy
  • proximo paso: revision tecnica documental del plan load-raw registrada en etapa 14.20, todavia sin implementacion ni ejecucion contra DB

Etapa 14.20 - Revision tecnica load-raw SOURCE-003

  • estado: revision tecnica documental / load-raw no implementable todavia
  • fecha: 2026-06-15
  • documento oficial: docs/tenants/alpuntodeventa/business-observer/design/SOURCE-003-LOAD-RAW-TECHNICAL-REVIEW.md
  • resultado: APTO PARA DISENAR DDL RAW / NO APTO PARA IMPLEMENTAR LOAD-RAW TODAVIA
  • alcance: valida consistencia entre plan load-raw, contrato RAW, contratos CORE y MART, contrato importer, skeleton, comandos seguros, hito data layers y auditoria VPS PostgreSQL
  • hallazgos: plan respeta RAW, preserva separacion raw / core / mart, bloquea postgres-sandbox como produccion, no asume la tabla piloto como raw final y deja claros batch, idempotencia, deduplicacion, rollback, logs y auditoria
  • restricciones: sin implementar load-raw, sin modificar Python, sin DDL, sin SQL, sin PostgreSQL, sin runner, sin CSV generado, sin carga, sin VPS, sin Docker, sin OpenClaw, sin NPM, sin push y sin deploy
  • proximo paso: revisar el paquete DDL RAW candidato documentado en etapa 14.21 antes de cualquier ejecucion o implementacion de load-raw

Etapa 14.21 - DDL RAW candidato SOURCE-003

  • estado: candidato preparado / no ejecutado / no implementado en DB
  • fecha: 2026-06-15
  • documento oficial: docs/tenants/alpuntodeventa/business-observer/design/SOURCE-003-RAW-DDL-CANDIDATE.md
  • SQL candidatos: docs/tenants/alpuntodeventa/business-observer/design/sql/004_source_003_raw_ddl_candidate_preflight.sql docs/tenants/alpuntodeventa/business-observer/design/sql/004_source_003_raw_ddl_candidate_forward.sql docs/tenants/alpuntodeventa/business-observer/design/sql/004_source_003_raw_ddl_candidate_rollback.sql docs/tenants/alpuntodeventa/business-observer/design/sql/004_source_003_raw_ddl_candidate_post_checks.sql
  • objetivo: disenar la futura tabla RAW business_observer.raw_source_003_sales_items sin ejecutar SQL ni crear objetos reales
  • decisiones: business_observer.source_003_sales_items queda como PILOTO, no RAW final; la clave tecnica candidata es id; la clave logica por batch es tenant_id + sync_batch_id + line_key; el rollback aborta si hay filas; los post-checks exigen row_count = 0; PUBLIC queda sin privilegios y openclaw_bo_writer queda sin DELETE
  • alcance: columnas del prepared CSV vigente mas metadata RAW obligatoria loaded_at, constraints, indices, owner y grants candidatos
  • restricciones: sin PostgreSQL, sin SQL ejecutado, sin tabla real creada, sin modificar Python, sin runner, sin CSV generado, sin carga, sin sync diaria, sin carga masiva, sin produccion final, sin VPS, sin Docker, sin OpenClaw, sin NPM, sin push y sin deploy
  • proximo paso: revision tecnica del paquete candidato registrada en etapa 14.22; si se aprueba ejecutar en el futuro, abrir gate separado con fingerprint DB y autorizacion explicita

Etapa 14.22 - Revision tecnica DDL RAW candidato SOURCE-003

  • estado: revision tecnica documental / apto local-dev / produccion bloqueada
  • fecha: 2026-06-15
  • documento oficial: docs/tenants/alpuntodeventa/business-observer/design/SOURCE-003-RAW-DDL-CANDIDATE-TECHNICAL-REVIEW.md
  • objetivo: revisar tecnicamente el paquete DDL RAW candidato sin ejecutarlo
  • resultado: APTO PARA EJECUCION LOCAL-DEV / NO APTO PARA PRODUCCION / NO APTO PARA IMPLEMENTAR LOAD-RAW TODAVIA
  • hallazgos: tabla candidata business_observer.raw_source_003_sales_items, separacion con tabla piloto, metadata RAW obligatoria, columnas prepared CSV mas loaded_at, clave tecnica id, clave logica por batch, constraints, indices, owner/grants, PUBLIC sin privilegios, writer sin DELETE, preflight, forward, rollback que aborta si hay filas y post-checks con row_count = 0 quedan consistentes para local-dev bajo gate separado
  • riesgos: postgres-sandbox no es produccion; produccion no tiene contrato de entorno, backup/restore, RLS, observabilidad ni operacion; la paridad CSV vs DDL debe reconfirmarse antes de cargar datos; la diferencia historica del id en prepared vs generated sigue como riesgo controlado
  • restricciones: sin SQL ejecutado, sin psql, sin PostgreSQL, sin tabla real creada, sin modificar Python, sin runner, sin CSV generado, sin carga, sin sync diaria, sin carga masiva, sin produccion final, sin VPS, sin Docker, sin OpenClaw, sin NPM, sin push y sin deploy
  • proximo paso: si Gabi aprueba avanzar, abrir gate separado para ejecucion local-dev del DDL con fingerprint DB, autorizacion explicita y post-checks row_count = 0

Etapa 14.23 - Forward DDL RAW local-dev SOURCE-003

  • estado: ejecutado local-dev / tabla raw creada vacia / carga bloqueada
  • fecha: 2026-06-15
  • documento oficial: docs/tenants/alpuntodeventa/business-observer/design/SOURCE-003-RAW-DDL-LOCAL-DEV-FORWARD-001.md
  • objetivo: ejecutar el paquete DDL RAW candidato en openclaw_business_observer_dev.business_observer para crear vacia business_observer.raw_source_003_sales_items
  • SQL ejecutado en orden: 004_source_003_raw_ddl_candidate_preflight.sql, 004_source_003_raw_ddl_candidate_forward.sql, 004_source_003_raw_ddl_candidate_post_checks.sql
  • resultado: PREFLIGHT PASS, FORWARD OK, POST-CHECKS PASS
  • evidencia: tabla creada con owner openclaw_bo_admin, 84 columnas, 21 constraints, 9 indices, row_count = 0, writer con SELECT/INSERT/UPDATE sin DELETE, reader SELECT only y PUBLIC sin privilegios; business_observer.source_003_sales_items sigue como tabla piloto y no fue tocada por escritura
  • restricciones: sin carga de datos, sin INSERT, sin COPY, sin UPDATE, sin DELETE, sin rollback, sin modificar Python, sin runner/importer load-raw, sin CSV, sin postgres-sandbox, sin VPS, sin Docker, sin OpenClaw, sin NPM, sin Portainer, sin push y sin deploy
  • proximo paso: disenar y aprobar un gate separado antes de cualquier carga load-raw; la existencia de la tabla RAW vacia no habilita sync diaria, carga masiva ni produccion final

Etapa 14.24 - Gate ejecucion local-dev load-raw SOURCE-003

  • estado: gate documentado / no implementado / no ejecutado
  • fecha: 2026-06-15
  • documento oficial: docs/tenants/alpuntodeventa/business-observer/design/SOURCE-003-LOAD-RAW-LOCAL-DEV-EXECUTION-GATE.md
  • objetivo: definir las condiciones obligatorias para una futura implementacion de python scripts/source_003_importer.py load-raw --execute solo en local-dev
  • alcance: DB permitida openclaw_business_observer_dev, tabla business_observer.raw_source_003_sales_items, batch 1827f887-9499-4579-b4f3-234d54f41f7f, prepared/generated CSV validados, row_count RAW = 0, 1886 filas esperadas, 84 columnas destino, fingerprint DB obligatorio, flags exactos, transaccion controlada, validaciones pre-write/post-write, rollback por batch separado, reintento/idempotencia, evidencia minima y criterio PASS/FAIL/BLOCKED
  • decision: GATE DOCUMENTADO / NO IMPLEMENTADO / NO EJECUTADO
  • resultado: apto para implementar load-raw --execute en tarea futura local-dev separada; no apto para produccion; no apto para sync diaria
  • restricciones: sin modificar Python, sin ejecutar load-raw --execute, sin tocar PostgreSQL, sin INSERT, sin COPY, sin UPDATE, sin DELETE, sin generar CSV, sin runner, sin VPS, sin Docker, sin OpenClaw, sin NPM, sin Portainer, sin push y sin deploy
  • proximo paso: abrir tarea futura separada solo con aprobacion humana explicita para implementar el modo de escritura local-dev bajo este gate

Etapa 14.25 - Plan promote-core importer SOURCE-003

  • estado: documentado / no implementado / no ejecutado
  • fecha: 2026-06-15
  • documento oficial: docs/tenants/alpuntodeventa/business-observer/design/SOURCE-003-IMPORTER-PROMOTE-CORE-PLAN.md
  • objetivo: definir documentalmente el futuro flujo python scripts/source_003_importer.py promote-core
  • alcance: promocion futura desde business_observer.raw_source_003_sales_items hacia la tabla candidata business_observer.core_source_003_sales_items, usando solo el batch 1827f887-9499-4579-b4f3-234d54f41f7f con 1886 filas RAW ya validadas
  • reglas documentadas: precondiciones, RAW source table, futura CORE target table, reglas raw -> core, normalizacion, tipos, claves logicas, idempotencia, deduplicacion, rollback/rebuild por batch, validaciones pre/post y relacion futura con mart
  • decision: PROMOTE-CORE PLAN DOCUMENTADO / NO IMPLEMENTADO / NO EJECUTADO
  • resultado: APTO PARA DISENAR DDL CORE CANDIDATO / NO APTO PARA PRODUCCION / NO APTO PARA SYNC DIARIA
  • restricciones: sin modificar Python, sin tocar PostgreSQL, sin ejecutar SQL, sin crear tablas, sin cargar datos, sin tocar CORE/MART real, sin generar CSV, sin runner, sin VPS, sin Docker, sin OpenClaw, sin NPM, sin Portainer, sin push y sin deploy
  • proximo paso: disenar DDL CORE candidato, revisarlo tecnicamente y ejecutarlo en local-dev con gate separado antes de cualquier implementacion de promote-core

Etapa 14.26 - DDL CORE candidato SOURCE-003

  • estado: candidato preparado / no ejecutado / no implementado en DB
  • fecha: 2026-06-15
  • documento oficial: docs/tenants/alpuntodeventa/business-observer/design/SOURCE-003-CORE-DDL-CANDIDATE.md
  • SQL candidatos: docs/tenants/alpuntodeventa/business-observer/design/sql/005_source_003_core_ddl_candidate_preflight.sql docs/tenants/alpuntodeventa/business-observer/design/sql/005_source_003_core_ddl_candidate_forward.sql docs/tenants/alpuntodeventa/business-observer/design/sql/005_source_003_core_ddl_candidate_rollback.sql docs/tenants/alpuntodeventa/business-observer/design/sql/005_source_003_core_ddl_candidate_post_checks.sql
  • objetivo: disenar la futura tabla CORE business_observer.core_source_003_sales_items sin ejecutar SQL ni crear objetos reales
  • decisiones: origen futuro business_observer.raw_source_003_sales_items, batch piloto 1827f887-9499-4579-b4f3-234d54f41f7f, clave tecnica id, clave logica tenant_id + line_key, clave de promocion tenant_id + sync_batch_id + line_key, trazabilidad por source_row_hash, PUBLIC sin privilegios, writer sin DELETE, rollback que aborta si hay filas y post-checks con row_count = 0
  • alcance: 66 columnas candidatas normalizadas, 22 constraints, 10 indices, owner openclaw_bo_admin y grants candidatos
  • restricciones: sin PostgreSQL, sin psql, sin SQL ejecutado, sin tabla real creada, sin modificar Python, sin runner, sin CSV generado, sin carga, sin tocar RAW/CORE/MART real, sin sync diaria, sin carga masiva, sin produccion final, sin VPS, sin Docker, sin OpenClaw, sin NPM, sin Portainer, sin push y sin deploy
  • proximo paso: revision tecnica del paquete candidato; si se aprueba ejecutar en el futuro, abrir gate separado con fingerprint DB, autorizacion explicita y post-checks row_count = 0

Etapa 14.27 - Revision tecnica DDL CORE candidato SOURCE-003

  • estado: revision tecnica documental / apto preflight local-dev / produccion bloqueada
  • fecha: 2026-06-15
  • documento oficial: docs/tenants/alpuntodeventa/business-observer/design/SOURCE-003-CORE-DDL-CANDIDATE-TECHNICAL-REVIEW.md
  • objetivo: revisar tecnicamente el paquete DDL CORE candidato sin ejecutarlo
  • resultado: APTO PARA PREFLIGHT LOCAL-DEV / NO APTO PARA PRODUCCION / NO APTO PARA SYNC DIARIA / NO APTO PARA PROMOTE-CORE AUN
  • hallazgos: tabla candidata business_observer.core_source_003_sales_items, RAW sin modificaciones, batch piloto correcto, 66 columnas, 22 constraints, 10 indices, clave tecnica id, trazabilidad por tenant_id, sync_batch_id, line_key y source_row_hash, owner/grants correctos, PUBLIC sin privilegios, writer sin DELETE, rollback que aborta si hay filas y post-checks con row_count = 0
  • riesgos: channel_normalized requiere catalogo aprobado, contribution_amount mantiene semantica de margen pendiente, id debera ser provisto por promote-core futuro y produccion sigue sin RLS, particionado, observabilidad ni operacion aprobada
  • restricciones: sin SQL ejecutado, sin psql, sin PostgreSQL, sin tabla real creada, sin modificar Python, sin runner, sin CSV generado, sin carga, sin tocar RAW/CORE/MART real, sin sync diaria, sin carga masiva, sin produccion final, sin VPS, sin Docker, sin OpenClaw, sin NPM, sin Portainer, sin push y sin deploy
  • proximo paso: si Gabi aprueba avanzar, abrir gate separado para ejecutar solo el preflight local-dev del DDL CORE candidato; forward CORE y promote-core requieren autorizaciones posteriores separadas

Etapa 14.6.18 - SOURCE-003 CORE DDL forward local-dev

  • estado: ejecutado local-dev / tabla CORE creada vacia / produccion bloqueada
  • fecha: 2026-06-15
  • documento oficial: docs/tenants/alpuntodeventa/business-observer/design/SOURCE-003-CORE-DDL-LOCAL-DEV-FORWARD-001.md
  • SQL ejecutados: 005_source_003_core_ddl_candidate_preflight.sql, 005_source_003_core_ddl_candidate_forward.sql, 005_source_003_core_ddl_candidate_post_checks.sql
  • resultado: PREFLIGHT PASS / FORWARD OK / POST-CHECKS PASS
  • tabla creada: business_observer.core_source_003_sales_items, vacia con row_count = 0, owner openclaw_bo_admin, 66 columnas, 22 constraints, 10 indices y grants esperados
  • alcance preservado: RAW existente con batch autorizado 1886 filas segun preflight, sin escrituras contra RAW ni tabla piloto, sin carga de datos, sin promote-core, sin runner, sin Python, sin CSV y sin produccion final
  • proximo paso: disenar y revisar gate separado para promote-core; no ejecutar promocion ni carga hasta nueva autorizacion explicita

Etapa 14.28 - Gate ejecucion local-dev promote-core SOURCE-003

  • estado: gate documentado / no implementado / no ejecutado
  • fecha: 2026-06-15
  • documento oficial: docs/tenants/alpuntodeventa/business-observer/design/SOURCE-003-PROMOTE-CORE-LOCAL-DEV-EXECUTION-GATE.md
  • objetivo: definir las condiciones obligatorias para una futura implementacion de python scripts/source_003_importer.py promote-core --execute solo en local-dev
  • alcance: DB permitida openclaw_business_observer_dev, RAW source business_observer.raw_source_003_sales_items, CORE target business_observer.core_source_003_sales_items, batch 1827f887-9499-4579-b4f3-234d54f41f7f, RAW batch rows = 1886, CORE row_count inicial = 0, 1886 filas esperadas a promover, 66 columnas CORE destino, fingerprint DB obligatorio, postgres-sandbox prohibido, confirmaciones futuras, transaccion, validaciones pre-write/post-write, idempotencia, bloqueo por batch duplicado, rollback/rebuild por batch, evidencia minima y criterio PASS/FAIL/BLOCKED
  • decision: GATE PROMOTE-CORE DOCUMENTADO / NO IMPLEMENTADO / NO EJECUTADO
  • resultado: apto como base del gate execute local-dev implementado en la etapa siguiente; no apto para produccion; no apto para sync diaria
  • restricciones: sin modificar Python, sin tocar PostgreSQL, sin ejecutar SQL, sin escribir en CORE, sin modificar RAW, sin cargar datos, sin generar CSV, sin runner, sin VPS, sin Docker, sin OpenClaw, sin NPM, sin Portainer, sin push y sin deploy
  • proximo paso: abrir tarea futura separada solo con aprobacion humana explicita para implementar escritura real RAW -> CORE sobre el gate execute

Etapa 14.29 - Implementacion gate execute promote-core SOURCE-003

  • estado: gate implementado / blocked / sin carga core
  • fecha: 2026-06-15
  • documento oficial: docs/tenants/alpuntodeventa/business-observer/design/SOURCE-003-PROMOTE-CORE-EXECUTE-GATE-IMPLEMENTATION-001.md
  • objetivo: implementar el gate controlado para python scripts/source_003_importer.py promote-core --execute sin escritura real
  • resultado: promote-core conserva DRY_RUN; promote-core --execute exige confirmaciones explicitas y devuelve BLOCKED sin tocar DB ni ejecutar SQL
  • controles: DB permitida openclaw_business_observer_dev, RAW source business_observer.raw_source_003_sales_items, CORE target business_observer.core_source_003_sales_items, batch 1827f887-9499-4579-b4f3-234d54f41f7f, RAW batch rows = 1886, CORE row_count = 0, candidate_rows = 1886, target_columns = 66, duplicates_core = 0, fingerprint obligatorio y postgres-sandbox prohibido
  • restricciones: db_write=false, data_written=false, sync_enabled=false; sin carga CORE, sin modificacion RAW, sin runner, sin CSV, sin rollback real, sin VPS, Docker, OpenClaw, NPM, Portainer, push ni deploy
  • proximo paso: abrir tarea futura separada solo si se aprueba ejecutar la escritura real RAW -> CORE con confirmaciones completas

Etapa 14.30 - Write path preparado promote-core SOURCE-003

  • estado: write path futuro preparado / blocked / sin carga core
  • fecha: 2026-06-15
  • documento oficial: docs/tenants/alpuntodeventa/business-observer/design/SOURCE-003-PROMOTE-CORE-WRITE-PATH-IMPLEMENTATION-001.md
  • resultado: promote-core conserva DRY_RUN; promote-core --execute sigue BLOCKED; future_write_path.write_path_prepared=true y write_path_enabled=false
  • controles: fingerprint obligatorio, bloqueo postgres-sandbox, bloqueo de batch duplicado CORE, transaccion futura, idempotencia, preservacion de source_row_hash y line_key, post-check CORE batch rows = 1886, timestamps gobernados y rollback/rebuild documentado
  • restricciones: sin INSERT, COPY, UPDATE, DELETE, sin escritura CORE, sin modificar RAW, sin CSV, sin runner, sin rollback real, sin VPS, Docker, OpenClaw, NPM, Portainer, push ni deploy

Etapa 14.31 - Write real implementado promote-core SOURCE-003

  • estado: write real implementado / no ejecutado / sin carga core
  • fecha: 2026-06-15
  • documento oficial: docs/tenants/alpuntodeventa/business-observer/design/SOURCE-003-PROMOTE-CORE-WRITE-IMPLEMENTATION-001.md
  • resultado: promote-core conserva DRY_RUN; promote-core --execute sin confirmaciones o con confirmaciones incompletas queda BLOCKED; no se ejecutaron confirmaciones completas
  • controles: write_path_enabled=true solo detras de confirmaciones completas, transaccion RAW -> CORE, INSERT controlado en CORE, sin modificar RAW, bloqueo por batch duplicado, rollback automatico ante error, fingerprint DB obligatorio, postgres-sandbox prohibido, id CORE deterministico gobernado, raw_loaded_at preservado y timestamps gobernados
  • post-check esperado: CORE batch rows = 1886, CORE total rows = 1886, duplicates_core = 0, line_key vacio 0, source_row_hash vacio 0
  • restricciones: sin ejecucion de confirmaciones completas, sin escritura CORE real durante esta tarea, sin modificar RAW, sin CSV, sin runner, sin rollback real, sin VPS, Docker, OpenClaw, NPM, Portainer, push ni deploy
  • proximo paso: abrir tarea futura separada solo si se aprueba ejecutar la escritura real RAW -> CORE en local-dev con confirmaciones completas

Etapa 14.32 - Promote-core local-dev ejecutado SOURCE-003

  • estado: promote-core local-dev ejecutado / pass / core cargada
  • fecha: 2026-06-16
  • documento oficial: docs/tenants/alpuntodeventa/business-observer/design/SOURCE-003-PROMOTE-CORE-LOCAL-DEV-EXECUTION-001.md
  • resultado: PASS, data_written=true, inserted_rows=1886, CORE total 1886, CORE batch 1886, RAW batch sigue 1886
  • post-checks: duplicados CORE 0, line_key vacio 0, source_row_hash vacio 0, promoted_at nulo 0, raw_loaded_at nulo 0, sync_enabled=false, produccion false
  • idempotencia: reintento con el mismo batch quedo BLOCKED por CORE ya cargada y sin nuevas filas
  • restricciones: sin modificar RAW, sin MART, sin CSV, sin runner, sin postgres-sandbox, sin VPS, Docker, OpenClaw, NPM, Portainer, push ni deploy
  • proximo paso: abrir gate separado para revision post-ejecucion, rollback/rebuild gobernado o diseno MART; no habilitar sync diaria ni produccion

Etapa 14.33 - Plan build-mart importer SOURCE-003

  • estado: documentado / no implementado / no ejecutado
  • fecha: 2026-06-16
  • documento oficial: docs/tenants/alpuntodeventa/business-observer/design/SOURCE-003-IMPORTER-BUILD-MART-PLAN.md
  • objetivo: definir documentalmente el futuro flujo python scripts/source_003_importer.py build-mart
  • alcance: construccion futura de MART V1 desde business_observer.core_source_003_sales_items, usando el batch 1827f887-9499-4579-b4f3-234d54f41f7f con 1886 filas CORE ya conciliadas
  • marts candidatos: ventas por dia, vendedor, cliente, SKU/producto, zona/territorio si aplica y rentabilidad/CMV si aplica
  • reglas documentadas: metricas candidatas, dimensiones candidatas, granularidad, claves de trazabilidad, idempotencia, rebuild por batch, validaciones pre/post y relacion futura con dashboards, reportes y LLM
  • decision: BUILD-MART PLAN DOCUMENTADO / NO IMPLEMENTADO / NO EJECUTADO
  • resultado: APTO PARA DISENAR DDL MART CANDIDATO / NO APTO PARA PRODUCCION / NO APTO PARA SYNC DIARIA
  • restricciones: sin modificar Python, sin tocar PostgreSQL, sin ejecutar SQL, sin crear tablas, sin cargar datos, sin tocar RAW/CORE/MART real, sin generar CSV, sin runner, sin VPS, sin Docker, sin OpenClaw, sin NPM, sin Portainer, sin push y sin deploy
  • proximo paso: disenar DDL MART candidato, revisarlo tecnicamente y recien despues abrir preflight/forward local-dev separados

Etapa 14.34 - DDL MART candidato SOURCE-003

  • estado: candidato preparado / no ejecutado / no implementado en DB
  • fecha: 2026-06-16
  • documento oficial: docs/tenants/alpuntodeventa/business-observer/design/SOURCE-003-MART-DDL-CANDIDATE.md
  • SQL candidatos: docs/tenants/alpuntodeventa/business-observer/design/sql/006_source_003_mart_ddl_candidate_preflight.sql docs/tenants/alpuntodeventa/business-observer/design/sql/006_source_003_mart_ddl_candidate_forward.sql docs/tenants/alpuntodeventa/business-observer/design/sql/006_source_003_mart_ddl_candidate_rollback.sql docs/tenants/alpuntodeventa/business-observer/design/sql/006_source_003_mart_ddl_candidate_post_checks.sql
  • objetivo: disenar tablas MART agregadas candidatas desde business_observer.core_source_003_sales_items, usando como referencia el batch piloto 1827f887-9499-4579-b4f3-234d54f41f7f y manteniendo CORE en 1886 filas
  • alcance: mart_source_003_sales_daily, mart_source_003_sales_by_seller, mart_source_003_sales_by_customer y mart_source_003_sales_by_sku, con trazabilidad minima, metricas candidatas, owner openclaw_bo_admin, writer sin DELETE, reader SELECT, PUBLIC sin privilegios, rollback que aborta si cualquier MART candidata tiene filas y post-checks con row_count = 0
  • riesgos: territory_key no debe inferir vendedor responsable; CMV, costos y contribucion requieren revision semantica; no habilita dashboards, reportes ni consultas LLM productivas
  • restricciones: sin PostgreSQL, sin psql, sin SQL ejecutado, sin tabla real creada, sin modificar Python, sin runner, sin CSV generado, sin carga, sin tocar RAW/CORE/MART real, sin sync diaria, sin carga masiva, sin produccion final, sin VPS, sin Docker, sin OpenClaw, sin NPM, sin Portainer, sin push y sin deploy
  • proximo paso: revision tecnica documental del paquete candidato; cualquier preflight, forward local-dev o implementacion build-mart requiere tarea separada

Etapa 14.35 - Review tecnica DDL MART candidato SOURCE-003

  • estado: review tecnica documental / apto solo para preflight local-dev
  • fecha: 2026-06-16
  • documento oficial: docs/tenants/alpuntodeventa/business-observer/design/SOURCE-003-MART-DDL-CANDIDATE-TECHNICAL-REVIEW.md
  • resultado: APTO PARA PREFLIGHT LOCAL-DEV / NO APTO PARA PRODUCCION / NO APTO PARA SYNC DIARIA / NO APTO PARA BUILD-MART AUN
  • controles confirmados: origen CORE business_observer.core_source_003_sales_items, batch piloto 1827f887-9499-4579-b4f3-234d54f41f7f, CORE 1886 filas, cuatro MART candidatas, owner/grants correctos, PUBLIC sin privilegios, writer sin DELETE, rollback que aborta si cualquier MART tiene filas y post-checks con row_count = 0
  • restricciones: sin ejecutar SQL, sin psql, sin PostgreSQL, sin tablas reales, sin modificar Python, sin cargar datos, sin CSV, sin runner, sin tocar RAW/CORE/MART real, sin VPS, Docker, OpenClaw, NPM, Portainer, push ni deploy
  • proximo paso: abrir tarea separada para preflight local-dev read-only; forward, build-mart, sync diaria y produccion siguen bloqueados

Etapa 14.36 - Build-mart safe mode SOURCE-003

  • estado: implementado / dry_run pass / execute blocked
  • fecha: 2026-06-17
  • documento oficial: docs/tenants/alpuntodeventa/business-observer/design/SOURCE-003-IMPORTER-BUILD-MART-SAFE-MODE-001.md
  • objetivo: implementar python scripts/source_003_importer.py build-mart solo en SAFE MODE, sin escribir datos
  • resultado observado: fingerprint DB aprobado, CORE source business_observer.core_source_003_sales_items, batch 1827f887-9499-4579-b4f3-234d54f41f7f, CORE total rows = 1886, CORE batch rows = 1886, y las cuatro MART target existentes con row_count = 0
  • agregados estimados: sales_daily = 1, sales_by_seller = 25, sales_by_customer = 173, sales_by_sku = 180
  • restricciones: build-mart --execute bloqueado, postgres-sandbox prohibido, db_write=false, data_written=false, sync_enabled=false, sin INSERT, COPY, UPDATE, DELETE, runner, CSV, rollback, VPS, Docker, OpenClaw, NPM, Portainer, push ni deploy
  • proximo paso: abrir tarea separada solo si se aprueba gate o write path MART bajo SAFE POINT nuevo; produccion y sync diaria siguen bloqueados

Etapa 15 - Primer diseno operativo sin IA

  • ordenar como deberia funcionar el observer en modo controlado
  • definir lectura, priorizacion y seguimiento
  • sin automatizacion inteligente

Etapa 15.1 - Inventory Events Layer futura

  • documentada al 2026-06-05
  • capa derivada futura separada de SOURCE-002C y SOURCE-002D
  • orientada a detectar eventos comerciales de inventario, no a crear una nueva fuente cruda
  • pensada para alimentar UC004, UC005, UC007, UC008 y UC009
  • estado: FUTURO DOCUMENTADO / NO IMPLEMENTADO
  • documento oficial: docs/tenants/alpuntodeventa/business-observer/sources/INVENTORY-EVENTS-LAYER-FUTURE.md

Etapa 16 - Observer operativo controlado

  • abrir uso real solo cuando governance lo apruebe
  • trabajar con datos gobernados
  • mantener aislamiento por tenant

Etapa 17 - Automatizacion / IA futura

  • evaluar automatizacion futura
  • evaluar explicacion asistida
  • evaluar IA solo despues de reglas, datos y gobierno cerrados

Regla de evolucion

Ninguna etapa futura debe mezclar contenido Core con reglas comerciales especificas de APV.

Ninguna etapa futura debe contradecir el BUSINESS-OBSERVER-GOVERNANCE-MODEL.md sin actualizar explicitamente esa autoridad funcional.