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-19comoDDL 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 principalrunning healthy,HostConfig.PortBindings = {}, DBopenclaw_business_observer_stagingpresente, schemabusiness_observerpresente, roles stagingNOLOGINpresentes, permisos minimos y default privileges validados, tablas de negocio creadas0, sandboxrunning healthy - seguridad:
sin secretos, sin rollback, sin
SOURCE-003, sin sync/scheduler, sin tocarLa Directa,SGC, produccion, push ni deploy - proximo paso:
backup post-DDL y candidate/preflight para carga controlada inicial de
SOURCE-003en staging; produccion y sync diaria siguenNO-GO
Etapa 14.1.29 - Staging DDL candidate preflight¶
- cerrada al
2026-06-19comoCANDIDATE 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 principalrunning healthy,HostConfig.PortBindings = {}, backup baselinepresent, restore drillPASS, catalogo contransaction_read_only=on, DB/schema/roles de negocio ausentes, sandboxrunning healthy - seguridad:
sin
DDL, sinDML, sin secretos, sin dumps/backups/env en Git, sin tocar sandbox,La Directa,SGC, push ni deploy - proximo paso:
PDF-004Gejecucion DDL real solo con autorizacion explicita separada; produccion y sync diaria siguenNO-GO
Etapa 14.1.28 - Staging Postgres restore drill¶
- cerrada al
2026-06-19comoRESTORE 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 baseline1032 bytes, sha256402dce45fe93936b12f17a54ee437d637b3c573d02a3ff5c506d83e48a3860c4,pg_restore --listcontoc_entries=0, restore final conpg_restore exit_code=0, contenedor temporal healthy y sin host port binding, cleanup completo de container, volume, network, secret y work dir, staging principalrunning healthyconHostConfig.PortBindings = {}, DB/schema/roles de negocio ausentes, sandboxrunning healthy - seguridad:
sin
DDL, sinDML, sin leer contenido de secretos, sin guardar dumps en Git, sin tocar sandbox,La Directa,SGC, runtimeO4, push ni deploy - proximo paso:
PDF-004F DDL business observer candidate/preflight; ejecucion DDL, produccion y sync diaria siguenNO-GO
Etapa 14.1.27 - Staging Postgres backup baseline execution¶
- cerrada al
2026-06-19comoBASELINE BACKUP EJECUTADO - ejecutar el primer backup baseline logico real del PostgreSQL
staging-vpsdeBusiness 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/, filenameopenclaw-bo-staging-postgres-baseline-20260619T170037Z.dump, formatopg_dump -Fc, tamano1032 bytes, sha256402dce45fe93936b12f17a54ee437d637b3c573d02a3ff5c506d83e48a3860c4,pg_restore --listlegible, stagingrunning healthyconHostConfig.PortBindings = {}, sandboxrunning healthy, DB/schema/roles de negocio ausentes - seguridad:
sin
DDL, sinDML, sin leer contenido de secretos, sin guardar dumps en Git, sin tocar sandbox,La Directa,SGC, runtimeO4, push ni deploy - proximo paso:
PDF-004E restore drill;PDF-004DDL sigueNO-GO
Etapa 14.1.26 - Staging Postgres real target read-only preflight¶
- cerrada al
2026-06-19comoREAD-ONLY PREFLIGHT COMPLETADO - validar el target PostgreSQL
staging-vpsreal 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 realopenclaw-business-observer-postgres-staging, hostsrv977009, healthrunning healthy, redopenclaw-bo-staging-internal, volumenopenclaw_bo_postgres_staging_data,HostConfig.PortBindings = {}, secret file validado solo porstat,psqlde catalogo validado contransaction_read_only = on, DB staging/prod ausentes, schemabusiness_observerausente, roles staging ausentes, sandbox healthy e intocado - seguridad:
sin
DDL, sinDML, sin leer contenido de secretos, sin tocar sandbox,La Directa,SGC, runtimeO4, 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-19comoPROVISIONED / HEALTHY - provisionar el stack PostgreSQL
staging-vpsreal paraBusiness Observercreando 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, contenedoropenclaw-business-observer-postgres-staging, redopenclaw-bo-staging-internal, volumenopenclaw_bo_postgres_staging_data, secret file fuera de Git, host port5432no publicado, DB bootstrappostgres,openclaw_business_observer_staging = ABSENT, schemabusiness_observer = ABSENT, roles staging de negocioABSENT, sandbox healthy e intocado - seguridad:
sin
CREATE DATABASE, sinCREATE ROLE, sinCREATE 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-004DDL sobre este target real; produccion sigue bloqueada
Etapa 14.1.24 - Staging Postgres stack preflight plan¶
- cerrada al
2026-06-19comoPREFLIGHT + PLAN OPERATIVO - preparar un PostgreSQL
staging-vpsreal paraBusiness 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.ymlinfra/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, VPSsrv977009,openclaw-postgres-sandboxexiste pero queda excluido, no existen container, volumen, red ni path propuestos, no se publica5432al 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, runtimeO4, push ni deploy - proximo paso:
PDF-004Bsolo con autorizacion explicita;PDF-004DDL sigueNO-GO
Etapa 14.1.23 - Staging fingerprint read-only evidence¶
- cerrada al
2026-06-19con dictamenBLOCKED - registrar evidencia no sensible del fingerprint y del acceso read-only del
target real de
staging-vpsdelBusiness 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 commitdocs: record business observer staging target intake, target real verificable ausente en el workspace, acceso read-only seguro verificable ausente en el workspace, fingerprint real publicableNO DISPONIBLE, identidad logica documental preservada: aliasbusiness-observer-staging-db, DBopenclaw_business_observer_staging, schemabusiness_observer, roles logicos stagingDECLARADOS / NO VERIFICADOS,DB/schema/roles = UNVERIFIED / BLOCKED,backup/restore baseline real = PENDIENTE / BLOCKED,observabilidad minima operativa = BLOCKED, confirmacion de queopenclaw-postgres-sandboxno fue reutilizado como staging real, confirmacion deNO POSTGRES TOUCHyNO DATABASE CHANGES - seguridad:
sin tocar
VPS, sin tocarPostgreSQL, sin ejecutarSQL, sin usar secretos, sin tocarDocker,NPM,Portainer, runtimeO4,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
stagingdeBusiness 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 commitdocs: prepare business observer staging target handoff, intake publicado con alias no sensiblebusiness-observer-staging-db, DBopenclaw_business_observer_staging, schemabusiness_observer, responsable operativoAPV / OpenClaw Ops, roles logicos, politica de backup, restore drill y observabilidad minima, confirmacion documental publicada de queopenclaw-postgres-sandboxno debe usarse comostagingreal, exclusion explicita de passwords, connection strings, tokens,LOGINreales sensibles, IPs privadas sensibles y rutas internas sensibles - seguridad:
sin tocar
VPS, sin tocarPostgreSQL, sin ejecutarSQL, sin usar secretos, sin tocarDocker,NPM,Portainer, runtimeO4,La Directa,SGC, push ni deploy - proximo paso:
PDF-003F-Bpara fingerprint no sensible y evidencia documental minima de acceso read-only seguro;PDF-004sigueNO-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-vpsdelBusiness 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 commitdocs: 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,LOGINreales sensibles e IPs privadas sensibles, checklist publicado para volver solo con datos no sensibles - seguridad:
sin tocar
VPS, sin tocarPostgreSQL, sin ejecutarSQL, sin usar secretos, sin tocarDocker,NPM,Portainer, runtimeO4,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-vpsdelBusiness 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 commitdocs: define business observer staging prerequisites, problema consolidado: no existe staging real y solo hay sandbox visible, decision recomendada:stagingreal separado del sandbox,NO USAR openclaw-postgres-sandbox COMO STAGING REAL,prod-vps futuraseparada, 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 rolesLOGINreales si aplican - seguridad:
sin provisionar, sin
DDL, sin tocar PostgreSQL, sin crearDB, roles, schemas ni tablas, sin tocarDocker,NPM,Portainer, runtimeO4,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-vpsdelBusiness 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 commitdocs: record business observer staging target decision, runbook marcado comoNO SECRETSyREQUIRES EXPLICIT AUTHORIZATION, politica candidata publicada: backup logicopg_dump custom format, naming sin secretos,SHA256, retencion minima sugerida, evidencia requerida, restore drill candidate con destino separado, validaciones post-restore y criterioPASS/FAIL, observabilidad minima publicada parabackup age,restore drill age,backup size,last backup status,last restore drill status - seguridad:
sin tocar PostgreSQL, sin ejecutar
SQL, sinpg_dump, sinpg_restore, sin tocarVPS,Docker,NPM,Portainer, runtimeO4,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
stagingreal paraBusiness 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 commitdocs: define business observer staging target, target real separado del sandbox sigue siendo obligatorio, informacion fuera de Git definida para host/servicio, conectividad, DB, rolesLOGINsi aplican, secretos y responsable operativo, fingerprint exacto obligatorio antes de cualquierDDL, politica minima de acceso publicada conapplication superuser = not allowedywriter without DELETE by default, backup previo obligatorio, restore drill obligatorio, observabilidad minima, rollback/restore esperado y checklistGO/NO-GOpublicados - seguridad:
sin
DDL, sin tocar PostgreSQL, sin crearDB, roles, schemas ni tablas, sin tocarDocker,NPM,Portainer, runtimeO4,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-vpsparaBusiness Observerdespues delNO-GOdePDF-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 commitdocs: preflight business observer staging ddl, problema consolidado: solo existe/visibleopenclaw-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-vpsreal separado del sandbox con DBopenclaw_business_observer_staging, schemabusiness_observer, roles staging dedicados, backup/restore y acceso propios - seguridad:
sin
DDL, sin tocar PostgreSQL, sin crearDB, roles, schemas ni tablas, sin tocarDocker,NPM,Portainer, runtimeO4,La Directa,SGC, push ni deploy - proximo paso:
cerrar target real + backup/restore + fingerprint y recien despues
reintentar
PDF-003contra 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-002estaba listo para una futura ejecucion enstaging-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 commitdocs: prepare business observer staging ddl candidate, acceso read-only seguro porssh openclaw-vps+docker exec openclaw-postgres-sandbox psql -U openclaw_admin -d openclaw_sandbox, fingerprint observablesrv977009|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,PUBLICcon privilegios por defecto en el cluster visible, backup/restore especifico de staging aun no cerrado - seguridad:
sin
DDL, sinCREATE/ALTER/GRANT/REVOKE/DROP, sinINSERT/UPDATE/DELETE, sin tocarLa Directa,SGC, runtimeO4,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
DDLcandidato destaging-vpspara DB, roles y schema delBusiness Observer, sin ejecutarSQLni tocarPostgreSQL - 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 commitdocs: plan business observer production data foundation, DB staging recomendadaopenclaw_business_observer_staging, DB futura prod recomendadaopenclaw_business_observer_prod, schema recomendadobusiness_observer, roles candidatosopenclaw_bo_staging_owner,openclaw_bo_staging_writer,openclaw_bo_staging_reader,openclaw_bo_staging_reporting_ro, sin passwords en SQL,PUBLICsin privilegios, sinSUPERUSER, sinCREATEDB, sinCREATEROLE, fingerprint esperado paraPDF-003publicado - seguridad:
sin tocar
VPS PostgreSQL, sin crear DB/roles/schemas/tablas reales, sin ejecutarSQL, 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 VPSsolo 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 commitdocs: close source 003 mart local dev, ambientes propuestoslocal-dev,staging-vps,prod-vps futuro, modeloRAW -> CORE -> MARTobligatorio enVPS, regla formal de no llamarproducciona un entorno sinbackups + restore + monitoreo + idempotencia, secuencia de fases1a10publicada - seguridad:
sin tocar
VPS,PostgreSQL,Docker,NPM,Portainer, runtimeO4,La Directa,SGC, secretos, deploy ni push sin crearDB, roles, schemas o tablas sin ejecutarSQL, 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-devcon 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 commitdocs: add source 003 mart rollback candidate, fingerprint aprobado,postgres-sandboxausente,RAW = 1886,CORE = 1886,MART = 1/25/173/180, batch autorizado presente enMART = 1/25/173/180, filas fuera del batch0/0/0/0, duplicados0/0/0/0, rollback candidate publicado y no ejecutado - seguridad:
sin
build-mart --execute, sin rollback real, sinINSERT,COPY,UPDATE,DELETE, sin produccion, sin sync diaria, sin scheduler, sin tocarLa Directa, runtimeO4,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-martya persistido enlocal-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 autorizado1827f887-9499-4579-b4f3-234d54f41f7f, orden de borrado segurosku -> customer -> seller -> daily, prechecks documentadosMART = 1/25/173/180, filas fuera del batch0/0/0/0, duplicados por grain0/0/0/0, post-checks documentadosMART = 0/0/0/0,RAW = 1886,CORE = 1886 - seguridad:
sin rollback real, sin
build-mart --execute, sinDELETE,TRUNCATE,UPDATE,INSERT,COPY, sin produccion, sin sync diaria, sin tocarLa Directa, runtimeO4,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 --executecon doble gate correcto para validar idempotencia sobre unaMARTya 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 commitdocs: preflight source 003 mart idempotency,py_compile = PASS,build-mart = FAILesperado post-write, fingerprint aprobado,postgres-sandboxausente,RAW = 1886,CORE = 1886,MART = 1/25/173/180, duplicados0/0/0/0, filas fuera del batch0/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 tocarLa Directa, runtimeO4,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 --executesin 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 commitdocs: review source 003 mart first persistence,py_compile = PASS,build-mart = FAILesperado post-write, fingerprint aprobado,postgres-sandboxausente,RAW = 1886,CORE = 1886,MART = 1/25/173/180, duplicados0/0/0/0, filas fuera del batch0/0/0/0, filas existentes del batch enMART = 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, sinCSV, sin tocarLa Directa, runtimeO4,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/ABORTEDsin 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-martdespues del primerCOMMITlocal-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 commitdocs: record source 003 mart first persistence,py_compile = PASS,build-mart = FAILesperado por MART ya persistida,build-mart --execute = NO EJECUTADO, fingerprint aprobado,postgres-sandboxausente,RAW = 1886,CORE = 1886,MART = 1/25/173/180, duplicados0/0/0/0, filas fuera del batch0/0/0/0, comparacion MART vs CORE sin diferencias sobre tolerancia0.0001 - seguridad:
sin idempotencia, sin
build-mart --execute, sin rollback, sin produccion, sin sync diaria, sin runner, sinCSV, sin tocarLa Directa, runtimeO4,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 --executeusando 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-sandboxausente, preflightRAW = 1886,CORE = 1886,MART = 0/0/0/0, estimates1/25/173/180, constraints43/43, indices12/12, duplicados0/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, sinCSV, sin tocarLa Directa, runtimeO4,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-GOantes de una primera persistencia reallocal-devdepython 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-writebloqueado, commit flag incorrecto bloqueado, fingerprint aprobado,postgres-sandboxausente,RAW = 1886,CORE = 1886,MART = 0/0/0/0, estimates1/25/173/180, batch preexistente enMART = 0/0/0/0, duplicados por grain0/0/0/0, constraints43/43, indices12/12 - seguridad:
sin
INSERT,COPY,UPDATE,DELETE, sin--rollback-rehearsal, sin commit real, sin produccion, sin sync diaria, sin tocarLa Directa, runtimeO4,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-rehearsaldespues 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-rehearsaly--commit-local-dev-writemutuamente 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, sinCSV, sin tocarLa Directa, runtimeO4, Docker,NPM,Portainer, push ni deploy - proximo paso:
mantener cualquier
COMMITreal 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-rehearsaly--commit-local-dev-writemutuamente excluyentes, token real sin commit flag y sin rehearsal bloqueado - seguridad:
build-martsigueDRY_RUN,build-mart --executesigueBLOCKED,RAW = 1886,CORE = 1886,MART = 0/0/0/0, sinCOMMIT, sin produccion, sin sync diaria, sin runner, sin scheduler, sin tocarLa Directa, runtimeO4, 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 --executesin 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-rehearsalobligatorio, token real sin rehearsal bloqueado, fingerprint aprobado,postgres-sandboxausente,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, sinCSV, sin tocarLa Directa, runtimeO4, 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 requeridoSOURCE003_MART_LOCAL_DEV_1886, fingerprint DB obligatorio, abort sipostgres-sandbox, transaccion unica, revalidacion intra-transaccion deRAW = 1886,CORE = 1886,MART = 0/0/0/0, estimates1/25/173/180, insertsdaily -> seller -> customer -> skuy rollback total - seguridad:
build-martsigueDRY_RUN;build-mart --executey confirmacion incorrecta siguenBLOCKED; no hubo escritura DB, produccion ni sync diaria - proximo paso:
abrir tarea separada solo si se aprueba ejecutar la escritura real
local-devcon 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 deRAW = 1886,CORE = 1886,MART = 0/0/0/0y estimates1/25/173/180, abort si MART no esta vacia para el mismo batch/grain, idempotencia por batch/grain, orden de insertsdaily -> seller -> customer -> sku, rollback total y evidencia esperada post-write - seguridad:
sin escrituras DB, sin
CSV, sin runner, sin rollback real, sin tocarscripts/source_003_importer.py,La Directa, runtimeO4, 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-sandboxausente,RAW = 1886,CORE = 1886,MART = 0/0/0/0, estimates1/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 tocarLa Directa, runtimeO4, Docker,NPM,Portainer, push ni deploy - proximo paso:
preparar una tarea separada para write-path/idempotencia de
build-mart --execute; no ejecutar mientras sigaBLOCKED
Etapa 0 - Estructura tenant Business Observer¶
- crear el espacio documental propio de
APV - enlazarlo desde el tenant
- dejar clara la separacion entre
CoreyAPV
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
CorevsTenantconsolidados - 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
UC001aUC006en 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,
SKUnatural siguiente y oportunidades decross-sellingyup-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,
SKUcriticos, 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
UC001aUC009 - 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-UC009y nivelesMVPconsolidados - 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 completavNext candidate - decision documental cerrada para
SOURCE-003: soloTabla 2se sincroniza;Tabla 1/3/4/5/6quedan como reportes derivados reconstruibles - decision documental cerrada para
SOURCE-003 vNext:source_003_sales_itemsqueda como base conceptual futura de sync - registro oficial de autoridad de fuentes creado:
SOURCE-AUTHORITY-REGISTRY - preservacion verificada:
SOURCE-001completa,SOURCE-002completa,SOURCE-003completa SOURCE-002queda actualizada como autoridad vigente completa del maestro de productos y ya no solo como catalogo porSKU- confirmacion humana incorporada:
Gabiconfirma que la nueva query deSOURCE-002es la autoridad vigente y queSKU NOT IN ('0124', '3857', '3998', '3793')es la primera lista conocida de exclusiones operativas - razon de negocio incorporada:
esos
SKUpueden corresponder a articulos delSGCusados para operaciones internas o no tradicionales de compra/venta y por eso no deben importarse como productos comerciales normales SOURCE-001queda cerrada con laSELECT_CUSTOMERS_SQLpreservada desde el script de sincronizacion de clientes aportado porGabi- 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 entrecustomers_core,customers_contact,customers_address,customers_tax,customers_commercial,customers_sales_ownerycustomers_visit_schedulees logica y no una multiplicacion de clientes - regla futura de sync cerrada para
SOURCE-001: la extraccion base no debe agregarWHERE Estado = 'CLIENTE ACTIVO' - regla futura de preservacion cerrada para
SOURCE-001: la base sincronizada debe conservarCLIENTE ACTIVO,CLIENTE SUSPENDIDOyCLIENTE 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:EstadodelSGCdebe preservarse comoestado_raw - regla futura anti hard-delete cerrada para
SOURCE-001: suspension o baja comercial no habilitan hard delete en futuroPostgres - regla futura de interpretacion cerrada para
SOURCE-001: desaparicion de una extraccion completa no equivale aEstado = 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:
L7paraSKU 0135ySKU 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_codigoy no como columnas fijasL1..L9en la capa destino principal - criterio canonico ya cerrado:
tenant_id + SKUcomo clave del dominio producto para toda lectura derivada desdeSOURCE-002 - regla documental ya cerrada:
proveedor y marca deben analizarse desde los
SKUasociados;Cod Proveedorqueda como identificador de negocio,Proveedorcomo nombre legible yMarcacomo atributo comercial delSKU - decision documental ya cerrada para
SOURCE-003: la autoridad real es la query completa preservada y noV_VENTASsola - 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 comovNext candidatey no como autoridad final productiva hasta ampliar la validacion deTabla 2 - decision documental ya cerrada para
SOURCE-003: la nueva autoridad candidata queda preservada enSOURCE-003-VENTAS-VNEXT-TABLA2-AUTHORITY.sqlsin borrar la autoridad anteriorSOURCE-003-VENTAS-TABLA2-AUTHORITY.sql - validacion real controlada de
SOURCE-003 / Tabla 2 vNext: resultadoVERDEpara ventana2026-06-08, conline_key_v1ysource_row_hash_v1propuestos antes de produccion - intento posterior de carga piloto real:
detenido antes de insertar porque la extraccion actual de
2026-06-08devolvio1262filas contra1269esperadas y no concilio importe total niCMV - inventario documental posterior de
SOURCE-003 / Tabla 2 V2: el snapshot2026-06-09confirma68columnas reales, identifica31columnas faltantes o solo consolidadas en el DDL piloto previo, crea diccionario completo y mapping CSV/PostgreSQL; aprobacion humana posterior deGabiacepta cobertura, persistencia de68columnas ysource_row_hash_v1para piloto controlado - carga piloto controlada posterior de
SOURCE-003-SNAPSHOT-001: el CSV congelado de2026-06-09quedo cargado enbusiness_observer.source_003_sales_itemscon1886filas,68/68columnas de negocio contempladas,line_key_v4sin duplicados,source_row_hash_v1completo, conciliacion de importe total /CMVen verde y produccion final bloqueada - diseno
DDLdocumental desource_003_sales_items: creado endesign/SOURCE-003-SALES-ITEMS-DDL-DESIGN.mdcon SQL documental no ejecutable endesign/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 comoNO EJECUTAR, sin SQL ejecutado y sin datos - pendiente futuro documentado:
SOURCE-003-PYTHON-POSTGRES-REPLICATION-DESIGN.mdpara logica original, logica equivalente simplificada y checklist de paridad - lectura estructural ya validada:
L1..L9repiten en horizontal el patronMargenLn,PrecioLn,IVAPrecioLnyPrecioNetoLn, por lo que deben convertirse a filas normalizadas en destino - normalizacion del origen ya explicita:
SOURCE-002no replica datos crudos sin mas; convierte formatos poco utiles delERP / SGCmedianteCAST,ROUND,RTRIM, calculos deIVA, stock en bultos, palletizado, conversion de fechas y exclusiones configurables deSKU - evidencia real agregada al
2026-06-08paraSOURCE-001: consulta de solo lectura ejecutada sobreecommerce.dbo.VCLIENTEScon distribucion agregada deEstado, confirmando soloCLIENTE ACTIVO,CLIENTE DE BAJAyCLIENTE SUSPENDIDO, sin valores inesperados y conFecha_Bajatotalmente alineada conCLIENTE DE BAJA - evidencia real agregada al
2026-06-08paraSOURCE-001: consulta de solo lectura ejecutada sobreecommerce.dbo.VCLIENTEScon unicidad perfecta deCodigonormalizado, sin nulos, vacios ni duplicados y con respaldo real paratenant_id + codigo_clientecomo clave logica - evidencia real agregada al
2026-06-08paraSOURCE-001: consulta de solo lectura ejecutada sobreecommerce.dbo.VCLIENTEScon calidad real deTelefonousado comoWhatsApp, observando7107informados,4294vacios,350telefonos repetidos distintos entre clientes y semaforo recomendadoAMARILLO - evidencia real agregada al
2026-06-08paraSOURCE-001: consulta de solo lectura ejecutada sobreecommerce.dbo.VCLIENTEScon vendedor completo y consistente, observando11404/11404Codigo_vendedoryNombre_Vendedorinformados,76parescodigo + nombredistintos y relacion1:1sin inconsistencias - evidencia real agregada al
2026-06-08paraSOURCE-001: consulta de solo lectura ejecutada sobreecommerce.dbo.VCLIENTEScon frecuencia completa y consistente, observando11404/11404CodFrecyFrecuenciainformados,4parescod_frec + frecuenciaconsistentes y campos diarios observados solo comoS,NyNULL/VACIO - evidencia real agregada al
2026-06-08paraSOURCE-001: consulta de solo lectura ejecutada sobreecommerce.dbo.VCLIENTEScon territorialidad completa enLocalidadyProvincia, casi completa enZona, observando24provincias,516localidades y365zonas distintas, con semaforo recomendadoAMARILLOpor dispersion textual y mezcla multi-provincia en parte del catalogo de zonas - primer mapeo origen-destino documentado al
2026-06-08paraSOURCE-001:mappings/SOURCE-001-CLIENTES-MAPPING.md - aplicacion documental explicita de
DATA-DESIGN-STANDARDenSOURCE-001: identidad fuerte portenant_id + codigo_cliente, separacion por bloques logicos de cliente, auditoria de sync consource_row_hash,sync_batch_id,extracted_at,last_seen_at,created_atyupdated_at, y preservacion deestado_raw,customer_statusycan_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:
ProvinciayLocalidadse preservan comoraw + normalized;Zonase preserva comoraw + type + normalized, queda definida como agrupacion logistica y no como geografia pura ni como territorio comercial del vendedor - decision documental cerrada para ownership:
Zonano define vendedor responsable; el ownership sale deCodigo_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-09para reconciliar vendedor asignado y vendedor transaccional:analytics/SELLER-RECONCILIATION-RULES.md - documento conceptual futuro documentado al
2026-06-09para 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-001defineseller_assigned,SOURCE-003defineseller_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: ventana90 diascon97885ventas validas exploratorias,95690coincidencias assigned vs transactional,2195mismatch (2.24%),47clientes con ultima venta hecha por otro vendedor y semaforo recomendadoAMARILLOpor ambiguedad documental de canal compartido /ecommerce - taxonomia funcional parcial de canal agregada al
2026-06-09:TRADICyKIOSCOquedan utilizables comotraditional_seller,NULL/VACIO -> SIN ASIGNARqueda utilizable comounassignedyOTROSqueda utilizable solo con apoyo deRamo, sin cerrar todaviaecommerceoshared_channel - decision documental cerrada para
customer ownership analytics:ownership_assignedsale deSOURCE-001,ownership_last_saley la autoria real salen deSOURCE-003,ownership_growthdebe apoyarse enSOURCE-003 + SOURCE-002yownership_effectivequeda 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 deKPIs, alertas, automatizaciones,MLeIA - frontera preservada adicional:
quedan pendientes
SQLreal, creacion fisica, validacion con datos, performance real y permisos de consumo - frontera preservada adicional:
quedan pendientes umbrales de abandono, ventana temporal de
cuenta trabajaday 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
Gabivalide aliases y casos ambiguos deZonaantes del diseno fisico deSOURCE-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.15local, basegestion_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, sinDocker, sinOpenClaw, sinNPM, 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 vNextpara2026-06-08 - resultado:
1262filas observadas contra1269esperadas - conciliacion:
importe total y
CMVno pasaron contra la evidencia previa - carga:
no ejecutada, sin
INSERT, sinUPSERTy sin filas persistidas - destino:
business_observer.source_003_sales_itemsquedo 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-001para2026-06-09 - resultado:
68columnas reales inventariadas - brecha DDL piloto previo:
31columnas faltantes o solo consolidadas - entregables:
data-dictionary/SOURCE-003-TABLA2-COLUMN-DICTIONARY.mdydesign/SOURCE-003-SALES-ITEMS-COLUMN-MAPPING.md - decision:
Gabi aprueba diccionario, mapping y persistencia de las
68columnas reales para piloto controlado desdeSOURCE-003-SNAPSHOT-001contraPostgreSQLlocal - 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 sha25607092c284b5b636b8a31cd616ef5b4fa5d0ce499b81c767437842b1f7edfcbc3 - destino:
business_observer.source_003_sales_items,PostgreSQLlocal, basegestion_de_negocios_core - resultado:
1886filas cargadas,68/68columnas de negocio contempladas y83columnas fisicas finales - conciliacion:
importe total
48087486.8300,CMVtotal37881269.3025, clientes unicos173, vendedores unicos25,SKUunicos180, comprobantes unicos428yHoravacia0 - identidad:
line_key_v4con1886distinct y0duplicados;line_sequence_v1ysource_row_hash_v1no nulos - rollback: no ejecutado porque las validaciones pasaron y el commit fue exitoso
- restricciones:
sin
SGCvivo para cargar, sinVPS, sinDocker, sinOpenClaw, sinNPM, 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:
83columnas fisicas,68columnas reales de negocio,line_key_v4,source_row_hash_v1, indices operativos y grants minimos para rolesopenclaw_bo_admin,openclaw_bo_writeryopenclaw_bo_reader - restricciones:
no se ejecuto SQL,
DDL,DML, carga, sync,Docker,VPS,OpenClaw,NPMni deploy;gestion_de_negocios_coreno 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:
83columnas,1886filas, fecha unica2026-06-09, sha2563f16a957a79fc84d4ca37930988287cb81f05166210d057fcf8b45007f184afe,sync_batch_id1827f887-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 con0filas - 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 con83columnas,1886filas, fecha unica2026-06-09, sha2563f16a957a79fc84d4ca37930988287cb81f05166210d057fcf8b45007f184afe; DB destino validada vacia y SQL preflight autorizado pasado - resultado:
el SQL candidate autorizado fallo en la linea
104por\copy: error de procesamiento al final de la linea; no se ejecutaron post-checks - rollback:
no aplica; tabla final
0filas y batch autorizado0filas - restricciones:
sin sync diaria, sin carga masiva, sin produccion final, sin
gestion_de_negocios_core, sinVPS, sinDocker, sinOpenClaw, sinNPM, 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 con83columnas,1886filas, fecha unica2026-06-09, sha2563f16a957a79fc84d4ca37930988287cb81f05166210d057fcf8b45007f184afe; DB destino validada vacia y batch ausente - resultado:
preflight autorizado paso; candidate autorizado ejecuto
COPY 1886,INSERT 0 1886yCOMMIT; post-checks autorizados pasaron - estado final DB:
1886filas finales del batch autorizado, fecha unica2026-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, sinVPS, sinDocker, sinOpenClaw, sinNPM, 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
83columnas desde el snapshot raw congelado, sin tocarPostgreSQL - output generado:
snapshots/source-003/prepared/generated/SOURCE-003-PILOT-LOAD-DEDICATED-DB-2026-06-09.generated.csv - evidencia:
1886filas,83columnas, raw sha25607092c284b5b636b8a31cd616ef5b4fa5d0ce499b81c767437842b1f7edfcbc3, output sha2566fb44d9870a567e728df9bbdcc6b83279d84791bd732626c9e19ccf3a28dc903 - comparacion:
REPRODUCIBLE ESTRUCTURAL / SHA DIFERENTEcontra el CSV preparado validado;82/83columnas coinciden celda por celda y la diferencia queda acotada aiden1886filas - restricciones:
sin
PostgreSQL, sin SQL, sinpsql, sin carga de datos, sin sync diaria, sin carga masiva, sin produccion final, sinVPS, sinDocker, sinOpenClaw, sinNPM, 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
iddel 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-filesydry-run - guardas:
cualquier modo con DB exige
--execute,--i-understand-this-touches-db, confirmacion exacta de DB, batch y CSV sha256, mas variablesAPV_BO_LOCAL_POSTGRES_* - restriccion adicional vigente:
load,rollbackyfullquedan bloqueados en esta revision porque la evidencia vigente dice que la tabla dedicada ya contiene1886filas del batch piloto verde - restricciones:
sin
PostgreSQL, sin SQL, sinpsql, sin carga, sin rollback ejecutado, sin sync diaria, sin carga masiva, sin produccion final, sinVPS, sinDocker, sinOpenClaw, sinNPM, 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
iddel 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-loadde 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:
preflightqueda como validacion estricta de tabla vacia antes de una carga nueva;status/verify-existing-pilotquedan definidos como verificacion read-only del piloto ya cargado;post-checksqueda como alias legacy - alcance funcional de
status: batch exacto1827f887-9499-4579-b4f3-234d54f41f7f,1886filas exactas, fecha unica2026-06-09, metadata exacta,0nulos criticos,0duplicados yline_key/source_row_hashvalidos - restriccion permanente:
ningun
PASSdestatushabilitaload,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; reservarpreflightpara 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, sinVPS, sinDocker, sinNPM, 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-003alineados al contrato publicado, sin tocar DB - comandos seguros implementados:
plan,validate-contract,dry-run,inspect-sourceygenerate-prepared, masvalidate-preparedcomo validacion read-only de CSV prepared historico y generated existente - comandos futuros declarados pero bloqueados:
load-raw,promote-core,build-mart,statusyrollback-batch - evidencia:
generate-preparedgenerasnapshots/source-003/prepared/generated/SOURCE-003-PILOT-LOAD-DEDICATED-DB-2026-06-09.generated.csv, con1886filas,83columnas, sha2566fb44d9870a567e728df9bbdcc6b83279d84791bd732626c9e19ccf3a28dc903y comparacionREPRODUCIBLE ESTRUCTURAL ACEPTADO;82/83columnas coinciden contra el CSV prepared validado y la diferencia esperada queda enidpor UUID v5 deterministico - evidencia validate-prepared:
prepared historico y generated existente fuera de Git, SHA256 esperados,
1886filas,83columnas, fecha unica2026-06-09, batch1827f887-9499-4579-b4f3-234d54f41f7f,record_status = active,source_row_hashyline_keyno vacios, comparacionREPRODUCIBLE ESTRUCTURAL ACEPTADOcon82/83columnas coincidentes y diferencia esperada enid - restricciones:
sin
PostgreSQL, sin SQL, sinpsql, sin runner, sin reemplazar el CSV prepared validado, sin carga, sin sync diaria, sin carga masiva, sin produccion final, sinVPS, sinDocker, sinOpenClaw, sinNPM, 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
rawdeSOURCE-003como evidencia gobernada del origen antes deprepared CSV,coreymart - 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 relacionraw -> core - decision:
CONTRATO RAW DOCUMENTADO / NO IMPLEMENTADO - restricciones:
sin tabla raw, sin
DDL, sin SQL, sinPostgreSQL, sin runner, sin generar CSV, sin carga, sin sync diaria, sin carga masiva, sin produccion final, sinOpenClaw executor, sinVPS, sinDocker, sinNPM, 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
coredeSOURCE-003como modelo gobernado de negocio entre evidenciaraw/prepared CSVy futurosmart - alcance:
proposito de
core, diferencia entreraw,prepared CSVycore, criterios de promocionraw -> core, columnas candidatas, claves logicas, normalizacion, tipos, deduplicacion, idempotencia, validaciones, errores, rollback logico por batch y relacioncore -> mart - decision:
CONTRATO CORE DOCUMENTADO / NO IMPLEMENTADO - restricciones:
sin tabla core, sin
DDL, sin SQL, sinPostgreSQL, sin runner, sin generar CSV, sin carga, sin sync diaria, sin carga masiva, sin produccion final, sinOpenClaw executor, sinVPS, sinDocker, sinNPM, 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
martdeSOURCE-003como consumo analitico gobernado desdecore, antes de dashboards, reportes, consultas LLM o executor - alcance:
proposito de
mart, diferencia entreraw,coreymart, criterios de promocioncore -> 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, sinPostgreSQL, sin runner, sin generar CSV, sin carga, sin sync diaria, sin carga masiva, sin produccion final, sin dashboards productivos, sin consultas LLM operativas, sinOpenClaw executor, sinVPS, sinDocker, sinNPM, 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,COREyMARTpublicados; separacionraw / prepared CSV / core / mart; trazabilidad porsync_batch_id,line_keyysource_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 depostgres-sandboxcomo produccion, sin SQL, sinPostgreSQL, sin runner, sin CSV generado, sin carga, sinVPS, sinDocker, sinOpenClaw, sinNPM, sin push y sin deploy - proximo paso:
plan controlado de
load-rawdocumentado en etapa14.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-devo DB dedicada, nuncapostgres-sandboxcomo 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 tocarPostgreSQL, sin SQL, sinDDL, sin tablas, sin runner, sin CSV generado, sin carga de datos, sin sync diaria, sin carga masiva, sin produccion, sinOpenClaw 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-rawregistrada en etapa14.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, bloqueapostgres-sandboxcomo 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, sinDDL, sin SQL, sinPostgreSQL, sin runner, sin CSV generado, sin carga, sinVPS, sinDocker, sinOpenClaw, sinNPM, sin push y sin deploy - proximo paso:
revisar el paquete
DDLRAW candidato documentado en etapa14.21antes de cualquier ejecucion o implementacion deload-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.sqldocs/tenants/alpuntodeventa/business-observer/design/sql/004_source_003_raw_ddl_candidate_forward.sqldocs/tenants/alpuntodeventa/business-observer/design/sql/004_source_003_raw_ddl_candidate_rollback.sqldocs/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_itemssin ejecutar SQL ni crear objetos reales - decisiones:
business_observer.source_003_sales_itemsqueda comoPILOTO, no RAW final; la clave tecnica candidata esid; la clave logica por batch estenant_id + sync_batch_id + line_key; el rollback aborta si hay filas; los post-checks exigenrow_count = 0;PUBLICqueda sin privilegios yopenclaw_bo_writerqueda sinDELETE - 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, sinVPS, sinDocker, sinOpenClaw, sinNPM, 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
DDLRAW 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 masloaded_at, clave tecnicaid, clave logica por batch, constraints, indices, owner/grants,PUBLICsin privilegios, writer sinDELETE, preflight, forward, rollback que aborta si hay filas y post-checks conrow_count = 0quedan consistentes para local-dev bajo gate separado - riesgos:
postgres-sandboxno 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 deliden prepared vs generated sigue como riesgo controlado - restricciones:
sin SQL ejecutado, sin
psql, sinPostgreSQL, sin tabla real creada, sin modificar Python, sin runner, sin CSV generado, sin carga, sin sync diaria, sin carga masiva, sin produccion final, sinVPS, sinDocker, sinOpenClaw, sinNPM, 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
DDLRAW candidato enopenclaw_business_observer_dev.business_observerpara crear vaciabusiness_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,84columnas,21constraints,9indices,row_count = 0, writer conSELECT/INSERT/UPDATEsinDELETE, readerSELECTonly yPUBLICsin privilegios;business_observer.source_003_sales_itemssigue como tabla piloto y no fue tocada por escritura - restricciones:
sin carga de datos, sin
INSERT, sinCOPY, sinUPDATE, sinDELETE, sin rollback, sin modificar Python, sin runner/importerload-raw, sin CSV, sinpostgres-sandbox, sinVPS, sinDocker, sinOpenClaw, sinNPM, sinPortainer, 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 --executesolo enlocal-dev - alcance:
DB permitida
openclaw_business_observer_dev, tablabusiness_observer.raw_source_003_sales_items, batch1827f887-9499-4579-b4f3-234d54f41f7f, prepared/generated CSV validados,row_count RAW = 0,1886filas esperadas,84columnas destino, fingerprint DB obligatorio, flags exactos, transaccion controlada, validaciones pre-write/post-write, rollback por batch separado, reintento/idempotencia, evidencia minima y criterioPASS/FAIL/BLOCKED - decision:
GATE DOCUMENTADO / NO IMPLEMENTADO / NO EJECUTADO - resultado:
apto para implementar
load-raw --executeen tarea futura local-dev separada; no apto para produccion; no apto para sync diaria - restricciones:
sin modificar Python, sin ejecutar
load-raw --execute, sin tocarPostgreSQL, sinINSERT, sinCOPY, sinUPDATE, sinDELETE, sin generar CSV, sin runner, sinVPS, sinDocker, sinOpenClaw, sinNPM, sinPortainer, 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_itemshacia la tabla candidatabusiness_observer.core_source_003_sales_items, usando solo el batch1827f887-9499-4579-b4f3-234d54f41f7fcon1886filas 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, sinVPS, sinDocker, sinOpenClaw, sinNPM, sinPortainer, sin push y sin deploy - proximo paso:
disenar
DDL COREcandidato, revisarlo tecnicamente y ejecutarlo en local-dev con gate separado antes de cualquier implementacion depromote-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.sqldocs/tenants/alpuntodeventa/business-observer/design/sql/005_source_003_core_ddl_candidate_forward.sqldocs/tenants/alpuntodeventa/business-observer/design/sql/005_source_003_core_ddl_candidate_rollback.sqldocs/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_itemssin ejecutar SQL ni crear objetos reales - decisiones:
origen futuro
business_observer.raw_source_003_sales_items, batch piloto1827f887-9499-4579-b4f3-234d54f41f7f, clave tecnicaid, clave logicatenant_id + line_key, clave de promociontenant_id + sync_batch_id + line_key, trazabilidad porsource_row_hash,PUBLICsin privilegios, writer sinDELETE, rollback que aborta si hay filas y post-checks conrow_count = 0 - alcance:
66columnas candidatas normalizadas,22constraints,10indices, owneropenclaw_bo_adminy grants candidatos - restricciones:
sin
PostgreSQL, sinpsql, 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, sinVPS, sinDocker, sinOpenClaw, sinNPM, sinPortainer, 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
DDLCORE 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,66columnas,22constraints,10indices, clave tecnicaid, trazabilidad portenant_id,sync_batch_id,line_keyysource_row_hash, owner/grants correctos,PUBLICsin privilegios, writer sinDELETE, rollback que aborta si hay filas y post-checks conrow_count = 0 - riesgos:
channel_normalizedrequiere catalogo aprobado,contribution_amountmantiene semantica de margen pendiente,iddebera ser provisto porpromote-corefuturo y produccion sigue sin RLS, particionado, observabilidad ni operacion aprobada - restricciones:
sin SQL ejecutado, sin
psql, sinPostgreSQL, 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, sinVPS, sinDocker, sinOpenClaw, sinNPM, sinPortainer, sin push y sin deploy - proximo paso:
si Gabi aprueba avanzar, abrir gate separado para ejecutar solo el preflight
local-dev del
DDL COREcandidato; forward CORE ypromote-corerequieren 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 conrow_count = 0, owneropenclaw_bo_admin,66columnas,22constraints,10indices y grants esperados - alcance preservado:
RAW existente con batch autorizado
1886filas segun preflight, sin escrituras contra RAW ni tabla piloto, sin carga de datos, sinpromote-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 --executesolo enlocal-dev - alcance:
DB permitida
openclaw_business_observer_dev, RAW sourcebusiness_observer.raw_source_003_sales_items, CORE targetbusiness_observer.core_source_003_sales_items, batch1827f887-9499-4579-b4f3-234d54f41f7f,RAW batch rows = 1886,CORE row_count inicial = 0,1886filas esperadas a promover,66columnas CORE destino, fingerprint DB obligatorio,postgres-sandboxprohibido, confirmaciones futuras, transaccion, validaciones pre-write/post-write, idempotencia, bloqueo por batch duplicado, rollback/rebuild por batch, evidencia minima y criterioPASS/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, sinVPS, 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 --executesin escritura real - resultado:
promote-coreconservaDRY_RUN;promote-core --executeexige confirmaciones explicitas y devuelveBLOCKEDsin tocar DB ni ejecutar SQL - controles:
DB permitida
openclaw_business_observer_dev, RAW sourcebusiness_observer.raw_source_003_sales_items, CORE targetbusiness_observer.core_source_003_sales_items, batch1827f887-9499-4579-b4f3-234d54f41f7f,RAW batch rows = 1886,CORE row_count = 0,candidate_rows = 1886,target_columns = 66,duplicates_core = 0, fingerprint obligatorio ypostgres-sandboxprohibido - 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-coreconservaDRY_RUN;promote-core --executesigueBLOCKED;future_write_path.write_path_prepared=trueywrite_path_enabled=false - controles:
fingerprint obligatorio, bloqueo
postgres-sandbox, bloqueo de batch duplicado CORE, transaccion futura, idempotencia, preservacion desource_row_hashyline_key, post-checkCORE 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-coreconservaDRY_RUN;promote-core --executesin confirmaciones o con confirmaciones incompletas quedaBLOCKED; no se ejecutaron confirmaciones completas - controles:
write_path_enabled=truesolo detras de confirmaciones completas, transaccion RAW -> CORE,INSERTcontrolado en CORE, sin modificar RAW, bloqueo por batch duplicado, rollback automatico ante error, fingerprint DB obligatorio,postgres-sandboxprohibido,idCORE deterministico gobernado,raw_loaded_atpreservado y timestamps gobernados - post-check esperado:
CORE batch rows = 1886,CORE total rows = 1886,duplicates_core = 0,line_keyvacio0,source_row_hashvacio0 - 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 total1886, CORE batch1886, RAW batch sigue1886 - post-checks:
duplicados CORE
0,line_keyvacio0,source_row_hashvacio0,promoted_atnulo0,raw_loaded_atnulo0,sync_enabled=false, produccionfalse - idempotencia:
reintento con el mismo batch quedo
BLOCKEDpor 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 batch1827f887-9499-4579-b4f3-234d54f41f7fcon1886filas 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, sinVPS, sin Docker, sin OpenClaw, sin NPM, sin Portainer, sin push y sin deploy - proximo paso:
disenar
DDL MARTcandidato, 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.sqldocs/tenants/alpuntodeventa/business-observer/design/sql/006_source_003_mart_ddl_candidate_forward.sqldocs/tenants/alpuntodeventa/business-observer/design/sql/006_source_003_mart_ddl_candidate_rollback.sqldocs/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 piloto1827f887-9499-4579-b4f3-234d54f41f7fy manteniendo CORE en1886filas - alcance:
mart_source_003_sales_daily,mart_source_003_sales_by_seller,mart_source_003_sales_by_customerymart_source_003_sales_by_sku, con trazabilidad minima, metricas candidatas, owneropenclaw_bo_admin, writer sinDELETE, readerSELECT,PUBLICsin privilegios, rollback que aborta si cualquier MART candidata tiene filas y post-checks conrow_count = 0 - riesgos:
territory_keyno debe inferir vendedor responsable;CMV, costos y contribucion requieren revision semantica; no habilita dashboards, reportes ni consultas LLM productivas - restricciones:
sin
PostgreSQL, sinpsql, 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, sinVPS, 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-martrequiere 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 piloto1827f887-9499-4579-b4f3-234d54f41f7f, CORE1886filas, cuatro MART candidatas, owner/grants correctos,PUBLICsin privilegios, writer sinDELETE, rollback que aborta si cualquier MART tiene filas y post-checks conrow_count = 0 - restricciones:
sin ejecutar SQL, sin
psql, sinPostgreSQL, 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-martsolo enSAFE MODE, sin escribir datos - resultado observado:
fingerprint DB aprobado, CORE source
business_observer.core_source_003_sales_items, batch1827f887-9499-4579-b4f3-234d54f41f7f,CORE total rows = 1886,CORE batch rows = 1886, y las cuatro MART target existentes conrow_count = 0 - agregados estimados:
sales_daily = 1,sales_by_seller = 25,sales_by_customer = 173,sales_by_sku = 180 - restricciones:
build-mart --executebloqueado,postgres-sandboxprohibido,db_write=false,data_written=false,sync_enabled=false, sinINSERT,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-002CySOURCE-002D - orientada a detectar eventos comerciales de inventario, no a crear una nueva fuente cruda
- pensada para alimentar
UC004,UC005,UC007,UC008yUC009 - 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
IAsolo 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.