76 lines
4 KiB
Markdown
76 lines
4 KiB
Markdown
|
|
# 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:
|
||
|
|
|
||
|
|
1. **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.
|
||
|
|
|
||
|
|
2. **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).
|
||
|
|
|
||
|
|
3. **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 (`Exchange2` e `SoftGOModel`) 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
|
||
|
|
|
||
|
|
1. Clone o repositório e navegue até a pasta raiz.
|
||
|
|
2. Execute o script de build para baixar as dependências e criar a imagem Docker:
|
||
|
|
```bash
|
||
|
|
chmod +x buildImages.sh
|
||
|
|
./buildImages.sh
|
||
|
|
```
|
||
|
|
3. Inicie o container com o Docker Compose:
|
||
|
|
```bash
|
||
|
|
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.
|