""" Options: Date: 2026-10-20 18:21:53 Version: 8.22 Tip: To override a DTO option, remove "#" prefix before updating BaseUrl: https://isp-plauen-servdesk.eras-online.de #GlobalNamespace: #AddServiceStackTypes: True #AddResponseStatus: False #AddImplicitVersion: #AddDescriptionAsComments: True IncludeTypes: GetCustomer.* #ExcludeTypes: #DefaultImports: datetime,decimal,marshmallow.fields:*,servicestack:*,typing:*,dataclasses:dataclass/field,dataclasses_json:dataclass_json/LetterCase/Undefined/config,enum:Enum/IntEnum #DataClass: #DataClassJson: """ import datetime import decimal from marshmallow.fields import * from servicestack import * from typing import * from dataclasses import dataclass, field from dataclasses_json import dataclass_json, LetterCase, Undefined, config from enum import Enum, IntEnum @dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE) @dataclass class BillingInformation: guid: Optional[str] = None from_: datetime.datetime = field(metadata=config(field_name='from'), default=datetime.datetime(1, 1, 1)) to: datetime.datetime = datetime.datetime(1, 1, 1) is_completed: bool = False has_nebenkosten: bool = False @dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE) @dataclass class Brennstofflieferung: guid: Optional[str] = None delivery_date: datetime.datetime = datetime.datetime(1, 1, 1) salex_tax: Optional[Decimal] = None emisions_tax: Optional[Decimal] = None c02_taxes: Optional[Decimal] = None customs_tax: Optional[Decimal] = None other_charges: Optional[Decimal] = None c02_price: Optional[Decimal] = None c02_tons: Optional[Decimal] = None quantity: Optional[Decimal] = None amount: Optional[Decimal] = None start_meter_reading_value: Optional[Decimal] = None end_meter_reading_value: Optional[Decimal] = None heizwert: Decimal = decimal.Decimal(0) brennwert: bool = False energy_relief_amount_description: Optional[str] = None energy_relief_amount: Optional[Decimal] = None electricity_relief_amount_description: Optional[str] = None electricity_relief_amount: Optional[Decimal] = None c_o2_emissions_factor: Optional[Decimal] = None c_o2_text: Optional[str] = None c_o2_active: Optional[bool] = None c_o2_price_knd: Optional[bool] = None c_o2_price_landlord: Optional[Decimal] = None c_o2_price_renter: Optional[Decimal] = None c_o2_area: Optional[Decimal] = None is_for_commercial_use: Optional[bool] = None is_renovation_required: Optional[bool] = None is_heating_pads_improved: Optional[bool] = None c_o2_k_wh: Optional[Decimal] = None included_c_o2_sales_tax: Optional[Decimal] = None c_o2_costs: Optional[Decimal] = None total_c02_weight: Optional[Decimal] = None no_total_deduction_c02_costs: Optional[bool] = None is_deleted: bool = False is_created_by_app: bool = False brennstoff_medium_guid: Optional[str] = None billing_information: Optional[BillingInformation] = None @dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE) @dataclass class DeviceConsumption: guid: Optional[str] = None device_reading: Optional[float] = None device_reading_date: Optional[datetime.datetime] = None device_reading_kind: Optional[DeviceReadingKind] = None change_date: Optional[datetime.datetime] = None note: Optional[str] = None ampoule_colour: Optional[str] = None device_guid: Optional[str] = None @dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE) @dataclass class Direktkosten: guid: Optional[str] = None label: Optional[str] = None date: datetime.datetime = datetime.datetime(1, 1, 1) brutto: Decimal = decimal.Decimal(0) sales_tax: Decimal = decimal.Decimal(0) quantity: Decimal = decimal.Decimal(0) type: Optional[str] = None is_deleted: bool = False is_created_by_app: bool = False nutzer_guid: Optional[str] = None billing_information: Optional[BillingInformation] = None @dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE) @dataclass class Heizbetriebskosten: guid: Optional[str] = None from_: datetime.datetime = field(metadata=config(field_name='from'), default=datetime.datetime(1, 1, 1)) to: datetime.datetime = datetime.datetime(1, 1, 1) sales_tax: Decimal = decimal.Decimal(0) haushatlsnahedienste_brutto: Optional[Decimal] = None brutto: Optional[Decimal] = None haushatlsnahedienste_label: Optional[str] = None description: Optional[str] = None is_deleted: bool = False is_created_by_app: bool = False @dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE) @dataclass class Nebenkosten: guid: Optional[str] = None number: int = 0 from_: datetime.datetime = field(metadata=config(field_name='from'), default=datetime.datetime(1, 1, 1)) to: datetime.datetime = datetime.datetime(1, 1, 1) target_allocation: Optional[NebenkostenTargetAllocation] = None target_allocation_in: Optional[NebenkostenTargetAllocationIn] = None nebenkosten_kind: Optional[str] = None # @ApiMember(Description="Freitext") kostenart: Optional[str] = None """ Freitext """ brutto: Optional[Decimal] = None brutto_last_year: Optional[Decimal] = None sales_tax: Optional[Decimal] = None haushaltsnahedienste_label: Optional[str] = None haushaltsnahedienste_brutto: Optional[Decimal] = None # @ApiMember(Description="Freitext") kostenart_unit: Optional[str] = None """ Freitext """ reduzierungsart_type: Optional[str] = None comment: Optional[str] = None is_deleted: bool = False is_created_by_app: bool = False nebenkosten_nutzeinheiten: Optional[List[NebenkostenNutzeinheit]] = None nebenkosten_nutzer: Optional[List[NebenkostenNutzer]] = None billing_information: Optional[BillingInformation] = None @dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE) @dataclass class Nutzer: guid: Optional[str] = None name1: Optional[str] = None name2: Optional[str] = None name3: Optional[str] = None name4: Optional[str] = None # @ApiMember(IsRequired=true) nutzer_type: Optional[NutzerType] = None nutzeinheit_number_external: Optional[str] = None # @ApiMember(IsRequired=true) nutzer_in_nutzeinheit_sequence: int = 0 # @ApiMember(IsRequired=true) range_from: datetime.datetime = datetime.datetime(1, 1, 1) range_to: Optional[datetime.datetime] = None is_deleted: bool = False is_created_by_app: bool = False is_uvi_recieved: Optional[str] = None is_nutzer_owner: Optional[str] = None email: Optional[str] = None mobile_phone: Optional[str] = None title: Optional[str] = None # @ApiMember(IsRequired=true, ParameterType="body") salutation: Optional[str] = None @dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE) @dataclass class Customer: guid: Optional[str] = None name1: Optional[str] = None name2: Optional[str] = None name3: Optional[str] = None number: Optional[str] = None salutation: Optional[str] = None customer_addresses: Optional[List[CustomerAddress]] = None customer_objekte: Optional[List[CustomerObjekt]] = None @dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE) @dataclass class Address: guid: Optional[str] = None street: Optional[str] = None street2: Optional[str] = None street_number: Optional[str] = None zipcode: Optional[str] = None city: Optional[str] = None mailbox: Optional[str] = None additional: Optional[str] = None @dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE) @dataclass class OwnerNutzeinheit: guid: Optional[str] = None name1: Optional[str] = None name2: Optional[str] = None name3: Optional[str] = None name4: Optional[str] = None range_from: datetime.datetime = datetime.datetime(1, 1, 1) range_to: Optional[datetime.datetime] = None title: Optional[str] = None salutation: Optional[str] = None address: Optional[Address] = None @dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE) @dataclass class Device: guid: Optional[str] = None number: Optional[str] = None label: Optional[str] = None description: Optional[str] = None installation_date: datetime.datetime = datetime.datetime(1, 1, 1) deinstallation_date: Optional[datetime.datetime] = None calibration_date: Optional[datetime.datetime] = None unit: Optional[EinheitType] = None note: Optional[str] = None device_catalog: Optional[DeviceCatalog] = None device_consumptions: Optional[List[DeviceConsumption]] = None @dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE) @dataclass class NutzeinheitDevice: guid: Optional[str] = None assigned_from_date: datetime.datetime = datetime.datetime(1, 1, 1) assigned_to_date: Optional[datetime.datetime] = None room: Optional[str] = None ongoing_number: Optional[str] = None is_rented: bool = False is_maintained: bool = False device: Optional[Device] = None @dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE) @dataclass class Nutzeinheit: guid: Optional[str] = None number: Optional[str] = None location: Optional[str] = None address: Optional[Address] = None nutzer: Optional[List[Nutzer]] = None owner_nutzeinheiten: Optional[List[OwnerNutzeinheit]] = None nutzeinheiten_devices: Optional[List[NutzeinheitDevice]] = None @dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE) @dataclass class Objekt: guid: Optional[str] = None number: Optional[str] = None is_completed: Optional[str] = None uvi: Optional[str] = None is_uvi_disabled: Optional[str] = None completed_date: Optional[datetime.datetime] = None address_guid: Optional[str] = None anmerkung_kundenportal: Optional[str] = None kundenportal_marked_done: bool = False marked_done_at: Optional[datetime.datetime] = None @dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE) @dataclass class Address: guid: Optional[str] = None street: Optional[str] = None street2: Optional[str] = None street_number: Optional[str] = None zipcode: Optional[str] = None city: Optional[str] = None mailbox: Optional[str] = None additional: Optional[str] = None @dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE) @dataclass class Nutzer: guid: Optional[str] = None name1: Optional[str] = None name2: Optional[str] = None name3: Optional[str] = None name4: Optional[str] = None nutzer_type: Optional[str] = None nutzeinheit_number_external: Optional[str] = None nutzer_in_nutzeinheit_sequence: int = 0 range_from: datetime.datetime = datetime.datetime(1, 1, 1) range_to: Optional[datetime.datetime] = None is_deleted: bool = False is_created_by_app: bool = False is_uvi_recieved: Optional[str] = None is_nutzer_owner: Optional[str] = None email: Optional[str] = None mobile_phone: Optional[str] = None title: Optional[str] = None salutation: Optional[str] = None nutzeinheit_guid: Optional[str] = None @dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE) @dataclass class NutzerCoOwnership: guid: Optional[str] = None share_value: Optional[Decimal] = None range_from: datetime.datetime = datetime.datetime(1, 1, 1) range_to: Optional[datetime.datetime] = None nutzer_guid: Optional[str] = None is_created_by_app: bool = False is_deleted: bool = False @dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE) @dataclass class NutzerPersonen: guid: Optional[str] = None number_of_people: Optional[int] = None range_from: datetime.datetime = datetime.datetime(1, 1, 1) range_to: Optional[datetime.datetime] = None nutzer_guid: Optional[str] = None is_created_by_app: bool = False is_deleted: bool = False @dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE) @dataclass class NutzerQuadratmeter: guid: Optional[str] = None square_meters__hzg: Optional[Decimal] = None square_meters__ww: Optional[Decimal] = None square_meters__nk: Optional[Decimal] = None range_from: datetime.datetime = datetime.datetime(1, 1, 1) range_to: Optional[datetime.datetime] = None nutzer_guid: Optional[str] = None is_created_by_app: bool = False is_deleted: bool = False @dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE) @dataclass class OwnerNutzeinheit: guid: Optional[str] = None name1: Optional[str] = None name2: Optional[str] = None name3: Optional[str] = None name4: Optional[str] = None range_from: datetime.datetime = datetime.datetime(1, 1, 1) range_to: Optional[datetime.datetime] = None title: Optional[str] = None salutation: Optional[str] = None address_guid: Optional[str] = None nutzeinheit_guid: Optional[str] = None @dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE) @dataclass class Nutzeinheit: guid: Optional[str] = None number: Optional[str] = None location: Optional[str] = None objekt_guid: Optional[str] = None address_guid: Optional[str] = None @dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE) @dataclass class Direktkosten: guid: Optional[str] = None label: Optional[str] = None date: datetime.datetime = datetime.datetime(1, 1, 1) brutto: Decimal = decimal.Decimal(0) sales_tax: Decimal = decimal.Decimal(0) quantity: Decimal = decimal.Decimal(0) type: Optional[str] = None is_deleted: bool = False is_created_by_app: bool = False objekt_guid: Optional[str] = None nutzer_guid: Optional[str] = None billing_information_guid: Optional[str] = None @dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE) @dataclass class Prepayment: guid: Optional[str] = None from_: datetime.datetime = field(metadata=config(field_name='from'), default=datetime.datetime(1, 1, 1)) to: datetime.datetime = datetime.datetime(1, 1, 1) amount__nk: Optional[Decimal] = None amount__h_k: Optional[Decimal] = None amount__ww: Optional[Decimal] = None is_deleted: bool = False is_created_by_app: bool = False objekt_guid: Optional[str] = None nutzer_guid: Optional[str] = None billing_information_guid: Optional[str] = None @dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE) @dataclass class EnergieVerwerter: guid: Optional[str] = None label: Optional[str] = None efficiency_factor: Optional[Decimal] = None assembly_date: datetime.datetime = datetime.datetime(1, 1, 1) disassembly_date: Optional[datetime.datetime] = None build_year: Optional[int] = None temperature: Optional[int] = None commercial_supply: bool = False brennwert: bool = False objekt_guid: Optional[str] = None brennstoff_medium_guid: Optional[str] = None @dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE) @dataclass class Brennstofflieferung: guid: Optional[str] = None delivery_date: datetime.datetime = datetime.datetime(1, 1, 1) salex_tax: Optional[Decimal] = None emisions_tax: Optional[Decimal] = None c02_taxes: Optional[Decimal] = None customs_tax: Optional[Decimal] = None other_charges: Optional[Decimal] = None c02_price: Optional[Decimal] = None c02_tons: Optional[Decimal] = None quantity: Optional[Decimal] = None amount: Optional[Decimal] = None start_meter_reading_value: Optional[Decimal] = None end_meter_reading_value: Optional[Decimal] = None heizwert: Decimal = decimal.Decimal(0) brennwert: bool = False is_deleted: bool = False is_created_by_app: bool = False energy_relief_amount_description: Optional[str] = None energy_relief_amount: Optional[Decimal] = None electricity_relief_amount_description: Optional[str] = None electricity_relief_amount: Optional[Decimal] = None c_o2_emissions_factor: Optional[Decimal] = None c_o2_text: Optional[str] = None c_o2_active: Optional[bool] = None c_o2_price_knd: Optional[bool] = None c_o2_price_landlord: Optional[Decimal] = None c_o2_price_renter: Optional[Decimal] = None c_o2_area: Optional[Decimal] = None is_for_commercial_use: Optional[bool] = None is_renovation_required: Optional[bool] = None is_heating_pads_improved: Optional[bool] = None c_o2_k_wh: Optional[Decimal] = None included_c_o2_sales_tax: Optional[Decimal] = None c_o2_costs: Optional[Decimal] = None total_c02_weight: Optional[Decimal] = None no_total_deduction_c02_costs: Optional[bool] = None energie_verwerter_guid: Optional[str] = None brennstoff_medium_guid: Optional[str] = None billing_information_guid: Optional[str] = None @dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE) @dataclass class Nebenkosten: guid: Optional[str] = None number: int = 0 from_: datetime.datetime = field(metadata=config(field_name='from'), default=datetime.datetime(1, 1, 1)) to: datetime.datetime = datetime.datetime(1, 1, 1) target_allocation: Optional[str] = None target_allocation_in: Optional[str] = None nebenkosten_kind: Optional[str] = None kostenart: Optional[str] = None brutto: Optional[Decimal] = None brutto_last_year: Optional[Decimal] = None sales_tax: Optional[Decimal] = None haushaltsnahedienste_label: Optional[str] = None haushaltsnahedienste_brutto: Optional[Decimal] = None kostenart_unit: Optional[str] = None reduzierungsart_type: Optional[str] = None comment: Optional[str] = None is_deleted: bool = False is_created_by_app: bool = False objekt_guid: Optional[str] = None billing_information_guid: Optional[str] = None nebenkosten_nutzeinheiten: Optional[List[NebenkostenNutzeinheit]] = None nebenkosten_nutzer: Optional[List[NebenkostenNutzer]] = None @dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE) @dataclass class Heizbetriebskosten: guid: Optional[str] = None from_: datetime.datetime = field(metadata=config(field_name='from'), default=datetime.datetime(1, 1, 1)) to: datetime.datetime = datetime.datetime(1, 1, 1) sales_tax: Decimal = decimal.Decimal(0) haushatlsnahedienste_brutto: Optional[Decimal] = None brutto: Optional[Decimal] = None haushatlsnahedienste_label: Optional[str] = None description: Optional[str] = None is_deleted: bool = False is_created_by_app: bool = False objekt_guid: Optional[str] = None billing_information_guid: Optional[str] = None @dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE) @dataclass class NutzeinheitDevice: guid: Optional[str] = None assigned_from_date: datetime.datetime = datetime.datetime(1, 1, 1) assigned_to_date: Optional[datetime.datetime] = None room: Optional[str] = None ongoing_number: Optional[str] = None is_rented: bool = False is_maintained: bool = False device_guid: Optional[str] = None nutzeinheit_guid: Optional[str] = None @dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE) @dataclass class Device: guid: Optional[str] = None number: Optional[str] = None label: Optional[str] = None description: Optional[str] = None installation_date: datetime.datetime = datetime.datetime(1, 1, 1) deinstallation_date: Optional[datetime.datetime] = None calibration_date: Optional[datetime.datetime] = None unit: Optional[str] = None note: Optional[str] = None device_catalog_guid: Optional[str] = None @dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE) @dataclass class DeviceConsumption: guid: Optional[str] = None device_reading: Optional[float] = None device_reading_date: Optional[datetime.datetime] = None device_reading_kind: Optional[str] = None change_date: Optional[datetime.datetime] = None note: Optional[str] = None ampoule_colour: Optional[str] = None device_guid: Optional[str] = None @dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE) @dataclass class BillingInformation: guid: Optional[str] = None from_: datetime.datetime = field(metadata=config(field_name='from'), default=datetime.datetime(1, 1, 1)) to: datetime.datetime = datetime.datetime(1, 1, 1) is_completed: bool = False has_nebenkosten: bool = False objekt_guid: Optional[str] = None anmerkung_kundenportal: Optional[str] = None kundenportal_marked_done: bool = False marked_done_at: Optional[datetime.datetime] = None kundenportal_marked_closed: bool = False marked_closed_at: Optional[datetime.datetime] = None @dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE) @dataclass class EnergieVerwerter: guid: Optional[str] = None label: Optional[str] = None efficiency_factor: Optional[Decimal] = None assembly_date: datetime.datetime = datetime.datetime(1, 1, 1) disassembly_date: Optional[datetime.datetime] = None build_year: Optional[int] = None temperature: Optional[int] = None commercial_supply: bool = False brennwert: bool = False brennstoff_medium_guid: Optional[str] = None @dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE) @dataclass class Customer: guid: Optional[str] = None name1: Optional[str] = None name2: Optional[str] = None name3: Optional[str] = None number: Optional[str] = None salutation: Optional[str] = None customer_addresses: Optional[List[CustomerAddress]] = None customer_objekte: Optional[List[CustomerObjekt]] = None @dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE) @dataclass class Objekt: guid: Optional[str] = None number: Optional[str] = None is_completed: Optional[str] = None completed_date: Optional[datetime.datetime] = None address: Optional[Address] = None nutzeinheiten: Optional[List[Nutzeinheit]] = None billing_informations: Optional[List[BillingInformation]] = None @dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE) @dataclass class GetCustomerResponse: customer: Optional[Customer] = None response_status: Optional[ResponseStatus] = None @dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE) @dataclass class GetCustomerResponse: kunde: Optional[Customer] = None objekte: Optional[List[Objekt]] = None addressen: Optional[List[Address]] = None nutzer: Optional[List[Nutzer]] = None nutzer_coownership: Optional[List[NutzerCoOwnership]] = None nutzer_personen: Optional[List[NutzerPersonen]] = None nutzer_quadratmeter: Optional[List[NutzerQuadratmeter]] = None eigentuemer_nutzeinheit: Optional[List[OwnerNutzeinheit]] = None nutzeinheiten: Optional[List[Nutzeinheit]] = None direktkosten: Optional[List[Direktkosten]] = None prepayments: Optional[List[Prepayment]] = None energie_verwerter: Optional[List[EnergieVerwerter]] = None brennstofflieferungen: Optional[List[Brennstofflieferung]] = None nebenkosten: Optional[List[Nebenkosten]] = None heizbetriebskosten: Optional[List[Heizbetriebskosten]] = None nutzeinheit_devices: Optional[List[NutzeinheitDevice]] = None devices: Optional[List[Device]] = None device_consumptions: Optional[List[DeviceConsumption]] = None billing_information: Optional[List[BillingInformation]] = None response_status: Optional[ResponseStatus] = None # @Route("/api/v1/customers/{Guid}", "GET") @dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE) @dataclass class GetCustomer(IReturn[GetCustomerResponse], IHasBearerToken): # @ApiMember(IsRequired=true, ParameterType="query") bearer_token: Optional[str] = None # @ApiMember(IsRequired=true, ParameterType="path") guid: Optional[str] = None # @ApiMember(ParameterType="query") include: Optional[str] = None # @Route("/Customer/{Guid}", "GET") @dataclass_json(letter_case=LetterCase.CAMEL, undefined=Undefined.EXCLUDE) @dataclass class GetCustomer(IReturn[GetCustomerResponse]): guid: Optional[str] = None