← Hub
🔗 CENSO v2 do estoque — M8 × Anymarket × Shopee 27/08/2026, tarde · régua corrigida
Esta página substitui o raio-X da manhã de 27/08. A versão da manhã mediu o M8 pela régua errada (maior saldo entre depósitos, que infla) e por isso acusou 100 divergências M8×Anymarket. Refeito com a régua certa: 1.357 dos 1.443 anúncios têm as três camadas batendo. Das 100 divergências da manhã, 35 eram miragem e das 65 que sobraram a maioria tem uma explicação nova e simples — veja o achado do depósito 196.
Como ler esta página. São três números por anúncio, sempre na mesma ordem: M8 (linha de total da empresa, empresas 1+3692; kit calculado pela composição) → Anymarket (/v2/stocks, campo amount = gerencial) → Shopee (leitura ao vivo do anúncio, 27/08 13:54, e cada divergente reconferido um a um).
Censo completo com os três números e o veredito de cada anúncio: /home/diego/anymarket/censo-v2-2026-08-27/censo.csv (1.443 linhas). Esta missão foi só leitura — nenhum estoque foi escrito em lugar nenhum.

1. O achado que muda o diagnóstico: o hub só enxerga um depósito

🔑 A ponte M8 → Anymarket manda o saldo do depósito 196 da Matriz — não o total da empresa.
Não é opinião: das 71 divergências M8×Anymarket que sobraram, 47 batem exatamente com o saldo do depósito 196. No censo inteiro, o número do Anymarket é igual ao depósito 196 em 1.410 de 1.437 anúncios (98,1%), contra 1.366 (95,1%) quando comparado ao total da empresa.

Tradução em português de negócio: tudo que está guardado em outro depósito (o 199, com 280 peças) ou na filial (empresa 3692, 115 peças) simplesmente não existe para o marketplace. O anúncio mostra menos do que a empresa tem.

Quanto isso vale hoje: 44 anúncios, 245 peças invisíveis, R$ 11.058 de custo parado sem aparecer na vitrine.
SKUAnúncioM8 totalDepósito 196AnymarketVitrinePeças invisíveis
25843Bieleta Dianteira Toyota Corolla3911138
25853Bieletas Dianteiras Cross Fox4824242424
25355Aromatizante Natuar Men London 45ml5834343424
25505Bieleta Estabilizadora Dianteira Chevrolet2666620
25845Bieleta Dianteira Volkswagen2999920
27908Bico Injetor Escavadeira Caterpillar 320D60006 (R$ 2.784)
24311Bico Injetor Mitsubishi Pajero Full / Triton161212124 (R$ 2.384)

Observação importante: nesses 44 casos ninguém está com dado corrompido. O M8 está certo, o Anymarket está certo (recebeu o que a ponte mandou) e a Shopee está certa (recebeu o que o hub mandou). O que está errado é o escopo da ponte. A decisão é de negócio: o marketplace deve vender o que está no depósito 199 e na filial, ou não? Isso é pergunta pro Vinicius, não conserto nosso.

2. Placar por camada — 1.443 anúncios ativos, contagem PROVADA (não é amostra)

1.357 de 1.443 anúncios (94,0%) estão com as três camadas batendo — M8, Anymarket e vitrine dizendo o mesmo número. Sobram 80 com alguma divergência e 6 que não dá para comparar.
VereditoAnúnciosQuem está erradoConfiança
OK — 3 camadas batendo1.357Ninguém. 94,0% da lojaalta
Escopo da ponte — hub espelha só o depósito 196/Matriz46Ninguém tem dado errado; a configuração da ponte é que ignora outros depósitos e a filialalta
Ponte M8→Anymarket (KIT) — hub recebe o saldo cru do kit = 07A ponte. Kit não tem saldo próprio no M8 (é sempre 0 por desenho); a ponte manda esse 0 em vez do estoque montávelalta
Anymarket→Shopee: vitrine promete a mais7A transmissão. São bombas-relógio: hoje vendem, e não tem peçaalta
Anymarket→Shopee: vitrine estrangulada2A transmissão. Vende menos do que podiaalta
Suspeita real — hub abaixo do M8, sem explicação6Provavelmente o hub. Não é depósito, não é pedido em abertomédia
Suspeita real — hub acima do M8, sem explicação3Provavelmente o hub. Risco de vender sem ter, direto da fontemédia
Duas quebras — os três números diferentes5Mais de um elo ao mesmo tempomédia
Não é erro — total da empresa não desconta pedido em aberto4Ninguém. Diferença esperada entre físico e disponívelalta
Sem como comparar — SKU sem vínculo cfg=2 no M86Cadastro do M8 (fila da Sara)n/a

Camada M8 → vitrine Shopee (o que o cliente vê × o que a empresa tem)

SituaçãoAnúnciosAntes (régua errada)O que significa no caixa
Batendo certo1.3621.37794,4% da loja correta
Vende sem ter1220Cliente compra e a peça não existe — cancelamento e risco de punição da Shopee
Zerado na vitrine179Tem peça, anúncio esgotado. 10 dos 17 são o caso do depósito 196: a peça está fora do alcance da ponte
Estrangulado (2+ a menos)2610Vende menos do que podia. 20 dos 26 também são depósito 196
Sobra de exatamente 120Regra do Diego: sobra de 1 é pedido em aberto, não erro. Não entra em fila
Sem mapeamento no M866O robô não consegue nem conferir

3. Comparativo honesto: o que sobrou das "100 divergências" da manhã

Das 100 divergências M8×Anymarket medidas de manhã, 35 eram miragem do saldo inflado — sumiram sozinhas quando a conta passou a usar a linha de total da empresa em vez do maior saldo entre depósitos. 65 sobreviveram, e a régua certa ainda revelou 6 novas que a régua errada escondia. Total hoje: 71.
RecorteManhã (régua errada)Agora (régua certa)Leitura
Divergências M8 × Anymarket1007165 sobreviventes + 6 novas; 35 miragens
— das quais eram KIT503025 das 35 miragens eram kit. A conta antiga inflava os componentes, então o kit parecia ter estoque que não existia
— "hub com 0 e M8 com peça"4718O grosso do alarme da manhã não existia
Kit realmente zerado pela ponte50 (estimado)7O problema do kit é real, mas é sete vezes menor do que a manhã dizia
Divergências Anymarket × vitrine Shopee8014A manhã comparou contra a foto das 03:30 e antes das correções do dia; aqui é leitura ao vivo
— "vitrine maior que o cadastro"749Os outros 65 já tinham sido resolvidos pelas correções de hoje (23 de manhã + 73 re-corrigidas à tarde)
Problemas de verdade na ponte M8→Anymarket100217 kit + 9 suspeitas sem explicação + 5 duas quebras. O resto (46) é escopo de depósito e 4 são pedido em aberto

Por que a régua mudou duas vezes hoje: de manhã a conta do M8 usava o maior saldo entre as linhas do produto, que ignora depósito negativo e infla (corrigido no M8-MANUAL.md §3.1). À tarde ficou definido que estoque oficial é o gerencial, não o físico. Este censo usa a linha de total da empresa no M8 — que é o físico correto — e o gerencial do Anymarket como segunda camada, deixando os dois lado a lado em vez de escolher um.

4. Fila do Vinicius — reconstruída, só com o que sobreviveu

Estoque no Anymarket não é editável pela API (provado em 19/08: o comando responde "ok" e não aplica). Quem escreve é a integração do M8. Nada disso sai do nosso lado.

#O que pedirTamanhoPor que importa
1Decidir o escopo da ponte: o Anymarket deve enxergar só o depósito 196 da Matriz, ou o total da empresa (incluindo depósito 199 e a filial 3692)?46 anúncios
44 com peça invisível:
245 peças · R$ 11.058
É o maior item da fila. Hoje 245 peças estão no galpão sem aparecer em nenhum marketplace. Se a resposta for "deve enxergar tudo", é uma mudança de configuração que resolve 46 anúncios de uma vez
2Consertar a ponte para KITS — ela manda o saldo cru do kit (sempre 0 no M8) em vez do estoque montável pela composição7 anúnciosMenor do que se pensava de manhã, mas é bug de verdade: todo kit novo nasce zerado. Ex.: Corrente Motor Pequena New Actyon (SKU 12529, M8 12 × hub 0) e Jogo Bico Injetor S10 2.8 (24723, M8 2 × hub 0)
3Investigar 9 cadastros onde o hub não bate com o M8 e não é depósito nem pedido em aberto9 anúnciosSão os únicos casos em que suspeitamos do hub em si. Padrão curioso: 5 deles são bicos Ssangyong / Amarok com gap de exatamente 4 unidades (SKUs 21903, 21905, 21907, 11533, 11535, 23977) — cheira a reserva presa no hub
4Ver por que 9 anúncios têm na vitrine mais do que o hub manda (transmissão Anymarket→Shopee)9 anúnciosEstes vendem hoje o que não existe. 5 deles estão com M8 e hub em 0 e a vitrine em 1
5Destravar os 6 SKUs sem vínculo cfg=2 no M8 (25693, 22689, 18815, 24551, 26019, 10253)6 anúnciosSem vínculo a ponte nunca toca neles. Um congelado desde abr/2021. Só a Pastilha Azera (18815) tem estoque na vitrine. Cadastro = Sara
6Contagem física do Atuador Korando (SKU 10959) e ajuste do saldo1 itemÉ a peça que gerou tudo isso. Já vendida, sistema ainda com 1
7Higiene dos cadastros com transmissão em erro (Part Number / atributos)12 restantesPrioridade baixa e já em tratamento por outro agente — 83 dos 95 foram corrigidos hoje por API. A varredura mostrou que esse erro não prevê estoque errado

Os 9 que prometem a mais na vitrine (risco de venda sem peça hoje)

SKUAnúncioM8AnymarketVitrine
22687Cilindro Freio Roda Esquerdo Hyundai HR001
26149Bico Injetor Mercedes Sprinter 311 / 313001
26101Bico Injetor Mitsubishi Pajero / Triton L20000 (−1 disp.)1
26159Jogo Bico Injetor Mitsubishi Pajero Full001
12457Kit Filtros + Óleo + Kit Tensor Ssangyong001
18047Kit Amortecedor Dianteiro Completo Lifan223
27942Bico Injetor Volkswagen Constellation Euro131314
15613Kit Coxim Motor Chery Tiggo 2.0101
21903Bico Injetor Ssangyong Actyon Sports 2.0201620

Recomendação (NÃO aplicada): baixar esses 7 na vitrine para o número do hub. Como a régua mudou duas vezes hoje, o próximo write fica com o Diego — este censo é leitura.

5. O desenho da corrente

1. M8 (ERP)Verdade do estoque. O saldo válido é a linha de total da empresa (empresas 1+3692) — nunca o maior saldo entre depósitos. Kit não tem saldo próprio: é o menor número de jogos montáveis pela composição.
2. Anymarket (hub)Uma integração do M8 escreve o estoque aqui — e, como este censo provou, só o depósito 196 da Matriz. Não dá pra escrever por fora: a API aceita o comando e ignora (testado 19/08).
3. Anúncio ShopeeO hub transmite pro anúncio. A vitrine reflete o disponível (gerencial menos reservado), por isso um anúncio com peça reservada aparece com menos.

6. O caso que disparou tudo — Atuador Hidráulico Embreagem Ssangyong Korando

Neste item o sincronismo NÃO falhou. De 21/07 a 26/08 os três sistemas diziam a mesma coisa: 1 peça. A peça não estava na prateleira porque o saldo do M8 é que estava errado. Isso é conferência de inventário, não integração.
De onde vem o saldo fantasma — periciado no banco do M8 (versão provada).
A tabela produtos_estoques guarda uma linha de total da empresa e linhas de cada depósito. No Atuador hoje: total = 0 · depósito 196 = 1 · depósito 199 = −1. Ou seja, o M8 sabe que não tem a peça.
  1. 28/10/2024 — venda do Kit Embreagem Korando (produto 21853). O kit tem o Atuador dentro; o M8 baixou o componente no depósito 199, que nunca teve a peça. 199 foi a −1 e o 196 ficou com 1 a mais do que existia.
  2. 09/02/2026 — um "ajuste diário" conferiu o 196, achou 1 e lançou diferença zero: carimbou o fantasma.
  3. 20/07/2026 — venda de 1 unidade contra o fantasma; o total da empresa foi a −1. No mesmo dia, um ajuste manual (documento 12418) somou +1 no 196 para tirar o negativo. É esse lançamento que criou o "1" de hoje.
  4. 26/08/2026 — a venda da Shopee caiu em cima desse 1.
Nenhuma nota cancelada participa disso.
🔴 O achado que valeu mais que o caso: nossos robôs liam o número errado.
As consultas de estoque pegavam o maior saldo entre as linhas do produto, o que escolhe o 1 do depósito e ignora o −1 do outro e o 0 do total. 86 produtos estão com total e depósitos descolados; 15 têm total 0 com depósito positivo. Corrigido no M8-MANUAL.md §3.1 e é a razão desta página existir em v2.
🔴 Alarme falso do robô de "venda sem vínculo".
Ele decide quem é "sem vínculo" lendo uma lista fixa de julho (lote_publicado.csv), mas a vinculação em massa de 03/08 ligou esses anúncios no hub. Os dois pedidos acusados na semana (260827DMRJHA35 e 260826CPPPM0VX) estão no Anymarket. Efeito: Claudenice e Sara sendo chamadas para lançar manualmente pedidos que já existem — risco de duplicidade. Conserto: trocar a lista fixa por conferência ao vivo. Não mexido (muda rotina de terceiros).

7. O que já foi corrigido em 27/08 (e re-auditado no mesmo dia)

Manhã: 23 anúncios corrigidos na Shopee (5 vende-sem-ter, 8 zerados, 10 estrangulados), 0 falha, conferidos ao vivo um a um.
Tarde: 73 desses e das rodadas anteriores foram re-corrigidos PARA BAIXO, depois que ficou definido que estoque oficial é o gerencial e não o físico. Casos gritantes: bieleta Toyota 39→1, bieleta Cross Fox 48→24, aromatizante London 58→34, e 34 itens de 1→0.
Rollback salvo antes de cada escrita. Nada tocado em Anymarket nem M8. Este censo v2 mede o estado depois dessas duas rodadas — por isso a camada Anymarket→Shopee aparece quase limpa (14 divergentes contra 80 de manhã): boa parte já foi alinhada hoje, à mão.
Armadilhas técnicas registradas:
• A consulta /v2/products?partnerId= do Anymarket ignora o filtro e devolve sempre a página 1 — por isso o produto-anuncios.sh mostra o produto errado. Use /v2/skus/partnerId/{sku} ou /v2/stocks?sku=.
Estoque no Anymarket não é editável pela API (19/08): responde "ok" e não aplica.
• O SQL cru do M8 (docker exec -w /app apolo node m8q.js) corta a saída em 64 KB — consultas grandes precisam ser paginadas com OFFSET/FETCH e ORDER BY por coluna única, senão vêm linhas repetidas ou faltando.

Fontes desta página, todas medidas em 27/08 entre 13:50 e 14:05: M8 via SQL cru (produtos_estoques linha rollup, servicos_aplicados, produtos_dados_marketplace cfg=2, pedidos_itens) · Anymarket GET /v2/stocks paginado (8.490 SKUs, 1.443/1.443 casados) · Shopee get_item_base_info ao vivo nos 1.443 ativos + reconferência 1 a 1 dos 19 divergentes (19/19 confirmados).
Arquivos: /home/diego/anymarket/censo-v2-2026-08-27/censo.csv · censo.json · montar_censo.py (só leitura). Gerado em 27/08/2026, tarde.