# Servicio de Información Meteorologica

# 📘 Introducción

#### Descripción

Este proyecto es una **API de Clima Local** implementada con Laravel 12, que ofrece un servicio RESTful para obtener información climática basada en coordenadas geográficas.

A diferencia de las soluciones que dependen de APIs externas, esta API consulta directamente una base de datos local que contiene registros históricos y precargados de datos climáticos.

La carga de datos en la base de datos se realiza mediante un proceso automatizado con N8N, el cual consulta periódicamente la API de CONAGUA y persiste la información localmente. La aplicación sigue principios de diseño limpio, utilizando Laravel Actions para la encapsulación de la lógica de negocio y Laravel API Resources para una transformación y presentación de datos consistente y limpia.

#### Objetivo

Proveer un servicio confiable y eficiente para la consulta de información climática basada en coordenadas geográficas, a través de una API RESTful construida con Laravel 12. Esta solución permite acceder a datos meteorológicos históricos y actualizados sin depender de fuentes externas, gracias a una base de datos local alimentada automáticamente desde la API de CONAGUA mediante N8N. El sistema garantiza respuestas consistentes y estructuradas, siguiendo principios de diseño limpio que facilitan su mantenimiento, escalabilidad e integración con otras aplicaciones o servicios institucionales.

#### Características Principales

- Obtención de datos climáticos actuales desde una base de datos local.
- Organización de la lógica de negocio mediante Actions.
- Serialización de respuestas API limpia y consistente con API Resources.

#### Tecnologías Utilizadas

- **Laravel 12**: Framework de PHP para el desarrollo web.
- **PHP 8.2+**.
- **Composer**: Gestor de dependencias de PHP.
- **MySQL**: Base de datos (configurada en `.env`).
- **Carbon**: Para el manejo de fechas y horas.

# 🔐 Autenticación

Actualmente, el servicio se encuentra accesible de forma abierta, sin requerimientos de autenticación, con el objetivo de facilitar su integración temprana y evaluación funcional.

No obstante, se contempla la implementación de un mecanismo de autenticación robusto en fases posteriores, orientado a controlar el acceso, registrar el consumo por usuario o sistema, y garantizar la seguridad de la información. Este mecanismo podría incluir autenticación mediante tokens (API Keys o JWT), adaptándose a las necesidades del entorno donde se integre el servicio.

# 🌐 Servicios Web

#### Entornos 

La API de Clima Local está disponible en los siguientes entornos:

<div class="_tableContainer_16hzy_1" id="bkmrk-ambiente-url-pruebas"><div class="_tableWrapper_16hzy_14 group flex w-fit flex-col-reverse" tabindex="-1"><table class="w-fit min-w-(--thread-content-width)" data-end="608" data-start="220"><thead data-end="304" data-start="220"><tr data-end="304" data-start="220"><th data-col-size="sm" data-end="233" data-start="220">**Ambiente**</th><th data-col-size="md" data-end="304" data-start="233">**URL**</th></tr></thead><tbody data-end="608" data-start="390"><tr data-end="523" data-start="390"><td data-col-size="sm" data-end="407" data-start="390">**Pruebas**</td><td data-col-size="md" data-end="523" data-start="407">[https://test-aplicaciones.tamaulipas.gob.mx/srv-clima/](https://test-aplicaciones.tamaulipas.gob.mx/srv-clima/)</td></tr><tr data-end="608" data-start="524"><td data-col-size="sm" data-end="541" data-start="524">**Producción**</td><td data-col-size="md" data-end="608" data-start="541">*No disponible actualmente*</td></tr></tbody></table>

</div></div>##### Endpoints de la API

Todos los endpoints están disponibles bajo el prefijo:  
**`/api/v1/`**

##### Enpoints disponibles

<div class="_tableContainer_16hzy_1" id="bkmrk-m%C3%A9todo-endpoint-desc"><div class="_tableWrapper_16hzy_14 group flex w-fit flex-col-reverse" tabindex="-1"><table class="w-fit min-w-(--thread-content-width)" data-end="1302" data-start="948" style="width: 89.1667%; height: 135.984px;"><thead data-end="1026" data-start="948"><tr data-end="1026" data-start="948" style="height: 29.7969px;"><th data-col-size="sm" data-end="957" data-start="948" style="width: 12.202%; height: 29.7969px;">**Método**</th><th data-col-size="sm" data-end="987" data-start="957" style="width: 37.8682%; height: 29.7969px;">**Endpoint**</th><th data-col-size="md" data-end="1026" data-start="987" style="width: 49.9299%; height: 29.7969px;">**Descripción**</th></tr></thead><tbody data-end="1302" data-start="1106"><tr data-end="1202" data-start="1106" style="height: 29.7969px;"><td data-col-size="sm" data-end="1115" data-start="1106" style="width: 12.202%; height: 29.7969px;">GET</td><td data-col-size="sm" data-end="1145" data-start="1115" style="width: 37.8682%; height: 29.7969px;">`/api/v1/clima-actual`</td><td data-col-size="md" data-end="1202" data-start="1145" style="width: 49.9299%; height: 29.7969px;">Consulta el clima actual por coordenadas geográficas.</td></tr><tr data-end="1302" data-start="1203" style="height: 46.5938px;"><td data-col-size="sm" data-end="1212" data-start="1203" style="width: 12.202%; height: 46.5938px;">GET</td><td data-col-size="sm" data-end="1242" data-start="1212" style="width: 37.8682%; height: 46.5938px;">`/api/v1/clima-pronostico`</td><td data-col-size="md" data-end="1302" data-start="1242" style="width: 49.9299%; height: 46.5938px;">Consulta el pronóstico del clima para los próximos días.</td></tr><tr style="height: 29.7969px;"><td style="width: 12.202%; height: 29.7969px;">GET</td><td style="width: 37.8682%; height: 29.7969px;">`/api/v1/clima-pronostico/municipios`</td><td style="width: 49.9299%; height: 29.7969px;">Consulta el pronóstico del clima para los próximos días por municipios.</td></tr></tbody></table>

</div></div>---

<div class="overflow-y-auto p-4" dir="ltr" id="bkmrk--1">  
</div>### **📡 `GET /api/v1/clima-actual`**

##### **Descripción**

Consulta el clima actual en función de las coordenadas geográficas proporcionadas. Utiliza los datos más recientes disponibles en la base de datos local.

##### **Parámetros esperados (query string)**

<div class="_tableContainer_16hzy_1" id="bkmrk-par%C3%A1metro-tipo-reque"><div class="_tableWrapper_16hzy_14 group flex w-fit flex-col-reverse" tabindex="-1"><table class="w-fit min-w-(--thread-content-width)" data-end="786" data-start="491"><thead data-end="564" data-start="491"><tr data-end="564" data-start="491"><th data-col-size="sm" data-end="505" data-start="491">**Parámetro**</th><th data-col-size="sm" data-end="514" data-start="505">**Tipo**</th><th data-col-size="sm" data-end="526" data-start="514">**Requerido**</th><th data-col-size="sm" data-end="564" data-start="526">**Descripción**</th></tr></thead><tbody data-end="786" data-start="639"><tr data-end="712" data-start="639"><td data-col-size="sm" data-end="653" data-start="639">`latitud`</td><td data-col-size="sm" data-end="662" data-start="653">float</td><td data-col-size="sm" data-end="674" data-start="662">Sí</td><td data-col-size="sm" data-end="712" data-start="674">Latitud en formato decimal.</td></tr><tr data-end="786" data-start="713"><td data-col-size="sm" data-end="727" data-start="713">`longitud`</td><td data-col-size="sm" data-end="736" data-start="727">float</td><td data-col-size="sm" data-end="748" data-start="736">Sí</td><td data-col-size="sm" data-end="786" data-start="748">Longitud en formato decimal.</td></tr></tbody></table>

</div></div>##### **Ejemplo de petición**

<div class="contain-inline-size rounded-2xl relative bg-token-sidebar-surface-primary" id="bkmrk-get-%2Fapi%2Fv1%2Fclima-ac"><div class="overflow-y-auto p-4" dir="ltr">`GET /api/v1/clima-actual?latitud=23.731100&longitud=-99.151300`</div></div>##### **Ejemplo de respuesta exitosa (`200 OK`)**<button class="flex items-center gap-1 py-1 select-none"></button>

```json
{
  "error": false,
  "status": 200,
  "message": "Clima actual obtenido correctamente.",
  "data": {
    "id_estado": 28,
    "id_municipio": 41,
    "nombre_estado": "Tamaulipas",
    "nombre_municipio": "Victoria",
    "dia_local": "2025-06-24 00:00:00",
    "numero_dia": 0,
    "temperatura_maxima_c": "31.70",
    "temperatura_minima_c": "18.90",
    "descripcion_cielo": "Poco nuboso",
    "probabilidad_precipitacion_porcentaje": 50,
    "precipitacion_litros_m2": "14.70",
    "velocidad_viento_kmh": "10.60",
    "direccion_viento_cardinal": "Sureste",
    "direccion_viento_grados": "135.00",
    "cobertura_nubes_porcentaje": "7.75",
    "latitud": "23.731100",
    "longitud": "-99.151300",
    "diferencia_utc": 6
  },
  "metadata": {
    "Organization": "Agencia de Innovación e Inteligencia Digital de Tamaulipas",
    "Department": "Departamento de Desarrollo de Soluciones Informáticas"
  }
}
```

---


### **🌦️ `GET /api/v1/clima-pronostico`**

##### **Descripción**

Devuelve el pronóstico del clima para los próximos días en la ubicación indicada. La información se obtiene de registros meteorológicos precargados en una base de datos local.

##### **Parámetros esperados (query string)**

<div class="_tableContainer_16hzy_1" id="bkmrk-par%C3%A1metro-tipo-reque-1"><div class="_tableWrapper_16hzy_14 group flex w-fit flex-col-reverse" tabindex="-1"><table class="w-fit min-w-(--thread-content-width)" data-end="1737" data-start="1442"><thead data-end="1515" data-start="1442"><tr data-end="1515" data-start="1442"><th data-col-size="sm" data-end="1456" data-start="1442">**Parámetro**</th><th data-col-size="sm" data-end="1465" data-start="1456">**Tipo**</th><th data-col-size="sm" data-end="1477" data-start="1465">**Requerido**</th><th data-col-size="sm" data-end="1515" data-start="1477">**Descripción**</th></tr></thead><tbody data-end="1737" data-start="1590"><tr data-end="1663" data-start="1590"><td data-col-size="sm" data-end="1604" data-start="1590">`latitud`</td><td data-col-size="sm" data-end="1613" data-start="1604">float</td><td data-col-size="sm" data-end="1625" data-start="1613">Sí</td><td data-col-size="sm" data-end="1663" data-start="1625">Latitud en formato decimal.</td></tr><tr data-end="1737" data-start="1664"><td data-col-size="sm" data-end="1678" data-start="1664">`longitud`</td><td data-col-size="sm" data-end="1687" data-start="1678">float</td><td data-col-size="sm" data-end="1699" data-start="1687">Sí</td><td data-col-size="sm" data-end="1737" data-start="1699">Longitud en formato decimal.</td></tr></tbody></table>

</div></div>##### **Ejemplo de petición**

<div class="contain-inline-size rounded-2xl relative bg-token-sidebar-surface-primary" id="bkmrk-get-%2Fapi%2Fv1%2Fclima-pr"><div class="overflow-y-auto p-4" dir="ltr">`GET /api/v1/clima-pronostico?latitud=23.731100&longitud=-99.151300`</div></div><div class="overflow-y-auto p-4" dir="ltr" id="bkmrk--3"></div>##### **Ejemplo de respuesta exitosa (`200 OK`)**

```json
{
  "error": false,
  "status": 200,
  "message": "Clima obtenido correctamente.",
  "data": [
    {
      "id_estado": 28,
      "id_municipio": 41,
      "nombre_estado": "Tamaulipas",
      "nombre_municipio": "Victoria",
      "dia_local": "2025-06-24 00:00:00",
      "numero_dia": 0,
      "temperatura_maxima_c": "31.70",
      "temperatura_minima_c": "18.90",
      "descripcion_cielo": "Poco nuboso",
      "probabilidad_precipitacion_porcentaje": 50,
      "precipitacion_litros_m2": "14.70",
      "velocidad_viento_kmh": "10.60",
      "direccion_viento_cardinal": "Sureste",
      "direccion_viento_grados": "135.00",
      "cobertura_nubes_porcentaje": "7.75",
      "latitud": "23.731100",
      "longitud": "-99.151300",
      "diferencia_utc": 6
    },
    {
      "id_estado": 28,
      "id_municipio": 41,
      "nombre_estado": "Tamaulipas",
      "nombre_municipio": "Victoria",
      "dia_local": "2025-06-25 00:00:00",
      "numero_dia": 1,
      "temperatura_maxima_c": "31.60",
      "temperatura_minima_c": "19.30",
      "descripcion_cielo": "Medio nublado",
      "probabilidad_precipitacion_porcentaje": 0,
      "precipitacion_litros_m2": "0.90",
      "velocidad_viento_kmh": "11.60",
      "direccion_viento_cardinal": "Sur",
      "direccion_viento_grados": "180.00",
      "cobertura_nubes_porcentaje": "63.76",
      "latitud": "23.731100",
      "longitud": "-99.151300",
      "diferencia_utc": 6
    },
    {
      "id_estado": 28,
      "id_municipio": 41,
      "nombre_estado": "Tamaulipas",
      "nombre_municipio": "Victoria",
      "dia_local": "2025-06-26 00:00:00",
      "numero_dia": 2,
      "temperatura_maxima_c": "31.10",
      "temperatura_minima_c": "19.20",
      "descripcion_cielo": "Medio nublado",
      "probabilidad_precipitacion_porcentaje": 10,
      "precipitacion_litros_m2": "1.60",
      "velocidad_viento_kmh": "8.80",
      "direccion_viento_cardinal": "Sureste",
      "direccion_viento_grados": "135.00",
      "cobertura_nubes_porcentaje": "60.21",
      "latitud": "23.731100",
      "longitud": "-99.151300",
      "diferencia_utc": 6
    },
    {
      "id_estado": 28,
      "id_municipio": 41,
      "nombre_estado": "Tamaulipas",
      "nombre_municipio": "Victoria",
      "dia_local": "2025-06-27 00:00:00",
      "numero_dia": 3,
      "temperatura_maxima_c": "31.80",
      "temperatura_minima_c": "19.00",
      "descripcion_cielo": "Cielo nublado",
      "probabilidad_precipitacion_porcentaje": 10,
      "precipitacion_litros_m2": "1.40",
      "velocidad_viento_kmh": "9.60",
      "direccion_viento_cardinal": "Sureste",
      "direccion_viento_grados": "135.00",
      "cobertura_nubes_porcentaje": "32.28",
      "latitud": "23.731100",
      "longitud": "-99.151300",
      "diferencia_utc": 6
    }
  ],
  "metadata": {
    "Organization": "Agencia de Innovación e Inteligencia Digital de Tamaulipas",
    "Department": "Departamento de Desarrollo de Soluciones Informáticas"
  }
}
```

---

### **🏘️ `GET /api/v1/clima-pronostico/municipios`**

##### **Descripción**

Devuelve el pronóstico del clima para los próximos días de una lista de municipios específicos. La información se obtiene de registros meteorológicos precargados en una base de datos local.

##### **Parámetros esperados (query string)**

<table class="w-fit min-w-(--thread-content-width)" id="bkmrk-par%C3%A1metro-tipo-reque-2"><thead data-end="1515" data-start="1442"><tr data-end="1515" data-start="1442"><th data-col-size="sm">Parámetro</th><th data-col-size="sm">Tipo</th><th data-col-size="sm">Requerido</th><th data-col-size="sm">Descripción</th></tr></thead><tbody><tr><td data-col-size="sm">municipios</td><td data-col-size="sm">string (comma-separated) or array</td><td data-col-size="sm">Sí</td><td data-col-size="sm">Lista de IDs de municipios (e.g., 41,20).</td></tr></tbody></table>

##### **Ejemplo de petición**

`GET /api/v1/clima-pronostico/municipios?municipios=42,41`

##### **Ejemplo de respuesta exitosa (`200 OK`)**

```json
{
  "error": false,
  "status": 200,
  "message": "Clima por municipios obtenido correctamente.",
  "data": {
    "41": {
      "nombre_municipio": "Victoria",
      "nombre_estado": "Tamaulipas",
      "latitud": 23.7311,
      "longitud": -99.1513,
      "pronostico": [
        {
          "dia_local": "2025-06-24",
          "numero_dia": 0,
          "temperatura_maxima_c": 31.7,
          "temperatura_minima_c": 18.9,
          "descripcion_cielo": "Poco nuboso",
          "probabilidad_precipitacion_porcentaje": 50,
          "precipitacion_litros_m2": 14.7,
          "velocidad_viento_kmh": 10.6,
          "direccion_viento_cardinal": "Sureste",
          "direccion_viento_grados": "135.0",
          "cobertura_nubes_porcentaje": "7.75",
          "latitud": 23.7311,
          "longitud": -99.1513,
          "diferencia_utc": "6"
        }
      ]
    },
    "42": {
      "nombre_municipio": "Villagrán",
      "nombre_estado": "Tamaulipas",
      "latitud": 24.4732,
      "longitud": -99.4881,
      "pronostico": [
        {
          "dia_local": "2025-06-24",
          "numero_dia": 0,
          "temperatura_maxima_c": 34.3,
          "temperatura_minima_c": 19.9,
          "descripcion_cielo": "Despejado",
          "probabilidad_precipitacion_porcentaje": 90,
          "precipitacion_litros_m2": 6.4,
          "velocidad_viento_kmh": 14.2,
          "direccion_viento_cardinal": "Sureste",
          "direccion_viento_grados": "135.0",
          "cobertura_nubes_porcentaje": "5.61",
          "latitud": 24.4732,
          "longitud": -99.4881,
          "diferencia_utc": "6"
        }
      ]
    }
  },
  "metadata": {
    "Organization": "Agencia de Innovación e Inteligencia Digital de Tamaulipas",
    "Department": "Departamento de Desarrollo de Soluciones Informáticas"
  }
}
```

# 🧬 Tipos de datos

### 📌 `ClimaActualResponse`

Ambos endpoints (`/api/v1/clima-actual` y `/api/v1/clima-pronostico`) utilizan la misma estructura de datos para representar la información climática de un día determinado. La diferencia radica en la cantidad de registros: el primero devuelve un solo objeto (`data`), mientras que el segundo entrega un arreglo de objetos bajo `data[]`, representando varios días consecutivos.

<div class="_tableContainer_16hzy_1" id="bkmrk-campo-tipo-fuente-%28c"><div class="_tableWrapper_16hzy_14 group flex w-fit flex-col-reverse" tabindex="-1"><table class="w-fit min-w-(--thread-content-width)" data-end="3246" data-start="536" style="width: 106.071%;"><thead data-end="671" data-start="536"><tr data-end="671" data-start="536"><th data-col-size="sm" data-end="577" data-start="536" style="width: 34.6805%;">**Campo**</th><th data-col-size="sm" data-end="588" data-start="577" style="width: 10.6116%;">**Tipo**</th><th data-col-size="sm" data-end="607" data-start="588" style="width: 10.8462%;">**Fuente (CONAGUA)**</th><th data-col-size="md" data-end="671" data-start="607" style="width: 43.9809%;">**Descripción**</th></tr></thead><tbody data-end="3246" data-start="808"><tr data-end="943" data-start="808"><td data-col-size="sm" data-end="849" data-start="808" style="width: 34.6805%;">`id_estado`</td><td data-col-size="sm" data-end="860" data-start="849" style="width: 10.6116%;">`int`</td><td data-col-size="sm" data-end="879" data-start="860" style="width: 10.8462%;">`ides`</td><td data-col-size="md" data-end="943" data-start="879" style="width: 43.9809%;">ID del estado.</td></tr><tr data-end="1079" data-start="944"><td data-col-size="sm" data-end="985" data-start="944" style="width: 34.6805%;">`id_municipio`</td><td data-col-size="sm" data-end="996" data-start="985" style="width: 10.6116%;">`int`</td><td data-col-size="sm" data-end="1015" data-start="996" style="width: 10.8462%;">`idmun`</td><td data-col-size="md" data-end="1079" data-start="1015" style="width: 43.9809%;">ID del municipio.</td></tr><tr data-end="1215" data-start="1080"><td data-col-size="sm" data-end="1121" data-start="1080" style="width: 34.6805%;">`nombre_estado`</td><td data-col-size="sm" data-end="1132" data-start="1121" style="width: 10.6116%;">`string`</td><td data-col-size="sm" data-end="1151" data-start="1132" style="width: 10.8462%;">`nes`</td><td data-col-size="md" data-end="1215" data-start="1151" style="width: 43.9809%;">Nombre del estado.</td></tr><tr data-end="1351" data-start="1216"><td data-col-size="sm" data-end="1257" data-start="1216" style="width: 34.6805%;">`nombre_municipio`</td><td data-col-size="sm" data-end="1268" data-start="1257" style="width: 10.6116%;">`string`</td><td data-col-size="sm" data-end="1287" data-start="1268" style="width: 10.8462%;">`nmun`</td><td data-col-size="md" data-end="1351" data-start="1287" style="width: 43.9809%;">Nombre del municipio.</td></tr><tr data-end="1487" data-start="1352"><td data-col-size="sm" data-end="1393" data-start="1352" style="width: 34.6805%;">`dia_local`</td><td data-col-size="sm" data-end="1404" data-start="1393" style="width: 10.6116%;">`string`</td><td data-col-size="sm" data-end="1423" data-start="1404" style="width: 10.8462%;">`dloc`</td><td data-col-size="md" data-end="1487" data-start="1423" style="width: 43.9809%;">Fecha y hora local en formato `YYYY-MM-DD HH:MM:SS`.</td></tr><tr data-end="1623" data-start="1488"><td data-col-size="sm" data-end="1529" data-start="1488" style="width: 34.6805%;">`numero_dia`</td><td data-col-size="sm" data-end="1540" data-start="1529" style="width: 10.6116%;">`int`</td><td data-col-size="sm" data-end="1559" data-start="1540" style="width: 10.8462%;">`ndia`</td><td data-col-size="md" data-end="1623" data-start="1559" style="width: 43.9809%;">Número del día dentro del conjunto pronosticado (0 = hoy).</td></tr><tr data-end="1758" data-start="1624"><td data-col-size="sm" data-end="1664" data-start="1624" style="width: 34.6805%;">`temperatura_maxima_c`</td><td data-col-size="sm" data-end="1675" data-start="1664" style="width: 10.6116%;">`string`</td><td data-col-size="sm" data-end="1694" data-start="1675" style="width: 10.8462%;">`tmax`</td><td data-col-size="md" data-end="1758" data-start="1694" style="width: 43.9809%;">Temperatura máxima esperada en °C.</td></tr><tr data-end="1893" data-start="1759"><td data-col-size="sm" data-end="1799" data-start="1759" style="width: 34.6805%;">`temperatura_minima_c`</td><td data-col-size="sm" data-end="1810" data-start="1799" style="width: 10.6116%;">`string`</td><td data-col-size="sm" data-end="1829" data-start="1810" style="width: 10.8462%;">`tmin`</td><td data-col-size="md" data-end="1893" data-start="1829" style="width: 43.9809%;">Temperatura mínima esperada en °C.</td></tr><tr data-end="2028" data-start="1894"><td data-col-size="sm" data-end="1934" data-start="1894" style="width: 34.6805%;">`descripcion_cielo`</td><td data-col-size="sm" data-end="1945" data-start="1934" style="width: 10.6116%;">`string`</td><td data-col-size="sm" data-end="1964" data-start="1945" style="width: 10.8462%;">`desciel`</td><td data-col-size="md" data-end="2028" data-start="1964" style="width: 43.9809%;">Descripción del cielo (Ej. "Poco nuboso").</td></tr><tr data-end="2163" data-start="2029"><td data-col-size="sm" data-end="2071" data-start="2029" style="width: 34.6805%;">`probabilidad_precipitacion_porcentaje`</td><td data-col-size="sm" data-end="2080" data-start="2071" style="width: 10.6116%;">`int`</td><td data-col-size="sm" data-end="2099" data-start="2080" style="width: 10.8462%;">`probprec`</td><td data-col-size="md" data-end="2163" data-start="2099" style="width: 43.9809%;">Porcentaje de probabilidad de precipitación.</td></tr><tr data-end="2298" data-start="2164"><td data-col-size="sm" data-end="2204" data-start="2164" style="width: 34.6805%;">`precipitacion_litros_m2`</td><td data-col-size="sm" data-end="2215" data-start="2204" style="width: 10.6116%;">`string`</td><td data-col-size="sm" data-end="2234" data-start="2215" style="width: 10.8462%;">`prec`</td><td data-col-size="md" data-end="2298" data-start="2234" style="width: 43.9809%;">Precipitación estimada en litros por metro cuadrado.</td></tr><tr data-end="2433" data-start="2299"><td data-col-size="sm" data-end="2339" data-start="2299" style="width: 34.6805%;">`velocidad_viento_kmh`</td><td data-col-size="sm" data-end="2350" data-start="2339" style="width: 10.6116%;">`string`</td><td data-col-size="sm" data-end="2369" data-start="2350" style="width: 10.8462%;">`velvien`</td><td data-col-size="md" data-end="2433" data-start="2369" style="width: 43.9809%;">Velocidad del viento en km/h.</td></tr><tr data-end="2568" data-start="2434"><td data-col-size="sm" data-end="2474" data-start="2434" style="width: 34.6805%;">`direccion_viento_cardinal`</td><td data-col-size="sm" data-end="2485" data-start="2474" style="width: 10.6116%;">`string`</td><td data-col-size="sm" data-end="2504" data-start="2485" style="width: 10.8462%;">`dirvienc`</td><td data-col-size="md" data-end="2568" data-start="2504" style="width: 43.9809%;">Dirección cardinal del viento (Ej. "N", "SE", "Oeste").</td></tr><tr data-end="2703" data-start="2569"><td data-col-size="sm" data-end="2609" data-start="2569" style="width: 34.6805%;">`direccion_viento_grados`</td><td data-col-size="sm" data-end="2620" data-start="2609" style="width: 10.6116%;">`string`</td><td data-col-size="sm" data-end="2639" data-start="2620" style="width: 10.8462%;">`dirvieng`</td><td data-col-size="md" data-end="2703" data-start="2639" style="width: 43.9809%;">Dirección del viento en grados (0–360).</td></tr><tr data-end="2838" data-start="2704"><td data-col-size="sm" data-end="2744" data-start="2704" style="width: 34.6805%;">`cobertura_nubes_porcentaje`</td><td data-col-size="sm" data-end="2755" data-start="2744" style="width: 10.6116%;">`string`</td><td data-col-size="sm" data-end="2774" data-start="2755" style="width: 10.8462%;">`cc`</td><td data-col-size="md" data-end="2838" data-start="2774" style="width: 43.9809%;">Porcentaje estimado de cobertura nubosa.</td></tr><tr data-end="2974" data-start="2839"><td data-col-size="sm" data-end="2880" data-start="2839" style="width: 34.6805%;">`latitud`</td><td data-col-size="sm" data-end="2891" data-start="2880" style="width: 10.6116%;">`string`</td><td data-col-size="sm" data-end="2910" data-start="2891" style="width: 10.8462%;">`lat`</td><td data-col-size="md" data-end="2974" data-start="2910" style="width: 43.9809%;">Latitud de la ubicación consultada.</td></tr><tr data-end="3110" data-start="2975"><td data-col-size="sm" data-end="3016" data-start="2975" style="width: 34.6805%;">`longitud`</td><td data-col-size="sm" data-end="3027" data-start="3016" style="width: 10.6116%;">`string`</td><td data-col-size="sm" data-end="3046" data-start="3027" style="width: 10.8462%;">`lon`</td><td data-col-size="md" data-end="3110" data-start="3046" style="width: 43.9809%;">Longitud de la ubicación consultada.</td></tr><tr data-end="3246" data-start="3111"><td data-col-size="sm" data-end="3152" data-start="3111" style="width: 34.6805%;">`diferencia_utc`</td><td data-col-size="sm" data-end="3163" data-start="3152" style="width: 10.6116%;">`int`</td><td data-col-size="sm" data-end="3182" data-start="3163" style="width: 10.8462%;">`dh`</td><td data-col-size="md" data-end="3246" data-start="3182" style="width: 43.9809%;">Diferencia horaria respecto a UTC (Ej. `6` para UTC-6).</td></tr></tbody></table>

</div></div>

# 🔗 Referencias y Fuentes de Datos

La información climática proviene directamente de la API oficial de CONAGUA. Para consultar la documentación oficial y obtener mayor información técnica sobre los datos y servicios disponibles, visite:

[Servicio Web CONAGUA - SMN](https://smn.conagua.gob.mx/es/web-service-api)