# michaelsuarez0/funcionarios_publicos architecture

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

- Interactive diagram: https://gitdiagram.com/michaelsuarez0/funcionarios_publicos
- Repository: https://github.com/michaelsuarez0/funcionarios_publicos

## Overview

El producto es un scraper Scrapy del Directorio Nacional de Funcionarios Públicos del Perú. El flujo principal va desde la ejecución local hasta el descubrimiento de páginas, la extracción de perfiles y la escritura de CSV fechados. El spider también gestiona bloqueos y reintentos; la configuración activa la normalización de fechas y el exportador delimitado por punto y coma. Las conexiones se basan en los fragmentos y en las capacidades descritas en el README; no se inspeccionaron flujos de automatización externos.

Main entry points: [`src/funcionarios_publicos/high_level/spider_function.py`](https://github.com/michaelsuarez0/funcionarios_publicos/blob/main/src/funcionarios_publicos/high_level/spider_function.py) (Orquestador Scrapy), [`src/funcionarios_publicos/core/settings.py`](https://github.com/michaelsuarez0/funcionarios_publicos/blob/main/src/funcionarios_publicos/core/settings.py) (Configuración Scrapy), [`src/funcionarios_publicos/core/funcionarios_spider.py`](https://github.com/michaelsuarez0/funcionarios_publicos/blob/main/src/funcionarios_publicos/core/funcionarios_spider.py) (Descubrimiento de páginas), [`main.py`](https://github.com/michaelsuarez0/funcionarios_publicos/blob/main/main.py) (Ejecución local)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_execution["Ejecución"]
  node_entry["Ejecución local<br/>[main.py]"]
  node_runner["Orquestador Scrapy<br/>[spider_function.py]"]
  node_settings["Configuración Scrapy<br/>[settings.py]"]
end

subgraph group_scraping["Extracción"]
  node_listing["Descubrimiento de páginas"]
  node_profiles["Extracción de perfiles"]
end

subgraph group_output["Procesamiento y salida"]
  node_pipeline["Normalización de fechas<br/>[pipelines.py]"]
  node_exporter["Exportador CSV<br/>[exporters.py]"]
  node_datasets["CSV históricos"]
end

node_user(("Usuario"))
node_directory["Directorio Gob.pe"]

node_user -->|"ejecuta"| node_entry
node_entry -->|"invoca"| node_runner
node_runner -->|"carga configuración"| node_settings
node_runner -->|"inicia crawl"| node_listing
node_listing -->|"solicita páginas"| node_directory
node_listing -->|"sigue enlaces"| node_profiles
node_profiles -->|"solicita perfiles"| node_directory
node_settings -->|"activa pipeline"| node_pipeline
node_settings -->|"registra exportador"| node_exporter
node_runner -->|"escribe CSV"| node_datasets

click node_entry "https://github.com/michaelsuarez0/funcionarios_publicos/blob/main/main.py"
click node_runner "https://github.com/michaelsuarez0/funcionarios_publicos/blob/main/src/funcionarios_publicos/high_level/spider_function.py"
click node_settings "https://github.com/michaelsuarez0/funcionarios_publicos/blob/main/src/funcionarios_publicos/core/settings.py"
click node_listing "https://github.com/michaelsuarez0/funcionarios_publicos/blob/main/src/funcionarios_publicos/core/funcionarios_spider.py"
click node_profiles "https://github.com/michaelsuarez0/funcionarios_publicos/blob/main/src/funcionarios_publicos/core/funcionarios_spider.py"
click node_pipeline "https://github.com/michaelsuarez0/funcionarios_publicos/blob/main/src/funcionarios_publicos/core/pipelines.py"
click node_exporter "https://github.com/michaelsuarez0/funcionarios_publicos/blob/main/src/funcionarios_publicos/core/exporters.py"
click node_datasets "https://github.com/michaelsuarez0/funcionarios_publicos/tree/main/data"

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_entry,node_runner,node_settings toneBlue
class node_listing,node_profiles toneAmber
class node_pipeline,node_exporter,node_datasets toneMint
class node_user,node_directory toneIndigo
```

## Components

### Ejecución

- [Ejecución local](https://github.com/michaelsuarez0/funcionarios_publicos/blob/main/main.py): `main.py`
- [Orquestador Scrapy](https://github.com/michaelsuarez0/funcionarios_publicos/blob/main/src/funcionarios_publicos/high_level/spider_function.py): `src/funcionarios_publicos/high_level/spider_function.py`
- [Configuración Scrapy](https://github.com/michaelsuarez0/funcionarios_publicos/blob/main/src/funcionarios_publicos/core/settings.py): `src/funcionarios_publicos/core/settings.py`

### Extracción

- [Descubrimiento de páginas](https://github.com/michaelsuarez0/funcionarios_publicos/blob/main/src/funcionarios_publicos/core/funcionarios_spider.py): `src/funcionarios_publicos/core/funcionarios_spider.py`
- [Extracción de perfiles](https://github.com/michaelsuarez0/funcionarios_publicos/blob/main/src/funcionarios_publicos/core/funcionarios_spider.py): `src/funcionarios_publicos/core/funcionarios_spider.py`

### Procesamiento y salida

- [Normalización de fechas](https://github.com/michaelsuarez0/funcionarios_publicos/blob/main/src/funcionarios_publicos/core/pipelines.py): `src/funcionarios_publicos/core/pipelines.py`
- [Exportador CSV](https://github.com/michaelsuarez0/funcionarios_publicos/blob/main/src/funcionarios_publicos/core/exporters.py): `src/funcionarios_publicos/core/exporters.py`
- [CSV históricos](https://github.com/michaelsuarez0/funcionarios_publicos/tree/main/data): `data`

### Other components

- **Usuario**
- **Directorio Gob.pe**

## Connections

- Usuario → Ejecución local: ejecuta (evidence: `README.md`)
- Ejecución local → Orquestador Scrapy: invoca (evidence: `main.py`)
- Orquestador Scrapy → Configuración Scrapy: carga configuración (evidence: `src/funcionarios_publicos/high_level/spider_function.py`)
- Orquestador Scrapy → Descubrimiento de páginas: inicia crawl (evidence: `src/funcionarios_publicos/high_level/spider_function.py`)
- Descubrimiento de páginas → Directorio Gob.pe: solicita páginas (evidence: `src/funcionarios_publicos/core/funcionarios_spider.py`)
- Descubrimiento de páginas → Extracción de perfiles: sigue enlaces (evidence: `src/funcionarios_publicos/core/funcionarios_spider.py`)
- Extracción de perfiles → Directorio Gob.pe: solicita perfiles (evidence: `src/funcionarios_publicos/core/funcionarios_spider.py`)
- Configuración Scrapy → Normalización de fechas: activa pipeline (evidence: `src/funcionarios_publicos/core/settings.py`)
- Configuración Scrapy → Exportador CSV: registra exportador (evidence: `src/funcionarios_publicos/core/settings.py`)
- Orquestador Scrapy → CSV históricos: escribe CSV (evidence: `src/funcionarios_publicos/high_level/spider_function.py`)
