datadis_python.models.contract module

Modelos de datos para contratos.

Este módulo define los modelos de datos para contratos y información relacionada.

class datadis_python.models.contract.DateOwner(*, startDate, endDate)[fuente]

Bases: BaseModel

Modelo Pydantic para períodos de propiedad de un punto de suministro.

Representa un período temporal durante el cual el usuario autenticado ha sido propietario o titular de un punto de suministro (CUPS). Esta información es especialmente relevante para consultas históricas y para entender los períodos de responsabilidad sobre un contrato eléctrico.

Casos de uso comunes:
  • Cambios de propiedad: Transferencias de titularidad entre personas

  • Alquileres: Períodos como inquilino vs. propietario

  • Herencias: Cambios de titularidad por herencia

  • Compraventa: Traspaso en ventas de inmuebles

Ejemplo

Período de propiedad típico:

from datadis_python.models.contract import DateOwner

# Período como propietario
ownership = DateOwner(
    startDate="2020/01/15",
    endDate="2024/06/30"
)

print(f"Propietario desde: {ownership.start_date}")
print(f"Hasta: {ownership.end_date}")

Múltiples períodos (en contexto de ContractData):

# Usuario fue propietario en dos períodos diferentes
periods = [
    DateOwner(startDate="2018/03/01", endDate="2019/12/31"),
    DateOwner(startDate="2022/06/01", endDate="2024/08/15")
]

for i, period in enumerate(periods, 1):
    print(f"Período {i}: {period.start_date} - {period.end_date}")
Parámetros:
  • start_date (str) – Fecha de inicio del período de propiedad en formato YYYY/MM/DD. Fecha desde la cual el usuario es considerado propietario o titular del punto de suministro eléctrico

  • end_date (str) – Fecha de finalización del período de propiedad en formato YYYY/MM/DD. Fecha hasta la cual el usuario mantuvo la titularidad del suministro

  • startDate (str)

  • endDate (str)

Muestra:

ValidationError – Si las fechas no tienen formato válido o faltan campos obligatorios

Nota

Las fechas deben seguir el formato estándar de Datadis: YYYY/MM/DD (año/mes/día)

Ver también

  • ContractData - Modelo que incluye lista de períodos de propiedad

  • SimpleDatadisClientV2.get_contract_detail() - Obtener información contractual completa

start_date: str
end_date: str
model_config: ClassVar[ConfigDict] = {'populate_by_name': True, 'validate_by_alias': True, 'validate_by_name': True}

Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].

class datadis_python.models.contract.ContractData(*, cups, distributor, marketer=None, tension, accessFare, province, municipality, postalCode, contractedPowerkW, timeDiscrimination=None, modePowerControl, startDate, endDate=None, codeFare, selfConsumptionTypeCode=None, selfConsumptionTypeDesc=None, section=None, subsection=None, partitionCoefficient=None, cau=None, installedCapacityKW=None, dateOwner=None, lastMarketerDate=None, maxPowerInstall=None)[fuente]

Bases: BaseModel

Modelo Pydantic completo para datos contractuales de suministros eléctricos.

Representa la información contractual completa de un punto de suministro (CUPS), incluyendo datos técnicos, comerciales, tarifarios y de autoconsumo. Este modelo contiene toda la información relevante sobre el contrato eléctrico asociado a una instalación, desde datos básicos hasta configuraciones avanzadas de autoconsumo.

Información contractual incluida:
  • Datos básicos: CUPS, distribuidor, comercializadora, ubicación

  • Información técnica: Tensión, potencias contratadas, control de potencia

  • Datos tarifarios: Tarifa de acceso, discriminación horaria, códigos CNMC

  • Autoconsumo: Tipo, configuración, coeficientes, CAU

  • Histórico: Períodos de propiedad, cambios de comercializadora

Tipos de instalaciones soportadas:
  • Consumo tradicional: Sin generación propia

  • Autoconsumo individual: Instalación fotovoltaica privada

  • Autoconsumo colectivo: Instalaciones compartidas entre varios usuarios

  • Autoconsumo con excedentes: Venta de energía sobrante a la red

  • Autoconsumo sin excedentes: Generación solo para consumo propio

Códigos de tarifa de acceso (CNMC):
  • 2.0TD: Baja tensión ≤ 15 kW (doméstico típico)

  • 3.0TD: Baja tensión > 15 kW ≤ 100 kW (comercios, pequeña industria)

  • 6.1TD: Alta tensión 1-36 kV (gran industria)

  • 6.2TD: Alta tensión 36-72.5 kV

  • 6.3TD: Alta tensión 72.5-145 kV

  • 6.4TD: Alta tensión ≥ 145 kV

Ejemplo

Contrato doméstico básico sin autoconsumo:

from datadis_python.models.contract import ContractData

# Vivienda típica con tarifa 2.0TD
contract_home = ContractData(
    cups="ES001234567890123456AB",
    distributor="E-distribución",
    marketer="Iberdrola",
    tension="BT",
    accessFare="2.0TD (Peaje de acceso 2.0TD)",
    province="Madrid",
    municipality="Madrid",
    postalCode="28001",
    contractedPowerkW=[5.75],  # 5.75 kW contratados
    timeDiscrimination="DHA",   # Discriminación horaria
    modePowerControl="ICP",     # Interruptor Control Potencia
    startDate="2023/01/15",
    codeFare="2.0TD"
)

print(f"Potencia contratada: {contract_home.contracted_power_kw[0]} kW")
print(f"Tarifa: {contract_home.code_fare}")

Instalación con autoconsumo fotovoltaico:

from datadis_python.models.contract import ContractData, DateOwner

# Casa con paneles solares y autoconsumo
contract_solar = ContractData(
    cups="ES001234567890123456AB",
    distributor="UFD",
    marketer="Naturgy",
    tension="BT",
    accessFare="2.0TD con autoconsumo",
    province="Valencia",
    municipality="Valencia",
    postalCode="46001",
    contractedPowerkW=[4.60],
    modePowerControl="ICP",
    startDate="2022/03/01",
    codeFare="2.0TD",
    # Configuración de autoconsumo
    selfConsumptionTypeCode="41",
    selfConsumptionTypeDesc="Autoconsumo con excedentes acogido a compensación",
    installedCapacityKW=5.0,  # 5 kW de paneles solares
    cau="ES00123456789",      # Código de Autoconsumo Único
    dateOwner=[
        DateOwner(startDate="2022/03/01", endDate="2024/12/31")
    ]
)

print(f"Tipo autoconsumo: {contract_solar.self_consumption_type_desc}")
print(f"Potencia instalada: {contract_solar.installed_capacity_kw} kW")

Autoconsumo colectivo con coeficiente de reparto:

# Instalación compartida en comunidad de vecinos
contract_collective = ContractData(
    cups="ES001234567890123456AB",
    distributor="E-distribución",
    tension="BT",
    accessFare="2.0TD autoconsumo colectivo",
    province="Barcelona",
    municipality="Barcelona",
    postalCode="08001",
    contractedPowerkW=[3.45],
    codeFare="2.0TD",
    selfConsumptionTypeCode="43",
    selfConsumptionTypeDesc="Autoconsumo colectivo con excedentes",
    partitionCoefficient=0.15,  # 15% del total generado
    cau="ES00987654321",
    installedCapacityKW=20.0,    # Instalación total compartida
    startDate="2023/06/01"
)

print(f"Coeficiente de reparto: {contract_collective.partition_coefficient}")
Parámetros:
  • cups (str) – Código CUPS del punto de suministro. Identificador único nacional de 20-22 caracteres que identifica inequívocamente el punto de conexión

  • distributor (str) – Nombre de la empresa distribuidora responsable de la red en la zona geográfica del suministro

  • marketer (Optional[str]) – Empresa comercializadora que factura la energía. Solo visible si el usuario autenticado es propietario del CUPS

  • tension (str) – Nivel de tensión del suministro. Valores típicos: «BT» (Baja Tensión), «AT» (Alta Tensión), «MT» (Media Tensión)

  • access_fare (str) – Descripción completa de la tarifa de acceso aplicable. Incluye el código y descripción extendida

  • province (str) – Provincia donde se ubica físicamente el punto de suministro

  • municipality (str) – Municipio de ubicación del suministro eléctrico

  • postal_code (str) – Código postal de la dirección del punto de suministro

  • contracted_power_kw (List[float]) – Lista de potencias contratadas en kW por período tarifario. Para tarifas simples: un valor. Para discriminación horaria: múltiples valores

  • time_discrimination (Optional[str]) – Tipo de discriminación horaria aplicada. Valores típicos: «DHA» (Discriminación Horaria), «DHS» (Supervalle), None (tarifa simple)

  • mode_power_control (str) – Sistema de control de la potencia contratada. «ICP» (Interruptor Control Potencia) o «Maxímetro»

  • start_date (str) – Fecha de inicio de vigencia del contrato en formato YYYY/MM/DD

  • end_date (Optional[str]) – Fecha de finalización del contrato. None para contratos activos

  • code_fare (str) – Código oficial de la tarifa de acceso según clasificación CNMC. Define la estructura tarifaria aplicable

  • self_consumption_type_code (Optional[str]) – Código numérico del tipo de autoconsumo según RD 244/2019. Códigos 4X para diferentes modalidades de autoconsumo

  • self_consumption_type_desc (Optional[str]) – Descripción detallada del tipo de autoconsumo configurado. Especifica modalidad, excedentes y acogimiento a compensación

  • section (Optional[str]) – Clasificación de sección para autoconsumo según normativa vigente

  • subsection (Optional[str]) – Subclasificación específica dentro de la sección de autoconsumo

  • partition_coefficient (Optional[float]) – Coeficiente de reparto para autoconsumo colectivo. Porcentaje de la energía generada asignado a este CUPS (0.0-1.0)

  • cau (Optional[str]) – Código de Autoconsumo Único. Identificador oficial de la instalación de autoconsumo asignado por la administración competente

  • installed_capacity_kw (Optional[float]) – Potencia pico instalada de generación renovable en kW. Suma de toda la capacidad de generación asociada al autoconsumo

  • date_owner (Optional[List[DateOwner]]) – Lista de períodos durante los cuales el usuario autenticado ha sido propietario del punto de suministro

  • last_marketer_date (Optional[str]) – Fecha del último cambio de empresa comercializadora en formato YYYY/MM/DD

  • max_power_install (Optional[str]) – Potencia máxima de la instalación eléctrica en formato texto. Puede incluir información adicional sobre limitaciones técnicas

  • accessFare (str)

  • postalCode (str)

  • contractedPowerkW (List[float])

  • timeDiscrimination (str | None)

  • modePowerControl (str)

  • startDate (str)

  • endDate (str | None)

  • codeFare (str)

  • selfConsumptionTypeCode (str | None)

  • selfConsumptionTypeDesc (str | None)

  • partitionCoefficient (float | None)

  • installedCapacityKW (float | None)

  • dateOwner (List[DateOwner] | None)

  • lastMarketerDate (str | None)

  • maxPowerInstall (str | None)

Muestra:

ValidationError – Si algún campo obligatorio está ausente o tiene formato incorrecto

Nota

Para autoconsumo colectivo, el partition_coefficient debe sumar 1.0 entre todos los participantes de la instalación compartida.

Ver también

  • DateOwner - Modelo para períodos de propiedad

  • ContractResponse - Respuesta estructurada de la API V2

  • SimpleDatadisClientV2.get_contract_detail() - Obtener datos contractuales

  • RD 244/2019 para códigos de autoconsumo oficiales

Added in version 2.0: Soporte completo para autoconsumo y datos contractuales extendidos

cups: str
distributor: str
marketer: str | None
tension: str
access_fare: str
province: str
municipality: str
postal_code: str
contracted_power_kw: List[float]
time_discrimination: str | None
mode_power_control: str
start_date: str
end_date: str | None
code_fare: str
self_consumption_type_code: str | None
self_consumption_type_desc: str | None
section: str | None
subsection: str | None
partition_coefficient: float | None
cau: str | None
installed_capacity_kw: float | None
date_owner: List[DateOwner] | None
last_marketer_date: str | None
max_power_install: str | None
model_config: ClassVar[ConfigDict] = {'populate_by_name': True, 'validate_by_alias': True, 'validate_by_name': True}

Configuration for the model, should be a dictionary conforming to [ConfigDict][pydantic.config.ConfigDict].

class datadis_python.models.contract.DistributorError(distributor_code, distributor_name, error_code, error_description)[fuente]

Bases: object

Error de distribuidor según API de Datadis.

Parámetros:
  • distributor_code (str) – Código del distribuidor

  • distributor_name (str) – Nombre del distribuidor

  • error_code (str) – Código de error

  • error_description (str) – Descripción del error

distributor_code: str
distributor_name: str
error_code: str
error_description: str
__init__(distributor_code, distributor_name, error_code, error_description)
Parámetros:
  • distributor_code (str)

  • distributor_name (str)

  • error_code (str)

  • error_description (str)

Tipo del valor devuelto:

None

class datadis_python.models.contract.ContractResponse(contracts, distributor_errors)[fuente]

Bases: object

Respuesta completa del endpoint get_contract_detail V2 - Raw data.

Parámetros:
  • contracts (List[Dict[str, Any]]) – Raw dicts from API

  • distributor_errors (List[Dict[str, Any]]) – Raw error dicts

contracts: List[Dict[str, Any]]
distributor_errors: List[Dict[str, Any]]
__init__(contracts, distributor_errors)
Parámetros:
Tipo del valor devuelto:

None

class datadis_python.models.contract.ConsumptionResponse(consumption_data, distributor_errors)[fuente]

Bases: object

Respuesta completa del endpoint get_consumption V2 - Raw data.

Parámetros:
  • consumption_data (List[Dict[str, Any]]) – Raw dicts from API

  • distributor_errors (List[Dict[str, Any]]) – Raw error dicts

consumption_data: List[Dict[str, Any]]
distributor_errors: List[Dict[str, Any]]
__init__(consumption_data, distributor_errors)
Parámetros:
Tipo del valor devuelto:

None

class datadis_python.models.contract.SuppliesResponse(supplies, distributor_errors)[fuente]

Bases: object

Respuesta completa del endpoint get_supplies V2 - Raw data.

Parámetros:
  • supplies (List[Dict[str, Any]]) – Raw supply dicts from API

  • distributor_errors (List[Dict[str, Any]]) – Raw error dicts

supplies: List[Dict[str, Any]]
distributor_errors: List[Dict[str, Any]]
__init__(supplies, distributor_errors)
Parámetros:
Tipo del valor devuelto:

None

class datadis_python.models.contract.MaxPowerResponse(max_power_data, distributor_errors)[fuente]

Bases: object

Respuesta completa del endpoint get_max_power V2 - Raw data.

Parámetros:
  • max_power_data (List[Dict[str, Any]]) – Raw max power dicts from API

  • distributor_errors (List[Dict[str, Any]]) – Raw error dicts

max_power_data: List[Dict[str, Any]]
distributor_errors: List[Dict[str, Any]]
__init__(max_power_data, distributor_errors)
Parámetros:
Tipo del valor devuelto:

None

class datadis_python.models.contract.DistributorsResponse(distributor_codes, distributor_errors)[fuente]

Bases: object

Respuesta completa del endpoint get_distributors V2 - Raw data.

Parámetros:
  • distributor_codes (List[str]) – List of distributor codes

  • distributor_errors (List[Dict[str, Any]]) – Raw error dicts

distributor_codes: List[str]
distributor_errors: List[Dict[str, Any]]
__init__(distributor_codes, distributor_errors)
Parámetros:
Tipo del valor devuelto:

None