Código fuente para datadis_python.models.distributor

"""
Modelos de datos para distribuidoras.

Este módulo define los modelos de datos para información de distribuidoras.
"""

from typing import List

from pydantic import BaseModel, ConfigDict, Field


[documentos] class DistributorData(BaseModel): """ Modelo Pydantic para datos de distribuidoras eléctricas españolas. Representa la información de las empresas distribuidoras de energía eléctrica donde el usuario tiene puntos de suministro activos. Las distribuidoras son las empresas responsables del mantenimiento y operación de las redes eléctricas en España, y cada zona geográfica está asignada a una distribuidora específica. Sistema eléctrico español: Las distribuidoras están reguladas por la CNMC (Comisión Nacional de los Mercados y la Competencia) y tienen asignadas zonas geográficas exclusivas donde son responsables de la red de distribución eléctrica. Distribuidoras principales en España: - **Código "1"**: **Viesgo** - Cantabria, Asturias - **Código "2"**: **E-distribución (Endesa)** - Nacional (mayor cobertura) - **Código "3"**: **E-redes** - Galicia - **Código "4"**: **ASEME** - Melilla - **Código "5"**: **UFD (Naturgy)** - Nacional, especialmente Cataluña, Madrid - **Código "6"**: **EOSA** - Aragón - **Código "7"**: **CIDE** - Ceuta - **Código "8"**: **IDE (Redeia)** - Islas Baleares Diferencia con comercializadoras: - **Distribuidoras**: Mantienen y operan la red física (cables, transformadores) - **Comercializadoras**: Venden la energía y emiten facturas al usuario final Example: Uso básico del modelo:: from datadis_python.models.distributor import DistributorData # Datos típicos de respuesta V1 distributor_data = DistributorData( distributorCodes=["2", "5"] # E-distribución y UFD ) print("Distribuidoras donde tienes suministros:") for code in distributor_data.distributor_codes: distributor_name = { "1": "Viesgo", "2": "E-distribución (Endesa)", "3": "E-redes", "4": "ASEME", "5": "UFD (Naturgy)", "6": "EOSA", "7": "CIDE", "8": "IDE (Redeia)" }.get(code, f"Distribuidor {code}") print(f"- Código {code}: {distributor_name}") Uso con clientes V1:: from datadis_python.client.v1 import SimpleDatadisClientV1 with SimpleDatadisClientV1("12345678A", "password") as client: # Obtener distribuidoras donde el usuario tiene suministros distributors = client.get_distributors() print(f"Distribuidoras encontradas: {len(distributors)}") for dist in distributors: print(f"Códigos: {dist.distributor_codes}") # Usar el primer código para consultas posteriores if distributors and distributors[0].distributor_codes: first_code = distributors[0].distributor_codes[0] supplies = client.get_supplies(distributor_code=first_code) Filtrado por zona geográfica:: # Ejemplo: usuario con suministros en múltiples zonas multi_zone_data = DistributorData( distributorCodes=["2", "5", "8"] # Endesa, Naturgy, Baleares ) # Identificar regiones regions = { "2": "Península (Endesa)", "5": "Cataluña/Madrid (Naturgy)", "8": "Islas Baleares (IDE)" } for code in multi_zone_data.distributor_codes: print(f"Suministros en: {regions.get(code, 'Región desconocida')}") :param distributor_codes: Lista de códigos de distribuidoras donde el usuario tiene puntos de suministro activos. Cada código identifica una empresa distribuidora específica del sistema eléctrico español :type distributor_codes: List[str] :raises ValidationError: Si la lista está vacía o contiene valores no válidos .. note:: Este modelo representa la respuesta simplificada de la API V1. La API V2 utiliza modelos más complejos con información extendida de cada distribuidor. .. seealso:: - :class:`DistributorsResponse` - Respuesta estructurada de la API V2 - :meth:`SimpleDatadisClientV1.get_distributors` - Obtener distribuidoras V1 - :meth:`SimpleDatadisClientV2.get_distributors` - Obtener distribuidoras V2 - Los códigos obtenidos se usan en métodos de consulta específicos .. versionadded:: 1.0 Soporte para códigos de distribuidor en API V1 """ distributor_codes: List[str] = Field( alias="distributorCodes", description="Lista de códigos de distribuidoras" ) model_config = ConfigDict(populate_by_name=True)