Project State - APV Business Observer¶
Fecha: 2026-06-19
Estado: SOURCE-003 MART LOCAL-DEV CERRADA / PRODUCTION DATA FOUNDATION ABIERTA EN DISENO / PRODUCCION Y SYNC DIARIA SIGUEN BLOQUEADAS
Scope: tenant
tenant_id: alpuntodeventa
Owner: Gabi / Carlos Canu
Estado actual¶
La capa documental especifica del Business Observer para alpuntodeventa
queda creada.
Actualizacion 2026-06-19:
PDF-004G DDL business observer staging executionpublicado:docs/tenants/alpuntodeventa/business-observer/production/PDF-004G-DDL-BUSINESS-OBSERVER-STAGING-EXECUTION.md;- resultado:
DDL STAGING REAL EJECUTADO / VALIDACION POST-DDL PASS / NO SECRETS / SANDBOX INTACTO / PRODUCCION NO-GO; - scripts ejecutados:
001-create-database-and-roles.candidate.sql,002-create-schema-and-permissions.candidate.sql,003-validation-readonly-after-ddl.candidate.sql; - controles nuevos:
SAFE POINT = 170d6520dfff967155d7c1879d03e7246ff9bb02, staging principalrunning healthyconHostConfig.PortBindings = {}, DBopenclaw_business_observer_stagingpresente, schemabusiness_observerpresente, roles staging de negocio presentes yNOLOGIN, tablas creadas0, DB prod ausente, sandboxrunning healthy; - decision:
GOpara preparar carga controlada inicial deSOURCE-003en staging solo como candidate/preflight; produccion, sync diaria y pipelines siguenNO-GOsin autorizacion separada;
Actualizacion 2026-06-19:
PDF-004F DDL business observer staging candidate preflightpublicado:docs/tenants/alpuntodeventa/business-observer/production/PDF-004F-DDL-BUSINESS-OBSERVER-STAGING-CANDIDATE-PREFLIGHT.md;- resultado:
CANDIDATE PREFLIGHT PREPARADO / NO DDL / NO DML / NO SECRETS / GO PDF-004G SOLO CON AUTORIZACION EXPLICITA; - paquete SQL candidate:
infra/business-observer/staging/postgres/ddl/PDF-004F/; - controles nuevos:
SAFE POINT = d7cdadd552d2709c106b2a7831898dc43751ae89, staging principalrunning healthyconHostConfig.PortBindings = {}, backup baselinepresent, restore drillPASSdocumentado, sandboxrunning healthy, catalogo contransaction_read_only=on, DBopenclaw_business_observer_stagingausente, schemabusiness_observerausente, roles staging de negocio ausentes; - decision:
GOparaPDF-004Gsolo con autorizacion explicita de DDL real; produccion, sync diaria y sandbox siguenNO-GO;
Actualizacion 2026-06-19:
PDF-004E staging Postgres restore drillpublicado:docs/tenants/alpuntodeventa/business-observer/production/PDF-004E-STAGING-POSTGRES-RESTORE-DRILL.md;- resultado:
RESTORE DRILL REAL EJECUTADO / CLEANUP COMPLETO / GO PDF-004F PREFLIGHT / NO-GO DDL EJECUCION / NO SECRETS / STAGING INTACT / SANDBOX INTACT; - controles nuevos:
SAFE POINT = 8f0313d77d8bb64715d3fc98219edff44a44173c, backup baseline validado en/opt/backups/openclaw/business-observer-staging/postgres/baseline/20260619T170037Z/, archivoopenclaw-bo-staging-postgres-baseline-20260619T170037Z.dump, tamano1032 bytes, sha256402dce45fe93936b12f17a54ee437d637b3c573d02a3ff5c506d83e48a3860c4,pg_restore --list = PASS total_lines=15 metadata_lines=15 toc_entries=0, entorno temporal aislado con red interna y sin host port binding, restore finalpg_restoreconexit_code=0, validacion temporalpostgres16.14, DB/schema/roles de negocio ausentes, cleanup completo sin recursos temporales remanentes, staging principalrunning healthyconHostConfig.PortBindings = {}, sandboxrunning healthy; - decision:
GOparaPDF-004F DDL business observer candidate/preflight;NO-GOpara ejecucion DDL sin autorizacion explicita separada; produccion y sync diaria siguenNO-GO;
Actualizacion 2026-06-19:
PDF-004D staging Postgres backup baseline executionpublicado:docs/tenants/alpuntodeventa/business-observer/production/PDF-004D-STAGING-POSTGRES-BACKUP-BASELINE-EXECUTION.md;- resultado:
BASELINE BACKUP EJECUTADO / GO PDF-004E RESTORE DRILL / NO-GO DDL NEGOCIO / NO SECRETS / SANDBOX INTACT; - controles nuevos:
SAFE POINT = ffc2b86ac75ef7ea2d5830226b3094e85b87794c, backup logico real fuera de Git en/opt/backups/openclaw/business-observer-staging/postgres/baseline/20260619T170037Z/, archivoopenclaw-bo-staging-postgres-baseline-20260619T170037Z.dump, formatopg_dump -Fcsobrepostgres, tamano1032 bytes, sha256402dce45fe93936b12f17a54ee437d637b3c573d02a3ff5c506d83e48a3860c4, permisos700para directorio y600para backup/checksum,pg_restore --list = PASS, stagingrunning healthy,HostConfig.PortBindings = {}, sandboxrunning healthy, DB/schema/roles de negocio siguenABSENT; - decision:
GOparaPDF-004E restore drill;NO-GOparaPDF-004DDL de negocio hasta restore drill y autorizacion explicita;
Actualizacion 2026-06-19:
PDF-004C staging Postgres real target read-only preflightpublicado:docs/tenants/alpuntodeventa/business-observer/production/PDF-004C-STAGING-POSTGRES-REAL-TARGET-READONLY-PREFLIGHT.md;- resultado:
READ-ONLY PREFLIGHT COMPLETADO / GO BACKUP-RESTORE BASELINE / NO-GO DDL NEGOCIO / NO SECRETS / SANDBOX INTACT; - controles nuevos:
SAFE POINT = 04feb71ce2d1523e613bbf1ca678493648c95585, target real confirmadoopenclaw-business-observer-postgres-staging, hostnamesrv977009, healthrunning healthy, redopenclaw-bo-staging-internal, volumenopenclaw_bo_postgres_staging_data,HostConfig.PortBindings = {}, secret file confirmado solo porstatcon600 root:root, accesopsqlpor socket interno contransaction_read_only = on, fingerprint no sensible real publicado, DBs visiblespostgres,template0,template1,openclaw_business_observer_staging = ABSENT,openclaw_business_observer_prod = ABSENT,business_observer = ABSENT, roles staging de negocioABSENT,openclaw-postgres-sandboxsigue healthy e intocado; - decision:
GOparaPDF-004Dbackup baseline real yPDF-004Erestore drill;NO-GOparaPDF-004DDL de negocio hasta backup/restore real y autorizacion explicita;
Actualizacion 2026-06-19:
PDF-004B staging Postgres stack provisioningpublicado:docs/tenants/alpuntodeventa/business-observer/production/PDF-004B-STAGING-POSTGRES-STACK-PROVISIONING.md;- resultado:
PROVISIONED / HEALTHY / NO BUSINESS DDL / NO SECRETS / NO HOST PORT / SANDBOX INTACT; - controles nuevos:
SAFE POINT = 7b07c6e4b7d856224f8ea1bc992c7762fc5d39c2, stack real creado en/opt/stacks/business-observer-staging, contenedoropenclaw-business-observer-postgres-staginghealthy, volumenopenclaw_bo_postgres_staging_datacreado, redopenclaw-bo-staging-internalcreada, secret file fuera de Git con600 root:root,.envruntime con600 root:root, bootstrap catalogpostgres, host port5432no publicado,openclaw_business_observer_staging = ABSENT,business_observer = ABSENT, roles staging de negocioABSENT,openclaw-postgres-sandboxsigue healthy; - decision:
la infraestructura staging real ya existe;
PDF-004DDL, produccion y sync diaria siguen bloqueados hasta tarea separada;
Actualizacion 2026-06-19:
PDF-004A staging Postgres stack preflight planpublicado:docs/tenants/alpuntodeventa/business-observer/production/PDF-004A-STAGING-POSTGRES-STACK-PREFLIGHT-PLAN.md;- resultado:
PREFLIGHT + PLAN OPERATIVO + CANDIDATES / NOT EXECUTED / NO SECRETS / PDF-004B PENDING GO; - controles nuevos:
SAFE POINT = ba941b6562de20e8a65c830aef2c6b2fa8573b73, preflight read-only del VPSsrv977009, Docker29.5.2, disco/con69Glibres, memoria disponible5.9Gi,openclaw-postgres-sandboxconfirmado existente pero excluido como staging real, container propuestoopenclaw-business-observer-postgres-stagingausente, volumenopenclaw_bo_postgres_staging_dataausente, redopenclaw-bo-staging-internalausente, ruta/opt/stacks/business-observer-stagingausente, sin publicacion host5432requerida; - candidates creados:
infra/business-observer/staging/postgres/docker-compose.business-observer-staging.candidate.yml,infra/business-observer/staging/postgres/.env.business-observer-staging.example; - decision:
PDF-004Bqueda pendiente deGOseparado yPDF-004DDL, produccion y sync diaria siguen bloqueados;
Actualizacion 2026-06-19:
PDF-003F-B staging fingerprint read-only evidencepublicado: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 nuevos:
SAFE POINT = 3656f5ae185520bfa5e038467d9e383102fbf940, ultimo commitdocs: record business observer staging target intake, no existe en el workspace evidencia verificable de target real separado deopenclaw-postgres-sandbox, no existe en el workspace evidencia verificable de acceso read-only seguro reutilizable, fingerprint real publicableNO DISPONIBLE, aliasbusiness-observer-staging-db, DBopenclaw_business_observer_staging, schemabusiness_observery roles logicos staging quedan solo comoDECLARADOS / NO VERIFICADOS,DB/schema/roles = UNVERIFIED / BLOCKED,backup/restore baseline real = PENDIENTE / BLOCKED,observabilidad minima operativa = BLOCKED, confirmacion publicada deNO POSTGRES TOUCH,NO SQL,NO DATABASE CHANGES; - decision:
no corresponde abrir
PDF-003F-CniPDF-004hasta contar con target real verificable y acceso read-only seguro verificable;
Actualizacion 2026-06-19:
PDF-003F-A staging target non-sensitive intakepublicado: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 nuevos:
SAFE POINT = fa437a748eb7a1694335d1505f111450575bd133, ultimo commitdocs: prepare business observer staging target handoff, intake documental 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, observabilidad minima y exclusion explicita de passwords, connection strings, tokens,LOGINreales sensibles, IPs privadas sensibles y rutas internas sensibles, confirmacion documental publicada de queopenclaw-postgres-sandboxno debe usarse comostagingreal; - decision:
el siguiente safe point natural es
PDF-003F-Bpara publicar fingerprint no sensible y evidencia documental minima de acceso read-only seguro;PDF-004sigueNO-GO;
Actualizacion 2026-06-19:
PDF-003F blocker staging target operational handoffpublicado: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 nuevos:
SAFE POINT = fdae53fcd446cb7ce33ae918aa8d8f213ee680ea, ultimo commitdocs: prepare business observer staging backup restore runbook, handoff operativo publicado para completar fuera de Git: target elegido, alias no sensible del host o servicio, metodo de acceso publicable, DB name, roles logicos, responsable operativo, ventana de cambio, backup location no sensible, restore drill target y monitoreo minimo, politica explicita publicada de no pegar en Git ni en ChatGPT: passwords, connection strings, tokens,LOGINreales sensibles ni IPs privadas sensibles, checklist publicado para volver solo con datos no sensibles; - decision:
no corresponde abrir el nuevo preflight real de
PDF-003FniPDF-004mientras siga faltando target real separado del sandbox, fingerprint publicable, acceso seguro y baseline operativa minima;
Actualizacion 2026-06-19:
PDF-003E staging backup restore runbook candidatepublicado: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 nuevos:
SAFE POINT = f615b777576b9f9d89254548b28d484fb556feac, ultimo commitdocs: record business observer staging target decision, runbook marcado comoNO SECRETSyREQUIRES EXPLICIT AUTHORIZATION, prerequisitos publicados: target real definido, fingerprint real publicado, acceso seguro fuera de Git, responsable operativo, ventana de cambio y storage de backups fuera de Git, politica candidata de backup publicada conpg_dump custom format, naming sin secretos, checksumSHA256, retencion minima sugerida y evidencia requerida, restore drill candidate publicado con destino separado, criterioPASS/FAIL, validaciones post-restore y evidencia requerida, observabilidad minima publicada:backup age,restore drill age,backup size,last backup status,last restore drill status, comandos candidatos publicados solo como placeholders seguros; - decision:
no corresponde abrir
PDF-003FniPDF-004hasta que exista target real, fingerprint real, baseline operativa de backup y restore drill con evidencia realPASS;
Actualizacion 2026-06-19:
PDF-003D staging target provisioning decision recordpublicado: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 nuevos:
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, informacion que debe quedar fuera de Git publicada: endpoint real, host/puerto no publico, credenciales, passwords, connection strings, rolesLOGINreales si aplican, criteriosGO/NO-GOpublicados para reabrirPDF-003; - decision:
no corresponde reabrir
PDF-003ni abrirPDF-004mientras el target real no exista, no tenga fingerprint real y siga existiendo dependencia del sandbox;
Actualizacion 2026-06-19:
PDF-003C staging prerequisites backup restore accesspublicado: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 nuevos:
SAFE POINT = c8120e31915dd1af0ec048d4e6c12684e3a875ae, ultimo commitdocs: define business observer staging target, target real destaging-vpssigue requerido pero aun no provisionado, informacion obligatoria fuera de Git publicada: host/servicio real, puerto/conectividad, nombre DB, rolesLOGINsi aplican, secretos fuera de Git, responsable operativo, fingerprint exacto requerido antes de cualquierDDL, politica minima de acceso publicada paraowner/admin,writer,reader,reporting_ro, sinSUPERUSERpara aplicacion y sinDELETEparawritersalvo decision futura explicita, backup previo obligatorio, restore drill obligatorio, observabilidad minima, rollback/restore esperado y checklistGO/NO-GOpublicados; - decision:
no corresponde reabrir
PDF-003ni ejecutarPDF-004hasta cerrar target real, provisioning, acceso, backup/restore y observabilidad del ambiente correcto;
Actualizacion 2026-06-19:
PDF-003B staging target definitionpublicado: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 nuevos:
SAFE POINT = a2b1aa44bda1075fb536e2b8db60a4ce41f23331, ultimo commitdocs: preflight business observer staging ddl, problema consolidado desdePDF-003: solo existe/visibleopenclaw-postgres-sandbox,openclaw_business_observer_staging = NO,openclaw_business_observer_prod = NO, roles staging reales ausentes, backup/restore especifico de staging aun ausente, decision recomendadaNO USAR openclaw-postgres-sandbox COMO STAGING REAL, target recomendadostaging-vpsreal separado del sandbox con DBopenclaw_business_observer_staging, schemabusiness_observer, roles staging dedicados, backup/restore y acceso propios, prerequisitos publicados para cualquier futuroDDL, checklistGOpublicado para reintentarPDF-003; - decision:
PDF-004 staging DDL executionsigue bloqueado hasta cerrar target real, fingerprint, backup, restore, roles y acceso del ambiente correcto;
Actualizacion 2026-06-19:
PDF-003 staging DDL preflight read-onlypublicado: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 nuevos:
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 targetopenclaw_business_observer_staging = NO, DB futura prodopenclaw_business_observer_prod = NO, schemabusiness_observer = NOen el cluster visible, roles staging target ausentes, conflictos de naming ausentes,PUBLICcon privilegios por defecto en el sandbox visible, backup/restore especifico de la futura DB staging aun ausente; - decision:
el entorno sigue
CANDIDATE-ONLY / SANDBOX-VISIBLE; no corresponde abrirPDF-004 staging DDL executionhasta definir DB target real, backup/restore y un nuevo preflight sobre la instancia correcta;
Actualizacion 2026-06-19:
PDF-002 staging DB roles/schemas DDL candidatepublicado:docs/tenants/alpuntodeventa/business-observer/production/PDF-002-STAGING-DB-ROLES-SCHEMAS-DDL-CANDIDATE.md;- SQL candidate no ejecutado publicado:
docs/tenants/alpuntodeventa/business-observer/production/sql/PDF-002-staging-db-roles-schemas-candidate.sql; - resultado:
CANDIDATE PREPARADO / NOT EXECUTED / STAGING-VPS ONLY; - controles nuevos:
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, roles de grupoNOLOGIN,PUBLICsin privilegios, ownership exclusivo del owner, sin passwords en SQL, sinSUPERUSER, sinCREATEDB, sinCREATEROLE, fingerprint esperado paraPDF-003documentado; -
decision: la fundacion
staging-vpsya tiene paquete candidato de naming, roles y schema, pero sigue sin ejecucion; el siguiente paso correcto pasa a serPDF-003 staging DDL preflighten modo read-only y con autorizacion separada; -
intake oficial de
Production Data Foundation / staging VPSpublicado:docs/tenants/alpuntodeventa/business-observer/production/PRODUCTION-DATA-FOUNDATION-INTAKE-001.md; - resultado:
FOUNDATION DESIGN ONLY / STAGING-VPS PLANIFICADO / SIN CAMBIOS RUNTIME; - controles nuevos:
SAFE POINT = 33d28a11b66ce071a2a60b3f7662e4a358ee29f4, ultimo commitdocs: close source 003 mart local dev, ambientes propuestoslocal-dev,staging-vps,prod-vps futuro, criterio formal de no llamarproducciona un entorno sinbackups + restore + monitoreo + idempotencia, fuentes por fasesSOURCE-003 -> SOURCE-001 -> SOURCE-002 -> futuras, modelo esperadoRAW -> CORE -> MART,daily sync = BLOCKEDhasta cierre destaging; -
decision: el siguiente frente oficial del tenant deja de ser otra tarea
local-devy pasa a ser la fundacionstaging-vps; no corresponde crearDB, roles, schemas, tablas ni ejecutarSQLdentro de esta etapa; -
cierre formal de
SOURCE-003 MART local-devpublicado:docs/tenants/alpuntodeventa/business-observer/design/SOURCE-003-BUILD-MART-LOCAL-DEV-CLOSURE-001.md; - resultado:
CERRADA / LOCAL-DEV COMPLETO / SIN ESCRITURAS NUEVAS; - controles nuevos:
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 batch autorizado0/0/0/0, duplicados por grain0/0/0/0, rollback candidate publicado y no ejecutado; -
decision: el hito
SOURCE-003 MART local-devqueda cerrado formalmente; el proximo paso recomendado pasa a serProduction Data Foundation / staging VPS, manteniendo produccion, sync diaria y scheduler bloqueados; -
rollback candidate de
SOURCE-003 build-martpublicado:docs/tenants/alpuntodeventa/business-observer/design/SOURCE-003-BUILD-MART-ROLLBACK-CANDIDATE-001.md; - SQL candidate no ejecutado publicado:
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 nuevos:
SAFE POINT = d9b302ce7ad71b590a53f9ee8392e117d24dcc17, ultimo commitdocs: validate source 003 mart idempotency execution, batch autorizado1827f887-9499-4579-b4f3-234d54f41f7f, rollback limitado solo amart_source_003_sales_by_sku,mart_source_003_sales_by_customer,mart_source_003_sales_by_seller,mart_source_003_sales_daily, orden de borradosku -> 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, transaccion unica yROLLBACKautomatico ante cualquier diferencia; - decision:
el rollback queda solo como candidate versionado; no corresponde
ejecutarlo dentro de esta tarea y el estado actual queda preservado en
RAW = 1886,CORE = 1886,MART = 1/25/173/180;
Actualizacion 2026-06-18:
Actualizacion 2026-06-18:
- prueba real de idempotencia local-dev de
SOURCE-003 build-martpublicada: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 nuevos:
SAFE POINT = 3f491d80f9d633aaf8ed835c54e1a4fcf2d06dab, ultimo commitdocs: preflight source 003 mart idempotency,python -m py_compile scripts/source_003_importer.py = PASS,build-mart = FAILesperado post-write porqueMARTya existe, fingerprint aprobado,postgres-sandboxausente,RAW = 1886,CORE = 1886,MART = 1/25/173/180, duplicados por grain0/0/0/0, filas fuera del batch autorizado0/0/0/0, comando real con doble gate correcto ejecutado exactamente una vez,result = BLOCKED,db_write_attempted = false,transaction_committed = false,data_persisted = false, motivo runtime exactoMART daily row_count 1 != 0,MART seller row_count 25 != 0,MART customer row_count 173 != 0,MART sku row_count 180 != 0; -
decision: la prueba real de idempotencia queda validada sin persistencia nueva; el retry autorizado sobre
MARTya cargada terminaBLOCKEDy no corresponde reejecutarlo; -
preflight read-only para futura idempotencia de
SOURCE-003 build-martpublicado:docs/tenants/alpuntodeventa/business-observer/design/SOURCE-003-BUILD-MART-IDEMPOTENCY-PREFLIGHT-001.md; - resultado:
PASS / READ-ONLY IDEMPOTENCY PREFLIGHT / EXECUTE SIGUE BLOQUEADO; - controles nuevos:
SAFE POINT = 8fab80e6af932ec3d6f32df3c8f109f251ce1f2d, ultimo commitdocs: review source 003 mart first persistence,python -m py_compile scripts/source_003_importer.py = PASS,build-mart = FAILesperado post-write porqueMARTya existe, los tres comandosbuild-mart --execute...pedidos por la consigna no se ejecutaron por prohibicion explicita y quedaron auditados por revision de codigo comoBLOCKED, fingerprint aprobado,postgres-sandboxausente,RAW = 1886,CORE = 1886,MART = 1/25/173/180, duplicados por grain0/0/0/0, filas fuera del batch autorizado0/0/0/0, filas del batch autorizado ya existentes enMART = 1/25/173/180, condicion exacta de bloqueo esperadaMART inicial no esta vacia: daily=1 seller=25 customer=173 sku=180; -
decision: cualquier futura prueba de idempotencia con doble gate correcto deberia terminar
BLOCKED/ABORTEDantes deINSERT; no corresponde reejecutarla dentro de esta tarea; -
review read-only post-write de
SOURCE-003 build-martpublicada: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 nuevos:
SAFE POINT = 10cbf63e165428847ad954a0bd0b7e891924750d, ultimo commitdocs: record source 003 mart first persistence,python -m py_compile scripts/source_003_importer.py = PASS,build-mart = FAILesperado en post-write porqueMARTya no esta vacia,build-mart --execute = NO EJECUTADO, fingerprint aprobado,postgres-sandboxausente,RAW = 1886,CORE = 1886,MART = 1/25/173/180, duplicados por grain0/0/0/0, filas fuera del batch autorizado0/0/0/0; - comparacion MART vs CORE:
units, neto, bruto, CMV y contribution empatan con tolerancia
0.0001,document_countdiario428 = 428; -
decision: la persistencia real queda auditada correctamente en solo lectura; cualquier prueba de idempotencia o rollback sigue fuera de alcance y requiere tarea separada;
-
primera persistencia real
local-devdeSOURCE-003 build-martpublicada: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 nuevos:
SAFE POINT = 4ee4cb42ce0ab3b8c8c750ee4b324116153ef8b9,python -m py_compile scripts/source_003_importer.py = PASS,build-mart = DRY_RUN, fingerprint aprobado,postgres-sandboxausente, preflightRAW = 1886,CORE = 1886,MART = 0/0/0/0, estimates1/25/173/180, constraintsMART = 43/43, indicesMART = 12/12, duplicados por grain0/0/0/0, filas preexistentes del batch enMART = 0/0/0/0; - evidencia runtime:
python scripts/source_003_importer.py build-mart --execute --confirm-local-dev-write SOURCE003_MART_LOCAL_DEV_1886 --commit-local-dev-write SOURCE003_MART_LOCAL_DEV_COMMIT_1886devuelvePASSconexecution_status = COMMITTED,transaction_committed = true,data_persisted = true,rollback_rehearsal = false; - estado observado:
BEFORE = RAW 1886 / CORE 1886 / MART 0/0/0/0,INSIDE_TX = 1/25/173/180,AFTER_COMMIT = RAW 1886 / CORE 1886 / MART 1/25/173/180; - verificacion posterior:
sin duplicados por batch/grain en
MART, sin filas fuera del batch autorizado enMART,RAWyCOREpreservados en1886; -
decision: la primera persistencia real local-dev queda completada y certificada; produccion y sync diaria siguen bloqueadas, y cualquier prueba de idempotencia o rollback queda para otra tarea separada;
-
auditoria final
GO/NO-GOantes de la primera persistencia reallocal-devparaSOURCE-003 build-martpublicada: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 nuevos:
SAFE POINT = a274bc02e62d82175a13c55915718dff8d4cbaff,python -m py_compile scripts/source_003_importer.py = PASS,build-mart = DRY_RUN,build-mart --execute = BLOCKED,WRONG_TOKEN = BLOCKED, token real sin--commit-local-dev-writesigueBLOCKED, commit flag incorrecto sigueBLOCKED; - evidencia runtime read-only:
fingerprint DB aprobado,
postgres-sandboxausente,RAW = 1886,CORE = 1886,MART = 0/0/0/0, estimates1/25/173/180, filas preexistentes del batch enMART = 0/0/0/0, duplicados de salida por grain0/0/0/0, constraintsMART = 43/43, indicesMART = 12/12; -
decision: queda
GOsolo para una futura tarea separada de persistencia reallocal-devcon doble gate correcto y evidencia propia; produccion y sync diaria siguen bloqueadas; -
post-commit-gate rehearsal para
SOURCE-003 build-mart --executepublicado:docs/tenants/alpuntodeventa/business-observer/design/SOURCE-003-BUILD-MART-POST-COMMIT-GATE-REHEARSAL-001.md; - resultado:
PASS / ROLLED_BACK / SIN DATOS PERSISTIDOS; - controles nuevos:
SAFE POINT = 4032fb837cd75e7602b9ce5bf9b70b459d34964e,build-martsigueDRY_RUN,build-mart --executesigueBLOCKED, token real sin rollback ni commit sigueBLOCKED, commit flag incorrecto sigueBLOCKED,--rollback-rehearsaly--commit-local-dev-writesiguen mutuamente excluyentes; - evidencia runtime:
python scripts/source_003_importer.py build-mart --execute --confirm-local-dev-write SOURCE003_MART_LOCAL_DEV_1886 --rollback-rehearsaldevuelvePASSconexecution_status = ROLLED_BACK,db_write_attempted = true,data_persisted = false,rollback_rehearsal = true,transaction_committed = false; - estado preservado:
BEFORE = RAW 1886 / CORE 1886 / MART 0/0/0/0,INSIDE_TX = 1/25/173/180,AFTER_ROLLBACK = RAW 1886 / CORE 1886 / MART 0/0/0/0; -
decision: el segundo gate de commit no rompio el rehearsal y cualquier persistencia real sigue fuera de alcance en esta tarea;
-
commit gate mode para
SOURCE-003 build-mart --executepublicado:docs/tenants/alpuntodeventa/business-observer/design/SOURCE-003-BUILD-MART-COMMIT-GATE-001.md; - resultado:
SEGUNDO GATE IMPLEMENTADO / NO EJECUTADO / SIN PERSISTENCIA; - controles nuevos:
flag futuro
--commit-local-dev-write SOURCE003_MART_LOCAL_DEV_COMMIT_1886, persistencia futura solo con ambos tokens correctos, bloqueo si el token real se usa sin commit flag y sin rehearsal, y exclusividad mutua entre--rollback-rehearsaly--commit-local-dev-write; - evidencia runtime:
python scripts/source_003_importer.py build-martsigue devolviendoDRY_RUN;python scripts/source_003_importer.py build-mart --executedevuelveBLOCKED;python scripts/source_003_importer.py build-mart --execute --confirm-local-dev-write SOURCE003_MART_LOCAL_DEV_1886devuelveBLOCKED;python scripts/source_003_importer.py build-mart --execute --confirm-local-dev-write SOURCE003_MART_LOCAL_DEV_1886 --commit-local-dev-write WRONG_TOKENdevuelveBLOCKED; - estado preservado:
RAW = 1886,CORE = 1886,MART daily/seller/customer/sku = 0/0/0/0; -
decision: el write path queda listo para un
COMMITfuturo local-dev, pero esta tarea no autoriza ejecutarlo; -
rollback rehearsal mode para
SOURCE-003 build-mart --executepublicado:docs/tenants/alpuntodeventa/business-observer/design/SOURCE-003-BUILD-MART-ROLLBACK-REHEARSAL-001.md; - resultado:
PASS / ROLLED_BACK / SIN DATOS PERSISTIDOS; - controles nuevos:
flag obligatorio
--rollback-rehearsal, token real sin rehearsal sigueBLOCKED, fingerprint DB aprobado revalidado, bloqueopostgres-sandbox, revalidacionRAW = 1886,CORE = 1886,MART = 0/0/0/0, inserts reales dentro de transaccion con rowcounts1/25/173/180yROLLBACKforzado; - evidencia runtime:
python scripts/source_003_importer.py build-mart --execute --confirm-local-dev-write SOURCE003_MART_LOCAL_DEV_1886 --rollback-rehearsaldevuelvePASSconexecution_status = ROLLED_BACK,db_write_attempted = true,data_persisted = false,rollback_rehearsal = true; - estado preservado:
BEFORE = 0/0/0/0,INSIDE_TX = 1/25/173/180,AFTER_ROLLBACK = 0/0/0/0, conRAW = 1886yCORE = 1886; -
decision: el ensayo valida la write path real pero no autoriza
COMMIT; cualquier gate persistente futuro sigue separado y no aprobado; -
implementacion en Python del write path futuro para
SOURCE-003 build-mart --executepublicada: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 nuevos:
gate duro
--confirm-local-dev-write, token requeridoSOURCE003_MART_LOCAL_DEV_1886, fingerprint DB obligatorio, abort sipostgres-sandbox, transaccion unica, revalidacion intra-transaccion, inserts en ordendaily -> seller -> customer -> sku, rowcounts esperados1/25/173/180y rollback total; - evidencia runtime:
python scripts/source_003_importer.py build-martsigue devolviendoDRY_RUN;python scripts/source_003_importer.py build-mart --executedevuelveBLOCKED;python scripts/source_003_importer.py build-mart --execute --confirm-local-dev-write WRONG_TOKENdevuelveBLOCKED; - seguridad:
no se uso el token real, no hubo
INSERT,COPY,UPDATE,DELETE, no se modificoRAW,COREniMART, no se generoCSV, no hubo runner, rollback real, produccion ni sync diaria; -
estado preservado:
RAW = 1886,CORE = 1886,MART daily/seller/customer/sku = 0/0/0/0, estimates1/25/173/180; -
gate documental del write path futuro para
SOURCE-003 build-mart --executepublicado:docs/tenants/alpuntodeventa/business-observer/design/SOURCE-003-BUILD-MART-WRITE-PATH-GATE-001.md; - SQL candidato opcional no ejecutado publicado:
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 nuevos:
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 cualquier MART ya tiene filas para el mismo batch/grain, idempotencia por batch/grain, orden fijo de insertsdaily -> seller -> customer -> sku,ROLLBACKtotal ante error y evidencia post-write minima esperada; -
decision: el write path queda disenado pero no implementado;
build-mart --executesigueBLOCKED, produccion sigue bloqueada y la sync diaria sigue bloqueada; -
preflight read-only para el siguiente paso de
SOURCE-003 build-mart --executepublicado:docs/tenants/alpuntodeventa/business-observer/design/SOURCE-003-BUILD-MART-EXECUTE-PREFLIGHT-001.md; - resultado:
PASS / READ-ONLY PREFLIGHT / EXECUTE SIGUE BLOCKED; - evidencia runtime:
python scripts/source_003_importer.py build-martsigue devolviendoDRY_RUN, con fingerprint DB aprobado,business_observer.core_source_003_sales_itemscomo source oficial, batch1827f887-9499-4579-b4f3-234d54f41f7f,RAW = 1886,CORE = 1886, las cuatro tablasMARTen0filas y estimates confirmadas1diaria,25por vendedor,173por cliente y180porSKU; - seguridad:
python scripts/source_003_importer.py build-mart --executesigue devolviendoBLOCKED; no hubo escrituras, no huboINSERT,COPY,UPDATE,DELETE, no se modificoRAW,COREniMART, no se generoCSV, no hubo runner, rollback, VPS, Docker, OpenClaw,NPM,Portainer, push ni deploy; - controles nuevos:
constraints e indices reales de
MARTrevalidados en DB, sinpostgres-sandbox, sin duplicados de salida por batch/grain y sin filas existentes del mismo batch enMART; - decision:
el siguiente paso sigue siendo una tarea separada para gate/idempotencia y
write-path de
build-mart --execute; esta evidencia no autoriza escrituras.
Actualizacion 2026-06-17:
- implementacion safe mode de
SOURCE-003 build-martpublicada:docs/tenants/alpuntodeventa/business-observer/design/SOURCE-003-IMPORTER-BUILD-MART-SAFE-MODE-001.md; - resultado:
BUILD-MART SAFE MODE IMPLEMENTADO / DRY_RUN PASS / EXECUTE BLOCKED; - evidencia runtime:
python scripts/source_003_importer.py build-martvalida fingerprint DB aprobado, CORE sourcebusiness_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; estima1fila diaria,25por vendedor,173por cliente y180por SKU, sin claves vacias observadas; -
seguridad:
build-mart --executequedaBLOCKED,postgres-sandboxsigue prohibido,db_write=false,data_written=false,sync_enabled=false; no huboINSERT,COPY,UPDATE,DELETE, carga MART, modificacion RAW/CORE, runner, CSV, VPS, Docker, OpenClaw, NPM, Portainer, push ni deploy. -
review documental post-forward MART local-dev de
SOURCE-003publicada:docs/tenants/alpuntodeventa/business-observer/design/SOURCE-003-MART-DDL-LOCAL-DEV-POST-FORWARD-REVIEW.md; - resultado:
MART LOCAL-DEV POST-FORWARD REVIEW PASS / APTO PARA IMPLEMENTAR BUILD-MART SAFE MODE / NO APTO PARA PRODUCCION / NO APTO PARA SYNC DIARIA; - evidencia consolidada:
forwardlocal-dev ejecutado correctamente, cuatro tablas MART existentes y vacias, RAW finalbusiness_observer.raw_source_003_sales_items = 1886, COREbusiness_observer.core_source_003_sales_items = 1886, tabla pilotobusiness_observer.source_003_sales_itemsdistinguida comoPILOTO, y owner/grants/constraints/indexes ya validados por evidencia previa; - alcance preservado:
no hubo carga MART, no hubo
build-mart, no hubo produccion, no hubo sync diaria, no se modifico Python, no se ejecuto SQL nipsql, no se tocoPostgreSQL, no se generaron CSV, no hubo runner, VPS, Docker, OpenClaw, NPM, Portainer, push ni deploy; - riesgos vigentes:
territory_keyno implica vendedor responsable;CMV, costos ycontribution_amountmantienen advertencia semantica; dashboards y consultasLLMproductivas siguen bloqueadas.
Actualizacion 2026-06-16:
- preflight local-dev del paquete
DDL MARTcandidato deSOURCE-003ejecutado:docs/tenants/alpuntodeventa/business-observer/design/SOURCE-003-MART-DDL-LOCAL-DEV-PREFLIGHT-001.md; - resultado:
PREFLIGHT PASS / DDL MART FORWARD NO EJECUTADO; - controles confirmados:
DB
openclaw_business_observer_dev, schemabusiness_observer, roles requeridos, CORE source tablebusiness_observer.core_source_003_sales_items, CORE total1886, batch piloto1827f887-9499-4579-b4f3-234d54f41f7fcon1886filas, campos criticos malos0, duplicados0, cuatro MART candidatas ausentes yPUBLICsin privilegios; -
seguridad: se ejecuto solo
006_source_003_mart_ddl_candidate_preflight.sql; no se ejecuto forward, rollback, post-checks,CREATE TABLE, DML, Python, runner, CSV, sync, VPS, Docker, OpenClaw, NPM, Portainer, push ni deploy; RAW, CORE y MART real no fueron modificados ypostgres-sandboxno fue usado. -
revision tecnica del paquete
DDL MARTcandidato deSOURCE-003publicada: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, owneropenclaw_bo_admin, grants esperados,PUBLICsin privilegios, writer sinDELETE, rollback que aborta si cualquier MART tiene filas y post-checks conrow_count = 0; -
seguridad: review documental sin ejecutar SQL, sin usar
psql, sin tocarPostgreSQL, sin crear tablas reales, sin modificar Python, sin cargar datos, sin generar CSV, sin runner, sin tocar RAW/CORE/MART real, sin VPS, Docker, OpenClaw, NPM, Portainer, push ni deploy. -
paquete
DDL MARTcandidato deSOURCE-003publicado:docs/tenants/alpuntodeventa/business-observer/design/SOURCE-003-MART-DDL-CANDIDATE.md; - SQL candidatos:
006_source_003_mart_ddl_candidate_preflight.sql,006_source_003_mart_ddl_candidate_forward.sql,006_source_003_mart_ddl_candidate_rollback.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 preservando CORE con1886filas; - alcance:
business_observer.mart_source_003_sales_daily,business_observer.mart_source_003_sales_by_seller,business_observer.mart_source_003_sales_by_customerybusiness_observer.mart_source_003_sales_by_sku, con trazabilidad minima, metricas candidatas, owneropenclaw_bo_admin, writerSELECT/INSERT/UPDATEsinDELETE, 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; - decision:
DDL MART CANDIDATO / NO EJECUTADO / NO IMPLEMENTADO EN DB; -
seguridad: no se ejecuto SQL, no se uso
psql, no se tocoPostgreSQL, no se crearon tablas reales, no se modifico Python, no se cargaron datos, no se genero CSV, no se ejecuto runner, no se toco RAW/CORE/MART real, no se uso VPS, Docker, OpenClaw, NPM, Portainer, push ni deploy. -
plan documental del futuro
SOURCE-003 build-martpublicado:docs/tenants/alpuntodeventa/business-observer/design/SOURCE-003-IMPORTER-BUILD-MART-PLAN.md; - resultado:
BUILD-MART PLAN DOCUMENTADO / NO IMPLEMENTADO / NO EJECUTADO; - base:
CORE local-dev
PASS, origen futurobusiness_observer.core_source_003_sales_items, batch1827f887-9499-4579-b4f3-234d54f41f7f,1886filas RAW y1886filas CORE conciliadas; - alcance: MART V1 candidato para ventas por dia, vendedor, cliente, SKU/producto, zona/territorio si aplica y rentabilidad/CMV si aplica; define metricas, dimensiones, granularidad, trazabilidad, idempotencia, rebuild por batch, validaciones pre/post y relacion futura con dashboards, reportes y LLM;
- conclusion:
APTO PARA DISENAR DDL MART CANDIDATO / NO APTO PARA PRODUCCION / NO APTO PARA SYNC DIARIA; -
seguridad: no se modifico Python, no se toco
PostgreSQL, no se ejecuto SQL, no se crearon tablas, no se cargaron datos, no se genero CSV, no se ejecuto runner, no se toco RAW/CORE/MART real, no se uso VPS, Docker, OpenClaw, NPM, Portainer, push ni deploy. -
promote real local-dev ejecutado para
SOURCE-003 promote-core --execute: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; - controles:
DB
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, fingerprint aprobado,postgres-sandboxno usado; - 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,data_written=false, CORE final1886; -
seguridad: se corrigio el gate del importer para aceptar
0como valor explicito en confirmaciones numericas; no se modifico RAW, no se toco MART, no se genero CSV, no hubo runner, VPS, Docker, OpenClaw, NPM, Portainer, push ni deploy. -
write real local-dev implementado para
SOURCE-003 promote-core --execute:docs/tenants/alpuntodeventa/business-observer/design/SOURCE-003-PROMOTE-CORE-WRITE-IMPLEMENTATION-001.md; - resultado:
promote-coreconservaDRY_RUN;promote-core --executesin confirmaciones y 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; -
seguridad:
data_written=false,sync_enabled=false; CORE conservarow_count = 0; no se modifico RAW, no se genero CSV, no hubo runner, rollback real, VPS, Docker, OpenClaw, NPM, Portainer, push ni deploy. -
ruta futura de escritura preparada para
SOURCE-003 promote-core --execute: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=trueyfuture_write_path.write_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; -
seguridad:
db_write=false,data_written=false,sync_enabled=false; CORE conservarow_count = 0; no se modifico RAW, no se genero CSV, no hubo runner, rollback real, VPS, Docker, OpenClaw, NPM, Portainer, push ni deploy. -
gate execute implementado para
SOURCE-003 promote-core --execute:docs/tenants/alpuntodeventa/business-observer/design/SOURCE-003-PROMOTE-CORE-EXECUTE-GATE-IMPLEMENTATION-001.md; - resultado:
promote-coreconservaDRY_RUN;promote-core --executequedaBLOCKEDpor confirmaciones explicitas y sin ruta de escritura CORE; - 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 DB obligatorio ypostgres-sandboxprohibido; -
seguridad:
db_write=false,data_written=false,sync_enabled=false; no se implemento escritura real, no se cargo CORE, no se modifico RAW, no hubo runner, CSV, rollback real, VPS, Docker, OpenClaw, NPM, Portainer, push ni deploy. -
gate documental para futuro
promote-core --executelocal-dev:docs/tenants/alpuntodeventa/business-observer/design/SOURCE-003-PROMOTE-CORE-LOCAL-DEV-EXECUTION-GATE.md; - decision:
GATE PROMOTE-CORE DOCUMENTADO / NO IMPLEMENTADO / NO EJECUTADO; - alcance:
DB permitida
openclaw_business_observer_dev, RAW sourcebusiness_observer.raw_source_003_sales_items, CORE targetbusiness_observer.core_source_003_sales_items, batch permitido1827f887-9499-4579-b4f3-234d54f41f7f,RAW batch rows = 1886,CORE row_count inicial = 0,1886filas esperadas a promover y66columnas CORE destino; - controles:
fingerprint DB obligatorio,
postgres-sandboxprohibido, confirmaciones futuras requeridas, transformacion RAW -> CORE, idempotencia, bloqueo por batch duplicado, transaccion esperada, validaciones pre-write/post-write, rollback/rebuild por batch, evidencia minima y criterioPASS/FAIL/BLOCKED; - conclusion: sirvio de base para implementar el gate execute local-dev; no apto para produccion; no apto para sync diaria;
-
no se modifico Python, no se toco
PostgreSQL, no se ejecuto SQL, no se escribio en CORE, no se modifico RAW, no se cargo dato, no se genero CSV, no se ejecuto runner, no se uso VPS, Docker, OpenClaw, NPM, Portainer, push ni deploy. -
importer
SOURCE-003conpromote-coresafe mode:docs/tenants/alpuntodeventa/business-observer/design/SOURCE-003-IMPORTER-PROMOTE-CORE-SAFE-MODE-001.md; - resultado:
DRY_RUN PASS;promote-core --executedevuelveBLOCKED; - controles:
validate-prepared PASS, fingerprint DB aprobado,postgres-sandboxprohibido, 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; -
seguridad:
db_write=false,data_written=false,sync_enabled=false; no se cargo CORE, no se modifico RAW, no huboINSERT,COPY,UPDATE,DELETE, runner, CSV, VPS, Docker, OpenClaw, NPM, Portainer, push ni deploy. -
forward local-dev del paquete
DDLCORE candidato deSOURCE-003:docs/tenants/alpuntodeventa/business-observer/design/SOURCE-003-CORE-DDL-LOCAL-DEV-FORWARD-001.md; - resultado:
PREFLIGHT PASS / FORWARD OK / POST-CHECKS PASS; - tabla creada:
business_observer.core_source_003_sales_itemsenopenclaw_business_observer_dev, vacia conrow_count = 0; - controles:
owner
openclaw_bo_admin,66columnas,22constraints,10indices, writer conSELECT/INSERT/UPDATEsinDELETE, reader read-only yPUBLICsin privilegios; - RAW:
business_observer.raw_source_003_sales_itemsexistente; preflight confirmo1886filas del batch autorizado1827f887-9499-4579-b4f3-234d54f41f7f, campos criticos malos0y duplicados0; el forward no contiene escrituras contra RAW; -
no se cargo data, no se ejecuto
INSERT,COPY,UPDATE,DELETE, rollback,promote-core, runner/importer, Python, CSV, VPS, Docker, OpenClaw, NPM, Portainer, push ni deploy. -
revision tecnica documental del paquete
DDLCORE candidato deSOURCE-003:docs/tenants/alpuntodeventa/business-observer/design/SOURCE-003-CORE-DDL-CANDIDATE-TECHNICAL-REVIEW.md; - 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 piloto1827f887-9499-4579-b4f3-234d54f41f7f,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 preservados:
channel_normalizedrequiere catalogo aprobado,contribution_amountconserva semantica de margen pendiente,iddebera ser provisto por el futuropromote-core, y no hay condiciones productivas de RLS, particionado, observabilidad ni operacion; -
no se ejecuto SQL, no se uso
psql, no se tocoPostgreSQL, no se creo tabla real, no se modifico Python, no se cargo data, no se genero CSV, no se ejecuto runner, no se toco RAW/CORE/MART real, no se uso VPS, Docker, OpenClaw, NPM, Portainer, push ni deploy. -
paquete
DDLCORE candidato deSOURCE-003:docs/tenants/alpuntodeventa/business-observer/design/SOURCE-003-CORE-DDL-CANDIDATE.md; - SQL candidatos:
005_source_003_core_ddl_candidate_preflight.sql,005_source_003_core_ddl_candidate_forward.sql,005_source_003_core_ddl_candidate_rollback.sql,005_source_003_core_ddl_candidate_post_checks.sql; - objetivo:
disenar
business_observer.core_source_003_sales_itemscomo tabla CORE candidata normalizada desdebusiness_observer.raw_source_003_sales_items; - base autorizada:
RAW local-dev con
1886filas validadas para el batch1827f887-9499-4579-b4f3-234d54f41f7f; - decision:
DDL CORE CANDIDATO / NO EJECUTADO / NO IMPLEMENTADO EN DB; - alcance:
66columnas candidatas, clave tecnicaid, claves de trazabilidadtenant_id,sync_batch_id,line_keyysource_row_hash, constraints, indices, owneropenclaw_bo_admin, grants sinPUBLIC, writer sinDELETE, rollback que aborta si hay filas y post-checks conrow_count = 0; -
no se ejecuto SQL, no se uso
psql, no se tocoPostgreSQL, no se creo tabla real, no se modifico Python, no se cargo data, no se genero CSV, no se ejecuto runner, no se toco RAW/CORE/MART real, no se uso VPS, Docker, OpenClaw, NPM, Portainer, push ni deploy. -
plan documental del futuro
promote-coredel importerSOURCE-003:docs/tenants/alpuntodeventa/business-observer/design/SOURCE-003-IMPORTER-PROMOTE-CORE-PLAN.md; - objetivo:
definir el flujo futuro
python scripts/source_003_importer.py promote-coredesdebusiness_observer.raw_source_003_sales_itemshacia la tabla candidatabusiness_observer.core_source_003_sales_items; - base autorizada:
RAW local-dev con
1886filas validadas para el batch1827f887-9499-4579-b4f3-234d54f41f7f; - alcance:
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 COREcandidato; no apto para produccion; no apto para sync diaria; -
no se modifico Python, no se toco
PostgreSQL, no se ejecuto SQL, no se crearon tablas, no se cargaron datos, no se genero CSV, no se ejecuto runner, no se toco CORE/MART real, no se uso VPS, Docker, OpenClaw, NPM, Portainer, push ni deploy. -
gate documental de ejecucion local-dev para futuro
load-raw --execute:docs/tenants/alpuntodeventa/business-observer/design/SOURCE-003-LOAD-RAW-LOCAL-DEV-EXECUTION-GATE.md; - decision:
GATE DOCUMENTADO / NO IMPLEMENTADO / NO EJECUTADO; - apto para implementar
load-raw --executeen una tarea futura local-dev separada, con SAFE POINT nuevo, autorizacion humana explicita, fingerprint DB, flags exactos, transaccion, validaciones pre-write/post-write, idempotencia y rollback por batch separado; - no apto para produccion;
- no apto para sync diaria;
-
no se modifico Python, no se ejecuto
load-raw --execute, no se tocoPostgreSQL, no se genero CSV, no huboINSERT,COPY,UPDATE,DELETE, runner, VPS, Docker, OpenClaw, NPM, Portainer, push ni deploy. -
importer
SOURCE-003conload-rawseguro implementado enscripts/source_003_importer.py; - evidencia:
docs/tenants/alpuntodeventa/business-observer/design/SOURCE-003-IMPORTER-LOAD-RAW-SAFE-MODE-001.md; python scripts/source_003_importer.py load-rawdevuelveDRY_RUN;validate-prepared PASS;- batch esperado:
1827f887-9499-4579-b4f3-234d54f41f7f; 1886filas candidatas;- tabla RAW:
business_observer.raw_source_003_sales_items; row_count RAW = 0;- columnas destino RAW:
84; db_write=false,sql_write=false,data_written=false,sync_enabled=false;load-raw --executequedaBLOCKED;- no hubo carga, runner, rollback, CSV nuevo, DDL,
postgres-sandbox, VPS, Docker, OpenClaw, NPM, Portainer, push ni deploy.
El documento BUSINESS-OBSERVER-GOVERNANCE-MODEL.md queda definido como
autoridad funcional principal del observer APV.
El tenant APV ya tiene un espacio propio para separar:
- capacidades Core reutilizables de
OpenClaw - reglas y decisiones comerciales especificas de
APV
Documentos base ya creados¶
Use Case 001creado en la capa global:clientes en riesgo comercial- reglas del
Use Case 001creadas en la capa global Use Case 002creado en la capa global:crecimiento y colocacion estrategica- reglas del
Use Case 002creadas en la capa tenant:GROWTH-PLACEMENT-RULES.md Use Case 003creado en la capa tenant:impacto y aprendizaje comercialUse Case 004creado en la capa tenant:demanda no atendida y oportunidad economica perdidaUse Case 005creado en la capa tenant:calendario operativo e inteligencia temporalUse Case 006creado en la capa tenant:inteligencia de mercado y pricingUse Case 007creado en la capa tenant:recomendaciones comerciales priorizadasUse Case 008creado en la capa tenant:inteligencia de surtido y mixUse Case 009creado en la capa tenant:inteligencia de proveedores y abastecimiento- capa tenant
business-observer/creada paraalpuntodeventa
Etapa actual¶
Etapa actual:
- estructura tenant del
Business Observer - vision APV del observer
- consolidacion de reglas APV ya aprobadas
- cierre documental de reglas comerciales del
Use Case 002 - definicion conceptual del
Use Case 003 - definicion funcional del
Use Case 004 - definicion funcional del
Use Case 005 - definicion funcional del
Use Case 006 - definicion funcional del
Use Case 007 - definicion funcional del
Use Case 008 - definicion funcional del
Use Case 009 - auditoria de fundacion de datos para
UC001aUC009 - contrato funcional de datos para
UC001aUC009 - primera fuente real documentada:
SOURCE-001 - SGC / VCLIENTES / Clientes - fuente real documentada para productos:
SOURCE-002 - Maestro de productos / ecommerce.dbo.PRODUCTS - fuente complementaria real documentada para imagenes:
SOURCE-002B - WooCommerce / featured image por SKU - fuente real calculada documentada para ventas y comprobantes:
SOURCE-003 - query sagrada vNext candidate / Tabla 2 / BalanceCtaCteFinal - 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 desdeTabla 2 - decision documental cerrada para
SOURCE-003 vNext:source_003_sales_itemsqueda como tabla base conceptual futura para sync itemizada haciaPostgreSQL / OpenClaw - diseno
DDLdocumental cerrado paraSOURCE-003:source_003_sales_itemsqueda especificada documentalmente contenant_id + line_key,source_row_hash, checks, indices sugeridos y estrategia futura de carga - migracion piloto controlada ejecutada para
SOURCE-003:business_observer.source_003_sales_itemsqueda creada y validada enPostgreSQLlocal, basegestion_de_negocios_core, con backup logico previo, tabla final vacia, insert sintetico borrado y rollback preparado no ejecutado; no habilita produccion final - intento de carga piloto real detenido para
SOURCE-003: la extraccion deTabla 2 vNextpara2026-06-08dio1262filas contra1269esperadas y fallo la conciliacion de importe total /CMV; no se insertaron filas ybusiness_observer.source_003_sales_itemsquedo vacia - 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 las68columnas reales para persistencia en piloto controlado y habilita la preparacion de carga desdeSOURCE-003-SNAPSHOT-001contraPostgreSQLlocal, sin produccion final - carga piloto controlada
001ejecutada paraSOURCE-003:SOURCE-003-SNAPSHOT-001se cargo desde el CSV congelado haciabusiness_observer.source_003_sales_itemsenPostgreSQLlocal; quedaron1886filas persistidas,68/68columnas de negocio contempladas,line_key_v4sin duplicados,source_row_hash_v1calculado con las68columnas y conciliacion de importe total /CMVen verde; no se consultoSGCvivo, no se ejecuto sync diaria y no se habilito produccion final - paquete DDL piloto revisable preparado para
SOURCE-003sobre la DB local dedicadaopenclaw_business_observer_dev:design/SOURCE-003-DEDICATED-DB-DDL-PILOT-PACKAGE.md, SQL forward, rollback y post-checks quedan listos para revision humana comoNO EJECUTAR; no se ejecuto SQL, DDL, DML, carga, sync,Docker,VPS,OpenClaw,NPMni deploy - preflight autorizado de artefacto y DB ejecutado para futura carga piloto
minima dedicada de
SOURCE-003:design/SOURCE-003-PILOT-LOAD-PREFLIGHT-001.md; SAFE POINT exacto, CSV preparado local de83columnas y1886filas validado con sha2563f16a957a79fc84d4ca37930988287cb81f05166210d057fcf8b45007f184afe,sync_batch_id1827f887-9499-4579-b4f3-234d54f41f7f, CSV fuera de Git, DB dedicada validada en solo lectura y SQL preflight autorizado pasado conON_ERROR_STOP=1; tabla final sigue vacia con0filas; no se ejecuto candidate,INSERT,COPY, rollback, sync diaria, carga masiva ni produccion final - candidate load piloto autorizado de
SOURCE-003sobre la DB dedicadaopenclaw_business_observer_dev:design/SOURCE-003-PILOT-LOAD-EXECUTION-001.md; SAFE POINT exacto en9d7d622354176daa34ce0762bb97da8eb993695d; CSV preparado local de83columnas y1886filas revalidado con sha2563f16a957a79fc84d4ca37930988287cb81f05166210d057fcf8b45007f184afey batch1827f887-9499-4579-b4f3-234d54f41f7f; DB destino validada vacia; el SQL preflight paso, pero el candidate fallo en la linea104por\copy; decisionCARGA PILOTO FALLIDA / ROJO, sin post-checks, sin rollback aplicado,0filas finales y sin sync diaria, carga masiva ni produccion final - generador Python local creado para
SOURCE-003 raw -> prepared CSV:scripts/source_003_prepare_csv.py; la corrida strict contra el snapshot raw vigente genero un CSV de prueba fuera de Git con1886filas,83columnas y sha2566fb44d9870a567e728df9bbdcc6b83279d84791bd732626c9e19ccf3a28dc903; comparado contra el CSV preparado validado sha2563f16a957a79fc84d4ca37930988287cb81f05166210d057fcf8b45007f184afe, quedaREPRODUCIBLE ESTRUCTURAL / SHA DIFERENTE, con diferencias acotadas aiden1886filas y82/83columnas coincidentes celda por celda; no se tocoPostgreSQL, no se ejecuto SQL, no se cargaron datos y no se reemplazo el CSV validado - runner Python controlado creado para la futura orquestacion de
SOURCE-003:scripts/source_003_pilot_load_runner.py, documentado endesign/SOURCE-003-PILOT-LOAD-PYTHON-RUNNER-001.md; implementaplan,validate-files,dry-run,preflight,status,verify-existing-pilot,post-checks,load,rollbackyfull, pero en esta tarea solo se permiten y ejecutan modos seguros sin DB; los modos que tocarian DB exigen confirmaciones exactas de DB, batch y CSV sha256, y los modos de escritura quedan bloqueados en esta revision porque la evidencia vigente dice que la tabla dedicada ya contiene1886filas del batch piloto verde; no se tocoPostgreSQL, no se ejecuto SQL, no se cargaron datos y no se ejecuto rollback - semantica read-only del runner definida para
SOURCE-003:preflight-before-loadqueda reservado para validar tabla vacia antes de una carga nueva, mientras questatus/verify-existing-pilotquedan definidos como lectura de salud del piloto ya cargado con1886filas exactas, fecha2026-06-09, metadata exacta,0nulos criticos,0duplicados yline_key/source_row_hashvalidos;post-checksqueda como alias legacy; ningunPASSde lectura habilitaload,fullnirollback - arquitectura futura de capas documentada para
Business Observer APV:design/BUSINESS-OBSERVER-DATA-LAYERS-ARCHITECTURE.mddefine el flujo objetivoraw -> prepared CSV -> core -> mart -> Python importer/runner -> OpenClaw executor -> sync futura, fija responsabilidades por capa y deja el patron reutilizable para clientes/productos; decisionARQUITECTURA FUTURA DOCUMENTADA / NO EJECUTIVA, sin habilitar sync diaria, carga masiva, produccion final niOpenClaw executor - contrato formal de la capa RAW para
SOURCE-003:design/SOURCE-003-RAW-LAYER-CONTRACT.mddefine la responsabilidad de preservar evidencia del origen, diferencia entre raw snapshot, prepared CSV y raw table futura, columnas minimas, metadata obligatoria, batch, idempotencia, deduplicacion, validaciones, errores, rollback por batch y relacion futuraraw -> core; decisionCONTRATO RAW DOCUMENTADO / NO IMPLEMENTADO, sin tabla raw, sinDDL, sin SQL, sinPostgreSQL, sin runner, sin CSV generado, sin carga y sin habilitar sync diaria, carga masiva, produccion final niOpenClaw executor - contrato formal de la capa CORE para
SOURCE-003:design/SOURCE-003-CORE-LAYER-CONTRACT.mddefine la responsabilidad de normalizar negocio desde evidenciarawy artefactosprepared CSV, criterios de promocionraw -> core, columnas core candidatas, claves logicas (tenant_id,line_key,source_row_hash,sync_batch_id), reglas de normalizacion, tipos, deduplicacion, idempotencia, validaciones, errores esperados, rollback logico por batch y relacioncore -> mart; decisionCONTRATO CORE DOCUMENTADO / NO IMPLEMENTADO, sin tabla core, sinDDL, sin SQL, sinPostgreSQL, sin runner, sin CSV generado, sin carga y sin habilitar sync diaria, carga masiva, produccion final niOpenClaw executor - contrato formal de la capa MART para
SOURCE-003:design/SOURCE-003-MART-LAYER-CONTRACT.mddefine la responsabilidad de consumo analitico gobernado desdecore, diferencia entreraw,coreymart, criterios de promocioncore -> mart, marts candidatos iniciales, metricas, dimensiones, granularidad, claves, trazabilidad porsync_batch_id,source_row_hashyline_key, validaciones, errores, refresh/rebuild futuro, rollback logico o rebuild por batch y relacion con dashboards, reportes y consultas LLM futuras; decisionCONTRATO MART DOCUMENTADO / NO IMPLEMENTADO, sin tabla mart, sinDDL, sin SQL, sinPostgreSQL, sin runner, sin CSV generado, sin carga y sin habilitar sync diaria, carga masiva, produccion final niOpenClaw executor - hito
SOURCE-003 Data Layerspublicado:design/SOURCE-003-DATA-LAYERS-MILESTONE.mdconsolida queRAW,COREyMARTestan disenados y publicados documentalmente sobre HEAD8d08ec8f34dd5347833ff7e1cd632a88c0a04cb0, con estadoDOCUMENTADO / PUBLICADO / NO IMPLEMENTADO EN DB; deja trazada la separacionraw / prepared CSV / core / mart, la trazabilidad por batch,line_keyysource_row_hash, las validaciones, la idempotencia y la relacion futura con dashboards, reportes y consultas LLM; no implementa tablas, no creaDDL, no ejecuta SQL, no tocaPostgreSQL, no ejecuta runner, no genera CSV y no carga datos - contrato documental del futuro Python importer formal para
SOURCE-003:design/SOURCE-003-PYTHON-IMPORTER-CONTRACT.mddefine comandos futuros, entradas, salidas, gates, logs, errores, idempotencia, rollback por batch y relacion conOpenClaw executor; decisionCONTRATO IMPORTER DOCUMENTADO / NO IMPLEMENTADO, sin implementar importer, sin tocar Python, sin SQL, sinPostgreSQL, sin runner, sin CSV y sin habilitar sync diaria, carga masiva ni produccion final - importer Python seguro actualizado para
SOURCE-003:scripts/source_003_importer.py, documentado endesign/SOURCE-003-PYTHON-IMPORTER-SKELETON-001.md; implementa solo comandos segurosplan,validate-contract,dry-run,inspect-source,generate-preparedyvalidate-prepared, valida la existencia del contrato importer, generator script, runner script y arquitectura data layers, y mantiene bloqueadosload-raw,promote-core,build-mart,statusyrollback-batch;generate-preparedgenera un CSV ensnapshots/source-003/prepared/generated/, fuera de Git, con1886filas,83columnas y comparacionREPRODUCIBLE ESTRUCTURAL ACEPTADOcontra el prepared validado (82/83columnas coincidentes, diferencia esperada enidpor UUID v5 deterministico);validate-preparedvalida prepared historico y generated existente sin generar CSV nuevo, con SHA256 esperados, ambos fuera de Git,source_row_hashyline_keyno vacios y comparacionREPRODUCIBLE ESTRUCTURAL ACEPTADO; decisionIMPORTER SEGURO CON VALIDATE-PREPARED / NO DB, condb_touched=false,sql_executed=false,data_written=falseysync_enabled=false; no se tocoPostgreSQL, no se ejecuto SQL, no se llamo al runner, no se reemplazo el CSV validado y no se habilito sync - plan controlado del futuro
load-rawdel importerSOURCE-003:design/SOURCE-003-IMPORTER-LOAD-RAW-PLAN.mddefine objetivo futuro, alcance sololocal-devo DB dedicada, prohibicion de usarpostgres-sandboxcomo produccion, precondiciones obligatorias, comportamiento seguro por defecto,--executerequerido para escritura, fingerprint DB, batch explicito, target table gobernada, relacion con la tabla pilotobusiness_observer.source_003_sales_items, validaciones previas, transaccion con staging y checks pre-commit, idempotencia, deduplicacion, rollback por batch, logs/auditoria, outputs, riesgos y criterios de aceptacion; decisionLOAD-RAW PLAN DOCUMENTADO / NO IMPLEMENTADO / NO EJECUTABLE; no se tocoPostgreSQL, no se ejecuto SQL, no se modifico Python, no se creoDDL, no se genero CSV y no se habilito sync diaria, carga masiva, produccion,OpenClaw executorni jobs automaticos - plan controlado del futuro
promote-coredel importerSOURCE-003:design/SOURCE-003-IMPORTER-PROMOTE-CORE-PLAN.mddefine la promocion futura desde RAW local-dev validado hacia CORE candidato, limita el batch permitido a1827f887-9499-4579-b4f3-234d54f41f7f, propone como destino futurobusiness_observer.core_source_003_sales_items, y documenta precondiciones, reglasraw -> core, normalizacion, tipos, claves logicas, idempotencia, deduplicacion, rollback/rebuild por batch, validaciones pre/post y relacion futura con mart; decisionPROMOTE-CORE PLAN DOCUMENTADO / NO IMPLEMENTADO / NO EJECUTADO; apto para disenarDDL COREcandidato, no apto para produccion ni sync diaria; no se modifico Python, no se tocoPostgreSQL, no se ejecuto SQL, no se crearon tablas, no se cargaron datos, no se genero CSV y no se toco CORE/MART real - paquete
DDLCORE candidato deSOURCE-003:design/SOURCE-003-CORE-DDL-CANDIDATE.mdy SQL candidatos005_source_003_core_ddl_candidate_*definenbusiness_observer.core_source_003_sales_itemscomo tabla CORE candidata, normalizada desdebusiness_observer.raw_source_003_sales_items, con clave tecnicaid, clave logicatenant_id + line_key, clave de promociontenant_id + sync_batch_id + line_key,66columnas,22constraints,10indices, owneropenclaw_bo_admin, grants sinPUBLIC, writer sinDELETE, rollback que aborta si hay filas y post-checks conrow_count = 0; no se ejecuto SQL, no se tocoPostgreSQL, no se creo tabla real, no se modifico Python, no se ejecuto runner y no se genero CSV - revision tecnica documental del contrato
load-rawdeSOURCE-003:design/SOURCE-003-LOAD-RAW-TECHNICAL-REVIEW.mdconfirma consistencia entre plan, contrato RAW, contratos CORE/MART, importer, skeleton, comandos seguros y auditoria VPS PostgreSQL; resultadoAPTO PARA DISENAR DDL RAW / NO APTO PARA IMPLEMENTAR LOAD-RAW TODAVIA; mantiene bloqueados Python,DDL, SQL,PostgreSQL, runner, CSV, carga, sync diaria, carga masiva, produccion,OpenClaw executor, VPS, Docker, OpenClaw, NPM, push y deploy - paquete
DDLRAW candidato deSOURCE-003:design/SOURCE-003-RAW-DDL-CANDIDATE.mdy SQL candidatos004_source_003_raw_ddl_candidate_*definenbusiness_observer.raw_source_003_sales_itemscomo tabla RAW candidata, preservan quebusiness_observer.source_003_sales_itemsesPILOTO, incluyen columnas del prepared CSV masloaded_at, clave tecnicaid, clave logica por batchtenant_id + sync_batch_id + line_key, constraints, indices, owneropenclaw_bo_admin, grants sinPUBLIC, writer sinDELETE, rollback que aborta si hay filas y post-checks conrow_count = 0; no se ejecuto SQL, no se tocoPostgreSQL, no se creo tabla real, no se modifico Python, no se ejecuto runner y no se genero CSV - revision tecnica del paquete
DDLRAW candidato deSOURCE-003:design/SOURCE-003-RAW-DDL-CANDIDATE-TECHNICAL-REVIEW.mdconcluyeAPTO PARA EJECUCION LOCAL-DEV / NO APTO PARA PRODUCCION / NO APTO PARA IMPLEMENTAR LOAD-RAW TODAVIA; valida tabla candidatabusiness_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, ownership/grants,PUBLICsin privilegios, writer sinDELETE, preflight, forward, rollback que aborta si hay filas y post-checks conrow_count = 0; no se ejecuto SQL, no se usopsql, no se tocoPostgreSQL, no se creo tabla real, no se modifico Python, no se ejecuto runner y no se genero CSV - forward local-dev del
DDLRAW candidato deSOURCE-003:design/SOURCE-003-RAW-DDL-LOCAL-DEV-FORWARD-001.mdregistra la ejecucion controlada contraopenclaw_business_observer_dev:preflight PASS,forward OK,post-checks PASS; queda creada vaciabusiness_observer.raw_source_003_sales_itemscon owneropenclaw_bo_admin,84columnas,21constraints,9indices,row_count = 0, writer sinDELETE, reader read-only yPUBLICsin privilegios; la tabla pilotobusiness_observer.source_003_sales_itemsno fue tocada por escritura; no se cargo dato, no se modifico Python, no se ejecuto runner/importerload-raw, no se genero CSV y siguen bloqueadas sync diaria, carga masiva y produccion final - gate documental de ejecucion local-dev de
SOURCE-003 load-raw --execute:design/SOURCE-003-LOAD-RAW-LOCAL-DEV-EXECUTION-GATE.mddefine las precondiciones obligatorias para una futura implementacion local-dev: DB permitidaopenclaw_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 de autorizacion, transaccion, validaciones pre-write/post-write, rollback por batch separado, idempotencia, evidencia minima y criterioPASS/FAIL/BLOCKED; decisionGATE DOCUMENTADO / NO IMPLEMENTADO / NO EJECUTADO, apto para implementarload-raw --executeen tarea futura local-dev separada, no apto para produccion ni sync diaria - fuente funcional futura documentada para snapshot diario:
SOURCE-002C - stock diario al cierre aproximado de 17:00 - fuente funcional futura documentada para stock actual liviano:
SOURCE-002D - stock intradiario liviano cada 10 minutos - mapeo conceptual futuro documentado para separar
SOURCE-002en capas de producto, stock y valores economicos:SOURCE-002-FUTURE-LAYER-MAPPING - decision documental futura cerrada para la capa economica de
SOURCE-002y para modelar listas de precios como filas normalizadas porSKU+lista_codigo:SOURCE-002-ECONOMIC-LAYER - regla canonica de dominio producto cerrada documentalmente para
SOURCE-002:tenant_id + SKU - regla documental cerrada:
todo dato de
SOURCE-002debe leerse como atributo, medicion, relacion vigente o relacion historica delSKU - regla documental cerrada para proveedor y marca:
Cod Proveedorcomo identificador de negocio,Proveedorcomo nombre legible asociado alSKUyMarcacomo atributo comercial asociado alSKU - regla canonica de dominio cliente cerrada documentalmente para
SOURCE-001:tenant_id + codigo_cliente - canonicalizacion recomendada cerrada para
SOURCE-001:codigo_cliente = NULLIF(LTRIM(RTRIM([Codigo])), '') - regla documental cerrada:
todo grupo derivado de
SOURCE-001pertenece al mismo clienteSGCy no debe leerse como cliente independiente - separacion logica futura explicitada para
SOURCE-001:customers_core,customers_contact,customers_address,customers_tax,customers_commercial,customers_sales_ownerycustomers_visit_scheduleson grupos logicos del mismo cliente - 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: baja comercial o suspension no habilitan hard delete en el futuro disenoPostgres - regla futura de interpretacion cerrada para
SOURCE-001: desaparicion de una extraccion completa no equivale aEstado = CLIENTE DE BAJA - regla documental transversal cerrada:
historicos por valor de decision para costo, precio, listas,
IVA, margen, descuento, quiebres, recuperaciones, ingresos y snapshots utiles - validacion documental agregada con ejemplo real de listas normalizadas:
L7paraSKU 0135ySKU 0128 - confirmacion estructural agregada:
L1..L9son una repeticion horizontal del mismo bloque economico delERP / SGCy no deben modelarse como columnas fijas de destino - confirmacion de normalizacion agregada:
SOURCE-002requiere higiene analitica porque elERP / SGCexpone datos con formatos poco prolijos y la autoridad ya documentaCAST,ROUND,RTRIM, calculos deIVA, stock en bultos, palletizado, conversion de fechas y exclusiones configurables deSKU - inventario real parcial ya evidenciado para
SOURCE-001: distribucion deEstadovalidada en consulta real de solo lectura, con soloCLIENTE ACTIVO,CLIENTE DE BAJAyCLIENTE SUSPENDIDO, sin valores inesperados y conFecha_Bajatotalmente alineada conCLIENTE DE BAJA - inventario real parcial ya evidenciado para
SOURCE-001: unicidad deCodigonormalizado validada en consulta real de solo lectura, con11401filas,11401codigos distintos,0nulos o vacios y0duplicados, reforzandotenant_id + codigo_clientecomo clave logica fuerte - inventario real parcial ya evidenciado para
SOURCE-001: calidad deWhatsAppvalidada en consulta real de solo lectura con7107informados,4294vacios,350telefonos repetidos entre clientes distintos y semaforo recomendadoAMARILLOpor cobertura incompleta y heterogeneidad de formato - inventario real ampliado ya evidenciado para
SOURCE-001: vendedor validado en consulta real de solo lectura con11404/11404Codigo_vendedoryNombre_Vendedorinformados,76parescodigo + nombredistintos y relacion1:1sin inconsistencias - inventario real ampliado ya evidenciado para
SOURCE-001: frecuencia validada en consulta real de solo lectura con11404/11404CodFrecyFrecuenciainformados,4parescod_frec + frecuenciaconsistentes y campos diarios observados solo comoS,NyNULL/VACIO - inventario real ampliado ya evidenciado para
SOURCE-001: territorialidad validada en consulta real de solo lectura con11404/11404LocalidadyProvinciainformadas,11403/11404Zonainformada,24provincias,516localidades y365zonas distintas, con semaforo recomendadoAMARILLOpor dispersion textual y mezcla multi-provincia en parte del catalogo de zonas - estrategia territorial canonica ya documentada para
SOURCE-001:territory/TERRITORY-NORMALIZATION-STRATEGY.md - catalogo documental inicial de alias territoriales ya documentado para
SOURCE-001:territory/TERRITORY-ALIAS-CATALOG-001.md - paquete de revision humana ya documentado para
SOURCE-001:territory/TERRITORY-HUMAN-REVIEW-001.md - decision documental cerrada para territorio:
ProvinciayLocalidadquedan como senales fuertes conraw + normalizedyZonaqueda como zona logistica conzona_raw + zona_type + zona_normalized - decision documental cerrada para ownership:
Zonano define vendedor responsable; el vendedor responsable sale deCodigo_vendedor / Nombre_Vendedor - decision documental cerrada para territorio comercial:
la pregunta por territorio del vendedor debe resolverse con clientes
asignados + geografia + ventas + productos, no con
Zona - vista analitica conceptual futura documentada para territorio comercial del
vendedor:
analytics/SELLER-COMMERCIAL-TERRITORY-VIEW.md - documento conceptual futuro documentado para reconciliacion entre vendedor
asignado y vendedor transaccional:
analytics/SELLER-RECONCILIATION-RULES.md - decision documental cerrada para esa vista futura:
debe tratarse como capa derivada de
analyticsy no como fuente primaria - decision documental cerrada para granularidad recomendada de esa vista
futura:
tenant_id + periodo + vendedor + cliente + SKU - decision documental cerrada para restricciones de esa vista futura:
no usar
Zonapara inferir vendedor, no excluir clientes de baja del historico, no usarWhatsAppcomo identificador y preservarraw + normalized - decision documental cerrada para reconciliacion de vendedor:
SOURCE-001defineseller_assigned,SOURCE-003defineseller_transactional, la atribucion real de ventas usaseller_transactionaly la diferencia entre ambos debe preservarse como senal analitica - validacion real exploratoria agregada al
2026-06-09para reconciliacionassigned vs transactional: ventana90 diascon97885ventas validas exploratorias,97885/97885clientes mapeados aSOURCE-001,95690coincidencias,2195mismatch (2.24%),47clientes con ultima venta hecha por otro vendedor y semaforo recomendadoAMARILLOpor taxonomia de canal aun no cerrada del todo - taxonomia funcional parcial de canal agregada al
2026-06-09paraSOURCE-003:TRADICyKIOSCOutilizables comotraditional_seller,NULL/VACIO -> SIN ASIGNARutilizable comounassigned,OTROSutilizable solo con apoyo deRamo, sin evidencia suficiente todavia para cerrarecommerceoshared_channela nivel de canal completo - documento conceptual futuro documentado para
customer ownership analytics:analytics/CUSTOMER-OWNERSHIP-ANALYTICS.md - decision documental cerrada para
customer ownership analytics:ownership_assignedqueda gobernado porSOURCE-001,ownership_last_saley la autoria real de venta quedan gobernados porSOURCE-003,ownership_growthdebe cruzarSOURCE-003 + SOURCE-002yownership_effectivequeda como lectura derivada futura sin reemplazo automatico del vendedor asignado - decision documental cerrada adicional para
customer ownership analytics: la capa debe responder abandono, recuperacion, crecimiento, riesgo y cuentas trabajadas por terceros antes de cualquierSQL, vista fisica, automatizacion oML - validacion real exploratoria agregada al
2026-06-09para ownership: en la misma ventana de90 dias,1851clientes tuvieron ultima venta del vendedor asignado,47la tuvieron con otro vendedor,0quedaron ambiguos en la ultima fecha y no se observaron casosmanual_reviewpor cliente no mapeado o vendedor faltante - decision documental cerrada para aliases y clasificacion de
Zona:JOSE C. PAZ -> JOSE C PAZ,NO DEFINIDA -> undefined,NULL/VACIO -> unknown, con nivelesautomatic,suggestedymanual_review - decision documental adicional cerrada:
Zonaqueda fijada comologistic_zone,undefinedounknownparaSOURCE-001; la revision humana pendiente queda concentrada en aliases y casos ambiguos - primer mapeo origen-destino documentado para
SOURCE-001:mappings/SOURCE-001-CLIENTES-MAPPING.md - aplicacion explicita de
DATA-DESIGN-STANDARDenSOURCE-001: bloques logicoscustomers_core,customers_contact,customers_address,customers_tax,customers_commercial,customers_sales_owner,customers_visit_scheduleysource_001_customer_audit, con reglas documentales desource_row_hash,sync_batch_id,extracted_at,last_seen_at,created_atyupdated_at - capa funcional futura documentada para eventos de inventario:
Inventory Events Layer - eventos derivados de stock
Que queda cerrado¶
- separacion documental
CorevsAPV - referencia explicita a
alpuntodeventacomo primer tenant piloto - referencia explicita a
La Directacomo tenant futuro separado - visibilidad de los casos de uso activos de
APV - consolidacion de reglas APV ya aprobadas en un documento del tenant
- reglas comerciales oficiales del
Use Case 002para crecimiento y colocacion estrategica - documento oficial del
Use Case 003para impacto y aprendizaje comercial - documento oficial del
Use Case 004para demanda no atendida y oportunidad economica perdida - documento oficial del
Use Case 005para calendario operativo e inteligencia temporal - documento oficial del
Use Case 006para inteligencia de mercado y pricing - documento oficial del
Use Case 007para recomendaciones comerciales priorizadas - documento oficial del
Use Case 008para inteligencia de surtido y mix - documento oficial del
Use Case 009para inteligencia de proveedores y abastecimiento - auditoria de fundacion de datos creada para
UC001aUC009 DATA-NEEDS.mdalineado con la auditoria- contrato funcional de datos creado como puente entre auditoria, dataset
tenant, futuro
Postgresy futura sincronizacion - modelo de gobierno funcional oficial del observer
APV - documento fuente real inicial para clientes:
sources/SOURCE-001-SGC-CLIENTES.md - documento fuente real para productos:
sources/SOURCE-002-SGC-PRODUCTOS.md - documento fuente complementaria real para imagenes:
sources/SOURCE-002B-WOOCOMMERCE-IMAGENES.md - documento fuente real calculada para ventas y comprobantes:
sources/SOURCE-003-SGC-VENTAS-COMPROBANTES.md - piloto fisico controlado de
source_003_sales_items:design/SOURCE-003-SALES-ITEMS-PILOT-MIGRATION.md - intento de carga piloto real detenido de
source_003_sales_items:design/SOURCE-003-SALES-ITEMS-PILOT-LOAD.md - carga piloto controlada exitosa de
source_003_sales_items:design/SOURCE-003-SALES-ITEMS-PILOT-LOAD-001.md - paquete DDL piloto revisable para DB dedicada de
source_003_sales_items:design/SOURCE-003-DEDICATED-DB-DDL-PILOT-PACKAGE.md - arquitectura futura de capas
raw / prepared CSV / core / mart / Python importer-runner / OpenClaw executor / sync futura:design/BUSINESS-OBSERVER-DATA-LAYERS-ARCHITECTURE.md - contrato RAW formal de
SOURCE-003:design/SOURCE-003-RAW-LAYER-CONTRACT.md - contrato CORE formal de
SOURCE-003:design/SOURCE-003-CORE-LAYER-CONTRACT.md - contrato MART formal de
SOURCE-003:design/SOURCE-003-MART-LAYER-CONTRACT.md - hito
SOURCE-003 Data Layerspublicado:design/SOURCE-003-DATA-LAYERS-MILESTONE.md - contrato documental del Python importer futuro para
SOURCE-003:design/SOURCE-003-PYTHON-IMPORTER-CONTRACT.md - skeleton Python importer para
SOURCE-003:design/SOURCE-003-PYTHON-IMPORTER-SKELETON-001.md - plan controlado del futuro
load-rawdel importerSOURCE-003:design/SOURCE-003-IMPORTER-LOAD-RAW-PLAN.md - plan controlado del futuro
promote-coredel importerSOURCE-003:design/SOURCE-003-IMPORTER-PROMOTE-CORE-PLAN.md - plan controlado del futuro
build-martdel importerSOURCE-003:design/SOURCE-003-IMPORTER-BUILD-MART-PLAN.md - revision tecnica del paquete
DDLRAW candidato deSOURCE-003:design/SOURCE-003-RAW-DDL-CANDIDATE-TECHNICAL-REVIEW.md - documento fuente funcional futura para snapshot diario:
sources/SOURCE-002C-STOCK-DAILY-SNAPSHOT.md - documento fuente funcional futura para stock actual liviano:
sources/SOURCE-002D-STOCK-CURRENT-10MIN.md - documento conceptual futuro de capas para
SOURCE-002:SOURCE-002-FUTURE-LAYER-MAPPING.md - documento de mapeo campo por campo para
SOURCE-001:mappings/SOURCE-001-CLIENTES-MAPPING.md - documento especifico futuro para la capa economica de
SOURCE-002:SOURCE-002-ECONOMIC-LAYER.md - ejemplo real documentado para validar listas normalizadas en
SOURCE-002-ECONOMIC-LAYER.md:L7paraSKU 0135ySKU 0128 - documento fuente funcional futura para eventos de inventario:
sources/INVENTORY-EVENTS-LAYER-FUTURE.md - reporte de recuperacion de query:
sources/SOURCE-002-QUERY-RECOVERY-REPORT.md - registro oficial de autoridad de fuentes:
source-authority/SOURCE-AUTHORITY-REGISTRY.md - preservacion documental de autoridad
SOURCE-001,SOURCE-002ySOURCE-003:source-authority/ - cierre de evidencia completa para
SOURCE-001usando laSELECT_CUSTOMERS_SQLdel script de sincronizacion de clientes aportado porGabi - cierre documental de
SOURCE-002como maestro de productos completo con proveedor, costos, precios,IVA, stock, bultos, palletizado y fechas operativas preservadas desde la query vigente aportada porGabi - cierre documental de la capa economica de
SOURCE-002con validacion real de listasL1..L9como bloque repetible horizontal delERP / SGC - decision vigente cerrada para modelar listas como filas normalizadas por
SKU+lista_codigoy no como columnas fijas de destino principal - decision vigente cerrada para tratar
tenant_id + SKUcomo clave canonica del dominio producto en todoSOURCE-002 - decision vigente cerrada para derivar analisis por proveedor o marca desde
los
SKUasociados y no desde textos sueltos - regla documental vigente cerrada para contemplar historicos cuando el dato sirva para indicadores, patrones, tendencias, alertas, decisiones o aprendizaje futuro, sin guardar todo sin criterio
- decision vigente cerrada para
SOURCE-003: la autoridad real es la query completa preservada y noV_VENTASsola - decision vigente cerrada para
SOURCE-003: la logica documental ya contempla comprobantes que corrigen o anulan segun tipo de comprobante y reglas de signo - decision vigente cerrada para
SOURCE-003: la futura sync debe preservar precision suficiente y contexto historico de transaccion para no depender luego del maestro actual - decision vigente cerrada para
SOURCE-003: la query actual queda registrada comovNext candidatey no como autoridad final cerrada hasta ejecutar validacion real deTabla 2 - decision vigente cerrada para
SOURCE-003: el archivo nuevo de autoridad candidata essource-authority/SOURCE-003-VENTAS-VNEXT-TABLA2-AUTHORITY.sqly la autoridad anterior queda preservada ensource-authority/SOURCE-003-VENTAS-TABLA2-AUTHORITY.sql - confirmacion humana cerrada para
SOURCE-002:Gabiconfirma que la query nueva es la autoridad vigente y queSKU NOT IN ('0124', '3857', '3998', '3793')es la primera lista conocida de exclusiones operativas por articulos internos o no tradicionales
Que sigue pendiente¶
- continuar inventario de fuentes reales de datos existentes
- ejecutar revision humana real de aliases territoriales y formatos ambiguos
de
ZonaconGabi - confirmar con
Gabila ventana movil futura de7dias paraSOURCE-003 - revisar humanamente la evidencia de la carga piloto
001deSOURCE-003-SNAPSHOT-001 - revisar humanamente la evidencia verde de la carga piloto dedicada de
SOURCE-003sobreopenclaw_business_observer_dev - abrir un nuevo gate explicito si alguna vez se necesitara volver a tocar la DB dedicada mediante el runner controlado
- si se necesita volver a verificar el piloto ya cargado en la DB dedicada,
usar
status/verify-existing-piloty reservarpreflightpara tabla vacia antes de una carga nueva - aprobar o bloquear el diseno del siguiente piloto de ventana movil/backfill
para
SOURCE-003 - comparar totales de
Tabla 2contraTabla 1/3/4/5/6 - no avanzar con sync diaria, carga masiva ni produccion final de
SOURCE-003 - si se aprueba implementar
load-raw --execute, abrir una tarea separada local-dev con SAFE POINT nuevo, autorizacion humana explicita y cumplimiento completo dedesign/SOURCE-003-LOAD-RAW-LOCAL-DEV-EXECUTION-GATE.md; mantener produccion y sync diaria bloqueadas - si se aprueba implementar escritura real RAW -> CORE, abrir una tarea
separada local-dev con SAFE POINT nuevo, autorizacion humana explicita,
transaccion y post-checks sobre el gate
promote-core --executeya creado; mantener produccion y sync diaria bloqueadas - disenar
DDL MARTcandidato paraSOURCE-003en una tarea separada, partiendo del planbuild-mart; requiere review, preflight local-dev y forward local-dev antes de cualquier implementacion Python o carga MART - confirmar particionado por fecha, permisos de consumo y
RLSantes de produccion final - definir estrategia de auditoria y comparacion por
source_row_hash_v1para una ventana movil futura desource_003_sales_items - confirmar si
WooCommercesigue siendo fuente vigente y confiable de imagenes porSKU - no cerrar diseno fisico de
SOURCE-001mientras falte evidencia de normalizacion definitiva deWhatsApp, catalogo real de alias territoriales, decision de geocodificacion futura, estrategia final de tablas fisicas y definicion fisica de vistas analiticas de territorio comercial - no cerrar todavia formulas,
SQL, materializacion, permisos ni performance real de la vista analitica de territorio comercial del vendedor - no cerrar todavia umbrales de abandono, reactivacion ni ventana temporal de
cuenta trabajada - no cerrar todavia reglas finales para ecommerce o canales compartidos dentro
de la reconciliacion de vendedor mas alla del cierre parcial documentado en
sources/SOURCE-003-CHANNEL-TAXONOMY.md - no cerrar todavia ventana temporal ni umbrales de
ownership_effective, abandono, recuperacion o crecimiento paracustomer ownership analytics - validar con
Gabiel horario funcional deSOURCE-002C - validar con
Gabila frecuencia funcional deSOURCE-002D - confirmar si ambas capas deben trabajar con todos los
SKUo solo activos - confirmar si se requiere lectura por deposito en ambas capas
- definir como un futuro script tratara en forma configurable la primera lista
de exclusiones operativas de
SOURCE-002 - llevar el mapeo conceptual ya documentado a diseno posterior sin romper la separacion entre producto maestro, stock intradiario, snapshot diario y capas economicas
- sostener en ese diseno posterior la decision ya documentada de no modelar
L1..L9como columnas fijas de destino principal - definir criterios futuros de deteccion simple para eventos de inventario
- definir criterio futuro de severidad, criticidad y control de ruido para eventos de inventario
- mapear fuentes reales contra el contrato funcional de datos
- decidir prioridades comerciales pendientes que hoy no estan cerradas
- definir catalogo oficial de acciones comerciales y criterios de medicion
- cerrar catalogo oficial de objetivos, metas, owners, ventanas y semaforos
- bajar reglas de priorizacion especificas de
UC007 - bajar reglas comerciales especificas de
UC004 - bajar reglas temporales especificas de
UC005 - bajar reglas comerciales especificas de
UC006 - bajar reglas comerciales especificas de
UC008 - bajar reglas comerciales especificas de
UC009 - precisar captura comercial de demanda no atendida e inventario historico
- precisar separacion futura entre snapshot historico y stock intradiario liviano
- precisar calendario operativo, feriados y dias efectivamente trabajados
- precisar relevamientos de mercado, comparabilidad de precio y contexto temporal de costo y oferta
- precisar criterios de cliente subdesarrollado,
SKUnatural siguiente y comparacion entre clientes similares - precisar trazabilidad entre
recomendado,ejecutadoyresultado - bajar a documento futuro el diseno de replicacion
SOURCE-003-PYTHON-POSTGRES-REPLICATION-DESIGN.md - formalizar contrato
OpenClaw executor, gates, observabilidad, reintentos, calidad y secretos antes de cualquier sync futura
Que no se debe hacer todavia¶
- no implementar runtime
- no mover infraestructura
- no tocar
Docker - no tocar
OpenClaw runtime - no crear nuevas migraciones ni tablas fisicas sin aprobacion explicita
- no disenar
APIs - no disenar
IA - no conectar fuentes reales
- no declarar observer operativo
- no declarar implementada la
Inventory Events Layer
Proximos pasos¶
- cerrar la vision APV del observer
- abrir, si Gabi lo aprueba, una tarea separada para implementar escritura
real RAW -> CORE sobre el gate
promote-core --executeya creado - mantener separado lo que es
Corede lo que esAPV - usar el
Governance Modelcomo referencia oficial para nuevos cambios - inventariar fuentes reales existentes para validar auditoria y contrato de datos
- ampliar el inventario real iniciado con
SOURCE-001 - VCLIENTES - preparar mapeo origen-destino sobre ese inventario real
- decidir listas oficiales y cadencia de revision de prioridades comerciales
- cerrar glosario oficial de objetivos, metas, owners y cumplimiento
- bajar el ciclo de aprendizaje comercial a criterios operativos observables
- bajar reglas y necesidades funcionales especificas del
Use Case 004 - bajar reglas y necesidades funcionales especificas del
Use Case 005 - bajar reglas y necesidades funcionales especificas del
Use Case 006 - bajar reglas y necesidades funcionales especificas del
Use Case 008 - bajar reglas y necesidades funcionales especificas del
Use Case 009 - mantener la
Inventory Events Layercomo roadmap futuro, separada de snapshot diario y stock vivo
Criterio de cierre actual¶
Esta etapa se considera cerrada cuando existe una estructura documental clara,
navegable y consistente para alpuntodeventa, sin duplicar en exceso la capa
global, sin mezclar reglas de otros tenants y con reglas oficiales ya
documentadas para Use Case 001 y Use Case 002, y con Use Case 003
cerrado en definicion conceptual tenant, y Use Case 004 y Use Case 005
cerrados en definicion funcional tenant, y Use Case 006 cerrado en
definicion funcional tenant, y Use Case 007 cerrado en definicion funcional
tenant, y Use Case 008 cerrado en definicion funcional tenant, y Use Case 009
cerrado en definicion funcional tenant, y una auditoria de fundacion de datos
creada para sostener UC001 a UC009, y un contrato funcional de datos
creado para ordenar futura implementacion documental, y una capa futura
documentada para Inventory Events Layer, sin declarar operacion, sin SQL,
sin APIs y sin IA.