# Arquitectura

#### Componentes Principales <a href="#componentes-principales" id="componentes-principales"></a>

Nuestro proyecto está compuesto por varios componentes clave, cada uno con responsabilidades específicas en la gestión de datos:

#### Adapters <a href="#adapters" id="adapters"></a>

El módulo principal encargado de decidir cómo proceder con la recolección de datos, ya sea a través de scrapers o APIs.

#### Core <a href="#core" id="core"></a>

Este módulo se encarga de normalizar y procesar los datos encontrados en las casas de apuestas. Sus submódulos incluyen:

* **Entities:** Conexiones a la base de datos.
* **Normalizer:** Limpia los datos eliminando caracteres especiales (como $, €, etc.) y normaliza los nombres de las columnas extraídas en el proceso anterior.
* **Operator System:** Ejecuta operaciones necesarias para completar los datos principales, incluyendo cálculos como "netRevenue" y "revenueShare".

#### Data <a href="#data" id="data"></a>

Encargado de recolectar los datos mediante scrapers o APIs, según lo haya decidido el módulo de adapters.

#### Routes <a href="#routes" id="routes"></a>

Maneja las rutas disponibles a través de la API para comunicarse con el proyecto.

### **Estructura de Carpetas** <a href="#estructura-de-carpetas" id="estructura-de-carpetas"></a>

La estructura de carpetas de nuestro proyecto sigue el patrón semihexagonal, lo que asegura que cada módulo y componente esté organizado de manera clara y lógica. A continuación, se muestra un ejemplo de cómo está estructurado el proyecto:

```bash
/project-root
│
├── /app
│   ├── /adapters
│   │   └── /models
│   ├── /core
│   │   ├── /entities
│   │   ├── /enums
│   │   ├── /environment_variable
│   │   ├── /exceptions
│   │   ├── /interface
│   │   ├── /normalizer
│   │   ├── /operator_system
│   │   ├── /repositories
│   │   └── /utils
│   ├── /data
│   │   ├── /api
│   │   └── /scrappers
│   ├── /routes
│   └── /services
├── /csv
└── /test
```

<br>


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs-affiliates.inlaze.com/reportes/data-collector/arquitectura.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
