Objetivo
Propor e definir um padrão de documentação para o PDVSync, considerando integração com o PDV, organização clara dos dados e alinhamento entre os times envolvidos.
Descrição
Atualmente, a documentação do PDVSync apresenta problemas de fluidez e clareza, especialmente em relação às diferentes versões existentes e à integração com tabelas do PDV. Por vezes, dados relacionados a tabelas distintas do PDV são tratados na mesma API do Sync, o que resulta em descentralização de informações e dificuldade de uso.
Em discussões identificamos até o momento duas soluções de como resolver este problema, conforme descritas abaixo.
Soluções
Solução 1 - Documentação separada: PDVSync
- Primeira versão criada de documentação PDVSync: Microserviços - TOTVS Varejo PDV Omni - TDN . Nesta documentação como pode ser vista é focada apenas no PDVSync abordando os seguintes pontos:
- Como implementar a integração
- O que é e detalhes dos Microsserviços
- APIs separadas por microsserviços
- APIs com detalhes de seus métodos (POST, GET, PUT, DELETE e PATCH)
- Payloads detalhados com seus tipos (Tabelas com tipos de campos, limites de caracteres, versões, etc...)
- Detalhe do retorno esperado para sucesso (200 ok) e erro (400 Bad Request)
- Englobando o processo offline e online
- Troubleshooting
- Modelo 1 →

- ✅ Vantagens:
- ✔ Liberdade para estruturação da documentação - Sem depender de como a documentação do PDV esta disposta.
- ✔ Maior visibilidade para desenvolvedores externos – Facilita o acesso para parceiros, startups e integradores focado na integração.
- ✔ Facilidade de versionamento – É mais fácil gerenciar e documentar versões diferentes da API sem interferir no produto.
- ❌ Desvantagens:
- ✖ Pode gerar desconexão do produto – Se não houver sincronização eficiente, a documentação pode ficar desatualizada em relação ao produto.
- ✖ Exige manutenção separada – A equipe pode precisar de um esforço adicional para manter a documentação alinhada com as mudanças do produto.
Pontos de melhoria - Solução 1
- Incluir referências de link da documentação do PDV, onde a integração pode ser utilizada. Isto auxilia ao desenvolvedor a identificar melhor a necessidade dos campos a serem utilizados e melhor entendimento da API.
- Melhoria na estrutura de como está o layout da documentação atualmente:
- Precisamos realmente de tantas abas na interface principal do produto?
- Dificuldade de instruir o usuario com tantas informações logo de cara
- Ajustes no modelo da doc das API's
- Adicionar as informações referentes a versões de forma clara
- Centralizar todos os tipos de Dados existentes em apenas um lugar
- Melhor descrição das API's, para que serve e a sua relação entre elas
- Exemplo: ProcessoOnline com fluxos dependentes que não são claros NotaEntrada + NotaSaida
Solução 2 - Unificando a documentação: PDVSync com PDV
- Uma ideia de unificar as documentações, visando em facilitar aos desenvolvedores externos uma consulta unica, segue exemplo atual de uma documentação unificada: Produto.
- A documentação é separada nas seguintes abas:
- Descrição dos campos e regras: Exclusiva para detalhes de campos e regras referente as tabelas do banco PDV.
- Como integrar: Sessão PDVSync, contém os seguintes dados referente a API especifica:
- Métodos POST ou GET (Até o momento mais ou unicamente utilizados no PDV)
- Payloads detalhados com seus tipos (Tabelas com tipos de campos, limites de caracteres, versões, etc...)
- Detalhe do retorno esperado para sucesso (200 ok) e erro (400 Bad Request)
- Modelo 2 →

- ✅ Vantagens:
- ✔ Experiência unificada e facilidade no entendimento de como os dados serão integrados no PDV– Usuários do produto encontram a documentação no mesmo local, sem precisar buscar em fontes externas.
- ✔ Maior alinhamento com a evolução do produto – Mudanças na API acompanham "automaticamente" as mudanças no produto.
- ✔ Facilidade de acesso para clientes – Se a API for utilizada por clientes do próprio produto, o acesso integrado simplifica a adoção.
- ✔ Melhor suporte e integração – Pode estar conectada a fóruns, FAQs e suporte técnico dentro do mesmo ecossistema.
- ❌ Desvantagens:
- ✖ Pode dificultar a adoção por terceiros – Se a API for aberta, desenvolvedores externos podem ter dificuldade em encontrá-la.
- ✖ Menos flexibilidade na organização da documentação – Pode ser difícil criar uma documentação modular e expansível dentro da estrutura do produto.
- ✖ Risco de desatualização – Caso o foco esteja no produto principal, a documentação da API pode ficar desatualizada.
- ✖ Estrutura pré-definida com base na documentação do PDV - Uma documentação pensada no negócio em si ao invés de API
- Um exemplo nesse caso seria produto que é divido em varios itens na rotina do PDV, sendo que no envio do dado é apenas um payload
Pontos de melhoria - Solução 2
- Estrutura separado pelos tipos de dados, sendo que o PDVSync é separado por microsserviços
- Em cada tipo de dados existe uma quantidade enorme de informações do PDV na primeira aba + as informações da API, pode ser tornar confuso para o usuário
- Necessidade de dar foco para a API e foco para o PDV quando o usuario for procurar informações especificas
- Ausência de processo de instalação do Sync
- Ausência de processo Troubleshooting
- Fluxos de subida de forma separada
- Em cada fluxo precisa adicionar a informação do microsserviço, pois atualmente temos apenas o endPoint o que pode se tornar confuso na hora de montar uma requisição
- Estudo de como implementar o processo online
Modelo da Doc de API geral
- Independente da escolha dos modelos 1 e 2, estes dados são essenciais
- Toda documentação das API's subida, descida e online deve conter os seguintes dados:
- Estrutura das pastas dentro da doc
- MicrosServico
- ProcessoXPTO
- GET/endpoint/api/pdvsyncserver/retaguarda/v2/processoonlinecredito
- POST/endpoint/api/pdvsyncserver/retaguarda/v2/processoonlinecredito
- Exemplo:

O dadoXPTO deve poderá ter a seguintes informações:
Apenas nos casos que necessitam de parametros na requisição:
Parametro |
Descrição |
Tipo |
Obrigatório |
Observação |
idInquilino |
Identificador do inquilino |
String |
Sim |
|
idRetaguardaLoja |
Identificador da loja da retaguarda |
String |
Sim |
|
cpfCnpj |
CPF / CNPJ |
String |
Sim |
Parâmetro do tipo Header |
------------------------------------------------------------------------------------------------------------------------------
Retornos
Este método é responsável pela criação de uma regra X
- Endpoint: /api/retaguarda/v3/dadosdinamicos/down/59/{versão}
- caso outras versoes estejam sendo utilizadas incluir
- v2
- v1
- Método: Post
- Autenticação: Bearer token
- Permissão: Retaguarda
- Microserviço: PDVSync.Core.Preco
Este endpoint recebe uma lista de X, permitindo vários em uma mesma requisição. (Com base nas novas atividades melhorar a descrição, envia x dado para tal função)
Requisição
Exemplo de body da requisição
[
{
"dataHoraVigenciaFinal": "2021-06-21T14:43:18.665Z",
"dataHoraVigenciaInicial": "2021-06-21T14:43:18.665Z",
"idInquilino": "string",
"idProprietario": "string",
"idRetaguarda": "string",
}
]
Definições dos campos do body
Campo |
Tipo |
Descrição |
Obrigatório |
Observações |
idInquilino |
string |
Identificador do inquilino |
Sim |
|
idProprietario |
string |
Identificador do proprietário |
Sim |
|
idRetaguarda |
string |
Identificador do grupo na retaguarda |
Sim |
Tamanho máximo: 100 caracteres |
dataHoraVigenciaInicial |
datetime |
Data Inicial da vigência da regra |
Sim |
|
dataHoraVigenciaFinal |
datetime |
Data Final da vigência da regra |
Sim |
|
Retorno
Exemplo de body de retorno
{
"data": null,
"errors": null,
"message": null,
"numberOfRecords": 8,
"success": true,
"totalTime": 2061
}
Definições dos campos do retorno
Campo |
Tipo |
Descrição |
data |
Objeto |
Retorno dos dados caso tenha |
errors |
Objeto |
Objeto contendo todos os erros encontrados. |
message |
String |
Descrição do erro |
numberOfRecords |
Int |
Número de arquivos processados |
success |
Bool |
Status da requisição |
totalTime |
Int |
Tempo total |
Exemplo de body de retorno
{
"data": null,
"errors": {
"0": {
"IdRetaguarda": [
""
]
}
},
"message": null,
"numberOfRecords": 9,
"success": false,
"totalTime": 4077
}
Definições dos campos do retorno
Campo |
Tipo |
Descrição |
data |
Objeto |
Retorno dos dados caso tenha |
errors |
Objeto |
Objeto contendo todos os erros encontrados. Cada propriedade desse objeto é o índice do grupo enviado que está com erro. |
message |
String |
Descrição do erro |
numberOfRecords |
Int |
Número de arquivos processados |
success |
Bool |
Status da requisição |
totalTime |
Int |
Tempo total |
1️⃣ Modelo da Doc da API 1: Apenas os dados da API
Este formato foca exclusivamente nos campos da API, sem mencionar sua relação com o produto.
Campo | Tipo | Obrigatório | Observações | Descrição |
---|
id | int | Sim |
| Identificador único do usuário |
name | string | Sim |
| Nome do usuário |
email | string | Sim |
| Endereço de e-mail do usuário |
created_at | string | Não |
| Data de criação do usuário (ISO 8601) |
- ✅ Vantagens Modelo 1:
- ✔ Mais objetiva e técnica – Evita informações desnecessárias para desenvolvedores que só precisam da API.
- ✔ Fácil manutenção – Não precisa ser alterada caso a interface do produto mude.
- ✔ Facilidade para integradores externos – Desenvolvedores que não usam o produto podem entender os dados sem precisar de contexto extra.
- ❌ Desvantagens Modelo 1:
- ✖ Desconexão com o produto – Quem usa o produto pode não saber como esses dados se refletem na interface.
- ✖ Pouca usabilidade para equipes internas – Se um analista de suporte ou um gerente de produto precisar entender os dados da API, pode ter dificuldades.
2️⃣ Modelo da Doc da API 2: Relacionando os dados da API com o produto
Aqui, a documentação explica como os campos da API interagem com o produto.
Campo | Tipo | Obrigatório | Descrição | Observações | Onde aparece no produto (no nosso caso os campos do PDV) |
---|
id | int | Sim | Identificador único do usuário |
| ID exibido na tela de detalhes do usuário |
name | string | Sim | Nome do usuário |
| Tabela: Nome - Campo - nome_usuario |
email | string | Sim | Endereço de e-mail do usuário |
| E-mail mostrado no perfil do usuário e nas notificações |
created_at | string | Não | Data de criação do usuário (ISO 8601) |
| Data de registro visível na aba "Histórico" do painel de administração |
✅ Vantagens Modelo 2:
- ✔ Maior clareza para usuários do produto – Ajuda a entender como os dados da API afetam a interface.
- ✔ Melhor suporte para equipes internas – Suporte técnico, gerentes de produto e QA podem relacionar os dados da API com o que veem no sistema.
- ✔ Facilita a integração com o front-end – Desenvolvedores que trabalham na interface do produto sabem exatamente onde cada campo é usado. (No nosso caso o banco de dados do PDV)
❌ Desvantagens Modelo 2:
- ✖ Pode ficar mais complexa e extensa – Mais informações significam mais detalhes para manter e atualizar.
- ✖ Maior chance de desatualização – Se o produto mudar, a documentação pode ficar obsoleta rapidamente.
- ✖ Menos útil para integradores externos – Quem não usa o produto pode achar irrelevante a relação dos campos com a interface.