Skip to content

Infraestrutura Técnica

Versão 1.3 — Atualizado em 16/09/2026; API Panta v2 validada, busca habilitada nesta versão do Hub

Visão consolidada da arquitetura de backend documentada do ecossistema Grupo CSV. Descreve os principais microserviços, bancos de dados, armazenamentos, rotas de API, fluxos de autenticação e tarefas agendadas que sustentam o Hub e seus portais.

Este documento serve como índice técnico da arquitetura documentada para desenvolvedores, agentes e qualquer pessoa que precise compreender o funcionamento interno do sistema. O estado de produção deve ser revalidado antes de operação ou mudança de infraestrutura.

Nota sobre segurança: Este documento descreve a arquitetura e o funcionamento dos componentes. Informações sensíveis (chaves de API, tokens, senhas) não estão incluídas. O proprietário mantém uma estrutura de gerenciamento de segredos própria, que pode ser consultada sob seu consentimento expresso.

1. Visão Geral da Arquitetura

O backend do Hub CSV é construído sobre a plataforma Cloudflare, utilizando uma arquitetura de microserviços implementada com Cloudflare Workers. Cada worker é um serviço independente, com responsabilidade única, que se comunica com os demais através do API Gateway.

┌─────────────────────────────────────────────────────────────────┐
│                    CLIENTE (Navegador)                           │
│                                                                 │
│   hub.grupocsv.com ─── GitHub Pages (Frontend)                 │
│   ├── VitePress (Infra, Compass, Signal)                       │
│   ├── Portais HTML (Unimed, ICDS, AxiaCare, Thera, MedValor)  │
│   ├── Admin (/admin/)                                           │
│   ├── Deck (/deck/)                                             │
│   └── Compliance (/compliance/)                                 │
└──────────────────────────┬──────────────────────────────────────┘
│ Chamadas de API
▼
┌─────────────────────────────────────────────────────────────────┐
│              API GATEWAY (csv-gateway)                           │
│              api.grupocsv.com — v1.6.0                          │
│                                                                 │
│   Autenticação ─── Roteamento ─── Logging ─── CORS             │
└──────┬──────┬──────┬──────┬──────┬──────┬──────┬───────────────┘
│      │      │      │      │      │      │
▼      ▼      ▼      ▼      ▼      ▼      ▼
┌──────┐┌──────┐┌──────┐┌──────┐┌──────┐┌──────┐┌──────────┐
│ auth ││ data ││  ai  ││ cron ││email ││webhk ││propostas │
│v3.0.0││      ││      ││v2.0  ││      ││      ││          │
└──┬───┘└──┬───┘└──────┘└──┬───┘└──────┘└──────┘└────┬─────┘
│       │               │                          │
▼       ▼               ▼                          ▼
┌─────────────────────────────────────────────────────────────────┐
│                    ARMAZENAMENTO                                │
│                                                                 │
│   D1 Database (csv-hub)     KV Store (csv-config)              │
│   ├── users                 ├── Senhas de portais              │
│   ├── user_tenants          └── Configurações dinâmicas        │
│   ├── pending_requests                                          │
│   ├── auth_sessions         R2 Storage (csv-propostas)         │
│   ├── access_logs           └── Propostas HTML/PDF             │
│   ├── api_logs                                                  │
│   └── email_logs                                                │
└─────────────────────────────────────────────────────────────────┘

┌─────────────────────────────────────────────────────────────────┐ │ SERVICO INDEPENDENTE (fora do gateway) │ │ │ │ csv-mail v1.0.0 ─── mail-api.grupocsv.com │ │ Autenticação própria (Bearer API Key) │ │ Bindings: D1 (csv-hub), Resend │ └─────────────────────────────────────────────────────────────────┘

Repositórios de Código

RepositórioConteúdoDeploy
grupocsv/hubFrontend completo: VitePress, portais HTML, compliance, admin, deckGitHub Pages
grupocsv/backendWorkers e serviços de backend, incluindo csv-documents, processador e monitor documentaisCloudflare Workers + processador isolado

1.1. Central de Documentos

A Central de Documentos é um domínio privado e multi-tenant separado do gateway geral. O frontend compartilhado em /documentos/ chama diretamente o control plane csv-documents no domínio documentos-api.grupocsv.com. O Worker valida a sessão pelo Service Binding do csv-auth e mantém autorização documental no D1 dedicado.

ComponenteRecursoResponsabilidade
Control planecsv-documentsAutenticação, RBAC, ACL, lifecycle, versões, auditoria e idempotência
EstadoD1 csv-documentsFonte de verdade tenant-first do domínio documental
ObjetosR2 csv-documents-privateOriginais e derivados privados, sem URL pública direta
Transportecsv-documents-jobs e csv-documents-jobs-dlqJobs assíncronos e falhas esgotadas
Processamentodocumentos-processor.grupocsv.comChecksum, MIME, validação estrutural, ClamAV, extração e derivados
Monitorcsv-documents-monitorWorker, Queue, DLQ, D1, processador e ClamAV; sem rota pública
Links públicosdocumentos-api.grupocsv.com/s/{slug}Entrega mediada, revogável e limitada; o bucket R2 continua privado
Operação por agentesextensio-mcp via Service BindingFerramentas tenant-aware com credencial de serviço, escopos e idempotência
Pesquisa documentalpanta-v2.grupocsv.comServiço v2 isolado em Docker, VPS-CSV local 8092; índice derivado, sem autoridade de acesso. Integração por API/MCP validada em produção

Os tenants publicados são grupo-csv, unimed, unihealth, icds e 2im. A pesquisa foi validada pela Central/Extensio nos cinco tenants, incluindo isolamento, políticas, troca de versão, exclusão lógica e reconstrução de um documento retirado. O Worker 0389d7b4-eed6-4b60-b0d1-bdff6e25760b, fonte 094c8871e65c5f6d9ae0c9d6f0cbff8c107620b9, recebe 100% do tráfego. Esta versão do Hub habilita a busca após essa validação; a sessão humana no navegador permanece não aferida. O serviço isolado está na versão 2.1.0, schema 2. Panta v1 e seu MCP continuam independentes e preservados nas portas 8090 e 8091. Consulte a documentação canônica da Central de Documentos para lifecycle, agentes, OpenAPI, links públicos e estado de entrega.

Uso cotidiano: manual ilustrado da Central e manual do Panta v2. Os manuais descrevem os controles; não substituem a confirmação operacional nem a demonstração pendente a Guilherme.

Ao encerrar a validação em 16/09/2026, os cinco canários estavam excluídos logicamente, com consulta 404 e busca sem resultados. Limites da verificação: não houve novo reinício da VPS nem restauração integral do volume a partir de backup nesta rodada. Reconstrução de documento não equivale a recuperação integral de desastre.

A sincronização usa /internal/v2/documents/sync e revisões monotônicas no D1 (panta_sync_state). Só uma revisão confirmada entra no escopo da pesquisa. O cron reconcilia a cada cinco minutos, além do tempo de fila e processamento. A busca é lexical e limita o escopo a 500 documentos autorizados; excesso retorna 422 search_scope_too_large, sem corte silencioso. A credencial exclusiva fica em configuração protegida; nenhum token interno chega ao navegador ou ao agente final.

2. API Gateway (csv-gateway)

O csv-gateway é o ponto de entrada para todas as chamadas de API, acessível em api.grupocsv.com. Recebe a requisição, valida a autenticação quando necessário, registra o log no D1 e encaminha (proxy) para o worker de destino.

Mapa de Rotas

PrefixoWorker de DestinoAcessoDescrição
/authcsv-authPúblicoLogin, verificação de token, solicitação de acesso, painel admin
/thera/contactthera-contactPúblicoFormulário de contato do site Thera
/webhookcsv-webhookPúblicoRecebe webhooks de serviços externos
/datacsv-dataProtegidoConsultas ao D1 e KV
/aicsv-aiProtegidoProxy para Cloudflare AI Gateway
/croncsv-cronProtegidoDisparo manual de tarefas agendadas
/emailcsv-emailProtegidoEnvio de e-mails transacionais via Resend
/axiacare/propostascsv-propostasProtegidoGeração de propostas comerciais
Nota: O worker csv-mail opera fora do gateway, acessível diretamente em mail-api.grupocsv.com com autenticação própria via Bearer token (API key dedicada). Não consta na tabela acima por não utilizar o roteamento do csv-gateway.

Autenticação do Gateway

Rotas marcadas como Protegido exigem uma API Key, enviada no header X-API-Key ou como parâmetro de query ?key=. Rotas públicas são acessíveis sem autenticação. Todas as requisições são registradas na tabela api_logs do D1 com worker, método, path, status e tempo de resposta.

3. Workers de Serviço

Cada worker é um microserviço independente com responsabilidade única. Todos rodam na edge da Cloudflare, garantindo latência mínima globalmente.

csv-authv3.0.0
Serviço central de autenticação e controle de acesso. Gerencia login, tokens de sessão, solicitações de acesso, aprovação de usuários e o painel administrativo.
Bindings: D1 (csv-hub), Secret (RESEND_API_KEY), Secret (GITHUB_PAT)
  • POST /login — Valida credenciais e retorna token de sessão (24h)
  • GET /verify — Valida um token de sessão existente
  • POST /logout — Encerra uma sessão ativa
  • POST /request-access — Cria solicitação de acesso para portais de parceiros
  • GET /admin/stats — Estatísticas do painel (usuários, solicitações, links)
  • GET /admin/pending-requests — Lista solicitações pendentes
  • POST /admin/approve — Aprova solicitação e cria usuário
  • POST /admin/reject — Rejeita solicitação de acesso
  • GET /admin/users — Lista usuários aprovados com seus tenants
  • POST /admin/revoke — Revoga acesso de um usuário a um tenant
  • GET /admin/logs — Log de acessos externos (com JOIN de nome)
  • GET /admin/passwords — Senhas dos portais de empresas (do KV)
  • POST /admin/update-password — Atualiza senha de portal de empresa
  • POST /admin/revoke-public-link — Revoga link público (commit no GitHub)
  • POST /admin/restore-public-link — Restaura link público revogado
  • POST /admin/cleanup-sessions — Remove sessões expiradas
  • POST /deck/reset-pin — Envia PIN temporário por e-mail
csv-cronv2.0
Executa tarefas agendadas via Cron Triggers da Cloudflare. Gera o relatório diário, monitora a saúde dos workers e realiza limpeza periódica do banco.
Bindings: D1 (csv-hub), Secret (RESEND_API_KEY)
0 12 * * *
Relatório Diário — 09:00 BRT. Coleta métricas de API, autenticação, dados TEA e propostas. Envia por e-mail.
*/30 * * * *
Health Check — A cada 30 min. Verifica status de todos os workers. Envia alerta se algum estiver fora do ar.
0 6 * * SUN
Limpeza Semanal — Domingo 03:00 BRT. Remove sessões expiradas e logs antigos (> 90 dias).
csv-dataFase 3
Interface de consulta para o banco D1 e o armazenamento KV. Fornece endpoints para leitura de logs, configurações e dados estruturados.
Bindings: D1 (csv-hub), KV (csv-config)
csv-aiFase 3
Proxy seguro para o Cloudflare AI Gateway. Permite que o frontend utilize modelos de IA (chat, resumo, análise, rascunho de e-mail) sem expor tokens no navegador.
Bindings: D1 (csv-hub), Secret (AI_GATEWAY_TOKEN), Secret (RESEND_API_KEY)
  • POST /chat — Chat completion (compatível com OpenAI)
  • POST /summarize — Resumo de texto (template pronto)
  • POST /analyze — Análise de dados (template pronto)
  • POST /draft-email — Rascunho de e-mail (template pronto)
  • GET /models — Lista modelos disponíveis
  • GET /usage — Estatísticas de uso
csv-email
Endpoint genérico para envio de e-mails transacionais via Resend. Suporta HTML, texto simples, CC, BCC, reply-to e tags de rastreamento. Remetente padrão: Hub CSV <hub@mail.grupocsv.com>.
Bindings: Secret (RESEND_API_KEY)
csv-mailv1.0.0
Sistema de envio de e-mails agentico do Grupo CSV. Endpoint independente com autenticacao por API key propria, suporte a HTML, texto, template institucional (header/footer padrao), anexos (ate 25 MB), CC, BCC, reply-to e tags de rastreamento. Remetente padrao: Guilherme Thome <guilherme@mail.grupocsv.com>.
Bindings: D1 (csv-hub), Secret (RESEND_API_KEY), Secret (CSV_MAIL_API_KEY)
  • POST /send — Envio completo de e-mail
  • POST /send-template — Envio com template institucional
  • GET /status/:id — Consultar status via Resend
  • GET /logs — Listar ultimos e-mails enviados (D1)
  • GET /health — Health check
csv-webhook
Recebe webhooks de formulários e ferramentas do Hub. Encaminha os dados para destinos configurados (URLs externas, e-mail ou ambos). Cada canal (ex: dataset-tea, feedback-proposta) possui destinos pré-configurados por segurança.
Bindings: D1 (csv-hub), Secret (RESEND_API_KEY)
csv-propostas
Gera propostas comerciais em HTML a partir de um template, armazena o arquivo no R2 Storage e envia o link por e-mail via Resend. As propostas ficam acessíveis publicamente em propostas.axcare.com.br.
Bindings: R2 (csv-propostas), Secret (RESEND_API_KEY)
thera-contact
Processa o formulário de contato do site thera.tech. Envia os dados por e-mail para contato@thera.tech via Resend.
Bindings: Secret (RESEND_API_KEY)

4. Sistema de Autenticação

O Hub CSV possui três modelos de autenticação distintos, cada um adequado ao tipo de portal e público. Todos são gerenciados pelo worker csv-auth e pelo script frontend hub-auth.js.

4.1. Admin Universal

O proprietário do sistema possui uma credencial mestra que concede acesso a todos os portais e ao painel administrativo. Ao fazer login com essa credencial em qualquer portal, o sistema reconhece automaticamente e concede acesso.

4.2. Portais de Parceiros (Autenticação Individual)

Portais: Unimed, Unihealth, ICDS.

1
Usuário acessa uma página protegida (ex: hub.grupocsv.com/unimed/).
2
hub-auth.js detecta ausência de token válido e exibe modal com abas "Login" e "Solicitar Acesso".
3
Login: Requer e-mail e senha individual de um usuário previamente aprovado.
4
Solicitar Acesso: Formulário com nome e e-mail. Gera uma solicitação pendente no D1 e notifica o admin por e-mail.
5
O admin aprova ou rejeita a solicitação via Painel Admin. Ao aprovar, define a senha do usuário.
6
Após aprovação, o usuário recebe e-mail de confirmação e pode efetuar login. Token válido por 24 horas.

4.3. Portais de Empresas (Senha Compartilhada)

Portais: AxiaCare, Thera, MedValor.

1
Usuário acessa uma página protegida (ex: hub.grupocsv.com/axia/).
2
hub-auth.js exibe modal com campo de senha (sem e-mail).
3
A senha fixa do portal é validada contra o valor armazenado na tabela portal_passwords do D1 (com fallback para valores padrão em memória).
4
Token de sessão é gerado e armazenado no localStorage. Válido por 24 horas.

As senhas dos portais de empresas podem ser alteradas em tempo real pelo Painel Admin, na aba "Senhas dos Portais CSV".

4.4. Deck (PIN de 4 Dígitos)

1
Usuário acessa hub.grupocsv.com/deck/.
2
Tela de bloqueio exibe 4 campos para o PIN.
3
PIN é validado contra um hash armazenado no localStorage.
4
"Esqueceu o PIN?" envia PIN temporário por e-mail via /deck/reset-pin e força redefinição.

5. Banco de Dados e Armazenamento

5.1. Cloudflare D1 (csv-hub)

Banco de dados SQL relacional (SQLite na edge). Principal fonte de verdade para dados estruturados.

users
Usuários dos portais de parceiros. PK: email. Campos: email, password, name, status (pending/active), created_at, updated_at.
user_tenants
Vínculo entre usuário e portal (tenant). PK composta: (user_email, tenant_id). Campos: status, approved_by, approved_at, created_at, updated_at.
access_requests
Solicitações de acesso aos portais. Campos: id, user_email, tenant_id, status (pending/approved/rejected), request_token, requested_at, approved_by_email, approved_at.
auth_sessions
Tokens de sessão ativos. PK: token. Campos: user_email, tenant_id, device_info, ip_address, user_agent, expires_at, created_at.
access_logs
Registro de acessos e ações nos portais. Campos: id, tenant_id, user_email, action, page_accessed, ip_address, user_agent, device_info, country, city, timestamp.
api_logs
Log de todas as requisições ao gateway. Campos: worker, method, path, status_code, origin, ip, user_agent, payload_size, response_time_ms, error, created_at.
portal_passwords
Senhas dos portais de empresas. PK: portal_id. Campos: password, updated_at, updated_by. Criada sob demanda pelo csv-auth.
email_logs
Log de e-mails enviados via Resend. Campos: from_addr, to_addrs, subject, resend_id, status, error, worker_origin.

5.2. Outros Bancos D1

BancoUUIDFunção
whatsapp-braindb907899-3b4d-43b3-b2d4-f429bad2a88aContatos e histórico de mensagens WhatsApp (WABA)
ccrt8adfc2da-379f-4983-a19c-4d089b5e0fdcProjeto CCRT
digital-deck-dbb98fedb2-4ad6-44dd-b813-36c556867477Leads, gates e campanhas do Digital Deck
spectra-dba1f87c99-d990-4a06-897e-4c033bcd684cBanco de dados do Spectra AI
rd-icdsd4c3391a-2b4d-4bc0-8979-f572727ccaf7Relatório de Desempenho ICDS
axiacare-methodsabdf6e4e-6d63-44a9-ae22-b69400c79af8Methods Registry AxiaCare
csv-documents2e36c57f-1ab0-457b-ae1e-442168435b34Estado canônico da Central de Documentos

5.3. Cloudflare KV (9 namespaces)

Armazenamento de chave-valor de baixa latência distribuído globalmente.

NamespaceFunção
csv-configConfigurações globais, senhas de portais e lista de admins
csv-open-pagesStatus (ativo/inativo, auth_gate) e metadados das Open Pages
csv-open-authSenhas e sessões do Auth Gate
hub-unimedgv-kvStatus e metadados das Open Pages da Unimed GV
spectra-configConfigurações do Spectra AI
spectra-sessionsSessões ativas do Spectra AI
gabi_configConfigurações de projetos associados
extensio-mcp-anthropic-oauthTokens OAuth para MCP Extensio (Anthropic)
cooperados-api-keysChaves de API para a página de cooperados

5.4. Cloudflare R2

Armazenamento de objetos compatível com S3, distribuído globalmente.

BucketFunção
csv-open-pagesArquivos HTML e assets das Open Pages + assets visuais (assets.grupocsv.com)
hub-unimedgvArquivos HTML das Open Pages da Unimed GV
csv-propostasPDFs de propostas comerciais (propostas.axcare.com.br)
decksApresentações PPTX geradas pelo Deck
slidesSlides gerados via Markdown
hub-csv-knowledgeArquivos para indexação do AI Search (AutoRAG)
spectra-assetsAssets visuais do Spectra AI
spectra-knowledgeBase de conhecimento do Spectra AI
vps-csv-backupsBackups criptografados da VPS-CSV (Restic)
gabi-assetsAssets de projetos associados
rd-icds-uploadsUploads do Relatório de Desempenho ICDS
axiacare-methodsArquivos do Methods Registry AxiaCare
csv-documents-privateOriginais e derivados privados da Central de Documentos

6. Painel Administrativo

Acessível em hub.grupocsv.com/admin/, protegido por autenticação de admin. Permite gerenciar todo o sistema de autenticação e links públicos.

AbaFuncionalidade
Senhas dos Portais CSVVisualizar e alterar as senhas fixas dos portais de empresas (AxiaCare, Thera, MedValor). Alterações entram em vigor imediatamente.
Usuários ExternosAprovar/rejeitar solicitações de acesso. Listar usuários aprovados com seus portais vinculados. Revogar acesso.
Links PúblicosListar páginas publicadas em /p/. Revogar ou restaurar links públicos (altera o registry.json via commit no GitHub).
Log de Acessos ExternosHistórico de logins em portais externos, ordenado do mais recente ao mais antigo. Exibe e-mail, nome, portal e data.

7. Serviços Externos Integrados

O backend integra-se com serviços externos para funcionalidades específicas. Todas as chaves de acesso são armazenadas como Secrets nos Workers.

ServiçoUsoWorkers que Utilizam
ResendEnvio de e-mails transacionais (notificações, relatórios, propostas, formulários de contato)csv-auth, csv-cron, csv-email, csv-mail, csv-propostas, csv-webhook, thera-contact
Cloudflare AI GatewayProxy para modelos de IA (chat, resumo, análise)csv-ai
GitHub APICommits automáticos no repositório (revogação de links públicos)csv-auth

Domínios de E-mail Verificados (Resend)

DomínioUso PrincipalRegião
mail.grupocsv.comBackend do Hub CSV (notificações, relatórios, propostas)sa-east-1
thera.techFormulário de contato do site Therasa-east-1
spectra.thera.techSpectra AIsa-east-1
veritas.thera.techVeritassa-east-1

8. Domínios e DNS

Todos os domínios são gerenciados via Cloudflare DNS. Os registros mais relevantes para a infraestrutura do Hub estão listados abaixo.

SubdomínioTipoDestinoFunção
hub.grupocsv.comCNAMEgrupocsv.github.ioFrontend do Hub (GitHub Pages)
api.grupocsv.comAAAA100::API Gateway (Worker csv-gateway)
api.thera.techAAAA100::Worker thera-contact
propostas.axcare.com.brCNAMEpublic.r2.devR2 Bucket (propostas)
mail-api.grupocsv.comAAAA100::Worker csv-mail
webhook.grupocsv.comA192.0.2.1Worker csv-webhook

Zonas Cloudflare

O ecossistema utiliza 9 zonas DNS no Cloudflare: axcare.ai, axcare.app, axcare.com.br, grupocsv.com, guithome.com.br, medvalor.med.br, theramed.ai, thera.med.br e thera.tech. Todas utilizam Google Workspace para e-mail corporativo (MX records).

9. Notas Técnicas

TópicoDetalhe
SPA NavigationO VitePress intercepta cliques internos. Páginas HTML standalone precisam do atributo target="_self" nos links para bypass do router SPA.
Convenção de TenantO csv-auth usa colunas tenant_id e user_email no D1 (não "portal" e "email"). Aliases são suportados (ex: axia mapeia para axiacare).
NotificaçõesE-mails de notificação de login e solicitações de acesso são enviados via Resend para contato@grupocsv.com.
CORSTodos os workers incluem headers CORS permissivos (Access-Control-Allow-Origin: *) para permitir chamadas do frontend em GitHub Pages.
LoggingTodas as requisições que passam pelo gateway são registradas na tabela api_logs com worker, método, path, status HTTP e tempo de resposta em milissegundos.
SessõesTokens de sessão têm validade de 24 horas. A limpeza automática de sessões expiradas ocorre semanalmente (domingo 03:00 BRT).
Links PúblicosOpen Pages e páginas legadas /p/ são independentes da Central. Links públicos documentais nativos pertencem ao control plane csv-documents, estão produtivos e mantêm o R2 privado; criação, expiração e revogação são mediadas pela API.