# kernel-panic-fatecsjc/kp-4dsm-api architecture

> Architecture diagram of the GitHub repository kernel-panic-fatecsjc/kp-4dsm-api, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-10-26). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/kernel-panic-fatecsjc/kp-4dsm-api
- Repository: https://github.com/kernel-panic-fatecsjc/kp-4dsm-api

## Overview

Data Panic é uma plataforma web de monitoramento de riscos naturais para equipes da Defesa Civil e gestão de contratos da Tecsus. O fluxo central vai da recepção de telemetria de estações à persistência de leituras e sua disponibilização para consulta, alertas e dashboard. O produto também inclui cadastro de equipamentos e usuários, controle de acesso, licitações e auditoria. O README documenta capacidades gerais; conexões entre componentes não amostrados são omitidas ou marcadas como não verificadas.

Main entry points: [`kernelpanic-backend/src/prisma/prisma.service.ts`](https://github.com/kernel-panic-fatecsjc/kp-4dsm-api/blob/main/kernelpanic-backend/src/prisma/prisma.service.ts) (Banco de dados), [`kernelpanic-backend/src/auditoria/auditoria.service.ts`](https://github.com/kernel-panic-fatecsjc/kp-4dsm-api/blob/main/kernelpanic-backend/src/auditoria/auditoria.service.ts) (Trilha de auditoria), [`frontend/frontend/app/(protegido)/dashboard/page.tsx`](https://github.com/kernel-panic-fatecsjc/kp-4dsm-api/blob/main/frontend/frontend/app/(protegido)/dashboard/page.tsx) (Portal operacional), [`kernelpanic-backend/src/alertas/alertas.service.ts`](https://github.com/kernel-panic-fatecsjc/kp-4dsm-api/blob/main/kernelpanic-backend/src/alertas/alertas.service.ts) (Alertas configuráveis)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_web["Aplicação web"]
  node_webapp["Portal operacional<br/>[page.tsx]"]
  node_webassets["Telas de gestão<br/>[page.tsx]"]
  node_webalerts["Telas de alertas<br/>[page.tsx]"]
end

subgraph group_access["Acesso e gestão"]
  node_users["Usuários"]
  node_auth["Autenticação e perfis"]
  node_stations["Estações"]
  node_sensors["Sensores"]
  node_contracts["Licitações e contratos"]
end

subgraph group_telemetry["Telemetria e dados"]
  node_ingestapi["API de ingestão"]
  node_ingestion["Buffer e ingestão"]
  node_rawrepo["Repositório bruto"]
  node_rawdata[("Leituras brutas")]
  node_mqtt["Assinante MQTT"]
  node_treatment["Tratamento de leituras"]
  node_database[("Banco de dados<br/>[prisma.service.ts]")]
end

subgraph group_risk["Risco e consulta"]
  node_dashboard["Dashboard e indicadores"]
  node_alerts["Alertas configuráveis<br/>[alertas.service.ts]"]
  node_alarmstream["Alarmes em tempo real"]
  node_rawqueries["Consultas de leituras"]
end

subgraph group_oversight["Auditoria"]
  node_audit["Trilha de auditoria"]
end

node_operator(("Operador"))
node_stationdevice(("Estação meteorológica"))
node_broker["Broker MQTT"]

node_operator -->|"usa"| node_webapp
node_webapp -->|"consulta APIs"| node_dashboard
node_webapp -->|"acessa telas"| node_webassets
node_webapp -->|"acessa telas"| node_webalerts
node_webassets -->|"gerencia"| node_stations
node_webassets -->|"gerencia"| node_sensors
node_webalerts -->|"configura e consulta"| node_alerts
node_stationdevice -->|"envia telemetria"| node_ingestapi
node_ingestapi -->|"encaminha pacote"| node_ingestion
node_ingestion -->|"consulta estação"| node_database
node_ingestion -->|"grava lote"| node_rawrepo
node_rawrepo -.->|"persiste"| node_rawdata
node_broker -.->|"publica mensagens"| node_mqtt
node_mqtt -.->|"repassa leituras"| node_ingestion
node_treatment -.->|"processa lotes"| node_rawdata
node_dashboard -.->|"consulta indicadores"| node_database
node_alerts -.->|"persiste regras"| node_database
node_alerts -.->|"emite eventos"| node_alarmstream
node_rawqueries -.->|"consulta leituras"| node_database
node_contracts -->|"lista estações"| node_stations
node_users -.->|"persiste usuários"| node_database
node_auth -.->|"valida sessão"| node_users
node_stations -->|"registra ações"| node_audit
node_alerts -->|"registra ações"| node_audit
node_users -->|"registra ações"| node_audit
node_contracts -->|"registra ações"| node_audit
node_audit -->|"grava e consulta"| node_database

click node_users "https://github.com/kernel-panic-fatecsjc/kp-4dsm-api/blob/main/kernelpanic-backend/src/usuarios/usuarios.service.ts"
click node_auth "https://github.com/kernel-panic-fatecsjc/kp-4dsm-api/blob/main/kernelpanic-backend/src/autenticacao/guarda-jwt.guard.ts"
click node_stations "https://github.com/kernel-panic-fatecsjc/kp-4dsm-api/blob/main/kernelpanic-backend/src/estacoes/estacoes.service.ts"
click node_sensors "https://github.com/kernel-panic-fatecsjc/kp-4dsm-api/blob/main/kernelpanic-backend/src/sensores/sensores.service.ts"
click node_contracts "https://github.com/kernel-panic-fatecsjc/kp-4dsm-api/blob/main/kernelpanic-backend/src/licitacoes/licitacoes.service.ts"
click node_webapp "https://github.com/kernel-panic-fatecsjc/kp-4dsm-api/blob/main/frontend/frontend/app/(protegido)/dashboard/page.tsx"
click node_webassets "https://github.com/kernel-panic-fatecsjc/kp-4dsm-api/blob/main/frontend/frontend/app/(protegido)/estacoes/page.tsx"
click node_webalerts "https://github.com/kernel-panic-fatecsjc/kp-4dsm-api/blob/main/frontend/frontend/app/(protegido)/alarmes/page.tsx"
click node_ingestapi "https://github.com/kernel-panic-fatecsjc/kp-4dsm-api/blob/main/kernelpanic-backend/servicos/ingestao/http/ingestao.controller.ts"
click node_ingestion "https://github.com/kernel-panic-fatecsjc/kp-4dsm-api/blob/main/kernelpanic-backend/servicos/ingestao/ingestao.service.ts"
click node_rawrepo "https://github.com/kernel-panic-fatecsjc/kp-4dsm-api/blob/main/kernelpanic-backend/servicos/ingestao/leituras-brutas.repositorio.ts"
click node_mqtt "https://github.com/kernel-panic-fatecsjc/kp-4dsm-api/blob/main/kernelpanic-backend/servicos/ingestao/mqtt/assinante-mqtt.service.ts"
click node_treatment "https://github.com/kernel-panic-fatecsjc/kp-4dsm-api/blob/main/kernelpanic-backend/servicos/tratamento/tratamento.service.ts"
click node_dashboard "https://github.com/kernel-panic-fatecsjc/kp-4dsm-api/blob/main/kernelpanic-backend/src/dashboard/dashboard.service.ts"
click node_alerts "https://github.com/kernel-panic-fatecsjc/kp-4dsm-api/blob/main/kernelpanic-backend/src/alertas/alertas.service.ts"
click node_alarmstream "https://github.com/kernel-panic-fatecsjc/kp-4dsm-api/blob/main/kernelpanic-backend/src/alarmes/tempo-real/alarmes-tempo-real.service.ts"
click node_rawqueries "https://github.com/kernel-panic-fatecsjc/kp-4dsm-api/blob/main/kernelpanic-backend/src/leituras-brutas/leituras-brutas.service.ts"
click node_audit "https://github.com/kernel-panic-fatecsjc/kp-4dsm-api/blob/main/kernelpanic-backend/src/auditoria/auditoria.service.ts"
click node_database "https://github.com/kernel-panic-fatecsjc/kp-4dsm-api/blob/main/kernelpanic-backend/src/prisma/prisma.service.ts"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_webapp,node_webassets,node_webalerts toneBlue
class node_users,node_auth,node_stations,node_sensors,node_contracts toneAmber
class node_ingestapi,node_ingestion,node_rawrepo,node_rawdata,node_mqtt,node_treatment,node_database toneMint
class node_dashboard,node_alerts,node_alarmstream,node_rawqueries toneRose
class node_audit,node_operator,node_stationdevice,node_broker toneIndigo
```

## Components

### Aplicação web

- [Portal operacional](https://github.com/kernel-panic-fatecsjc/kp-4dsm-api/blob/main/frontend/frontend/app/(protegido)/dashboard/page.tsx): `frontend/frontend/app/(protegido)/dashboard/page.tsx`
- [Telas de gestão](https://github.com/kernel-panic-fatecsjc/kp-4dsm-api/blob/main/frontend/frontend/app/(protegido)/estacoes/page.tsx): `frontend/frontend/app/(protegido)/estacoes/page.tsx`
- [Telas de alertas](https://github.com/kernel-panic-fatecsjc/kp-4dsm-api/blob/main/frontend/frontend/app/(protegido)/alarmes/page.tsx): `frontend/frontend/app/(protegido)/alarmes/page.tsx`

### Acesso e gestão

- [Usuários](https://github.com/kernel-panic-fatecsjc/kp-4dsm-api/blob/main/kernelpanic-backend/src/usuarios/usuarios.service.ts): `kernelpanic-backend/src/usuarios/usuarios.service.ts`
- [Autenticação e perfis](https://github.com/kernel-panic-fatecsjc/kp-4dsm-api/blob/main/kernelpanic-backend/src/autenticacao/guarda-jwt.guard.ts): `kernelpanic-backend/src/autenticacao/guarda-jwt.guard.ts`
- [Estações](https://github.com/kernel-panic-fatecsjc/kp-4dsm-api/blob/main/kernelpanic-backend/src/estacoes/estacoes.service.ts): `kernelpanic-backend/src/estacoes/estacoes.service.ts`
- [Sensores](https://github.com/kernel-panic-fatecsjc/kp-4dsm-api/blob/main/kernelpanic-backend/src/sensores/sensores.service.ts): `kernelpanic-backend/src/sensores/sensores.service.ts`
- [Licitações e contratos](https://github.com/kernel-panic-fatecsjc/kp-4dsm-api/blob/main/kernelpanic-backend/src/licitacoes/licitacoes.service.ts): `kernelpanic-backend/src/licitacoes/licitacoes.service.ts`

### Telemetria e dados

- [API de ingestão](https://github.com/kernel-panic-fatecsjc/kp-4dsm-api/blob/main/kernelpanic-backend/servicos/ingestao/http/ingestao.controller.ts): `kernelpanic-backend/servicos/ingestao/http/ingestao.controller.ts`
- [Buffer e ingestão](https://github.com/kernel-panic-fatecsjc/kp-4dsm-api/blob/main/kernelpanic-backend/servicos/ingestao/ingestao.service.ts): `kernelpanic-backend/servicos/ingestao/ingestao.service.ts`
- [Repositório bruto](https://github.com/kernel-panic-fatecsjc/kp-4dsm-api/blob/main/kernelpanic-backend/servicos/ingestao/leituras-brutas.repositorio.ts): `kernelpanic-backend/servicos/ingestao/leituras-brutas.repositorio.ts`
- **Leituras brutas**
- [Assinante MQTT](https://github.com/kernel-panic-fatecsjc/kp-4dsm-api/blob/main/kernelpanic-backend/servicos/ingestao/mqtt/assinante-mqtt.service.ts): `kernelpanic-backend/servicos/ingestao/mqtt/assinante-mqtt.service.ts`
- [Tratamento de leituras](https://github.com/kernel-panic-fatecsjc/kp-4dsm-api/blob/main/kernelpanic-backend/servicos/tratamento/tratamento.service.ts): `kernelpanic-backend/servicos/tratamento/tratamento.service.ts`
- [Banco de dados](https://github.com/kernel-panic-fatecsjc/kp-4dsm-api/blob/main/kernelpanic-backend/src/prisma/prisma.service.ts): `kernelpanic-backend/src/prisma/prisma.service.ts`

### Risco e consulta

- [Dashboard e indicadores](https://github.com/kernel-panic-fatecsjc/kp-4dsm-api/blob/main/kernelpanic-backend/src/dashboard/dashboard.service.ts): `kernelpanic-backend/src/dashboard/dashboard.service.ts`
- [Alertas configuráveis](https://github.com/kernel-panic-fatecsjc/kp-4dsm-api/blob/main/kernelpanic-backend/src/alertas/alertas.service.ts): `kernelpanic-backend/src/alertas/alertas.service.ts`
- [Alarmes em tempo real](https://github.com/kernel-panic-fatecsjc/kp-4dsm-api/blob/main/kernelpanic-backend/src/alarmes/tempo-real/alarmes-tempo-real.service.ts): `kernelpanic-backend/src/alarmes/tempo-real/alarmes-tempo-real.service.ts`
- [Consultas de leituras](https://github.com/kernel-panic-fatecsjc/kp-4dsm-api/blob/main/kernelpanic-backend/src/leituras-brutas/leituras-brutas.service.ts): `kernelpanic-backend/src/leituras-brutas/leituras-brutas.service.ts`

### Auditoria

- [Trilha de auditoria](https://github.com/kernel-panic-fatecsjc/kp-4dsm-api/blob/main/kernelpanic-backend/src/auditoria/auditoria.service.ts): `kernelpanic-backend/src/auditoria/auditoria.service.ts`

### Other components

- **Operador**
- **Estação meteorológica**
- **Broker MQTT**

## Connections

- Operador → Portal operacional: usa
- Portal operacional → Dashboard e indicadores: consulta APIs
- Portal operacional → Telas de gestão: acessa telas
- Portal operacional → Telas de alertas: acessa telas
- Telas de gestão → Estações: gerencia
- Telas de gestão → Sensores: gerencia
- Telas de alertas → Alertas configuráveis: configura e consulta
- Estação meteorológica → API de ingestão: envia telemetria
- API de ingestão → Buffer e ingestão: encaminha pacote (evidence: `kernelpanic-backend/servicos/ingestao/http/ingestao.controller.ts`)
- Buffer e ingestão → Banco de dados: consulta estação (evidence: `kernelpanic-backend/servicos/ingestao/ingestao.service.ts`)
- Buffer e ingestão → Repositório bruto: grava lote (evidence: `kernelpanic-backend/servicos/ingestao/ingestao.service.ts`)
- Repositório bruto → Leituras brutas: persiste
- Broker MQTT → Assinante MQTT: publica mensagens
- Assinante MQTT → Buffer e ingestão: repassa leituras (evidence: `kernelpanic-backend/servicos/ingestao/mqtt/assinante-mqtt.service.ts`)
- Tratamento de leituras → Leituras brutas: processa lotes
- Dashboard e indicadores → Banco de dados: consulta indicadores
- Alertas configuráveis → Banco de dados: persiste regras
- Alertas configuráveis → Alarmes em tempo real: emite eventos
- Consultas de leituras → Banco de dados: consulta leituras
- Licitações e contratos → Estações: lista estações (evidence: `kernelpanic-backend/src/licitacoes/licitacoes.controller.ts`)
- Usuários → Banco de dados: persiste usuários
- Autenticação e perfis → Usuários: valida sessão
- Estações → Trilha de auditoria: registra ações (evidence: `kernelpanic-backend/src/estacoes/estacoes.controller.ts`)
- Alertas configuráveis → Trilha de auditoria: registra ações (evidence: `kernelpanic-backend/src/alertas/alertas.controller.ts`)
- Usuários → Trilha de auditoria: registra ações (evidence: `kernelpanic-backend/src/usuarios/usuarios.controller.ts`)
- Licitações e contratos → Trilha de auditoria: registra ações (evidence: `kernelpanic-backend/src/licitacoes/licitacoes.controller.ts`)
- Trilha de auditoria → Banco de dados: grava e consulta (evidence: `kernelpanic-backend/src/auditoria/auditoria.service.ts`)
