logo Home / gs-refundv1.0 / Arquivo de Reembolso em lote

Arquivo de Reembolso em lote

Versão 1.2 — Especificação do arquivo CSV de reembolso em lote: estrutura dos registros, regras de validação e comportamento do processamento.

#1. Introdução

#1.1 Objetivo

Descrever a estrutura do arquivo de reembolso em lote e o fluxo de funcionamento do envio de registros. A documentação das rotas da API (geração do link de upload, consulta de arquivos e de reembolsos) está na seção de referência da API e não é repetida aqui.

#1.2 Convenções do arquivo

Item

Regra

Formato

CSV com campos separados por ; (ponto e vírgula)

Codificação

UTF-8

Header / trailer

Não possui. Toda linha é um registro

Registro

Uma linha = um reembolso. O processamento é linha a linha até o fim do arquivo

Linhas em branco

Não permitidas, inclusive no final do arquivo. Linha vazia é tratada como registro fora do layout (INVALID_LAYOUT)

Campo contendo ;

Envolver o campo em aspas duplas: "Estorno; cliente desistiu"

Tipo do arquivo

text/csv

Tamanho máximo

500 MB

#1.3 Nome do arquivo

<Tipo do Arquivo>_<id do arquivo de controle>.csv

O id do arquivo de controle e o nome completo são devolvidos ao solicitar o link de upload. Não é necessário montar o nome manualmente.

Exemplo:

REFUND_fdf613d2-187e-4d49-aaaf-9a1fb2d33297.csv

#1.4 Fluxo de funcionamento

  1. Solicitar o link de upload informando o tipo de processamento: Simplificado ou Detalhado. O tipo é fixado nesse momento e não é deduzido pelo conteúdo do arquivo.

  2. Enviar o arquivo CSV pelo link recebido. O link tem validade curta e aceita um único arquivo. Para reenviar um arquivo corrigido, solicitar um novo link.

  3. Validação e processamento. O arquivo passa por validação de tipo, tamanho e integridade. Aprovado, é processado linha a linha conforme o tipo escolhido. Reprovado, recebe um status de falha e não é processado.

  4. Acompanhar o status do arquivo até sair de NEW. O resultado final é PROCESSED, INVALID_LAYOUT ou INVALID_TYPE, acompanhado do detalhe dos erros quando houver (seções 5 e 6).

Os reembolsos criados a partir do arquivo seguem o ciclo normal de um reembolso individual e são acompanhados pela consulta de reembolsos.

#2. Tipos de arquivo

Tipo

Descrição

Quando usar

Simplificado

Uma coluna: o número do pedido. A transação é localizada e um reembolso total é criado.

Reembolso integral de vendas identificadas pelo número do pedido, sem necessidade de parametrização

Detalhado

Oito colunas que identificam a transação e parametrizam tipo, modalidade, operação e split.

Reembolso parcial, administrativo, chargeback, ou quando se tem o identificador da transação

#3. Layout Simplificado

#3.1 Campos

ID

Campo

Obrigatório

Formato

Exemplo

01

Número do pedido

Sim

Texto. Mesmo valor informado como número do pedido na criação da venda

PED-2025-000123

#3.2 Exemplo de arquivo

PED-2025-000123
PED-2025-000124
98765

#3.3 Regras

  • A transação é localizada pelo número do pedido entre as vendas do subadquirente autenticado.

  • Só gera reembolso quando a transação está aprovada e é de crédito ou PIX. Débito e boleto não são contemplados neste layout.

  • O reembolso criado é sempre TOTAL, operação normal, com a descrição Reembolso criado.

  • Pedido não localizado ou não elegível é ignorado. O arquivo termina como PROCESSED e não há erro por linha. Para confirmar o que foi criado, usar a consulta de reembolsos.

  • Linha com mais de uma coluna interrompe o processamento com INVALID_LAYOUT. Os reembolsos das linhas anteriores já criados permanecem.

#4. Layout Detalhado

#4.1 Campos

As 8 colunas devem estar sempre presentes, mesmo vazias. Uma linha sem split termina com ;.

ID

Campo

Obrigatório

Formato / Domínio

Exemplo

01

Tipo de Registro

Sim

Tabela 1

C

02

transaction id

Sim

Identificador único da transação na GSURF (campo uuid da API Transactions). Para vendas POS é o hash SHA-256 da transação.

Para transações capturadas via gs-payment, é o GTI.

3f9c2a1e-7b4d-4e0a-9c11-5d2f8a6b7c90

03

gw transaction id

Sim

Identificador da transação no gateway de pagamento (campo nit da API Transactions).

Para transações capturadas via gs-payment, é o GTI.

86ab86ed-34e6-4da1-9b85-43587b325c8f

04

Tipo de Reembolso

Sim

Tabela 2

TOTAL

05

Modalidade

Sim

Tabela 3

CREDIT

06

Descrição

Coluna obrigatória, conteúdo livre (pode ser vazio)

Texto. Se contiver ;, envolver em aspas duplas

Cliente desistiu da compra

07

Tipo de operação

Sim

Tabela 4

0

08

Split Data

Obrigatório para PARTIAL; vazio para TOTAL

documento:valor[,documento:valor...] (seção 4.3)

05643319000159:1500

#4.2 Tabelas de domínio

Tabela 1 – Tipo de registro

Sigla

Descrição

C

Criação de reembolso. Único valor aceito atualmente

Tabela 2 – Tipo de reembolso

Identificador

Descrição

Split Data

TOTAL

Reembolsa o valor integral da transação

Deve ficar vazio

PARTIAL

Reembolsa a soma dos valores informados no Split Data

Obrigatório

Tabela 3 – Modalidade

Identificador

Descrição

CREDIT

Crédito, em terminais físicos e e-commerce

DEBIT

Débito, em terminais físicos e e-commerce

PIX

Pix gerado/processado pela plataforma GSURF

Boleto não é suportado em lote. Usar o reembolso individual.

Tabela 4 – Tipo de operação

Identificador

Descrição

Restrições

0

Reembolso normal

Não aceito para transações POS

1

Reembolso administrativo

Obrigatório para transações POS

2

Chargeback

Somente CREDIT ou DEBIT

#4.3 Split Data

Formato de cada parte:

<CPF ou CNPJ>:<valor em centavos>

Várias partes na mesma célula são separadas por , (vírgula).

  • Documento sem máscara: CPF com 11 dígitos; CNPJ com 14 caracteres, numérico ou alfanumérico no novo padrão da RFB.

  • Valor inteiro em centavos: R$ 15,00 → 1500; R$ 0,10 → 10.

  • Em PARTIAL, o valor total do reembolso é a soma das partes.

Split Data

Interpretação

05643319000159:1500

Um participante (CNPJ), R$ 15,00

05643319000159:1500,12345678909:250

Dois participantes, R$ 15,00 + R$ 2,50 = R$ 17,50

12ABC34501DE35:10000

CNPJ alfanumérico, R$ 100,00

#4.4 Exemplos de linha

Reembolso total de crédito e-commerce:

C;3f9c2a1e-7b4d-4e0a-9c11-5d2f8a6b7c90;2025031210293847;TOTAL;CREDIT;Cliente desistiu da compra;0;

Reembolso parcial com split para dois participantes:

C;8d1e4b7a-2c3f-4a5e-b6d7-0f1e2d3c4b5a;2025031210293911;PARTIAL;CREDIT;Devolucao de 1 item;0;05643319000159:1500,12345678909:250

Reembolso total de PIX:

C;c0ffee12-3456-4789-abcd-ef0123456789;2025031210301122;TOTAL;PIX;Pix em duplicidade;0;

Reembolso administrativo de venda POS (transaction id em SHA-256):

C;9f86d081884c7d659a2feaa0c55ad015a3bf4f1b2b0b822cd15d6c15b0f00a08;000123456789;TOTAL;DEBIT;Baixa administrativa venda POS;1;

Chargeback de débito:

C;5a6b7c8d-9e0f-4a1b-8c2d-3e4f5a6b7c8d;2025031210311234;TOTAL;DEBIT;Contestacao do portador;2;

Descrição contendo ;:

C;3f9c2a1e-7b4d-4e0a-9c11-5d2f8a6b7c90;2025031210293847;TOTAL;CREDIT;"Estorno; solicitado via SAC";0;

#4.5 Exemplo de arquivo completo

REFUND_fdf613d2-187e-4d49-aaaf-9a1fb2d33297.csv:

C;3f9c2a1e-7b4d-4e0a-9c11-5d2f8a6b7c90;2025031210293847;TOTAL;CREDIT;Cliente desistiu da compra;0;
C;8d1e4b7a-2c3f-4a5e-b6d7-0f1e2d3c4b5a;2025031210293911;PARTIAL;CREDIT;Devolucao de 1 item;0;05643319000159:1500,12345678909:250
C;c0ffee12-3456-4789-abcd-ef0123456789;2025031210301122;TOTAL;PIX;Pix em duplicidade;0;
C;9f86d081884c7d659a2feaa0c55ad015a3bf4f1b2b0b822cd15d6c15b0f00a08;000123456789;TOTAL;DEBIT;Baixa administrativa venda POS;1;
C;5a6b7c8d-9e0f-4a1b-8c2d-3e4f5a6b7c8d;2025031210311234;TOTAL;DEBIT;Contestacao do portador;2;

#4.6 Regras de validação

O arquivo detalhado é validado em duas fases. Em ambas o comportamento é tudo ou nada: qualquer erro impede a criação de todos os reembolsos do arquivo.

Fase 1 – Layout. Cada linha é interpretada. Na primeira linha fora do layout o processamento para, o status vira INVALID_LAYOUT e um único erro é reportado, apenas com a linha.

Situação

Descrição do erro

Quantidade de colunas diferente de 8 (inclui linha em branco)

Failed to parse RefundFile, expected 8 columns but received N.

Tipo de registro fora da Tabela 1

Mensagem indicando o valor rejeitado

Tipo de reembolso fora da Tabela 2

Mensagem indicando o valor rejeitado

Modalidade fora da Tabela 3

Mensagem indicando o valor rejeitado

Tipo de operação fora da Tabela 4 ou não numérico

Mensagem indicando o valor rejeitado

Split Data sem : ou com valor não inteiro

Mensagem indicando o valor rejeitado

Fase 2 – Regras de negócio. Todas as linhas são avaliadas e os erros acumulados. Havendo ao menos um, o status vira INVALID_TYPE e até 24 erros são reportados, cada um com linha, coluna e campo.

Regra

Coluna

Campo

Descrição do erro

Chargeback (operação 2) só com CREDIT ou DEBIT

5

Modality

Invalid modality for chargeback

Modalidade deve ser CREDIT, DEBIT ou PIX

5

Modality

Invalid modality

PARTIAL exige Split Data

8

Split data

Split data cannot be null to partial refund

Fase 3 – Criação. Com o arquivo válido, cada linha gera um reembolso pelo mesmo fluxo do reembolso individual, sujeito às mesmas regras: idempotência (transação com reembolso em andamento é rejeitada) e bloqueio de operação 0 ou 2 para transações POS. Os reembolsos criados seguem o ciclo individual (NEW → PROCESSING → SCHEDULED → DONE).

#5. Status do arquivo

Status

Origem

Significado

Ação

NEW

Geração do link

Aguardando upload ou processamento

Enviar o arquivo / aguardar

INVALID_TYPE

Upload ou processamento

No upload: arquivo não é text/csv. No processamento (detalhado): erros de negócio, ver detalhe dos erros

Corrigir e reenviar com novo link

INVALID_SIZE

Upload

Arquivo maior que 500 MB

Dividir o arquivo

INVALID_HASH

Upload

Falha de integridade no upload

Reenviar

INFECTED_FILE

Upload

Reprovado na verificação de segurança

Verificar o arquivo de origem

INTERNAL_ERROR

Upload

Falha interna na validação

Reenviar; persistindo, acionar o suporte

INVALID_LAYOUT

Processamento

Linha fora do layout, ver detalhe dos erros

Corrigir e reenviar

PROCESSED

Processamento

Arquivo processado. Reembolsos elegíveis criados

Acompanhar pela consulta de reembolsos

Quando INVALID_TYPE vier com detalhe de erros, a origem é o processamento. Quando vier sem, a origem é o upload.

#6. Detalhe dos erros

Cada erro reportado na consulta do arquivo traz:

  • Linha do arquivo, começando em 1.

  • Coluna do campo com erro, começando em 1 (posição na Tabela de campos da seção 4.1). Vazia em erro de layout.

  • Campo com erro. Vazio em erro de layout.

  • Descrição do erro, conforme as tabelas da seção 4.6.

Erro de layout reporta uma única ocorrência. Erros de negócio reportam até 24 ocorrências.

#7. Resumo do comportamento

  • O tipo de processamento é fixado ao solicitar o link. Enviar um arquivo detalhado num link Simplificado (ou vice-versa) resulta em INVALID_LAYOUT.

  • Cada arquivo é processado uma única vez. Só arquivos em NEW são processados.

  • Detalhado: tudo ou nada. Nenhum reembolso é criado se houver qualquer erro de layout ou de negócio.

  • Simplificado: linhas não elegíveis são puladas silenciosamente. Linha fora do layout interrompe, mas o que já foi criado permanece.

  • Os reembolsos criados são independentes do arquivo a partir da criação. Falhas posteriores aparecem no status do reembolso, não no status do arquivo.

#Histórico de revisões

Versão

Modificações

Autor

Data

1.0

Publicação inicial

Gustavo Carpes

06/08/2024

1.1

Adicionado processamento do layout simplificado

Arthur Miada

12/03/2025

1.2

Exemplos de arquivo por cenário, detalhamento de Split Data, regras de validação, tabela de status e detalhe dos erros

Alisson Pereira

11/09/2026