Pular para o conteúdo principal

Envio por arquivo CSV

Você deposita arquivos no bucket do Cloud Storage entregue no onboarding, e eles são processados assim que chegam. Não há chamada de API, agendamento nem confirmação a fazer.

Formato do arquivo​

  • CSV em UTF-8, com a primeira linha trazendo o cabeçalho das colunas.
  • Uma entidade por arquivo — não misture lojas e produtos no mesmo CSV.

O que o validador aceita sem você precisar ajustar​

Boa parte do trabalho de "arrumar o CSV" é desnecessária. O validador é tolerante nestes pontos:

Separadorvírgula, ponto e vírgula, tabulação ou barra vertical — detectado sozinho pelo cabeçalho
Decimal47.90 e 47,90 valem o mesmo
BOMum BOM no início do arquivo é ignorado; não precisa removê-lo
Booleanostrue/false, 1/0, yes/no, sim/não — maiúsculas ou minúsculas
Colunas extrasignoradas; você não precisa recortar o seu export

Onde ele é exigente​

Colunas obrigatóriasprecisam existir no cabeçalho, com o nome canônico ou o mapeado para você
Campos dataestritamente YYYY-MM-DD
Campos data e horaqualquer formato ISO reconhecível
Nome do arquivoprecisa começar pela entidade — ver abaixo

O nome do arquivo importa​

A entidade é deduzida do nome do arquivo, não da pasta. O nome precisa começar pelo nome da entidade, seguido de _, -, ou nada:

Nome do arquivoResultado
orders_22052026.csvreconhecido como orders
produtos-2026.csvreconhecido como produtos
inventory.csvreconhecido como inventory
posicao_estoque.csvnão reconhecido — o arquivo é ignorado

Um arquivo cujo nome não comece por uma das entidades não é processado, e não gera erro visível para você. Se um envio "sumiu", o nome é o primeiro lugar para olhar.

As entidades são lojas, produtos, precos, orders e inventory — ver Dicionário de dados.

Onde depositar​

Dentro do bucket, a convenção é uma pasta por parceiro e, se você atende mais de uma rede, uma subpasta por rede:

{seu_parceiro}/
└── {sua_rede}/
├── lojas_20260413.csv
├── produtos_20260413.csv
├── precos_20260413.csv
├── orders_20260413.csv
└── inventory_20260413.csv

A data no nome deve ser a do período dos dados, não a do envio — é ela que o time usa para investigar uma carga.

O caminho é convenção, e serve para você se organizar. Quem determina a entidade é sempre o nome do arquivo.

Envio manual via WinSCP​

Para quem prefere arrastar e soltar em vez de automatizar. Qualquer cliente que fale com o Cloud Storage serve — Cyberduck ou o próprio console do Google Cloud —, mas o WinSCP é o mais usado pelos parceiros.

1. Instale o WinSCP. Baixe em winscp.net.

2. Configure o protocolo. Na tela de login, mude o protocolo de arquivo para Amazon S3 — é compatível com o Cloud Storage.

3. Defina o host. Preencha com storage.googleapis.com.

4. Insira as credenciais. O Access Key ID e a Secret Key são entregues pelo time no onboarding.

5. Configure o diretório remoto. Em Avançado → Ambientes → Diretórios, preencha "Diretório Remoto" com {bucket}/{seu_parceiro}.

6. Salve, conecte e envie. Arraste os CSV para a pasta da rede correspondente.

Vale a mesma regra de nome de arquivo: ele precisa começar pela entidade.

Envio via SDK Python​

Autentique com a Service Account entregue no onboarding:

export GOOGLE_APPLICATION_CREDENTIALS="$HOME/credenciais-sipru.json"
pip install google-cloud-storage
from datetime import datetime
from pathlib import Path

from google.cloud import storage

BUCKET = "..." # entregue no onboarding
PARCEIRO = "..." # seu identificador de parceiro
REDE = "..." # a rede/cliente a que os dados pertencem
ENTIDADE = "orders" # lojas | produtos | precos | orders | inventory

data = datetime.now().strftime("%Y%m%d")
origem = Path(f"dados/{ENTIDADE}_{data}.csv")
destino = f"{PARCEIRO}/{REDE}/{ENTIDADE}_{data}.csv"

bucket = storage.Client().bucket(BUCKET)
bucket.blob(destino).upload_from_filename(str(origem))

print(f"Enviado: gs://{BUCKET}/{destino}")

Checklist antes do envio​

  • O nome do arquivo começa pela entidade, no padrão entidade_YYYYMMDD.csv?
  • A data no nome corresponde ao período dos dados, não ao dia do envio?
  • O cabeçalho tem todas as colunas obrigatórias daquela entidade?
  • Os campos data estão em YYYY-MM-DD? (nem toda entidade usa o mesmo campo de data — ver o dicionário)
  • Os valores monetários são unitários, não o total da linha?
  • Os location_code e product_code referenciados já foram enviados em lojas e produtos, e são os mesmos códigos em todas as entidades?
  • Os códigos estão sem espaço sobrando no começo ou no fim?
  • O arquivo está em UTF-8? Acento quebrado no cabeçalho impede o reconhecimento da coluna.

Separador, BOM, vírgula decimal e colunas extras não precisam de conferência — ver o que o validador aceita.