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:
| Separador | vírgula, ponto e vírgula, tabulação ou barra vertical — detectado sozinho pelo cabeçalho |
| Decimal | 47.90 e 47,90 valem o mesmo |
| BOM | um BOM no início do arquivo é ignorado; não precisa removê-lo |
| Booleanos | true/false, 1/0, yes/no, sim/não — maiúsculas ou minúsculas |
| Colunas extras | ignoradas; você não precisa recortar o seu export |
Onde ele é exigente
| Colunas obrigatórias | precisam existir no cabeçalho, com o nome canônico ou o mapeado para você |
Campos data | estritamente YYYY-MM-DD |
Campos data e hora | qualquer formato ISO reconhecível |
| Nome do arquivo | precisa 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 arquivo | Resultado |
|---|---|
orders_22052026.csv | reconhecido como orders |
produtos-2026.csv | reconhecido como produtos |
inventory.csv | reconhecido como inventory |
posicao_estoque.csv | nã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
dataestão emYYYY-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_codeeproduct_codereferenciados já foram enviados emlojaseprodutos, 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.