NovaeXis

CVTech — Sistema de Integração Municipal

Camada Municipal de Integração que conecta sistemas legados sem substituí-los.

2 min de leitura

Propósito

Camada Municipal de Integração

Sistema que conecta sistemas legados da prefeitura — saúde, educação, fazenda — sem substituí-los, unificando dados em um modelo canônico auditável.

Arquitetura

Camada 1
API Gateway (NestJS)
Entrada única
AuthRate LimitingLogging
Camada 2
Connector Manager
Gestão de conectores
RegistryHealth ChecksFallback
Camada 3
Data Transformation Engine
ETL canônico
MapeamentoValidaçãoNormalização
Camada 4
Sync Engine
Sincronização
CDCConflict ResolutionAudit Trail

Sub-módulos Detalhados

Modelo de Dados

prisma
model Municipality {
  id          String     @id @default(cuid())
  ibgeCode    String     @unique
  name        String
  state       String
  connectors  Connector[]
  createdAt   DateTime   @default(now())
}

model Connector {
  id              String         @id @default(cuid())
  municipalityId  String
  name            String
  type            ConnectorType
  config          Json
  enabled         Boolean        @default(true)
  mappings        DataMapping[]
  syncConfigs     SyncConfig[]
  municipality    Municipality   @relation(fields: [municipalityId], references: [id])
}

model DataMapping {
  id           String   @id @default(cuid())
  connectorId  String
  sourceField  String
  targetField  String
  transform    Json
  connector    Connector @relation(fields: [connectorId], references: [id])
}

model SyncConfig {
  id           String   @id @default(cuid())
  connectorId  String
  mode         SyncMode
  cron         String?
  strategy     ConflictStrategy
  connector    Connector @relation(fields: [connectorId], references: [id])
  jobs         SyncJob[]
}

model SyncJob {
  id             String   @id @default(cuid())
  syncConfigId   String
  status         JobStatus
  startedAt      DateTime
  finishedAt     DateTime?
  recordsRead    Int      @default(0)
  recordsWritten Int      @default(0)
  errors         Json?
  syncConfig     SyncConfig @relation(fields: [syncConfigId], references: [id])
}

model CitizenData {
  id             String   @id @default(cuid())
  cpfHash        String   @index
  domain         String
  payload        Json
  sourceConnector String
  updatedAt      DateTime @updatedAt
}

model AuditLog {
  id         String   @id @default(cuid())
  actor      String
  action     String
  resource   String
  payload    Json
  occurredAt DateTime @default(now())
}

API Endpoints

  • GET/connectorsListar conectores
  • POST/connectorsCriar novo conector
  • GET/connectors/{id}Detalhes do conector
  • PUT/connectors/{id}Atualizar conector
  • DELETE/connectors/{id}Remover conector
  • POST/connectors/{id}/testTestar conexão
  • POST/connectors/{id}/discoverDescobrir schema
  • POST/connectors/{id}/syncDisparar sincronização
  • GET/sync-jobsListar jobs de sync
  • GET/audit-logsTrilha de auditoria

Interface de Administração

cvtech.admin / municípios / sp / connectors
Status
🟢 Ativo
Última sync
há 12 min
Registros/h
3.421
Throughput (últimas 24h)
Boas práticas
Sempre habilite health check e configure fallback para conectores críticos. Use secret-ref em vez de credenciais inline.
Este conteúdo foi útil?
Última atualização: 28 de Maio de 2026
© 2026 NovaeXis · Todos os direitos reservadosv1.0.0