Pular para o conteúdo principal

Integração entre Plataformas

Como os componentes do JunsoftERP se comunicam entre si.


Mapa de Comunicação​

┌──────────────────────────────────────────────────────────────────┐
│ DESKTOP DELPHI │
│ │
│ FireDAC ──────────────────────────────────────────────────────► │
│ (SQL direto) │
│ │
│ jRequisicoes.pas ─── HTTP/REST ───────────────────────────────► │
│ (cliente HTTP) │
└────────────────────────────────────────────────────────────────── │
│ │
▼ ▼
┌─────────────────────┐ ┌──────────────────────────────────────┐
│ BANCO FIREBIRD │ │ APIS JAVA (Spring Boot) │
│ │◄───┤ │
│ Acesso JDBC e │ │ JunsoftWebAPI │
│ FireDAC │ │ PortalWebAPI │
│ │ │ CaptacaoMobile │
│ │◄───┤ PedidoMobile │
└─────────────────────┘ │ VulcanoColeta / VulcanoProd │
│ LicencaMobile / JunsoftApollo │
└──────────────┬───────────────────────┘
│
┌───────────┴───────────┐
│ REST/HTTP + JWT │
▼ ▼
┌─────────────────┐ ┌──────────────────────┐
│ PORTAL WEB │ │ APPS MOBILE │
│ Angular 14 │ │ Angular/Capacitor │
│ Ionic 7.5 │ │ Android APKs │
└─────────────────┘ └──────────────────────┘

Protocolos de Comunicação​

1. FireDAC (Delphi → Firebird)​

  • Tipo: SQL direto sobre TCP/IP
  • Componentes: TFDConnection, TFDQuery, TFDStoredProc
  • Autenticação: usuário/senha Firebird
  • Onde: jDB.pas — todas as queries passam por aqui
  • Problema: SQL injection via Format() na montagem de queries

2. REST/HTTP (qualquer → APIs Java)​

  • Tipo: HTTP/HTTPS com JSON
  • Autenticação: JWT Bearer Token
    POST /auth → { username, password, cd_empresa }
    Response: { token: "eyJ..." }
    Header: Authorization: Bearer <token>
  • Permissões: respeitam tabela ACESSO (configurada no Desktop)
  • Quem consome: Portal Web, Apps Mobile, Desktop (via jRequisicoes.pas)

3. JDBC (Java → Firebird)​

  • Tipo: SQL via driver JDBC Firebird
  • Usado por: todas as APIs Java Spring Boot
  • ORM: Spring Data / JDBC Template (sem Hibernate)

Autenticação e Autorização​

┌─────────────────┐
│ Usuário do ERP │
│ (tabela ACESSO) │
└────────┬────────┘
│
┌─────────────────┼─────────────────┐
▼ ▼ ▼
Desktop Delphi APIs Java REST Portal/Mobile
(jSeguranca.pas) (Spring Security) (Angular guard)
│ │
└────── JWT ──────┘

Fluxo de Dados — Exemplo: Pedido de Venda​

1. Vendedor (App Mobile) cria pedido
│
│ POST /pedidos (JWT)
▼
2. JunsoftWebAPI → PedidoController
│
│ INSERT PEDIDOS (JDBC)
▼
3. Firebird (tabela PEDIDOS)
│
│ SELECT (FireDAC)
▼
4. ERP Desktop → aprovação do pedido
│
│ UPDATE PEDIDOS (FireDAC)
▼
5. Faturamento → emite NF (jFaturamento)
│
│ INSERT NOTAFISCAL (FireDAC)
▼
6. SEFAZ (webservice externo)
│
│ XML autorizado
▼
7. Título a receber gerado (jFinanceiro)
│
└─ INSERT TITULOSRECEBER (FireDAC)

Agente de Atendimento (MCP)​

O branch atual (mcp_agente_atendimento_externo) implementa um agente de IA que acessa o ERP via MCP:

Usuário WhatsApp / Chat
│
│ Mensagem
▼
Agente IA (Claude)
│
│ MCP Tools
▼
JunsoftLocal MCP Server
│
│ REST/JWT
▼
JunsoftWebAPI (Spring Boot)
│
│ JDBC
▼
Firebird

Ferramentas MCP disponíveis:

  • Financeiro: consultar_contas_a_receber, consultar_contas_a_pagar, calcular_juros_multa
  • Pedidos: consultar_pedidos_venda, simular_parcelamento_pedido
  • Coleta: consultar_coletas, consultar_detalhe_coleta
  • Cadastro: pesquisar_clientes
  • Caixa: consultar_resumo_caixa, consultar_extrato_conta
  • Admin: whoami, listar_minhas_empresas, trocar_empresa

Sincronização e Consistência​

  • Não há replicação — todos os componentes acessam o mesmo Firebird
  • Consistência garantida por transações ACID do Firebird
  • Mobile funciona offline (dados locais) e sincroniza quando há conexão
  • Conflitos de sync: resolvidos no backend (last-write-wins ou regras de negócio)

Comunicação Externa​

Sistema ExternoProtocoloComponente
SEFAZ (NF-e)HTTPS/WebServicejFaturamento
Bancos (Boleto)HTTPS/SFTP/CNABjBoleto
PIX (Bacen)HTTPS/API PixjCaixa + Caixa e PDV
TEF (Adquirentes)Serial/TCPOutras Shared (jTEF)
SPC/SerasaHTTPSOutras Shared (jSCPC)
ViaCEPHTTPS/RESTOutras Shared (jViaCep)
FirebaseHTTPSMobile (Web App deploy)
WhatsAppAPIAgente de atendimento