# pedrowerkhaizer/radar-trabalhista architecture

> Architecture diagram of the GitHub repository pedrowerkhaizer/radar-trabalhista, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-09-25). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/pedrowerkhaizer/radar-trabalhista
- Repository: https://github.com/pedrowerkhaizer/radar-trabalhista

## Overview

Radar Trabalhista combines Brazilian labor-market data ingestion, an API, and a dashboard for CAGED monitoring and workforce analytics. The evidenced CAGED workflow is monthly download, validation, transformation, and database load; dashboard requests pass through query hooks and an API client to API endpoints. The tree also identifies RAIS ingestion, turnover, CBO, and analytics areas, but their internal wiring is not shown in the sampled source. Compliance scoring is described as a forthcoming landing-page feature, so it is not represented as an implemented subsystem.

Main entry points: [`apps/api/main.py`](https://github.com/pedrowerkhaizer/radar-trabalhista/blob/main/apps/api/main.py) (API application), [`apps/web/src/hooks/useAnalytics.ts`](https://github.com/pedrowerkhaizer/radar-trabalhista/blob/main/apps/web/src/hooks/useAnalytics.ts) (Analytics hooks), [`apps/api/db.py`](https://github.com/pedrowerkhaizer/radar-trabalhista/blob/main/apps/api/db.py) (DB connections), [`etl/flows/caged_flow.py`](https://github.com/pedrowerkhaizer/radar-trabalhista/blob/main/etl/flows/caged_flow.py) (CAGED flow)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_ingest["Data ingestion"]
  node_caged_flow["CAGED flow<br/>[caged_flow.py]"]
  node_download["Download<br/>[download.py]"]
  node_validate["Validate<br/>[validate.py]"]
  node_transform["Transform<br/>[transform.py]"]
  node_load["Load<br/>[load.py]"]
  node_rais_flow["RAIS flow<br/>[rais_flow.py]"]
end

subgraph group_api["API services"]
  node_api_main["API application<br/>[main.py]"]
  node_caged_router["CAGED endpoints<br/>[caged.py]"]
  node_analytics_router["Analytics endpoints<br/>[analytics.py]"]
  node_turnover_router["Turnover endpoints<br/>[turnover.py]"]
  node_cbo_router["CBO endpoints<br/>[cbo.py]"]
  node_cache_service["Cache service<br/>[cache.py]"]
end

subgraph group_web["Web dashboard"]
  node_dashboard["Dashboard"]
  node_analytics_views["Analytics views"]
  node_turnover_views["Turnover views"]
  node_occupation_views["Occupation views"]
  node_company_views["Company views<br/>[EmpresaContent.tsx]"]
  node_caged_hooks["CAGED hooks<br/>[useCaged.ts]"]
  node_analytics_hooks["Analytics hooks<br/>[useAnalytics.ts]"]
  node_api_client["API client<br/>[api-client.ts]"]
end

subgraph group_state["Data access"]
  node_db_access["DB connections<br/>[db.py]"]
  node_postgres[("PostgreSQL")]
  node_redis[("Redis")]
end

node_analyst(("Analyst"))
node_api_service(("Radar API"))

node_analyst -->|"opens"| node_dashboard
node_caged_flow -->|"calls"| node_download
node_caged_flow -->|"calls"| node_validate
node_caged_flow -->|"calls"| node_transform
node_caged_flow -->|"calls"| node_load
node_load -->|"loads data"| node_postgres
node_rais_flow -.->|"loads data"| node_postgres
node_api_main -->|"registers"| node_caged_router
node_api_main -->|"registers"| node_analytics_router
node_api_main -->|"registers"| node_turnover_router
node_api_main -->|"registers"| node_cbo_router
node_caged_router -->|"queries"| node_db_access
node_caged_router -->|"uses"| node_cache_service
node_cache_service -->|"reads/writes"| node_redis
node_db_access -->|"connects"| node_postgres
node_analytics_router -.->|"queries"| node_db_access
node_turnover_router -.->|"queries"| node_db_access
node_cbo_router -.->|"queries"| node_db_access
node_dashboard -.->|"requests data"| node_caged_hooks
node_analytics_views -.->|"requests data"| node_analytics_hooks
node_turnover_views -.->|"requests data"| node_analytics_hooks
node_occupation_views -.->|"requests data"| node_analytics_hooks
node_company_views -.->|"requests data"| node_analytics_hooks
node_caged_hooks -->|"calls"| node_api_client
node_analytics_hooks -.->|"calls"| node_api_client
node_api_client -->|"HTTP requests"| node_api_service
node_api_service -->|"routes to"| node_api_main

click node_caged_flow "https://github.com/pedrowerkhaizer/radar-trabalhista/blob/main/etl/flows/caged_flow.py"
click node_download "https://github.com/pedrowerkhaizer/radar-trabalhista/blob/main/etl/tasks/download.py"
click node_validate "https://github.com/pedrowerkhaizer/radar-trabalhista/blob/main/etl/tasks/validate.py"
click node_transform "https://github.com/pedrowerkhaizer/radar-trabalhista/blob/main/etl/tasks/transform.py"
click node_load "https://github.com/pedrowerkhaizer/radar-trabalhista/blob/main/etl/tasks/load.py"
click node_rais_flow "https://github.com/pedrowerkhaizer/radar-trabalhista/blob/main/etl/flows/rais_flow.py"
click node_api_main "https://github.com/pedrowerkhaizer/radar-trabalhista/blob/main/apps/api/main.py"
click node_caged_router "https://github.com/pedrowerkhaizer/radar-trabalhista/blob/main/apps/api/routers/caged.py"
click node_analytics_router "https://github.com/pedrowerkhaizer/radar-trabalhista/blob/main/apps/api/routers/analytics.py"
click node_turnover_router "https://github.com/pedrowerkhaizer/radar-trabalhista/blob/main/apps/api/routers/turnover.py"
click node_cbo_router "https://github.com/pedrowerkhaizer/radar-trabalhista/blob/main/apps/api/routers/cbo.py"
click node_cache_service "https://github.com/pedrowerkhaizer/radar-trabalhista/blob/main/apps/api/services/cache.py"
click node_db_access "https://github.com/pedrowerkhaizer/radar-trabalhista/blob/main/apps/api/db.py"
click node_dashboard "https://github.com/pedrowerkhaizer/radar-trabalhista/blob/main/apps/web/src/app/dashboard/DashboardContent.tsx"
click node_analytics_views "https://github.com/pedrowerkhaizer/radar-trabalhista/blob/main/apps/web/src/app/dashboard/demografico/DemograficoContent.tsx"
click node_turnover_views "https://github.com/pedrowerkhaizer/radar-trabalhista/blob/main/apps/web/src/app/dashboard/rotatividade/RotatividadeContent.tsx"
click node_occupation_views "https://github.com/pedrowerkhaizer/radar-trabalhista/blob/main/apps/web/src/app/dashboard/ocupacoes/OcupacoesContent.tsx"
click node_company_views "https://github.com/pedrowerkhaizer/radar-trabalhista/blob/main/apps/web/src/app/dashboard/empresa/EmpresaContent.tsx"
click node_caged_hooks "https://github.com/pedrowerkhaizer/radar-trabalhista/blob/main/apps/web/src/hooks/useCaged.ts"
click node_analytics_hooks "https://github.com/pedrowerkhaizer/radar-trabalhista/blob/main/apps/web/src/hooks/useAnalytics.ts"
click node_api_client "https://github.com/pedrowerkhaizer/radar-trabalhista/blob/main/apps/web/src/lib/api-client.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_caged_flow,node_download,node_validate,node_transform,node_load,node_rais_flow toneBlue
class node_api_main,node_caged_router,node_analytics_router,node_turnover_router,node_cbo_router,node_cache_service toneAmber
class node_dashboard,node_analytics_views,node_turnover_views,node_occupation_views,node_company_views,node_caged_hooks,node_analytics_hooks,node_api_client,node_api_service toneMint
class node_db_access,node_postgres,node_redis toneRose
class node_analyst toneIndigo
```

## Components

### Data ingestion

- [CAGED flow](https://github.com/pedrowerkhaizer/radar-trabalhista/blob/main/etl/flows/caged_flow.py): `etl/flows/caged_flow.py`
- [Download](https://github.com/pedrowerkhaizer/radar-trabalhista/blob/main/etl/tasks/download.py): `etl/tasks/download.py`
- [Validate](https://github.com/pedrowerkhaizer/radar-trabalhista/blob/main/etl/tasks/validate.py): `etl/tasks/validate.py`
- [Transform](https://github.com/pedrowerkhaizer/radar-trabalhista/blob/main/etl/tasks/transform.py): `etl/tasks/transform.py`
- [Load](https://github.com/pedrowerkhaizer/radar-trabalhista/blob/main/etl/tasks/load.py): `etl/tasks/load.py`
- [RAIS flow](https://github.com/pedrowerkhaizer/radar-trabalhista/blob/main/etl/flows/rais_flow.py): `etl/flows/rais_flow.py`

### API services

- [API application](https://github.com/pedrowerkhaizer/radar-trabalhista/blob/main/apps/api/main.py): `apps/api/main.py`
- [CAGED endpoints](https://github.com/pedrowerkhaizer/radar-trabalhista/blob/main/apps/api/routers/caged.py): `apps/api/routers/caged.py`
- [Analytics endpoints](https://github.com/pedrowerkhaizer/radar-trabalhista/blob/main/apps/api/routers/analytics.py): `apps/api/routers/analytics.py`
- [Turnover endpoints](https://github.com/pedrowerkhaizer/radar-trabalhista/blob/main/apps/api/routers/turnover.py): `apps/api/routers/turnover.py`
- [CBO endpoints](https://github.com/pedrowerkhaizer/radar-trabalhista/blob/main/apps/api/routers/cbo.py): `apps/api/routers/cbo.py`
- [Cache service](https://github.com/pedrowerkhaizer/radar-trabalhista/blob/main/apps/api/services/cache.py): `apps/api/services/cache.py`

### Web dashboard

- [Dashboard](https://github.com/pedrowerkhaizer/radar-trabalhista/blob/main/apps/web/src/app/dashboard/DashboardContent.tsx): `apps/web/src/app/dashboard/DashboardContent.tsx`
- [Analytics views](https://github.com/pedrowerkhaizer/radar-trabalhista/blob/main/apps/web/src/app/dashboard/demografico/DemograficoContent.tsx): `apps/web/src/app/dashboard/demografico/DemograficoContent.tsx`
- [Turnover views](https://github.com/pedrowerkhaizer/radar-trabalhista/blob/main/apps/web/src/app/dashboard/rotatividade/RotatividadeContent.tsx): `apps/web/src/app/dashboard/rotatividade/RotatividadeContent.tsx`
- [Occupation views](https://github.com/pedrowerkhaizer/radar-trabalhista/blob/main/apps/web/src/app/dashboard/ocupacoes/OcupacoesContent.tsx): `apps/web/src/app/dashboard/ocupacoes/OcupacoesContent.tsx`
- [Company views](https://github.com/pedrowerkhaizer/radar-trabalhista/blob/main/apps/web/src/app/dashboard/empresa/EmpresaContent.tsx): `apps/web/src/app/dashboard/empresa/EmpresaContent.tsx`
- [CAGED hooks](https://github.com/pedrowerkhaizer/radar-trabalhista/blob/main/apps/web/src/hooks/useCaged.ts): `apps/web/src/hooks/useCaged.ts`
- [Analytics hooks](https://github.com/pedrowerkhaizer/radar-trabalhista/blob/main/apps/web/src/hooks/useAnalytics.ts): `apps/web/src/hooks/useAnalytics.ts`
- [API client](https://github.com/pedrowerkhaizer/radar-trabalhista/blob/main/apps/web/src/lib/api-client.ts): `apps/web/src/lib/api-client.ts`

### Data access

- [DB connections](https://github.com/pedrowerkhaizer/radar-trabalhista/blob/main/apps/api/db.py): `apps/api/db.py`
- **PostgreSQL**
- **Redis**

### Other components

- **Analyst**
- **Radar API**

## Connections

- Analyst → Dashboard: opens
- CAGED flow → Download: calls
- CAGED flow → Validate: calls
- CAGED flow → Transform: calls
- CAGED flow → Load: calls
- Load → PostgreSQL: loads data
- RAIS flow → PostgreSQL: loads data
- API application → CAGED endpoints: registers
- API application → Analytics endpoints: registers
- API application → Turnover endpoints: registers
- API application → CBO endpoints: registers
- CAGED endpoints → DB connections: queries
- CAGED endpoints → Cache service: uses
- Cache service → Redis: reads/writes
- DB connections → PostgreSQL: connects
- Analytics endpoints → DB connections: queries
- Turnover endpoints → DB connections: queries
- CBO endpoints → DB connections: queries
- Dashboard → CAGED hooks: requests data
- Analytics views → Analytics hooks: requests data
- Turnover views → Analytics hooks: requests data
- Occupation views → Analytics hooks: requests data
- Company views → Analytics hooks: requests data
- CAGED hooks → API client: calls
- Analytics hooks → API client: calls
- API client → Radar API: HTTP requests
- Radar API → API application: routes to
