| src | ||
| .gitignore | ||
| buildImages.sh | ||
| docker-compose.yml | ||
| Dockerfile | ||
| envio_cliente.json | ||
| modelo_envio_plugnotas.json | ||
| modelo_webhook_plugnotas.json | ||
| payload_nfe_tray.json | ||
| pedido_completo.json | ||
| README.md | ||
| requirements.txt | ||
| webhook.json | ||
Innovar AMR Tray Controller
Microserviço responsável por atuar como controlador de integrações entre a plataforma de e-commerce Tray, o emissor de NFe Plugnotas e o ERP Sienge.
Visão Geral
Este projeto consome mensagens de uma fila RabbitMQ (originadas de webhooks) e orquestra a comunicação entre diferentes sistemas para automatizar o fluxo de vendas:
-
Tray (E-commerce):
- Recebe webhooks de criação (
insert) e atualização (update) de pedidos. - Busca dados completos do pedido na API da Tray.
- Atualiza dados fiscais (NFe) no pedido dentro da Tray após faturamento.
- Recebe webhooks de criação (
-
Plugnotas (Notas Fiscais):
- Envia dados do pedido para emissão de Nota Fiscal Eletrônica.
- Recebe webhooks informando a conclusão da emissão da NFe, extraindo a chave de acesso, o número e os produtos a partir do XML retornado (base64).
-
Sienge (ERP - Integração via Filas/RPC):
- Clientes: Envia requisições (RPC) para criação de clientes no Sienge quando um novo pedido é gerado.
- Títulos a Receber: Envia requisições (RPC) para geração de títulos financeiros no Sienge após a emissão da NFe.
Fluxo de Processamento
1. Webhook Tray (Recebimento)
- Ação
insert: O controlador identifica o novo pedido, cria/sincroniza o cliente no ERP Sienge e atualiza o ID do cliente no banco de dados local. - Ação
update: Caso o pedido passe para o status "A ENVIAR", o serviço envia os dados mapeados para a fila de emissão de NFe, sinalizando no banco local que o envio ocorreu.
2. Webhook Plugnotas (RecebimentoPlugnotas)
- Ao receber a confirmação de que a NFe foi gerada com status "CONCLUIDO":
- Decodifica e extrai as informações pertinentes da nota a partir do XML da NFe.
- Envia a ordem para criar o título a receber no ERP (Sienge).
- Atualiza a nota fiscal (chave, link, xml) diretamente no painel da Tray.
- Grava o status atualizado no banco de dados local.
Tecnologias e Bibliotecas
- Python 3
- Bibliotecas Principais: Pydantic (validação de dados), SQLAlchemy/Psycopg2 (banco de dados), Redis, Requests, Pika (RabbitMQ).
- Mensageria: RabbitMQ para filas assíncronas e RPC, facilitado pelas bibliotecas base da equipe (
Exchange2). - Banco de Dados: PostgreSQL (Persistência de estado dos pedidos, status de integrações e logs).
- Cache / Configuração: Redis (Armazenamento e busca das credenciais e configurações de ambiente em tempo real).
- Infraestrutura: Docker & Docker Compose.
Como Executar
Pré-requisitos
- Docker e Docker Compose instalados no ambiente de execução.
- Acesso aos repositórios Git base (
Exchange2eSoftGOModel) pois o script de build fará o clone de dependências proprietárias. - Instâncias do Redis, RabbitMQ e PostgreSQL acessíveis na rede (
sg_base_network).
Passos para Build e Deploy
- Clone o repositório e navegue até a pasta raiz.
- Execute o script de build para baixar as dependências e criar a imagem Docker:
chmod +x buildImages.sh ./buildImages.sh - Inicie o container com o Docker Compose:
docker-compose up -d
Variáveis de Ambiente e Configurações
O container do controller possui poucas configurações no docker-compose.yml, pois o sistema busca suas credenciais principais (banco, AMQP, endpoints, chaves de API da Tray, etc.) diretamente de uma chave JSON no Redis (innovar_amr_tray-system_config-innovar).
Certifique-se de que essa chave JSON esteja corretamente populada no Redis para que o microserviço consiga inicializar.
Estrutura de Diretórios
src/controller.py: Ponto de entrada do serviço e consumidor principal da fila RabbitMQ.src/services/: Regras de negócio, transformações e mapeamentos (Tray para Sienge, Tray para NFe).src/models/: Definições Pydantic para validação das estruturas de dados.src/api/: Comunicação HTTP direta com APIs externas.src/db/: Instância e métodos de comunicação com o PostgreSQL local.