Skip to content

ADR-901: Integrations

Status: Accepted

Contexto

middag-account integra com 9 sistemas externos: HubSpot (CRM dual), Stripe (billing dual), Jira (projeto/SLA), ISSNet (emissor NFSe municipal, Brasília/DF), Cloudflare (D1/R2 edge cache), WooCommerce (commerce), SolidAffiliate (parceiros), Banco Inter (pagamentos Pix/Boleto BR), Chatwoot (chat ao vivo + contact view). Cada integração tem direção, gatilho e payload explícitos. Integrações vivem DENTRO do core (ADR-103) porque reagem a eventos de domínio e compartilham DI container.

Decisão

6 Princípios de Integração

  1. Webhook-first. Preferir webhooks a polling. Polling apenas quando sistema externo não suporta (ISSNet).
  2. Idempotência. Todo webhook recebido é reprocessável. Eventos duplicados não criam registros duplicados.
  3. Graceful degradation. Se HubSpot está fora, quotes funcionam localmente. Sync recupera quando conexão restaura.
  4. Audit trail. Todo evento registrado com timestamp, direção, hash do payload, status do resultado.
  5. WC como source of truth para billing. WooCommerce é autoridade para estado financeiro. Stripe alimenta WC via webhooks. Plugin lê de WC, nunca direto do Stripe para billing state.
  6. Prevenção de loops. Eventos de domínio disparam hooks WP — prevenção de loops obrigatória em handlers bidirecionais.

9 Integrações

SistemaDireçãoO Que FluiVersão
HubSpotBidirecionalDeals, quotes, org data, statusv5.0
StripeEntrada+SaídaPagamentos, invoices, subscriptions, customersv5.0
JiraBidirecionalSRs, status, SLA, worklogsv5.0.x
ISSNetSaída+PollingNFSe (submissão + status)v5.0.x
CloudflareSaídaD1 cache read, R2 object storagev5.0.x
WooCommerceBidirecionalOrders, products, subscriptionsv5.0
SolidAffiliateEntradaReferrals, affiliate approvalsv5.0
Banco InterEntradaPagamentos Pix/Boleto via plugin externov5.0
ChatwootBidirecionalContact view, PHP SDK, chat ao vivov5.0.x

Notificações

Canal primário: email via WC nativo (templates WC, override via child theme). Auditoria: hash para auditoria@middag.com.br. Canais secundários futuros (v5.0.x): SMS/WhatsApp. NotificationPolicy define obrigatórios vs opcionais.

Escopo por Versão

v5.0:

  • HubSpot sync bidirecional (deals, quotes, org)
  • Stripe dual-account (5 webhook events)
  • WooCommerce adapter (orders, subscriptions)
  • SolidAffiliate adapter (somente leitura)
  • Email notifications (WC nativo)

v5.0.x:

  • Jira bidirecional (SRs, SLA, worklogs)
  • ISSNet NFSe (submissão + polling)
  • Cloudflare D1/R2 (edge cache, object storage)
  • SMS/WhatsApp notifications

Consequências

Positivas:

  • Webhook-first minimiza latência de sync
  • Idempotência previne dados duplicados em retries
  • Graceful degradation garante plugin funciona com sistema externo fora
  • WC como billing source of truth evita conflito Stripe/plugin

Negativas:

  • 9 integrações = 9 pontos de falha potenciais
  • Dual-account (HubSpot + Stripe) dobra complexidade de webhook handling
  • Jira bidirecional requer conflict resolution cuidadoso
  • ISSNet SOAP é frágil e legado (sem webhooks, polling obrigatório)

Especificação por Integração

IntegraçãoDetalhes em
HubSpotREF-901-01
StripeREF-901-02
JiraREF-901-03
Banco InterREF-901-04
CloudflareREF-901-05
ChatwootREF-901-06
SolidAffiliateREF-901-07
ISSNetREF-901-08
WooCommerceADR-301 (Commerce motor)

Referências