# Generated by the protocol buffer compiler.  DO NOT EDIT!
# sources: keyapis/access_control/v1/keyapis_access_control_access_control_v1.proto, keyapis/access_control/v1/keyapis_access_control_access_point_group_v1.proto, keyapis/access_control/v1/keyapis_access_control_access_point_v1.proto, keyapis/access_control/v1/keyapis_access_control_broadcast_alert_v1.proto, keyapis/access_control/v1/keyapis_access_control_building_v1.proto, keyapis/access_control/v1/keyapis_access_control_entrance_v1.proto, keyapis/access_control/v1/keyapis_access_control_events_1.proto, keyapis/access_control/v1/keyapis_access_control_flatgramm_v1.proto, keyapis/access_control/v1/keyapis_access_control_rfid_v1.proto, keyapis/access_control/v1/keyapis_access_control_room_device_v1.proto, keyapis/access_control/v1/keyapis_access_control_room_user_v1.proto, keyapis/access_control/v1/keyapis_access_control_system_v1.proto
# plugin: python-betterproto
# This file has been @generated
import warnings
from collections.abc import AsyncIterator
from datetime import datetime
from typing import TYPE_CHECKING

import betterproto
import grpclib
from betterproto.grpc.grpclib_server import ServiceBase
from pydantic import model_validator
from pydantic.dataclasses import (
    dataclass,
    rebuild_dataclass,
)

if TYPE_CHECKING:
    import grpclib.server
    from betterproto.grpc.grpclib_client import MetadataLike
    from grpclib.metadata import Deadline


class RoomType(betterproto.Enum):
    """Тип"""

    TYPE_UNKNOWN = 0
    """Значение не указано"""

    FLOOR = 1
    """Этаж"""

    ENTRANCE = 2
    """Подъезд"""

    APARTMENT = 3
    """Апартаменты"""

    WATER_DISTRIBUTION = 4
    """Вводно-распределительные устройства"""

    HEAT_POINT = 5
    """Индивидуальный тепловой пункт"""

    PANTRY = 6
    """Кладовая"""

    WHEELCHAIR = 7
    """Колясочная"""

    WIRING_CLOSET = 8
    """Коммутационный шкаф"""

    CONCIERGE = 9
    """Консьержная"""

    CHECKPOINT = 10
    """КПП"""

    PARKING_PLACE = 11
    """Машиноместо"""

    OFFICE = 12
    """Офис"""

    BASEMENT = 13
    """Подвал"""

    SUBSTATION = 14
    """Подстанция"""

    HOMEOWNERS_ROOM = 15
    """Помещение правления ТСЖ"""

    TAMBOUR = 16
    """Тамбур"""

    INPUT_NODE = 17
    """Узел ввода"""

    LOBBY = 18
    """Лобби"""

    ATTIC = 19
    """Чердак"""

    ELEVATOR_SHAFT = 20
    """Шахта лифта"""

    SWITCHBOARD = 21
    """Электрощитовая"""

    DEFAULT_ROOM = 22
    """Квартира по умолчанию"""

    @classmethod
    def __get_pydantic_core_schema__(cls, _source_type, _handler):
        from pydantic_core import core_schema

        return core_schema.int_schema(ge=0)


class PatchRoomSetSubscriptionModeRequestModeType(betterproto.Enum):
    """Справочник значений режимов подписки"""

    MODE_TYPE_UNKNOWN = 0
    """Значение не указано"""

    DISABLED = 1
    """Выключено"""

    ENABLED = 2
    """Включено"""

    @classmethod
    def __get_pydantic_core_schema__(cls, _source_type, _handler):
        from pydantic_core import core_schema

        return core_schema.int_schema(ge=0)


class RoomPagingOrderByType(betterproto.Enum):
    """
    Справочник типов значений сортировки.
     # Тип: byte
    """

    ORDER_BY_TYPE_UNKNOWN = 0
    """Значение не указано"""

    ID = 1
    """По идентификатору"""

    CREATED_AT = 2
    """По времени создания"""

    FLOOR_THEN_NUMBER = 3
    """По этажу и номеру"""

    NUMBER = 4
    """По номеру"""

    @classmethod
    def __get_pydantic_core_schema__(cls, _source_type, _handler):
        from pydantic_core import core_schema

        return core_schema.int_schema(ge=0)


class RoomPagingDirectionType(betterproto.Enum):
    """
    Справочник типов направлений сортировки.
     # Тип: byte
    """

    DIRECTION_TYPE_UNKNOWN = 0
    """Значение не указано"""

    DESC = 1
    """От большего к меньшему"""

    ASC = 2
    """От меньшего к большему"""

    @classmethod
    def __get_pydantic_core_schema__(cls, _source_type, _handler):
        from pydantic_core import core_schema

        return core_schema.int_schema(ge=0)


class PrepareStartTaskPlayType(betterproto.Enum):
    """
    Тип проигрывания.
     # Тип: byte
    """

    PLAY_TYPE_UNKNOWN = 0
    """Значение не указано"""

    HANDSET_ONLY = 1
    """Только на аналоговые трубки"""

    SPEAKER_ONLY = 2
    """Tолько на динамик домофона"""

    HANDSET_AND_SPEAKER = 3
    """
    Сначала на аналоговые трубки проигрываем заданное количество тактов, затем на динамик домофона
    """

    SPEAKER_AND_HANDSET = 4
    """
    Сначала на динамик домофона проигрываем заданное количество тактов, затем на аналоговые трубки
    """

    @classmethod
    def __get_pydantic_core_schema__(cls, _source_type, _handler):
        from pydantic_core import core_schema

        return core_schema.int_schema(ge=0)


class DeleteRfidsFromAllDevicesResultTaskStatusType(betterproto.Enum):
    """
    Справочник статусов удаления ключа со всех устройств.
     # Тип: byte
    """

    STATUS_TYPE_UNKNOWN = 0
    """Значение не указано"""

    SUCCESS = 1
    """Настроен"""

    ERROR = 2
    """Ошибка"""

    @classmethod
    def __get_pydantic_core_schema__(cls, _source_type, _handler):
        from pydantic_core import core_schema

        return core_schema.int_schema(ge=0)


class PostBroadcastAlertStartRequestPlayType(betterproto.Enum):
    """
    Тип проигрывания.
     # Тип: byte
    """

    PLAY_TYPE_UNKNOWN = 0
    """Значение не указано"""

    HANDSET_ONLY = 1
    """Только на аналоговые трубки"""

    SPEAKER_ONLY = 2
    """Tолько на динамик домофона"""

    HANDSET_AND_SPEAKER = 3
    """
    Сначала на аналоговые трубки проигрываем заданное количество тактов, затем на динамик домофона
    """

    SPEAKER_AND_HANDSET = 4
    """
    Сначала на динамик домофона проигрываем заданное количество тактов, затем на аналоговые трубки
    """

    @classmethod
    def __get_pydantic_core_schema__(cls, _source_type, _handler):
        from pydantic_core import core_schema

        return core_schema.int_schema(ge=0)


class EntranceFilterCompanyRelationType(betterproto.Enum):
    """Справочник типов связи компании с подъездами"""

    COMPANY_RELATION_TYPE_UNKNOWN = 0
    """Значение не указано"""

    DEFAULT = 1
    """Значение по умолчанию"""

    MANAGEMENT = 2
    """Управляющая компания владеет квартирограммой"""

    DEVICE_SERVICE = 3
    """Домофонная компания обслуживает квартирограмму"""

    @classmethod
    def __get_pydantic_core_schema__(cls, _source_type, _handler):
        from pydantic_core import core_schema

        return core_schema.int_schema(ge=0)


class EntrancePagingOrderByType(betterproto.Enum):
    """
    Справочник типов значений сортировки.
     # Тип: byte
    """

    ORDER_BY_TYPE_UNKNOWN = 0
    """Значение не указано"""

    ORPON_THEN_ENTRANCE_NUMBER = 1
    """По ОРПОНу и номеру подъезда"""

    @classmethod
    def __get_pydantic_core_schema__(cls, _source_type, _handler):
        from pydantic_core import core_schema

        return core_schema.int_schema(ge=0)


class EntrancePagingDirectionType(betterproto.Enum):
    """
    Справочник типов направлений сортировки.
     # Тип: byte
    """

    DIRECTION_TYPE_UNKNOWN = 0
    """Значение не указано"""

    DESC = 1
    """От большего к меньшему"""

    ASC = 2
    """От меньшего к большему"""

    @classmethod
    def __get_pydantic_core_schema__(cls, _source_type, _handler):
        from pydantic_core import core_schema

        return core_schema.int_schema(ge=0)


class EntranceDeviceRelationType(betterproto.Enum):
    """Тип связки"""

    RELATION_TYPE_UNKNOWN = 0
    """Значение не указано"""

    FULL = 1
    """Полная связь"""

    PARTIAL = 2
    """Частичная связь"""

    @classmethod
    def __get_pydantic_core_schema__(cls, _source_type, _handler):
        from pydantic_core import core_schema

        return core_schema.int_schema(ge=0)


class EntranceDevicePagingOrderByType(betterproto.Enum):
    """
    Справочник типов значений сортировки.
     # Тип: byte
    """

    ORDER_BY_TYPE_UNKNOWN = 0
    """Значение не указано"""

    ORPON_THEN_ENTRANCE_NUMBER = 1
    """По ОРПОНу и номеру подъезда"""

    DEVICE_ID = 2
    """По идентификатору устройства"""

    @classmethod
    def __get_pydantic_core_schema__(cls, _source_type, _handler):
        from pydantic_core import core_schema

        return core_schema.int_schema(ge=0)


class EntranceDevicePagingDirectionType(betterproto.Enum):
    """
    Справочник типов направлений сортировки.
     # Тип: byte
    """

    DIRECTION_TYPE_UNKNOWN = 0
    """Значение не указано"""

    DESC = 1
    """От большего к меньшему"""

    ASC = 2
    """От меньшего к большему"""

    @classmethod
    def __get_pydantic_core_schema__(cls, _source_type, _handler):
        from pydantic_core import core_schema

        return core_schema.int_schema(ge=0)


class BuildingPagingOrderByType(betterproto.Enum):
    """
    Справочник типов значений сортировки.
     # Тип: byte
    """

    ORDER_BY_TYPE_UNKNOWN = 0
    """Значение не указано"""

    ID = 1
    """По идентификатору"""

    CREATED_AT = 2
    """По времени создания"""

    STREET_THEN_NUMBER_THEN_PART = 3
    """По улице, номеру дома, корпусу"""

    @classmethod
    def __get_pydantic_core_schema__(cls, _source_type, _handler):
        from pydantic_core import core_schema

        return core_schema.int_schema(ge=0)


class BuildingPagingDirectionType(betterproto.Enum):
    """
    Справочник типов направлений сортировки.
     # Тип: byte
    """

    DIRECTION_TYPE_UNKNOWN = 0
    """Значение не указано"""

    DESC = 1
    """От большего к меньшему"""

    ASC = 2
    """От меньшего к большему"""

    @classmethod
    def __get_pydantic_core_schema__(cls, _source_type, _handler):
        from pydantic_core import core_schema

        return core_schema.int_schema(ge=0)


class BuildingSubscriptionModeSubscriptionModeType(betterproto.Enum):
    """Справочник режимов работы с подписками"""

    SUBSCRIPTION_MODE_TYPE_UNKNOWN = 0
    """Значение не указано"""

    ENABLED = 1
    """Режим работы с подписками включен на всех помещениях дома"""

    PARTIALLY_ENABLED = 2
    """Режим работы с подписками включен на некоторых помещениях дома"""

    DISABLED = 3
    """Режим работы с подписками выключен на всех помещениях дома"""

    @classmethod
    def __get_pydantic_core_schema__(cls, _source_type, _handler):
        from pydantic_core import core_schema

        return core_schema.int_schema(ge=0)


class FlatgrammPagingOrderByType(betterproto.Enum):
    """
    Справочник типов значений сортировки.
     # Тип: byte
    """

    ORDER_BY_TYPE_UNKNOWN = 0
    """Значение не указано"""

    ID = 1
    """По идентификатору"""

    CREATED_AT = 2
    """По времени создания"""

    CHANGED_AT = 3
    """По времени изменения"""

    RANK = 4
    """
    По рангу для поиска по тексту.
     Применяется когда передано поле для поиска по тексту.
     В случае если текстовое поле не передано, применяется значение по умолчанию
    """

    @classmethod
    def __get_pydantic_core_schema__(cls, _source_type, _handler):
        from pydantic_core import core_schema

        return core_schema.int_schema(ge=0)


class FlatgrammPagingDirectionType(betterproto.Enum):
    """
    Справочник типов направлений сортировки.
     # Тип: byte
    """

    DIRECTION_TYPE_UNKNOWN = 0
    """Значение не указано"""

    DESC = 1
    """От большего к меньшему"""

    ASC = 2
    """От меньшего к большему"""

    @classmethod
    def __get_pydantic_core_schema__(cls, _source_type, _handler):
        from pydantic_core import core_schema

        return core_schema.int_schema(ge=0)


class DcCompanyFlatgrammPagingOrderByType(betterproto.Enum):
    """Справочник типов сортировки"""

    ORDER_BY_TYPE_UNKNOWN = 0
    """Значение не указано"""

    COMPANY_ID = 1
    """По Идентификатору домофонной компании"""

    FLATGRAMM_ID = 2
    """По Идентификатору квартирограммы"""

    @classmethod
    def __get_pydantic_core_schema__(cls, _source_type, _handler):
        from pydantic_core import core_schema

        return core_schema.int_schema(ge=0)


class DcCompanyFlatgrammPagingDirectionType(betterproto.Enum):
    """Справочник типов направлений сортировки"""

    DIRECTION_TYPE_UNKNOWN = 0
    """Значение не указано"""

    DESC = 1
    """От большего к меньшему"""

    ASC = 2
    """От меньшего к большему"""

    @classmethod
    def __get_pydantic_core_schema__(cls, _source_type, _handler):
        from pydantic_core import core_schema

        return core_schema.int_schema(ge=0)


class FlatgrammCompanyRelationPagingOrderByType(betterproto.Enum):
    """Справочник типов сортировки"""

    ORDER_BY_TYPE_UNKNOWN = 0
    """Значение не указано"""

    COMPANY_ID = 1
    """По Идентификатору компании"""

    FLATGRAMM_ID = 2
    """По Идентификатору квартирограммы"""

    @classmethod
    def __get_pydantic_core_schema__(cls, _source_type, _handler):
        from pydantic_core import core_schema

        return core_schema.int_schema(ge=0)


class FlatgrammCompanyRelationPagingDirectionType(betterproto.Enum):
    """Справочник типов направлений сортировки"""

    DIRECTION_TYPE_UNKNOWN = 0
    """Значение не указано"""

    DESC = 1
    """От большего к меньшему"""

    ASC = 2
    """От меньшего к большему"""

    @classmethod
    def __get_pydantic_core_schema__(cls, _source_type, _handler):
        from pydantic_core import core_schema

        return core_schema.int_schema(ge=0)


class FlatgrammCompanyRelationType(betterproto.Enum):
    """
    Тип связи компании и квартирограммы.
     По умолчанию OWNER.
     # Тип: byte
    """

    TYPE_UNKNOWN = 0
    """Значение не указано"""

    MANAGEMENT = 1
    """Управляющая компания владеет квартирограммой"""

    DEVICE_SERVICE = 2
    """Домофонная компания обслуживает квартирограмму"""

    @classmethod
    def __get_pydantic_core_schema__(cls, _source_type, _handler):
        from pydantic_core import core_schema

        return core_schema.int_schema(ge=0)


class AccessPointGroupPagingOrderByType(betterproto.Enum):
    """
    Справочник типов значений сортировки.
     # Тип: byte
    """

    ORDER_BY_TYPE_UNKNOWN = 0
    """Значение не указано"""

    GROUP_ID = 1
    """По идентификатору группы"""

    ACCESS_POINT_ID = 2
    """По идентификатору точки доступа"""

    CREATED_AT = 3
    """По дате создания"""

    @classmethod
    def __get_pydantic_core_schema__(cls, _source_type, _handler):
        from pydantic_core import core_schema

        return core_schema.int_schema(ge=0)


class AccessPointGroupPagingDirectionType(betterproto.Enum):
    """
    Справочник типов направлений сортировки;
     # Тип: byte
    """

    DIRECTION_TYPE_UNKNOWN = 0
    """Значение не указано"""

    DESC = 1
    """От большего к меньшему"""

    ASC = 2
    """От меньшего к большему"""

    @classmethod
    def __get_pydantic_core_schema__(cls, _source_type, _handler):
        from pydantic_core import core_schema

        return core_schema.int_schema(ge=0)


class RoomDevicePagingOrderByType(betterproto.Enum):
    """
    Справочник типов значений сортировки.
     # Тип: byte
    """

    ORDER_BY_TYPE_UNKNOWN = 0
    """Значение не указано"""

    ORPON_THEN_ENTRANCE_NUMBER = 1
    """По ОРПОНу и номеру подъезда"""

    DEVICE_ID = 2
    """По идентификатору устройства"""

    @classmethod
    def __get_pydantic_core_schema__(cls, _source_type, _handler):
        from pydantic_core import core_schema

        return core_schema.int_schema(ge=0)


class RoomDevicePagingDirectionType(betterproto.Enum):
    """
    Справочник типов направлений сортировки.
     # Тип: byte
    """

    DIRECTION_TYPE_UNKNOWN = 0
    """Значение не указано"""

    DESC = 1
    """От большего к меньшему"""

    ASC = 2
    """От меньшего к большему"""

    @classmethod
    def __get_pydantic_core_schema__(cls, _source_type, _handler):
        from pydantic_core import core_schema

        return core_schema.int_schema(ge=0)


class RfidPayType(betterproto.Enum):
    """Тип оплаты"""

    PAY_TYPE_UNKNOWN = 0
    """Значение не указано"""

    PAID = 1
    """Платный"""

    FREE = 2
    """Бесплатный"""

    @classmethod
    def __get_pydantic_core_schema__(cls, _source_type, _handler):
        from pydantic_core import core_schema

        return core_schema.int_schema(ge=0)


class RfidHolderType(betterproto.Enum):
    """Тип владельца ключа"""

    HOLDER_TYPE_UNKNOWN = 0
    """Значение не указано"""

    MASTER = 1
    """Жилец"""

    COMPANY = 2
    """Сотрудник УК"""

    EXTERNAL_SELLER = 3
    """Ключ сотрудника ГАП"""

    SYSTEM = 4
    """Системный ключ"""

    @classmethod
    def __get_pydantic_core_schema__(cls, _source_type, _handler):
        from pydantic_core import core_schema

        return core_schema.int_schema(ge=0)


class RfidPagingOrderByType(betterproto.Enum):
    """
    Справочник типов значений сортировки.
     # Тип: byte
    """

    ORDER_BY_TYPE_UNKNOWN = 0
    """Значение не указано"""

    CREATED_AT = 1
    """По времени создания"""

    CHANGED_AT = 2
    """По времени изменения"""

    @classmethod
    def __get_pydantic_core_schema__(cls, _source_type, _handler):
        from pydantic_core import core_schema

        return core_schema.int_schema(ge=0)


class RfidPagingDirectionType(betterproto.Enum):
    """
    Справочник типов направлений сортировки.
     # Тип: byte
    """

    DIRECTION_TYPE_UNKNOWN = 0
    """Значение не указано"""

    DESC = 1
    """От большего к меньшему"""

    ASC = 2
    """От меньшего к большему"""

    @classmethod
    def __get_pydantic_core_schema__(cls, _source_type, _handler):
        from pydantic_core import core_schema

        return core_schema.int_schema(ge=0)


class AccessPointDirectionType(betterproto.Enum):
    """
    Тип направления.
     # Тип: byte
    """

    DIRECTION_TYPE_UNKNOWN = 0
    """Не указано"""

    IN = 1
    """Вход"""

    OUT = 2
    """Выход"""

    REVERSE = 3
    """В обоих направлениях"""

    @classmethod
    def __get_pydantic_core_schema__(cls, _source_type, _handler):
        from pydantic_core import core_schema

        return core_schema.int_schema(ge=0)


class AccessPointCameraRecognitionType(betterproto.Enum):
    """
    Тип распознавания.
     Атрибут, определяющий тип данных, который распознает камера.
     # Тип: byte
    """

    RECOGNITION_TYPE_UNKNOWN = 0
    """Не указано"""

    CAR_NUMBER = 1
    """По номеру авто"""

    VEHICLE_TYPE = 2
    """По типу транспорта"""

    @classmethod
    def __get_pydantic_core_schema__(cls, _source_type, _handler):
        from pydantic_core import core_schema

        return core_schema.int_schema(ge=0)


class AccessPointPagingOrderByType(betterproto.Enum):
    """
    Справочник типов значений сортировки.
     # Тип: byte
    """

    ORDER_BY_TYPE_UNKNOWN = 0
    """Значение не указано"""

    ID = 1
    """По идентификатору"""

    TITLE = 2
    """По наименованию"""

    CHANGED_AT = 3
    """Дата последнего изменения"""

    CREATED_AT = 4
    """Дата создания"""

    RANK = 5
    """
    По рангу для поиска по тексту.
     Применяется когда передано поле для поиска по тексту.
     В случае если текстовое поле не передано, применяется значение по умолчанию
    """

    @classmethod
    def __get_pydantic_core_schema__(cls, _source_type, _handler):
        from pydantic_core import core_schema

        return core_schema.int_schema(ge=0)


class AccessPointPagingDirectionType(betterproto.Enum):
    """
    Справочник типов направлений сортировки;
     # Тип: byte
    """

    DIRECTION_TYPE_UNKNOWN = 0
    """Значение не указано"""

    DESC = 1
    """От большего к меньшему"""

    ASC = 2
    """От меньшего к большему"""

    @classmethod
    def __get_pydantic_core_schema__(cls, _source_type, _handler):
        from pydantic_core import core_schema

        return core_schema.int_schema(ge=0)


class PostAccessPointOpenRequestVehicleType(betterproto.Enum):
    """Тип ТС"""

    VEHICLE_TYPE_UNKNOWN = 0
    """Не указано"""

    EMERGENCY = 1
    """МЧС"""

    POLICE = 2
    """Полиция"""

    AMBULANCE = 3
    """Скорая помощь"""

    GARBAGE_TRUCK = 4
    """Мусоровоз"""

    TAXI = 5
    """Такси"""

    @classmethod
    def __get_pydantic_core_schema__(cls, _source_type, _handler):
        from pydantic_core import core_schema

        return core_schema.int_schema(ge=0)


class RoomUserPagingOrderByType(betterproto.Enum):
    """
    Справочник типов значений сортировки.
     # Тип: byte
    """

    ORDER_BY_TYPE_UNKNOWN = 0
    """Значение не указано"""

    USER_ID = 1
    """По идентификатору"""

    ORPON_THEN_NUMBER = 2
    """По ОРПОНу и номеру"""

    @classmethod
    def __get_pydantic_core_schema__(cls, _source_type, _handler):
        from pydantic_core import core_schema

        return core_schema.int_schema(ge=0)


class RoomUserPagingDirectionType(betterproto.Enum):
    """
    Справочник типов направлений сортировки.
     # Тип: byte
    """

    DIRECTION_TYPE_UNKNOWN = 0
    """Значение не указано"""

    DESC = 1
    """От большего к меньшему"""

    ASC = 2
    """От меньшего к большему"""

    @classmethod
    def __get_pydantic_core_schema__(cls, _source_type, _handler):
        from pydantic_core import core_schema

        return core_schema.int_schema(ge=0)


@dataclass(eq=False, repr=False, config={"extra": "forbid"})
class Room(betterproto.Message):
    """Квартира"""

    id: int = betterproto.int32_field(1)
    """Идентификатор квартиры"""

    number: str = betterproto.string_field(2)
    """Номер"""

    entrance: int = betterproto.int32_field(3)
    """Подъезд"""

    floor: int = betterproto.int32_field(4)
    """Этаж"""

    area: float = betterproto.float_field(5)
    """Площадь"""

    building_id: int = betterproto.int32_field(6)
    """Идентификатор дома"""

    company_id: int = betterproto.int32_field(7)
    """Идентификатор компании"""

    abonent_id: str = betterproto.string_field(8)
    """Номер абонента"""

    type: "RoomType" = betterproto.enum_field(9)
    """Тип"""

    created_at: datetime = betterproto.message_field(10)
    """
    Дата создания.
     # Тип: DateTime
    """

    deleted_at: datetime = betterproto.message_field(11)
    """
    Дата удаления.
     # Тип: DateTime
    """

    is_subscription_mode_enabled: bool = betterproto.bool_field(12)
    """Включен ли режим подписок"""


@dataclass(eq=False, repr=False, config={"extra": "forbid"})
class GetRoomRequest(betterproto.Message):
    """Запрос получения квартиры"""

    id: int = betterproto.int32_field(1)
    """Идентификатор квартиры"""


@dataclass(eq=False, repr=False, config={"extra": "forbid"})
class GetRoomResponse(betterproto.Message):
    """Ответ на запрос получения квартиры"""

    data: "Room | None" = betterproto.message_field(1, optional=True, group="type")
    """Квартира"""

    error: "GetRoomResponseError | None" = betterproto.message_field(
        2, optional=True, group="type"
    )
    """Ошибка"""

    @model_validator(mode="after")
    def check_oneof(cls, values):
        return cls._validate_field_groups(values)


@dataclass(eq=False, repr=False, config={"extra": "forbid"})
class GetRoomResponseError(betterproto.Message):
    """Ошибка"""

    validation: "ValidationError | None" = betterproto.message_field(
        1, optional=True, group="reason"
    )
    """Ошибка валидации"""

    @model_validator(mode="after")
    def check_oneof(cls, values):
        return cls._validate_field_groups(values)


@dataclass(eq=False, repr=False, config={"extra": "forbid"})
class PatchRoomSetSubscriptionModeRequest(betterproto.Message):
    """Запрос на установку режима подписок"""

    mrf_ids: "list[int]" = betterproto.int32_field(1)
    """Список идентификаторов МРФ"""

    rf_ids: "list[int]" = betterproto.int32_field(2)
    """Список идентификаторов РФ"""

    orpon_id: int = betterproto.int64_field(3)
    """Идентификатор ОРПОН дома"""

    room_numbers: "list[str]" = betterproto.string_field(4)
    """Список номеров квартир"""

    mode_type: "PatchRoomSetSubscriptionModeRequestModeType" = betterproto.enum_field(5)
    """Значение режима подписок"""


@dataclass(eq=False, repr=False, config={"extra": "forbid"})
class PatchRoomSetSubscriptionModeResponse(betterproto.Message):
    """Ответ на запрос на установку режима подписок"""

    error: "PatchRoomSetSubscriptionModeResponseError | None" = (
        betterproto.message_field(1, optional=True, group="type")
    )
    """Ошибка"""

    @model_validator(mode="after")
    def check_oneof(cls, values):
        return cls._validate_field_groups(values)


@dataclass(eq=False, repr=False, config={"extra": "forbid"})
class PatchRoomSetSubscriptionModeResponseError(betterproto.Message):
    """Ошибка"""

    orpon_expected: "PatchRoomSetSubscriptionModeResponseErrorOrponExpected | None" = (
        betterproto.message_field(1, optional=True, group="reason")
    )
    """Не передано значение ОРПОН"""

    id_expected: "PatchRoomSetSubscriptionModeResponseErrorIdExpected | None" = (
        betterproto.message_field(2, optional=True, group="reason")
    )
    """Не передан хотя бы один идентификатор"""

    validation: "ValidationError | None" = betterproto.message_field(
        3, optional=True, group="reason"
    )
    """Ошибка валидации"""

    @model_validator(mode="after")
    def check_oneof(cls, values):
        return cls._validate_field_groups(values)


@dataclass(eq=False, repr=False, config={"extra": "forbid"})
class PatchRoomSetSubscriptionModeResponseErrorOrponExpected(betterproto.Message):
    """
    Не передано значение ОРПОН:
     - Если переданы номера квартир, то значение параметра ОРПОН обязательно
    """

    pass


@dataclass(eq=False, repr=False, config={"extra": "forbid"})
class PatchRoomSetSubscriptionModeResponseErrorIdExpected(betterproto.Message):
    """
    Не передан хотя бы один идентификатор:
     - Должен быть передан хотя бы один из параметров:
      - mrf_ids;
      - rf_ids;
      - opron_id
    """

    pass


@dataclass(eq=False, repr=False, config={"extra": "forbid"})
class GetRoomListRequest(betterproto.Message):
    """Запрос получения списка квартир"""

    filter: "RoomFilter" = betterproto.message_field(1)
    """Фильтр"""

    paging: "RoomPaging | None" = betterproto.message_field(
        2, optional=True, group="pagination"
    )
    """Стандартный постраничный вывод"""

    @model_validator(mode="after")
    def check_oneof(cls, values):
        return cls._validate_field_groups(values)


@dataclass(eq=False, repr=False, config={"extra": "forbid"})
class GetRoomListResponse(betterproto.Message):
    """Ответ на запрос получения списка квартир"""

    data: "Room | None" = betterproto.message_field(1, optional=True, group="type")
    """Квартира"""

    error: "GetRoomListResponseError | None" = betterproto.message_field(
        2, optional=True, group="type"
    )
    """Ошибка"""

    @model_validator(mode="after")
    def check_oneof(cls, values):
        return cls._validate_field_groups(values)


@dataclass(eq=False, repr=False, config={"extra": "forbid"})
class GetRoomListResponseError(betterproto.Message):
    """Ошибка"""

    validation: "ValidationError | None" = betterproto.message_field(
        1, optional=True, group="reason"
    )
    """Ошибка валидации"""

    @model_validator(mode="after")
    def check_oneof(cls, values):
        return cls._validate_field_groups(values)


@dataclass(eq=False, repr=False, config={"extra": "forbid"})
class GetRoomCountRequest(betterproto.Message):
    """Запрос получения количества квартир"""

    filter: "RoomFilter" = betterproto.message_field(1)
    """Фильтр"""


@dataclass(eq=False, repr=False, config={"extra": "forbid"})
class GetRoomCountResponse(betterproto.Message):
    """Ответ на запрос получения количества квартир"""

    data: "int | None" = betterproto.int32_field(1, optional=True, group="type")
    """Количество"""

    @model_validator(mode="after")
    def check_oneof(cls, values):
        return cls._validate_field_groups(values)


@dataclass(eq=False, repr=False, config={"extra": "forbid"})
class RoomFilter(betterproto.Message):
    """Фильтр по квартирам"""

    building_ids: "list[int]" = betterproto.int32_field(1)
    """По идентификаторам домов"""

    entrances: "list[int]" = betterproto.int32_field(2)
    """По подъездам"""

    floors: "list[int]" = betterproto.int32_field(3)
    """По этажам"""

    company_ids: "list[int]" = betterproto.int32_field(4)
    """По идентификаторам компаний"""

    types: "list[RoomType]" = betterproto.enum_field(5)
    """По типам"""

    device_ids: "list[int]" = betterproto.int32_field(6)
    """По идентификаторам устройств"""

    orpons: "list[int]" = betterproto.int64_field(7)
    """По ОРПОНам"""

    is_service_flag: "bool | None" = betterproto.message_field(
        8, wraps=betterproto.TYPE_BOOL
    )
    """По признаку служебной квартиры"""

    room_numbers: "list[str]" = betterproto.string_field(9)
    """По номерам квартир"""


@dataclass(eq=False, repr=False, config={"extra": "forbid"})
class GetRoomOrponNumberExistsRequest(betterproto.Message):
    """Запрос проверки существования квартиры по ОРПОН и её номеру"""

    orpon: int = betterproto.int64_field(1)
    """
    ОРПОН дома.
     # Диапазон: 1..9223372036854775807
    """

    room_number: str = betterproto.string_field(2)
    """
    Номер квартиры.
     # Диапазон: 1..4
    """


@dataclass(eq=False, repr=False, config={"extra": "forbid"})
class GetRoomOrponNumberExistsResponse(betterproto.Message):
    """Ответ на запрос проверки существования квартиры"""

    data: "bool | None" = betterproto.bool_field(1, optional=True, group="type")
    """
    Результат проверки: true - если квартира существует, false - в противном случае
    """

    error: "GetRoomOrponNumberExistsResponseError | None" = betterproto.message_field(
        2, optional=True, group="type"
    )
    """Ошибка"""

    @model_validator(mode="after")
    def check_oneof(cls, values):
        return cls._validate_field_groups(values)


@dataclass(eq=False, repr=False, config={"extra": "forbid"})
class GetRoomOrponNumberExistsResponseError(betterproto.Message):
    """Ошибка"""

    validation: "ValidationError | None" = betterproto.message_field(
        1, optional=True, group="reason"
    )
    """Ошибка валидации"""

    @model_validator(mode="after")
    def check_oneof(cls, values):
        return cls._validate_field_groups(values)


@dataclass(eq=False, repr=False, config={"extra": "forbid"})
class RoomPaging(betterproto.Message):
    """Постраничный вывод"""

    order_by_type: "RoomPagingOrderByType" = betterproto.enum_field(1)
    """
    Тип значения сортировки.
     Если значение не передано, то будет взято значение по умолчанию.
     # По умолчанию: CREATED_AT
    """

    direction_type: "RoomPagingDirectionType" = betterproto.enum_field(2)
    """
    Тип направления сортировки.
     # По умолчанию: DESC
    """

    limit: int = betterproto.int32_field(3)
    """
    Количество записей на страницу.
     Если значение 0 (не передано), то будет взято значение по умолчанию.
     # Диапазон: 0..100.
     # По умолчанию: 20
    """

    offset: int = betterproto.int32_field(4)
    """
    Сдвиг.
     # Диапазон: 0..2147483647
    """


@dataclass(eq=False, repr=False, config={"extra": "forbid"})
class ValidationError(betterproto.Message):
    """
    Ошибки валидации.
     Эти проверки выполняются до обращения в базу данных
    """

    path: str = betterproto.string_field(1)
    """Путь к полю в формате наименования прото"""

    message: str = betterproto.string_field(2)
    """Валидационное сообщение"""


@dataclass(eq=False, repr=False, config={"extra": "forbid"})
class ActivateCmsSettingsTask(betterproto.Message):
    """
    Задача на активацию аналоговых трубок квартир для устройства на доме.
     Очередь key.access_control.activate_cms
    """

    request_id: str = betterproto.string_field(1)
    """Идентификатор запроса"""

    orpon_id: int = betterproto.int64_field(2)
    """Идентификатор ОРПОН дома"""

    device_id: int = betterproto.int32_field(3)
    """Идентификатор устройства"""

    room_numbers: "list[str]" = betterproto.string_field(4)
    """
    Номера квартир с включенным режимом подписок, у которых блокируется аналоговая трубка
    """


@dataclass(eq=False, repr=False, config={"extra": "forbid"})
class BlockCmsSettingsTask(betterproto.Message):
    """
    Задача на блокировку аналоговых трубок квартир для устройства на доме.
     Очередь key.access_control.block_cms
    """

    request_id: str = betterproto.string_field(1)
    """Идентификатор запроса"""

    orpon_id: int = betterproto.int64_field(2)
    """Идентификатор ОРПОН дома"""

    device_id: int = betterproto.int32_field(3)
    """Идентификатор устройства"""

    room_numbers: "list[str]" = betterproto.string_field(4)
    """
    Номера квартир с включенным режимом подписок, у которых активируется аналоговая трубка
    """


@dataclass(eq=False, repr=False, config={"extra": "forbid"})
class ForceActivateCmsSettingsTask(betterproto.Message):
    """
    Задача на активацию аналоговых трубок квартир для устройства на доме без дополнительных проверок на устройстве.
     Очередь key.access_control.force_activate_cms
    """

    request_id: str = betterproto.string_field(1)
    """Идентификатор запроса"""

    orpon_id: int = betterproto.int64_field(2)
    """Идентификатор ОРПОН дома"""

    device_id: int = betterproto.int32_field(3)
    """Идентификатор устройства"""

    room_numbers: "list[str]" = betterproto.string_field(4)
    """Номера квартир для которых необходимо активация аналоговых трубок"""


@dataclass(eq=False, repr=False, config={"extra": "forbid"})
class ConfigureRoomsResultTask(betterproto.Message):
    """
    Задача ответ на конфигурацию квартир.
     Очередь key.access_control.configure_rooms_result
    """

    request_id: str = betterproto.string_field(1)
    """Идентификатор запроса"""

    device_id: int = betterproto.int32_field(2)
    """Идентификатор устройства"""

    rooms: "list[ConfigureRoomsResultTaskRoom]" = betterproto.message_field(3)
    """Список квартир с результатом конфигурации"""


@dataclass(eq=False, repr=False, config={"extra": "forbid"})
class ConfigureRoomsResultTaskRoom(betterproto.Message):
    """Результат конфигурации квартиры"""

    room_id: int = betterproto.int32_field(1)
    """Идентификатор квартиры"""

    is_configured: bool = betterproto.bool_field(2)
    """Признак "Сконфигурировано"""

    error_message: str = betterproto.string_field(3)
    """Текст ошибки"""


@dataclass(eq=False, repr=False, config={"extra": "forbid"})
class LoadRfidsToDevicesTask(betterproto.Message):
    """
    Задача на добавление ключей на устройства.
     Очередь key.access_control.load_rfids_to_devices
    """

    request_id: str = betterproto.string_field(1)
    """Идентификатор запроса"""

    rfids: "list[LoadRfidsToDevicesTaskRfid]" = betterproto.message_field(2)
    """Список ключей"""

    device_ids: "list[int]" = betterproto.int32_field(3)
    """Список идентификаторов устройств"""


@dataclass(eq=False, repr=False, config={"extra": "forbid"})
class LoadRfidsToDevicesTaskRfid(betterproto.Message):
    """Ключ"""

    id: int = betterproto.int32_field(1)
    """Идентификатор"""

    key: str = betterproto.string_field(2)
    """Значение ключа"""

    room_number: str = betterproto.string_field(3)
    """Номер квартиры"""

    room_id: int = betterproto.int32_field(4)
    """Идентификатор квартиры"""


@dataclass(eq=False, repr=False, config={"extra": "forbid"})
class LoadCodesToDevicesTask(betterproto.Message):
    """
    Задача на добавление кодов на устройства.
     Очередь key.access_control.load_codes_to_devices
    """

    request_id: str = betterproto.string_field(1)
    """Идентификатор запроса"""

    codes: "list[LoadCodesToDevicesTaskCode]" = betterproto.message_field(2)
    """Список кодов"""

    device_ids: "list[int]" = betterproto.int32_field(3)
    """Список идентификаторов устройств"""


@dataclass(eq=False, repr=False, config={"extra": "forbid"})
class LoadCodesToDevicesTaskCode(betterproto.Message):
    """Код"""

    id: int = betterproto.int32_field(1)
    """Идентификатор"""

    code: str = betterproto.string_field(2)
    """Значение кода"""

    room_number: str = betterproto.string_field(3)
    """Номер квартиры"""

    room_id: int = betterproto.int32_field(4)
    """Идентификатор квартиры"""


@dataclass(eq=False, repr=False, config={"extra": "forbid"})
class DeleteRfidsFromDevicesTask(betterproto.Message):
    """
    Задача на удаление ключей с устройств.
     Очередь key.access_control.delete_rfids_from_devices
    """

    request_id: str = betterproto.string_field(1)
    """Идентификатор запроса"""

    rfids: "list[DeleteRfidsFromDevicesTaskRfid]" = betterproto.message_field(2)
    """Список ключей"""

    device_ids: "list[int]" = betterproto.int32_field(3)
    """Список идентификаторов устройств"""

    is_force_delete: "bool | None" = betterproto.message_field(
        4, wraps=betterproto.TYPE_BOOL
    )
    """Удаление без ожидания ответа от устройства"""


@dataclass(eq=False, repr=False, config={"extra": "forbid"})
class DeleteRfidsFromDevicesTaskRfid(betterproto.Message):
    """Ключ"""

    id: int = betterproto.int32_field(1)
    """Идентификатор"""

    key: str = betterproto.string_field(2)
    """Значение ключа"""

    room_number: str = betterproto.string_field(3)
    """Номер квартиры"""

    room_id: int = betterproto.int32_field(4)
    """Идентификатор квартиры"""


@dataclass(eq=False, repr=False, config={"extra": "forbid"})
class DeleteCodesFromDevicesTask(betterproto.Message):
    """
    Задача на удаление кодов с устройств.
     Очередь key.access_control.delete_codes_from_devices
    """

    request_id: str = betterproto.string_field(1)
    """Идентификатор запроса"""

    codes: "list[DeleteCodesFromDevicesTaskCode]" = betterproto.message_field(2)
    """Список кодов"""

    device_ids: "list[int]" = betterproto.int32_field(3)
    """Список идентификаторов устройств"""

    is_force_delete: "bool | None" = betterproto.message_field(
        4, wraps=betterproto.TYPE_BOOL
    )
    """Удаление без ожидания ответа от устройства"""


@dataclass(eq=False, repr=False, config={"extra": "forbid"})
class DeleteCodesFromDevicesTaskCode(betterproto.Message):
    """Код"""

    id: int = betterproto.int32_field(1)
    """Идентификатор"""

    code: str = betterproto.string_field(2)
    """Значение кода"""

    room_number: str = betterproto.string_field(3)
    """Номер квартиры"""

    room_id: int = betterproto.int32_field(4)
    """Идентификатор квартиры"""


@dataclass(eq=False, repr=False, config={"extra": "forbid"})
class PrepareStartTask(betterproto.Message):
    """
    Команда на подготовку и старт оповещения через домофоны.
     Очередь key.access_control.alert.prepare_start
    """

    request_id: str = betterproto.string_field(1)
    """Идентификатор запроса"""

    sound_file_uri: str = betterproto.string_field(2)
    """
    Ссылка на звуковой файл для проигрывания.
     Файл должен лежать на внутреннем хранилище.
     # Диапазон: 2..100
    """

    orpon: int = betterproto.int64_field(3)
    """Идентификатор ОРПОН дома, на котором запускаем проигрывание"""

    tact_play_duration: int = betterproto.int32_field(4)
    """
    Длительность воспроизведения такта в секундах.
     Такт включает в себя проигрывание файла на трубках или на динамике.
     # Диапазон: 0..65536
    """

    tact_repeat_count: int = betterproto.int32_field(5)
    """
    Количество последовательных повторов тактов перед сменой динамика на трубки или наоборот.
     # Диапазон: 0..65536
    """

    play_repeat_count: int = betterproto.int32_field(6)
    """
    Количество дополнительных повторов тактов, т.е. умолчание=0 - это проигрывание одного такта.
     # Диапазон: 0..65536
    """

    play_type: "PrepareStartTaskPlayType" = betterproto.enum_field(7)
    """Тип проигрывания"""


@dataclass(eq=False, repr=False, config={"extra": "forbid"})
class DeleteRfidsFromAllDevicesTask(betterproto.Message):
    """
    Задача на удаление ключей со всех устройств.
     Очередь key.access_control.delete_rfids_from_all_devices
    """

    request_id: str = betterproto.string_field(1)
    """Идентификатор запроса"""

    rfids: "list[DeleteRfidsFromAllDevicesTaskRfid]" = betterproto.message_field(2)
    """Список ключей"""

    is_force_delete: "bool | None" = betterproto.message_field(
        3, wraps=betterproto.TYPE_BOOL
    )
    """Удаление без ожидания ответа от устройства"""


@dataclass(eq=False, repr=False, config={"extra": "forbid"})
class DeleteRfidsFromAllDevicesTaskRfid(betterproto.Message):
    """Ключ"""

    id: int = betterproto.int32_field(1)
    """Идентификатор"""

    key: str = betterproto.string_field(2)
    """Значение ключа"""

    room_number: str = betterproto.string_field(3)
    """Номер квартиры"""

    room_id: int = betterproto.int32_field(4)
    """Идентификатор квартиры"""


@dataclass(eq=False, repr=False, config={"extra": "forbid"})
class DeleteRfidsFromAllDevicesResultTask(betterproto.Message):
    """
    Результат задачи на удаление ключа со всех устройств.
     Очередь key.access_control.delete_rfids_from_all_devices_result
    """

    request_id: str = betterproto.string_field(1)
    """Идентификатор запроса"""

    rfid_id: int = betterproto.int32_field(2)
    """Идентификатор ключа"""

    status_type: "DeleteRfidsFromAllDevicesResultTaskStatusType" = (
        betterproto.enum_field(3)
    )
    """Статус удаления ключа со всех устройств"""


@dataclass(eq=False, repr=False, config={"extra": "forbid"})
class GetSystemStatusResponse(betterproto.Message):
    """Ответ на запрос проверки доступности сервиса"""

    pass


@dataclass(eq=False, repr=False, config={"extra": "forbid"})
class GetSystemStatusRequest(betterproto.Message):
    """Запрос проверки доступности сервиса"""

    pass


@dataclass(eq=False, repr=False, config={"extra": "forbid"})
class PostBroadcastAlertStartRequest(betterproto.Message):
    """Запрос на запуск массового оповещения через домофоны"""

    sound_file_uri: str = betterproto.string_field(1)
    """
    Ссылка на звуковой файл для проигрывания.
     Файл должен лежать на внутреннем хранилище.
     # Диапазон: 2..100
    """

    orpons: "list[int]" = betterproto.int64_field(2)
    """
    Массив ОРПОНов домов, на которых запускаем проигрывание.
     # Диапазон: 1..100
    """

    tact_play_duration: int = betterproto.int32_field(3)
    """
    Длительность воспроизведения такта в секундах.
     Такт включает в себя проигрывание файла на трубках или на динамике.
     # Диапазон: 0..65536
    """

    tact_repeat_count: int = betterproto.int32_field(4)
    """
    Количество последовательных повторов тактов перед сменой динамика на трубки или наоборот.
     # Диапазон: 0..65536
    """

    play_repeat_count: int = betterproto.int32_field(5)
    """
    Количество дополнительных повторов тактов, т.е. умолчание=0 - это проигрывание одного такта.
     # Диапазон: 0..65536
    """

    play_type: "PostBroadcastAlertStartRequestPlayType" = betterproto.enum_field(6)
    """Тип проигрывания"""


@dataclass(eq=False, repr=False, config={"extra": "forbid"})
class PostBroadcastAlertStartResponse(betterproto.Message):
    """Ответ на запрос на запуск массового оповещения через домофоны"""

    error: "PostBroadcastAlertStartResponseError | None" = betterproto.message_field(
        1, optional=True, group="type"
    )
    """Ошибка"""

    @model_validator(mode="after")
    def check_oneof(cls, values):
        return cls._validate_field_groups(values)


@dataclass(eq=False, repr=False, config={"extra": "forbid"})
class PostBroadcastAlertStartResponseError(betterproto.Message):
    """Ошибка запроса"""

    validation: "ValidationError | None" = betterproto.message_field(
        1, optional=True, group="reason"
    )
    """Ошибка валидации"""

    sound_file_not_found: (
        "PostBroadcastAlertStartResponseErrorSoundFileNotFound | None"
    ) = betterproto.message_field(2, optional=True, group="reason")
    """Звуковой файл не найден"""

    @model_validator(mode="after")
    def check_oneof(cls, values):
        return cls._validate_field_groups(values)


@dataclass(eq=False, repr=False, config={"extra": "forbid"})
class PostBroadcastAlertStartResponseErrorSoundFileNotFound(betterproto.Message):
    """Звуковой файл не найден"""

    pass


@dataclass(eq=False, repr=False, config={"extra": "forbid"})
class PostBroadcastAlertStopRequest(betterproto.Message):
    """Запрос на прекращение массового оповещения через домофоны"""

    orpons: "list[int]" = betterproto.int64_field(1)
    """
    Массив ОРПОНов домов, на которых запускаем проигрывание.
     # Диапазон: 1..100
    """


@dataclass(eq=False, repr=False, config={"extra": "forbid"})
class PostBroadcastAlertStopResponse(betterproto.Message):
    """Ответ на запрос на прекращение массового оповещения через домофоны"""

    error: "PostBroadcastAlertStopResponseError | None" = betterproto.message_field(
        1, optional=True, group="type"
    )
    """Ошибка"""

    @model_validator(mode="after")
    def check_oneof(cls, values):
        return cls._validate_field_groups(values)


@dataclass(eq=False, repr=False, config={"extra": "forbid"})
class PostBroadcastAlertStopResponseError(betterproto.Message):
    """Ошибка запроса"""

    validation: "ValidationError | None" = betterproto.message_field(
        1, optional=True, group="reason"
    )
    """Ошибка валидации"""

    @model_validator(mode="after")
    def check_oneof(cls, values):
        return cls._validate_field_groups(values)


@dataclass(eq=False, repr=False, config={"extra": "forbid"})
class Entrance(betterproto.Message):
    """Подъезд"""

    orpon: int = betterproto.int64_field(1)
    """ОРПОН дома"""

    entrance_number: int = betterproto.int32_field(2)
    """
    Номер подъезда.
     # Диапазон: 1..100
    """

    start_room_number: int = betterproto.int32_field(3)
    """
    Номер начального помещения.
     # Диапазон: 1..9999
    """

    rooms_count_per_floor: int = betterproto.int32_field(4)
    """
    Количество помещений на этаже.
     # Диапазон: 1..1000
    """

    floors_count: int = betterproto.int32_field(5)
    """
    Количество этажей.
     # Диапазон: 1..100
    """


@dataclass(eq=False, repr=False, config={"extra": "forbid"})
class EntranceFilter(betterproto.Message):
    """Фильтр подъездов"""

    flatgramm_ids: "list[int]" = betterproto.int32_field(1)
    """По идентификаторам квартирограмм"""

    orpons: "list[int]" = betterproto.int64_field(2)
    """По ОРПОН"""

    company_ids: "list[int]" = betterproto.int32_field(3)
    """По идентификаторам компаний"""

    company_relation_type: "EntranceFilterCompanyRelationType" = betterproto.enum_field(
        4
    )
    """Тип связи компании с подъездами"""


@dataclass(eq=False, repr=False, config={"extra": "forbid"})
class EntrancePaging(betterproto.Message):
    """Постраничный вывод"""

    order_by_type: "EntrancePagingOrderByType" = betterproto.enum_field(1)
    """
    Тип значения сортировки.
     Если значение не передано, то будет взято значение по умолчанию.
     # По умолчанию: ORPON_THEN_ENTRANCE_NUMBER
    """

    direction_type: "EntrancePagingDirectionType" = betterproto.enum_field(2)
    """
    Тип направления сортировки.
     # По умолчанию: DESC
    """

    limit: int = betterproto.int32_field(3)
    """
    Количество записей на страницу.
     Если значение 0 (не передано), то будет взято значение по умолчанию.
     # Диапазон: 0..100.
     # По умолчанию: 20
    """

    offset: int = betterproto.int32_field(4)
    """
    Сдвиг.
     # Диапазон: 0..2147483647
    """


@dataclass(eq=False, repr=False, config={"extra": "forbid"})
class GetEntranceListRequest(betterproto.Message):
    """Запрос получения списка подъездов"""

    filter: "EntranceFilter" = betterproto.message_field(1)
    """Фильтр по подъездам"""

    paging: "EntrancePaging | None" = betterproto.message_field(
        2, optional=True, group="pagination"
    )
    """Стандартный постраничный вывод"""

    @model_validator(mode="after")
    def check_oneof(cls, values):
        return cls._validate_field_groups(values)


@dataclass(eq=False, repr=False, config={"extra": "forbid"})
class GetEntranceListResponse(betterproto.Message):
    """Ответ на запрос на получение списка подъездов"""

    data: "Entrance | None" = betterproto.message_field(1, optional=True, group="type")
    """Подъезд"""

    error: "GetEntranceListResponseError | None" = betterproto.message_field(
        2, optional=True, group="type"
    )
    """Ошибка"""

    @model_validator(mode="after")
    def check_oneof(cls, values):
        return cls._validate_field_groups(values)


@dataclass(eq=False, repr=False, config={"extra": "forbid"})
class GetEntranceListResponseError(betterproto.Message):
    """Ошибка запроса на получение списка подъездов"""

    validation: "ValidationError | None" = betterproto.message_field(
        1, optional=True, group="reason"
    )
    """Ошибка валидации"""

    @model_validator(mode="after")
    def check_oneof(cls, values):
        return cls._validate_field_groups(values)


@dataclass(eq=False, repr=False, config={"extra": "forbid"})
class PutEntranceDeviceAttachRequest(betterproto.Message):
    """Запрос создания связи подъезда и устройства"""

    entrance_device: "EntranceDevice" = betterproto.message_field(1)
    """Связь подъезда и устройства"""


@dataclass(eq=False, repr=False, config={"extra": "forbid"})
class PutEntranceDeviceAttachResponse(betterproto.Message):
    """Ответ на запрос сохранения связи подъезда и устройства"""

    error: "PutEntranceDeviceAttachResponseError | None" = betterproto.message_field(
        1, optional=True, group="type"
    )
    """Ошибка"""

    @model_validator(mode="after")
    def check_oneof(cls, values):
        return cls._validate_field_groups(values)


@dataclass(eq=False, repr=False, config={"extra": "forbid"})
class PutEntranceDeviceAttachResponseError(betterproto.Message):
    """Ошибка запроса на создание связи подъезда и устройства"""

    validation: "ValidationError | None" = betterproto.message_field(
        1, optional=True, group="reason"
    )
    """Ошибка валидации"""

    @model_validator(mode="after")
    def check_oneof(cls, values):
        return cls._validate_field_groups(values)


@dataclass(eq=False, repr=False, config={"extra": "forbid"})
class PutEntranceDeviceDetachRequest(betterproto.Message):
    """Запрос удаления связи подъезда и устройства"""

    entrance_device: "EntranceDevice" = betterproto.message_field(1)
    """Связь подъезда и устройства"""


@dataclass(eq=False, repr=False, config={"extra": "forbid"})
class PutEntranceDeviceDetachResponse(betterproto.Message):
    """Ответ на запрос удаления связи подъезда и устройства"""

    error: "PutEntranceDeviceDetachResponseError | None" = betterproto.message_field(
        1, optional=True, group="type"
    )
    """Ошибка"""

    @model_validator(mode="after")
    def check_oneof(cls, values):
        return cls._validate_field_groups(values)


@dataclass(eq=False, repr=False, config={"extra": "forbid"})
class PutEntranceDeviceDetachResponseError(betterproto.Message):
    """Ошибка запроса на удаления связи подъезда и устройства"""

    validation: "ValidationError | None" = betterproto.message_field(
        1, optional=True, group="reason"
    )
    """Ошибка валидации"""

    @model_validator(mode="after")
    def check_oneof(cls, values):
        return cls._validate_field_groups(values)


@dataclass(eq=False, repr=False, config={"extra": "forbid"})
class PostEntranceRequest(betterproto.Message):
    """Запрос сохранения подъезда"""

    data: "Entrance" = betterproto.message_field(1)
    """Подъезд"""


@dataclass(eq=False, repr=False, config={"extra": "forbid"})
class PostEntranceResponse(betterproto.Message):
    """Ответ на запрос сохранения подъезда"""

    data: "Entrance | None" = betterproto.message_field(1, optional=True, group="type")
    """Подъезд"""

    error: "PostEntranceResponseError | None" = betterproto.message_field(
        2, optional=True, group="type"
    )
    """Ошибка при удалении"""

    @model_validator(mode="after")
    def check_oneof(cls, values):
        return cls._validate_field_groups(values)


@dataclass(eq=False, repr=False, config={"extra": "forbid"})
class PostEntranceResponseError(betterproto.Message):
    """Ошибка сохранения подъезда"""

    validation: "ValidationError | None" = betterproto.message_field(
        1, optional=True, group="reason"
    )
    """Ошибка валидации"""

    @model_validator(mode="after")
    def check_oneof(cls, values):
        return cls._validate_field_groups(values)


@dataclass(eq=False, repr=False, config={"extra": "forbid"})
class DeleteEntranceRequest(betterproto.Message):
    """Запрос на удаление подъезда"""

    orpon: int = betterproto.int64_field(1)
    """ОРПОН дома"""

    entrance_number: int = betterproto.int32_field(2)
    """
    Номер подъезда.
     # Диапазон: 1..100
    """


@dataclass(eq=False, repr=False, config={"extra": "forbid"})
class DeleteEntranceResponse(betterproto.Message):
    """Ответ на запрос удаления подъезда"""

    error: "DeleteEntranceResponseError | None" = betterproto.message_field(
        1, optional=True, group="type"
    )
    """Ошибка при удалении"""

    @model_validator(mode="after")
    def check_oneof(cls, values):
        return cls._validate_field_groups(values)


@dataclass(eq=False, repr=False, config={"extra": "forbid"})
class DeleteEntranceResponseError(betterproto.Message):
    """Ошибка удаления подъезда"""

    validation: "ValidationError | None" = betterproto.message_field(
        1, optional=True, group="reason"
    )
    """Ошибка валидации"""

    linked_devices_exists: "DeleteEntranceResponseErrorLinkedDevicesExists | None" = (
        betterproto.message_field(2, optional=True, group="reason")
    )
    """Существуют связанные устройства"""

    @model_validator(mode="after")
    def check_oneof(cls, values):
        return cls._validate_field_groups(values)


@dataclass(eq=False, repr=False, config={"extra": "forbid"})
class DeleteEntranceResponseErrorLinkedDevicesExists(betterproto.Message):
    """
    Существуют устройства, связанные с квартирами данного подъезда.
     Следует отвязать устройства перед удалением подъезда
    """

    pass


@dataclass(eq=False, repr=False, config={"extra": "forbid"})
class EntranceDevice(betterproto.Message):
    """
    Связка подъезда и устройства.
     Реализуется через связь всех помещений в подъезде и устройства
    """

    orpon: int = betterproto.int64_field(1)
    """ОРПОН дома"""

    entrance_number: int = betterproto.int32_field(2)
    """
    Номер подъезда.
     # Диапазон: 1..100
    """

    device_id: int = betterproto.int32_field(3)
    """
    Идентификатор устройства.
     # Диапазон: 1..2147483647
    """

    relation_type: "EntranceDeviceRelationType" = betterproto.enum_field(4)
    """
    Тип связки.
     Игнорируется в методах создания и удаления связи
    """


@dataclass(eq=False, repr=False, config={"extra": "forbid"})
class EntranceDeviceFilter(betterproto.Message):
    """Фильтр связок подъезд-устройство"""

    flatgramm_ids: "list[int]" = betterproto.int32_field(1)
    """По идентификаторам квартирограмм"""

    orpons: "list[int]" = betterproto.int64_field(2)
    """По ОРПОН"""

    entrance_numbers: "list[int]" = betterproto.int32_field(3)
    """По номерам подъезда"""

    device_ids: "list[int]" = betterproto.int32_field(4)
    """По идентификаторам привязанных устройств"""


@dataclass(eq=False, repr=False, config={"extra": "forbid"})
class EntranceDevicePaging(betterproto.Message):
    """Постраничный вывод"""

    order_by_type: "EntranceDevicePagingOrderByType" = betterproto.enum_field(1)
    """
    Тип значения сортировки.
     Если значение не передано, то будет взято значение по умолчанию.
     # По умолчанию: ORPON_THEN_ENTRANCE_NUMBER
    """

    direction_type: "EntranceDevicePagingDirectionType" = betterproto.enum_field(2)
    """
    Тип направления сортировки.
     # По умолчанию: DESC
    """

    limit: int = betterproto.int32_field(3)
    """
    Количество записей на страницу.
     Если значение 0 (не передано), то будет взято значение по умолчанию.
     # Диапазон: 0..100.
     # По умолчанию: 20
    """

    offset: int = betterproto.int32_field(4)
    """
    Сдвиг.
     # Диапазон: 0..2147483647
    """


@dataclass(eq=False, repr=False, config={"extra": "forbid"})
class GetEntranceDeviceListRequest(betterproto.Message):
    """Запрос на получение связок подъезд-устройство"""

    filter: "EntranceDeviceFilter" = betterproto.message_field(1)
    """Фильтр по связкам подъезд-устройство"""

    paging: "EntranceDevicePaging | None" = betterproto.message_field(
        2, optional=True, group="pagination"
    )
    """Стандартный постраничный вывод"""

    @model_validator(mode="after")
    def check_oneof(cls, values):
        return cls._validate_field_groups(values)


@dataclass(eq=False, repr=False, config={"extra": "forbid"})
class GetEntranceDeviceListResponse(betterproto.Message):
    """Ответ на запрос на получение списка связок подъезд-устройство"""

    data: "EntranceDevice | None" = betterproto.message_field(
        1, optional=True, group="type"
    )
    """Связка подъезд-устройство"""

    error: "GetEntranceDeviceListResponseError | None" = betterproto.message_field(
        2, optional=True, group="type"
    )
    """Ошибка"""

    @model_validator(mode="after")
    def check_oneof(cls, values):
        return cls._validate_field_groups(values)


@dataclass(eq=False, repr=False, config={"extra": "forbid"})
class GetEntranceDeviceListResponseError(betterproto.Message):
    """Ошибка запроса на получение списка связок подъезд-устройство"""

    validation: "ValidationError | None" = betterproto.message_field(
        1, optional=True, group="reason"
    )
    """Ошибка валидации"""

    @model_validator(mode="after")
    def check_oneof(cls, values):
        return cls._validate_field_groups(values)


@dataclass(eq=False, repr=False, config={"extra": "forbid"})
class Building(betterproto.Message):
    """Дом"""

    id: int = betterproto.int32_field(1)
    """Идентификатор дома"""

    rf_id: int = betterproto.int32_field(2)
    """Идентификатор РФ"""

    mrf_id: int = betterproto.int32_field(3)
    """Идентификатор МРФ"""

    orpon: int = betterproto.int64_field(4)
    """ОРПОН"""

    city: str = betterproto.string_field(5)
    """Город"""

    street: str = betterproto.string_field(6)
    """Улица"""

    number: str = betterproto.string_field(7)
    """Номер дома"""

    part: str = betterproto.string_field(8)
    """Корпус"""

    company_id: int = betterproto.int32_field(9)
    """Идентификатор компании"""

    prefix: str = betterproto.string_field(10)
    """Префикс"""

    created_at: datetime = betterproto.message_field(11)
    """
    Дата создания.
     # Тип: DateTime
    """

    deleted_at: datetime = betterproto.message_field(12)
    """
    Дата удаления.
     # Тип: DateTime
    """

    flatgramm_id: int = betterproto.int32_field(13)
    """Идентификатор квартирограммы"""

    city_orpon: int = betterproto.int64_field(14)
    """ОРПОН города, в котором находится дом"""

    fias: "str | None" = betterproto.message_field(15, wraps=betterproto.TYPE_STRING)
    """
    Идентификатор в федеральной информационной адресной системе.
     Тип: Guid
    """

    district: "str | None" = betterproto.message_field(
        16, wraps=betterproto.TYPE_STRING
    )
    """
    Наименование района города.
     # Диапазон: 0..200
    """

    unom: "int | None" = betterproto.message_field(17, wraps=betterproto.TYPE_INT64)
    """
    Уникальный номер адреса.
     # Диапазон: 0..9999999999
    """

    region_orpon: int = betterproto.int64_field(18)
    """ОРПОН региона"""

    utc_offset: int = betterproto.int32_field(19)
    """
    Смещение таймзоны в минутах.
     # Диапазон: -720..840
    """

    is_key_purchase_possible_in_sale_points: bool = betterproto.bool_field(20)
    """
    Флаг указывает на то могут ли жители этого дома приобрести ключи домофона в партнёрских салонах или на маркетплейсах
    """

    is_key_purchase_possible_in_management_company: bool = betterproto.bool_field(21)
    """
    Флаг указывает на то могут ли жители этого дома приобретать ключи через управляющую компанию
    """

    is_key_purchase_possible_in_intercom_company: bool = betterproto.bool_field(22)
    """
    Флаг указывает на то могут ли жители этого дома приобрести ключи напрямую у домофонной компании
    """

    is_rfid_mifare_supported: bool = betterproto.bool_field(23)
    """
    Флаг указывает на то поддерживает ли дом использование RFID-меток с типом MIFARE
    """

    area: "str | None" = betterproto.message_field(24, wraps=betterproto.TYPE_STRING)
    """
    Наименование муниципального района.
     # Диапазон: 0..64
    """

    area_orpon: "int | None" = betterproto.message_field(
        25, wraps=betterproto.TYPE_INT64
    )
    """
    ОРПОН муниципального района.
     # Диапазон: 0..9999999999
    """

    area_kladr: "str | None" = betterproto.message_field(
        26, wraps=betterproto.TYPE_STRING
    )
    """
    КЛАДР муниципального района.
     # Диапазон: 0..32
    """

    capital_marker: "int | None" = betterproto.message_field(
        27, wraps=betterproto.TYPE_INT32
    )
    """
    Признак принадлежности населённого пункта к столичному статусу.
     1 — центр района.
     2 — центр региона.
     3 — центр района и региона.
     4 — центральный район региона.
     0 — ничего из перечисленного.
     # Диапазон: 0..4
    """

    city_kladr: "str | None" = betterproto.message_field(
        28, wraps=betterproto.TYPE_STRING
    )
    """
    КЛАДР-код города.
     # Диапазон: 0..17
    """

    kladr: "str | None" = betterproto.message_field(29, wraps=betterproto.TYPE_STRING)
    """
    КЛАДР-код строения.
     # Диапазон: 0..17
    """

    fias_level: "int | None" = betterproto.message_field(
        30, wraps=betterproto.TYPE_INT32
    )
    """
    Уровень детализации, до которого адрес найден в ФИАС.
     0 — страна.
     1 — регион.
     3 — район.
     4 — город.
     5 — район города.
     6 — населенный пункт.
     7 — улица.
     8 — дом.
     9 — квартира.
     65 — планировочная структура.
     90 — доп. территория.
     91 — улица в доп. территории.
     -1 — иностранный или пустой.
     # Диапазон: -1..99
    """

    fias_actuality_state: "int | None" = betterproto.message_field(
        31, wraps=betterproto.TYPE_INT32
    )
    """
    Уровень детализации, до которого адрес найден в ФИАС.
     0 — актуальный.
     1-50 — переименован.
     51 — переподчинен.
     99 — удален.
     # Диапазон: 0..99
    """

    geo_lat: "float | None" = betterproto.message_field(
        32, wraps=betterproto.TYPE_DOUBLE
    )
    """Координаты: широта"""

    geo_lon: "float | None" = betterproto.message_field(
        33, wraps=betterproto.TYPE_DOUBLE
    )
    """Координаты: долгота"""

    okato: "int | None" = betterproto.message_field(34, wraps=betterproto.TYPE_INT32)
    """Код ОКАТО"""

    oktmo: "int | None" = betterproto.message_field(35, wraps=betterproto.TYPE_INT32)
    """Код ОКТМО"""

    postal_code: "int | None" = betterproto.message_field(
        36, wraps=betterproto.TYPE_INT32
    )
    """Почтовый индекс"""

    region: "str | None" = betterproto.message_field(37, wraps=betterproto.TYPE_STRING)
    """
    Наименование региона.
     # Диапазон: 0..64
    """

    region_kladr: "str | None" = betterproto.message_field(
        38, wraps=betterproto.TYPE_STRING
    )
    """
    КЛАДР-код региона.
     # Диапазон: 0..32
    """

    street_kladr: "str | None" = betterproto.message_field(
        39, wraps=betterproto.TYPE_STRING
    )
    """
    КЛАДР-код улицы.
     # Диапазон: 0..32
    """

    street_orpon: "int | None" = betterproto.message_field(
        40, wraps=betterproto.TYPE_INT64
    )
    """
    ОРПОН улицы.
     # Диапазон: 0..9999999999
    """


@dataclass(eq=False, repr=False, config={"extra": "forbid"})
class GetBuildingRequest(betterproto.Message):
    """Запрос получения дома"""

    id: int = betterproto.int32_field(1)
    """Идентификатор дома"""


@dataclass(eq=False, repr=False, config={"extra": "forbid"})
class GetBuildingResponse(betterproto.Message):
    """Ответ на запрос получения дома"""

    data: "Building | None" = betterproto.message_field(1, optional=True, group="type")
    """Квартира"""

    error: "GetBuildingResponseError | None" = betterproto.message_field(
        2, optional=True, group="type"
    )
    """Ошибка"""

    @model_validator(mode="after")
    def check_oneof(cls, values):
        return cls._validate_field_groups(values)


@dataclass(eq=False, repr=False, config={"extra": "forbid"})
class GetBuildingResponseError(betterproto.Message):
    """Ошибка"""

    validation: "ValidationError | None" = betterproto.message_field(
        1, optional=True, group="reason"
    )
    """Ошибка валидации"""

    @model_validator(mode="after")
    def check_oneof(cls, values):
        return cls._validate_field_groups(values)


@dataclass(eq=False, repr=False, config={"extra": "forbid"})
class GetBuildingListRequest(betterproto.Message):
    """Запрос получения списка домов"""

    filter: "BuildingFilter" = betterproto.message_field(1)
    """Фильтр"""

    paging: "BuildingPaging | None" = betterproto.message_field(
        2, optional=True, group="pagination"
    )
    """Стандартный постраничный вывод"""

    @model_validator(mode="after")
    def check_oneof(cls, values):
        return cls._validate_field_groups(values)


@dataclass(eq=False, repr=False, config={"extra": "forbid"})
class GetBuildingListResponse(betterproto.Message):
    """Ответ на запрос получения списка домов"""

    data: "Building | None" = betterproto.message_field(1, optional=True, group="type")
    """Квартира"""

    error: "GetBuildingListResponseError | None" = betterproto.message_field(
        2, optional=True, group="type"
    )
    """Ошибка"""

    @model_validator(mode="after")
    def check_oneof(cls, values):
        return cls._validate_field_groups(values)


@dataclass(eq=False, repr=False, config={"extra": "forbid"})
class GetBuildingListResponseError(betterproto.Message):
    """Ошибка"""

    validation: "ValidationError | None" = betterproto.message_field(
        1, optional=True, group="reason"
    )
    """Ошибка валидации"""

    @model_validator(mode="after")
    def check_oneof(cls, values):
        return cls._validate_field_groups(values)


@dataclass(eq=False, repr=False, config={"extra": "forbid"})
class GetBuildingCountRequest(betterproto.Message):
    """Запрос получения количества домов"""

    filter: "BuildingFilter" = betterproto.message_field(1)
    """Фильтр"""


@dataclass(eq=False, repr=False, config={"extra": "forbid"})
class GetBuildingCountResponse(betterproto.Message):
    """Ответ на запрос получения количества домов"""

    data: "int | None" = betterproto.int32_field(1, optional=True, group="type")
    """Количество"""

    @model_validator(mode="after")
    def check_oneof(cls, values):
        return cls._validate_field_groups(values)


@dataclass(eq=False, repr=False, config={"extra": "forbid"})
class BuildingFilter(betterproto.Message):
    """Фильтр по домам"""

    mrf_ids: "list[int]" = betterproto.int32_field(1)
    """По идентификаторам МРФ"""

    rf_ids: "list[int]" = betterproto.int32_field(2)
    """По идентификаторам РФ"""

    device_ids: "list[int]" = betterproto.int32_field(3)
    """По идентификаторам устройств"""

    flatgramm_ids: "list[int]" = betterproto.int32_field(4)
    """По идентификаторам квартирограмм"""

    orpons: "list[int]" = betterproto.int64_field(5)
    """По орпонам"""


@dataclass(eq=False, repr=False, config={"extra": "forbid"})
class BuildingPaging(betterproto.Message):
    """Постраничный вывод"""

    order_by_type: "BuildingPagingOrderByType" = betterproto.enum_field(1)
    """
    Тип значения сортировки.
     Если значение не передано, то будет взято значение по умолчанию.
     # По умолчанию: CREATED_AT
    """

    direction_type: "BuildingPagingDirectionType" = betterproto.enum_field(2)
    """
    Тип направления сортировки.
     # По умолчанию: DESC
    """

    limit: int = betterproto.int32_field(3)
    """
    Количество записей на страницу.
     Если значение 0 (не передано), то будет взято значение по умолчанию.
     # Диапазон: 0..100.
     # По умолчанию: 20
    """

    offset: int = betterproto.int32_field(4)
    """
    Сдвиг.
     # Диапазон: 0..2147483647
    """


@dataclass(eq=False, repr=False, config={"extra": "forbid"})
class BuildingSubscriptionMode(betterproto.Message):
    """Агрегированный статус режима работы с подписками на доме"""

    subscription_mode_type: "BuildingSubscriptionModeSubscriptionModeType" = (
        betterproto.enum_field(1)
    )
    """Режим работы с подписками на доме"""


@dataclass(eq=False, repr=False, config={"extra": "forbid"})
class GetBuildingOrponSubscriptionModeRequest(betterproto.Message):
    """
    Запрос получения агрегированного статуса режима работы с подписками дома
    """

    orpon: int = betterproto.int64_field(1)
    """
    ОРПОН.
     # Диапазон: 1..9223372036854775807
    """


@dataclass(eq=False, repr=False, config={"extra": "forbid"})
class GetBuildingOrponSubscriptionModeResponse(betterproto.Message):
    """
    Ответ на запрос получения агрегированного статуса режима работы с подписками дома
    """

    data: "BuildingSubscriptionMode | None" = betterproto.message_field(
        1, optional=True, group="type"
    )
    """Агрегированный статус режима работы с подписками дома"""

    error: "GetBuildingOrponSubscriptionModeResponseError | None" = (
        betterproto.message_field(2, optional=True, group="type")
    )
    """Ошибка"""

    @model_validator(mode="after")
    def check_oneof(cls, values):
        return cls._validate_field_groups(values)


@dataclass(eq=False, repr=False, config={"extra": "forbid"})
class GetBuildingOrponSubscriptionModeResponseError(betterproto.Message):
    """Ошибка"""

    validation: "ValidationError | None" = betterproto.message_field(
        1, optional=True, group="reason"
    )
    """Ошибка валидации"""

    @model_validator(mode="after")
    def check_oneof(cls, values):
        return cls._validate_field_groups(values)


@dataclass(eq=False, repr=False, config={"extra": "forbid"})
class GetBuildingOrponExistsRequest(betterproto.Message):
    """Запрос проверки существования дома по ОРПОН"""

    orpon: int = betterproto.int64_field(1)
    """
    ОРПОН дома.
     # Диапазон: 1..9223372036854775807
    """


@dataclass(eq=False, repr=False, config={"extra": "forbid"})
class GetBuildingOrponExistsResponse(betterproto.Message):
    """Ответ на запрос проверки существования дома по ОРПОН"""

    data: "bool | None" = betterproto.bool_field(1, optional=True, group="type")
    """
    Результат проверки: true - если дом существует, false - в противном случае
    """

    error: "GetBuildingOrponExistsResponseError | None" = betterproto.message_field(
        2, optional=True, group="type"
    )
    """Ошибка"""

    @model_validator(mode="after")
    def check_oneof(cls, values):
        return cls._validate_field_groups(values)


@dataclass(eq=False, repr=False, config={"extra": "forbid"})
class GetBuildingOrponExistsResponseError(betterproto.Message):
    """Ошибка"""

    validation: "ValidationError | None" = betterproto.message_field(
        1, optional=True, group="reason"
    )
    """Ошибка валидации"""

    @model_validator(mode="after")
    def check_oneof(cls, values):
        return cls._validate_field_groups(values)


@dataclass(eq=False, repr=False, config={"extra": "forbid"})
class Flatgramm(betterproto.Message):
    """Облегченная квартирограмма"""

    id: int = betterproto.int32_field(1)
    """Идентификатор"""

    title: str = betterproto.string_field(2)
    """Наименование"""

    company_id: int = betterproto.int32_field(3)
    """Идентификатор компании - владельца"""

    created_at: datetime = betterproto.message_field(4)
    """
    Дата и время создания.
     # Тип: DateTime
    """

    changed_at: datetime = betterproto.message_field(5)
    """
    Дата последнего изменения.
     Заполняется и обновляется сервером.
     Заполняется при создании и изменении.
     Является версией объекта.
     # Тип: DateTime
    """


@dataclass(eq=False, repr=False, config={"extra": "forbid"})
class GetFlatgrammRequest(betterproto.Message):
    """Запрос на получение упрощенной квартирограммы"""

    id: int = betterproto.int32_field(1)
    """Идентификатор"""


@dataclass(eq=False, repr=False, config={"extra": "forbid"})
class GetFlatgrammResponse(betterproto.Message):
    """Ответ на запрос на получение упрощенной квартирограммы"""

    data: "Flatgramm | None" = betterproto.message_field(1, optional=True, group="type")
    """Упрощенная квартирограмма"""

    error: "GetFlatgrammResponseError | None" = betterproto.message_field(
        2, optional=True, group="type"
    )
    """Ошибка"""

    @model_validator(mode="after")
    def check_oneof(cls, values):
        return cls._validate_field_groups(values)


@dataclass(eq=False, repr=False, config={"extra": "forbid"})
class GetFlatgrammResponseError(betterproto.Message):
    """Ошибка запроса получения списка упрощенных квартирограмм"""

    validation: "ValidationError | None" = betterproto.message_field(
        1, optional=True, group="reason"
    )
    """Ошибка валидации"""

    @model_validator(mode="after")
    def check_oneof(cls, values):
        return cls._validate_field_groups(values)


@dataclass(eq=False, repr=False, config={"extra": "forbid"})
class GetFlatgrammListRequest(betterproto.Message):
    """Запрос на получение списка упрощенных квартирограмм"""

    filter: "FlatgrammFilter" = betterproto.message_field(1)
    """Фильтр"""

    paging: "FlatgrammPaging | None" = betterproto.message_field(
        2, optional=True, group="pagination"
    )
    """Стандартный постраничный вывод"""

    @model_validator(mode="after")
    def check_oneof(cls, values):
        return cls._validate_field_groups(values)


@dataclass(eq=False, repr=False, config={"extra": "forbid"})
class GetFlatgrammListResponse(betterproto.Message):
    """Ответ на запрос на получение списка упрощенных квартирограмм"""

    data: "Flatgramm | None" = betterproto.message_field(1, optional=True, group="type")
    """Упрощенная квартирограмма"""

    error: "GetFlatgrammListResponseError | None" = betterproto.message_field(
        2, optional=True, group="type"
    )
    """Ошибка"""

    @model_validator(mode="after")
    def check_oneof(cls, values):
        return cls._validate_field_groups(values)


@dataclass(eq=False, repr=False, config={"extra": "forbid"})
class GetFlatgrammListResponseError(betterproto.Message):
    """Ошибка запроса получения списка упрощенных квартирограмм"""

    validation: "ValidationError | None" = betterproto.message_field(
        1, optional=True, group="reason"
    )
    """Ошибка валидации"""

    @model_validator(mode="after")
    def check_oneof(cls, values):
        return cls._validate_field_groups(values)


@dataclass(eq=False, repr=False, config={"extra": "forbid"})
class GetFlatgrammCountRequest(betterproto.Message):
    """Запрос получения количества упрощенных квартирограмм"""

    filter: "FlatgrammFilter" = betterproto.message_field(1)
    """Фильтр"""


@dataclass(eq=False, repr=False, config={"extra": "forbid"})
class GetFlatgrammCountResponse(betterproto.Message):
    """Ответ на запрос получения количества упрощенных квартирограмм"""

    data: "int | None" = betterproto.int32_field(1, optional=True, group="type")
    """Всего упрощенных квартирограмм"""

    @model_validator(mode="after")
    def check_oneof(cls, values):
        return cls._validate_field_groups(values)


@dataclass(eq=False, repr=False, config={"extra": "forbid"})
class FlatgrammFilter(betterproto.Message):
    """Фильтр квартирограмм"""

    company_ids: "list[int]" = betterproto.int32_field(1)
    """
    По идентификаторам компаний.
     Фильтрация среди компаний, тип связи компании и КВГ определяется по полю company_relation_types.
     Если company_relation_types не передан, то учитываются все значения типа FlatgrammCompanyRelation.Type
    """

    text: str = betterproto.string_field(2)
    """
    Поиск по тексту.
     Если значение не передано то поиск по нему не производится.
     # Диапазон: 3..64.
     # Поиск производится по полям:
     # - Наименование
    """

    dc_company_ids: "list[int]" = betterproto.int32_field(3)
    """
    По идентификаторам компаний.
     Фильтрация среди компаний, привязанных как домофонные компании
    """

    flatgramm_company_relation_types: "list[FlatgrammCompanyRelationType]" = (
        betterproto.enum_field(4)
    )
    """По типу связи квартирограмм и компаний"""

    def __post_init__(self) -> None:
        super().__post_init__()
        if self.is_set("dc_company_ids"):
            warnings.warn(
                "FlatgrammFilter.dc_company_ids is deprecated", DeprecationWarning
            )


@dataclass(eq=False, repr=False, config={"extra": "forbid"})
class FlatgrammPaging(betterproto.Message):
    """Постраничный вывод"""

    order_by_type: "FlatgrammPagingOrderByType" = betterproto.enum_field(1)
    """
    Тип значения сортировки.
     Если значение не передано, то будет взято значение по умолчанию.
     # По умолчанию: CHANGED_AT
    """

    direction_type: "FlatgrammPagingDirectionType" = betterproto.enum_field(2)
    """
    Тип направления сортировки.
     # По умолчанию: DESC
    """

    limit: int = betterproto.int32_field(3)
    """
    Количество записей на страницу.
     Если значение 0 (не передано), то будет взято значение по умолчанию.
     # Диапазон: 0..100.
     # По умолчанию: 20
    """

    offset: int = betterproto.int32_field(4)
    """
    Сдвиг.
     # Диапазон: 0..2147483647
    """


@dataclass(eq=False, repr=False, config={"extra": "forbid"})
class GetFlatgrammDcCompanyListRequest(betterproto.Message):
    """Запрос получения списка"""

    filter: "DcCompanyFlatgrammFilter" = betterproto.message_field(1)
    """Фильтр связей квартирограмм и домофонной компании"""

    paging: "DcCompanyFlatgrammPaging | None" = betterproto.message_field(
        2, optional=True, group="pagination"
    )
    """Пагинация"""

    def __post_init__(self) -> None:
        warnings.warn(
            "GetFlatgrammDcCompanyListRequest is deprecated", DeprecationWarning
        )
        super().__post_init__()

    @model_validator(mode="after")
    def check_oneof(cls, values):
        return cls._validate_field_groups(values)


@dataclass(eq=False, repr=False, config={"extra": "forbid"})
class GetFlatgrammCompanyRelationListRequest(betterproto.Message):
    """Запрос получения списка"""

    filter: "FlatgrammCompanyRelationFilter" = betterproto.message_field(1)
    """Фильтр связей квартирограмм и компаний"""

    paging: "FlatgrammCompanyRelationPaging | None" = betterproto.message_field(
        2, optional=True, group="pagination"
    )
    """Пагинация"""

    @model_validator(mode="after")
    def check_oneof(cls, values):
        return cls._validate_field_groups(values)


@dataclass(eq=False, repr=False, config={"extra": "forbid"})
class GetFlatgrammDcCompanyCountRequest(betterproto.Message):
    """
    Запрос получения количества связей квартирограмм и домофонной компании
    """

    filter: "DcCompanyFlatgrammFilter" = betterproto.message_field(1)
    """Фильтр связей квартирограмм и домофонной компании"""

    def __post_init__(self) -> None:
        warnings.warn(
            "GetFlatgrammDcCompanyCountRequest is deprecated", DeprecationWarning
        )
        super().__post_init__()


@dataclass(eq=False, repr=False, config={"extra": "forbid"})
class GetFlatgrammCompanyRelationCountRequest(betterproto.Message):
    """Запрос получения количества связей квартирограмм и компаний"""

    filter: "FlatgrammCompanyRelationFilter" = betterproto.message_field(1)
    """Фильтр связей квартирограмм и компании"""


@dataclass(eq=False, repr=False, config={"extra": "forbid"})
class GetFlatgrammDcCompanyCountResponse(betterproto.Message):
    """
    Ответ на запрос получения количества связей квартирограмм и домофонной компании
    """

    error: "GetFlatgrammDcCompanyCountResponseError | None" = betterproto.message_field(
        1, optional=True, group="type"
    )
    """Ошибка"""

    data: "int | None" = betterproto.int32_field(2, optional=True, group="type")
    """Всего связей квартирограмм и домофонной компании"""

    def __post_init__(self) -> None:
        warnings.warn(
            "GetFlatgrammDcCompanyCountResponse is deprecated", DeprecationWarning
        )
        super().__post_init__()

    @model_validator(mode="after")
    def check_oneof(cls, values):
        return cls._validate_field_groups(values)


@dataclass(eq=False, repr=False, config={"extra": "forbid"})
class GetFlatgrammDcCompanyCountResponseError(betterproto.Message):
    """Ошибка"""

    validation: "ValidationError | None" = betterproto.message_field(
        1, optional=True, group="reason"
    )
    """Ошибка валидации"""

    @model_validator(mode="after")
    def check_oneof(cls, values):
        return cls._validate_field_groups(values)


@dataclass(eq=False, repr=False, config={"extra": "forbid"})
class GetFlatgrammCompanyRelationCountResponse(betterproto.Message):
    """Ответ на запрос получения количества связей квартирограмм и компаний"""

    error: "GetFlatgrammCompanyRelationCountResponseError | None" = (
        betterproto.message_field(1, optional=True, group="type")
    )
    """Ошибка"""

    data: "int | None" = betterproto.int32_field(2, optional=True, group="type")
    """Всего связей квартирограмм и компаний"""

    @model_validator(mode="after")
    def check_oneof(cls, values):
        return cls._validate_field_groups(values)


@dataclass(eq=False, repr=False, config={"extra": "forbid"})
class GetFlatgrammCompanyRelationCountResponseError(betterproto.Message):
    """Ошибка"""

    validation: "ValidationError | None" = betterproto.message_field(
        1, optional=True, group="reason"
    )
    """Ошибка валидации"""

    @model_validator(mode="after")
    def check_oneof(cls, values):
        return cls._validate_field_groups(values)


@dataclass(eq=False, repr=False, config={"extra": "forbid"})
class DcCompanyFlatgrammPaging(betterproto.Message):
    """Пагинация квартирограмм и домофонной компании"""

    order_by_type: "DcCompanyFlatgrammPagingOrderByType" = betterproto.enum_field(1)
    """
    Тип значения сортировки.
     По умолчанию: COMPANY_ID
    """

    direction_type: "DcCompanyFlatgrammPagingDirectionType" = betterproto.enum_field(2)
    """
    Тип направления сортировки.
     По умолчанию: DESC
    """

    limit: int = betterproto.int32_field(3)
    """
    Количество записей на страницу.
     Минимальное значение: 1.
     Максимальное значение: 100.
     По умолчанию: 20.
     Если значение 0 (не передано), то выставляем значение по умолчанию
    """

    offset: int = betterproto.int32_field(4)
    """
    Сдвиг.
     По умолчанию: 0
    """

    def __post_init__(self) -> None:
        warnings.warn("DcCompanyFlatgrammPaging is deprecated", DeprecationWarning)
        super().__post_init__()


@dataclass(eq=False, repr=False, config={"extra": "forbid"})
class FlatgrammCompanyRelationPaging(betterproto.Message):
    """Пагинация квартирограмм и компаний"""

    order_by_type: "FlatgrammCompanyRelationPagingOrderByType" = betterproto.enum_field(
        1
    )
    """
    Тип значения сортировки.
     По умолчанию: COMPANY_ID
    """

    direction_type: "FlatgrammCompanyRelationPagingDirectionType" = (
        betterproto.enum_field(2)
    )
    """
    Тип направления сортировки.
     По умолчанию: DESC
    """

    limit: int = betterproto.int32_field(3)
    """
    Количество записей на страницу.
     Минимальное значение: 1.
     Максимальное значение: 100.
     По умолчанию: 20.
     Если значение 0 (не передано), то выставляем значение по умолчанию
    """

    offset: int = betterproto.int32_field(4)
    """
    Сдвиг.
     По умолчанию: 0
    """


@dataclass(eq=False, repr=False, config={"extra": "forbid"})
class GetFlatgrammDcCompanyListResponse(betterproto.Message):
    """
    Ответ на запрос получения списка связей квартирограмм и домофонной компании
    """

    error: "GetFlatgrammDcCompanyListResponseError | None" = betterproto.message_field(
        1, optional=True, group="type"
    )
    """Ошибка"""

    data: "DcCompanyFlatgramm | None" = betterproto.message_field(
        2, optional=True, group="type"
    )
    """Связь квартирограммы и домофонной компании"""

    def __post_init__(self) -> None:
        warnings.warn(
            "GetFlatgrammDcCompanyListResponse is deprecated", DeprecationWarning
        )
        super().__post_init__()

    @model_validator(mode="after")
    def check_oneof(cls, values):
        return cls._validate_field_groups(values)


@dataclass(eq=False, repr=False, config={"extra": "forbid"})
class GetFlatgrammDcCompanyListResponseError(betterproto.Message):
    """Ошибка"""

    validation: "ValidationError | None" = betterproto.message_field(
        1, optional=True, group="reason"
    )
    """Ошибка валидации"""

    @model_validator(mode="after")
    def check_oneof(cls, values):
        return cls._validate_field_groups(values)


@dataclass(eq=False, repr=False, config={"extra": "forbid"})
class GetFlatgrammCompanyRelationListResponse(betterproto.Message):
    """Ответ на запрос получения списка связей квартирограмм и компаний"""

    error: "GetFlatgrammCompanyRelationListResponseError | None" = (
        betterproto.message_field(1, optional=True, group="type")
    )
    """Ошибка"""

    data: "FlatgrammCompanyRelation | None" = betterproto.message_field(
        2, optional=True, group="type"
    )
    """Связь квартирограммы и компании"""

    @model_validator(mode="after")
    def check_oneof(cls, values):
        return cls._validate_field_groups(values)


@dataclass(eq=False, repr=False, config={"extra": "forbid"})
class GetFlatgrammCompanyRelationListResponseError(betterproto.Message):
    """Ошибка"""

    validation: "ValidationError | None" = betterproto.message_field(
        1, optional=True, group="reason"
    )
    """Ошибка валидации"""

    @model_validator(mode="after")
    def check_oneof(cls, values):
        return cls._validate_field_groups(values)


@dataclass(eq=False, repr=False, config={"extra": "forbid"})
class PutFlatgrammDcCompanyAttachRequest(betterproto.Message):
    """Запрос сохранения связей квартирограммы и домофонной компании"""

    dc_company_flatgramm: "DcCompanyFlatgramm" = betterproto.message_field(1)
    """Связь квартирограммы и домофонной компании"""

    def __post_init__(self) -> None:
        warnings.warn(
            "PutFlatgrammDcCompanyAttachRequest is deprecated", DeprecationWarning
        )
        super().__post_init__()


@dataclass(eq=False, repr=False, config={"extra": "forbid"})
class PutFlatgrammCompanyRelationAttachRequest(betterproto.Message):
    """Запрос сохранения связей квартирограммы и компании"""

    flatgramm_company_relation: "FlatgrammCompanyRelation" = betterproto.message_field(
        1
    )
    """Связь квартирограммы и компании"""


@dataclass(eq=False, repr=False, config={"extra": "forbid"})
class PutFlatgrammDcCompanyAttachResponse(betterproto.Message):
    """
    Ответ на запрос сохранения связи квартирограммы и домофонной компании
    """

    error: "PutFlatgrammDcCompanyAttachResponseError | None" = (
        betterproto.message_field(1, optional=True, group="type")
    )
    """Ошибка"""

    def __post_init__(self) -> None:
        warnings.warn(
            "PutFlatgrammDcCompanyAttachResponse is deprecated", DeprecationWarning
        )
        super().__post_init__()

    @model_validator(mode="after")
    def check_oneof(cls, values):
        return cls._validate_field_groups(values)


@dataclass(eq=False, repr=False, config={"extra": "forbid"})
class PutFlatgrammDcCompanyAttachResponseError(betterproto.Message):
    """Ошибка запроса сохранения связи квартирограммы и домофонной компании"""

    validation: "ValidationError | None" = betterproto.message_field(
        1, optional=True, group="reason"
    )
    """Ошибка валидации"""

    @model_validator(mode="after")
    def check_oneof(cls, values):
        return cls._validate_field_groups(values)


@dataclass(eq=False, repr=False, config={"extra": "forbid"})
class PutFlatgrammCompanyRelationAttachResponse(betterproto.Message):
    """Ответ на запрос сохранения связи квартирограммы и компании"""

    error: "PutFlatgrammCompanyRelationAttachResponseError | None" = (
        betterproto.message_field(1, optional=True, group="type")
    )
    """Ошибка"""

    @model_validator(mode="after")
    def check_oneof(cls, values):
        return cls._validate_field_groups(values)


@dataclass(eq=False, repr=False, config={"extra": "forbid"})
class PutFlatgrammCompanyRelationAttachResponseError(betterproto.Message):
    """Ошибка запроса сохранения связи квартирограммы и компании"""

    validation: "ValidationError | None" = betterproto.message_field(
        1, optional=True, group="reason"
    )
    """Ошибка валидации"""

    @model_validator(mode="after")
    def check_oneof(cls, values):
        return cls._validate_field_groups(values)


@dataclass(eq=False, repr=False, config={"extra": "forbid"})
class PutFlatgrammDcCompanyDetachRequest(betterproto.Message):
    """Запрос удаления связей квартирограммы и домофонной компании"""

    dc_company_flatgramm: "DcCompanyFlatgramm" = betterproto.message_field(1)
    """Связь квартирограммы и домофонной компании"""

    def __post_init__(self) -> None:
        warnings.warn(
            "PutFlatgrammDcCompanyDetachRequest is deprecated", DeprecationWarning
        )
        super().__post_init__()


@dataclass(eq=False, repr=False, config={"extra": "forbid"})
class PutFlatgrammCompanyRelationDetachRequest(betterproto.Message):
    """Запрос удаления связей квартирограммы и компании"""

    flatgramm_company_relation: "FlatgrammCompanyRelation" = betterproto.message_field(
        1
    )
    """Связь квартирограммы и компании"""


@dataclass(eq=False, repr=False, config={"extra": "forbid"})
class DcCompanyFlatgramm(betterproto.Message):
    """
    Связка квартирограммы и домофонной компании.
     Задает область ресурсов (resource scope), доступную пользователю.
     Используется для контроля доступа к квартирограмме
    """

    company_id: int = betterproto.int32_field(1)
    """
    Идентификатор домофонной компании.
     # Диапазон: 0..2147483647
    """

    flatgramm_id: int = betterproto.int32_field(2)
    """
    Идентификатор квартирограммы.
     # Диапазон: 0..2147483647
    """

    def __post_init__(self) -> None:
        warnings.warn("DcCompanyFlatgramm is deprecated", DeprecationWarning)
        super().__post_init__()


@dataclass(eq=False, repr=False, config={"extra": "forbid"})
class FlatgrammCompanyRelation(betterproto.Message):
    """
    Связка квартирограммы и компании.
     Задает область ресурсов (resource scope), доступную пользователю.
     Используется для контроля доступа к квартирограмме
    """

    company_id: int = betterproto.int32_field(1)
    """
    Идентификатор компании.
     # Диапазон: 1..2147483647
    """

    flatgramm_id: int = betterproto.int32_field(2)
    """
    Идентификатор квартирограммы.
     # Диапазон: 1..2147483647
    """

    type: "FlatgrammCompanyRelationType" = betterproto.enum_field(3)
    """Тип связи компании и квартирограммы"""


@dataclass(eq=False, repr=False, config={"extra": "forbid"})
class DcCompanyFlatgrammFilter(betterproto.Message):
    """
    Фильтр для запроса связей квартирограммы и домофонной компании.
     При передаче массива в параметр фильтра элементы массива работают в выборке через ИЛИ.
     При передаче нескольких разных параметров фильтра они работают в выборке через И
    """

    company_ids: "list[int]" = betterproto.int32_field(1)
    """По Идентификатору домофонной компании"""

    flatgramm_ids: "list[int]" = betterproto.int32_field(2)
    """По Идентификатору квартирограммы"""

    def __post_init__(self) -> None:
        warnings.warn("DcCompanyFlatgrammFilter is deprecated", DeprecationWarning)
        super().__post_init__()


@dataclass(eq=False, repr=False, config={"extra": "forbid"})
class FlatgrammCompanyRelationFilter(betterproto.Message):
    """
    Фильтр для запроса связей квартирограммы и компании.
     При передаче массива в параметр фильтра элементы массива работают в выборке через ИЛИ.
     При передаче нескольких разных параметров фильтра они работают в выборке через И
    """

    flatgramm_ids: "list[int]" = betterproto.int32_field(1)
    """По Идентификатору квартирограммы"""

    company_ids: "list[int]" = betterproto.int32_field(2)
    """По Идентификатору компании"""

    flatgramm_company_relation_types: "list[FlatgrammCompanyRelationType]" = (
        betterproto.enum_field(3)
    )
    """Тип назначения компании для квартирограммы"""


@dataclass(eq=False, repr=False, config={"extra": "forbid"})
class PutFlatgrammDcCompanyDetachResponse(betterproto.Message):
    """Ответ на запрос удаления связи квартирограммы и домофонной компании"""

    error: "PutFlatgrammDcCompanyDetachResponseError | None" = (
        betterproto.message_field(1, optional=True, group="type")
    )
    """Ошибка"""

    def __post_init__(self) -> None:
        warnings.warn(
            "PutFlatgrammDcCompanyDetachResponse is deprecated", DeprecationWarning
        )
        super().__post_init__()

    @model_validator(mode="after")
    def check_oneof(cls, values):
        return cls._validate_field_groups(values)


@dataclass(eq=False, repr=False, config={"extra": "forbid"})
class PutFlatgrammDcCompanyDetachResponseError(betterproto.Message):
    """Ошибка запроса удаления связи квартирограммы и домофонной компании"""

    validation: "ValidationError | None" = betterproto.message_field(
        1, optional=True, group="reason"
    )
    """Ошибка валидации"""

    @model_validator(mode="after")
    def check_oneof(cls, values):
        return cls._validate_field_groups(values)


@dataclass(eq=False, repr=False, config={"extra": "forbid"})
class PutFlatgrammCompanyRelationDetachResponse(betterproto.Message):
    """Ответ на запрос удаления связи квартирограммы и компании"""

    error: "PutFlatgrammCompanyRelationDetachResponseError | None" = (
        betterproto.message_field(1, optional=True, group="type")
    )
    """Ошибка"""

    @model_validator(mode="after")
    def check_oneof(cls, values):
        return cls._validate_field_groups(values)


@dataclass(eq=False, repr=False, config={"extra": "forbid"})
class PutFlatgrammCompanyRelationDetachResponseError(betterproto.Message):
    """Ошибка запроса удаления связи квартирограммы и компании"""

    validation: "ValidationError | None" = betterproto.message_field(
        1, optional=True, group="reason"
    )
    """Ошибка валидации"""

    @model_validator(mode="after")
    def check_oneof(cls, values):
        return cls._validate_field_groups(values)


@dataclass(eq=False, repr=False, config={"extra": "forbid"})
class AccessPointGroup(betterproto.Message):
    """
    Связка точки доступа и группы.
     # Описание модели
    """

    access_point_id: str = betterproto.string_field(1)
    """
    Идентификатор точки доступа.
     # Тип: Guid
    """

    group_id: str = betterproto.string_field(2)
    """
    Идентификатор группы.
     # Тип: Guid
    """


@dataclass(eq=False, repr=False, config={"extra": "forbid"})
class AccessPointGroupFilter(betterproto.Message):
    """Фильтр по связям точек доступа и групп"""

    access_point_ids: "list[str]" = betterproto.string_field(1)
    """
    По идентификаторам точки доступа.
     # Тип: Guid
    """

    group_ids: "list[str]" = betterproto.string_field(2)
    """
    По идентификаторам группы.
     # Тип: Guid
    """


@dataclass(eq=False, repr=False, config={"extra": "forbid"})
class AccessPointGroupPaging(betterproto.Message):
    """Постраничный вывод"""

    order_by_type: "AccessPointGroupPagingOrderByType" = betterproto.enum_field(1)
    """
    Тип значения сортировки.
     Если значение не передано, то будет взято значение по умолчанию.
     # По умолчанию: GROUP_ID
    """

    direction_type: "AccessPointGroupPagingDirectionType" = betterproto.enum_field(2)
    """
    Тип направления сортировки.
     # По умолчанию: DESC
    """

    limit: int = betterproto.int32_field(3)
    """
    Количество записей на страницу.
     Если значение 0 (не передано), то будет взято значение по умолчанию.
     # Диапазон: 0..100.
     # По умолчанию: 20
    """

    offset: int = betterproto.int32_field(4)
    """
    Сдвиг.
     # Диапазон: 0..2147483647
    """


@dataclass(eq=False, repr=False, config={"extra": "forbid"})
class GetAccessPointGroupListRequest(betterproto.Message):
    """Запрос на получение списка связей точек доступа и групп"""

    filter: "AccessPointGroupFilter" = betterproto.message_field(1)
    """Фильтр"""

    paging: "AccessPointGroupPaging | None" = betterproto.message_field(
        2, optional=True, group="pagination"
    )
    """Стандартный постраничный вывод"""

    @model_validator(mode="after")
    def check_oneof(cls, values):
        return cls._validate_field_groups(values)


@dataclass(eq=False, repr=False, config={"extra": "forbid"})
class GetAccessPointGroupListResponse(betterproto.Message):
    """Ответ на получение списка связей точек доступа и групп"""

    data: "AccessPointGroup | None" = betterproto.message_field(
        1, optional=True, group="type"
    )
    """Связь точки доступа и группы"""

    error: "GetAccessPointGroupListResponseError | None" = betterproto.message_field(
        2, optional=True, group="type"
    )
    """Ошибка"""

    @model_validator(mode="after")
    def check_oneof(cls, values):
        return cls._validate_field_groups(values)


@dataclass(eq=False, repr=False, config={"extra": "forbid"})
class GetAccessPointGroupListResponseError(betterproto.Message):
    """Ошибка запроса получения списка связей точек доступа и групп"""

    validation: "ValidationError | None" = betterproto.message_field(
        1, optional=True, group="reason"
    )
    """Ошибка валидации"""

    @model_validator(mode="after")
    def check_oneof(cls, values):
        return cls._validate_field_groups(values)


@dataclass(eq=False, repr=False, config={"extra": "forbid"})
class GetAccessPointGroupCountRequest(betterproto.Message):
    """Запрос получения количества связей точек доступа и групп"""

    filter: "AccessPointGroupFilter" = betterproto.message_field(1)
    """Фильтр"""


@dataclass(eq=False, repr=False, config={"extra": "forbid"})
class GetAccessPointGroupCountResponse(betterproto.Message):
    """Ответ на запрос получения количества точек доступа"""

    data: "int | None" = betterproto.int32_field(1, optional=True, group="type")
    """Всего точек доступа"""

    error: "GetAccessPointGroupCountResponseError | None" = betterproto.message_field(
        2, optional=True, group="type"
    )
    """Ошибка"""

    @model_validator(mode="after")
    def check_oneof(cls, values):
        return cls._validate_field_groups(values)


@dataclass(eq=False, repr=False, config={"extra": "forbid"})
class GetAccessPointGroupCountResponseError(betterproto.Message):
    """Ошибка запроса получения количества точек доступа"""

    validation: "ValidationError | None" = betterproto.message_field(
        1, optional=True, group="reason"
    )
    """Ошибка валидации"""

    @model_validator(mode="after")
    def check_oneof(cls, values):
        return cls._validate_field_groups(values)


@dataclass(eq=False, repr=False, config={"extra": "forbid"})
class PutAccessPointGroupAttachRequest(betterproto.Message):
    """Запрос создания связи точки доступа и группы"""

    access_point_group: "AccessPointGroup" = betterproto.message_field(1)
    """Связь точки доступа и группы"""


@dataclass(eq=False, repr=False, config={"extra": "forbid"})
class PutAccessPointGroupAttachResponse(betterproto.Message):
    """Ответ на запрос сохранения связи точки доступа и группы"""

    error: "PutAccessPointGroupAttachResponseError | None" = betterproto.message_field(
        1, optional=True, group="type"
    )
    """Ошибка"""

    @model_validator(mode="after")
    def check_oneof(cls, values):
        return cls._validate_field_groups(values)


@dataclass(eq=False, repr=False, config={"extra": "forbid"})
class PutAccessPointGroupAttachResponseError(betterproto.Message):
    """Ошибка запроса на создание связи точки доступа и группы"""

    validation: "ValidationError | None" = betterproto.message_field(
        1, optional=True, group="reason"
    )
    """Ошибка валидации"""

    @model_validator(mode="after")
    def check_oneof(cls, values):
        return cls._validate_field_groups(values)


@dataclass(eq=False, repr=False, config={"extra": "forbid"})
class PutAccessPointGroupDetachRequest(betterproto.Message):
    """Запрос удаления связи точки доступа и группы"""

    access_point_group: "AccessPointGroup" = betterproto.message_field(1)
    """Связь точки доступа и группы"""


@dataclass(eq=False, repr=False, config={"extra": "forbid"})
class PutAccessPointGroupDetachResponse(betterproto.Message):
    """Ответ на запрос удаления связи точки доступа и группы"""

    error: "PutAccessPointGroupDetachResponseError | None" = betterproto.message_field(
        1, optional=True, group="type"
    )
    """Ошибка"""

    @model_validator(mode="after")
    def check_oneof(cls, values):
        return cls._validate_field_groups(values)


@dataclass(eq=False, repr=False, config={"extra": "forbid"})
class PutAccessPointGroupDetachResponseError(betterproto.Message):
    """Ошибка запроса на удаление связи точки доступа и группы"""

    validation: "ValidationError | None" = betterproto.message_field(
        1, optional=True, group="reason"
    )
    """Ошибка валидации"""

    @model_validator(mode="after")
    def check_oneof(cls, values):
        return cls._validate_field_groups(values)


@dataclass(eq=False, repr=False, config={"extra": "forbid"})
class RoomDevice(betterproto.Message):
    """Связка квартиры и устройства"""

    orpon: int = betterproto.int64_field(1)
    """
    Идентификатор ОРПОН дома.
     # Диапазон 1..9223372036854775807
    """

    room_number: str = betterproto.string_field(2)
    """
    Номер квартиры.
     # Диапазон: 1..4
    """

    device_id: int = betterproto.int32_field(3)
    """
    Идентификатор устройства.
     # Диапазон: 1..2147483647
    """


@dataclass(eq=False, repr=False, config={"extra": "forbid"})
class PutRoomDeviceAttachRequest(betterproto.Message):
    """Запрос создания связи квартиры и устройства"""

    room_device: "RoomDevice" = betterproto.message_field(1)
    """Связь квартиры и устройства"""


@dataclass(eq=False, repr=False, config={"extra": "forbid"})
class PutRoomDeviceAttachResponse(betterproto.Message):
    """Ответ на запрос сохранения связи квартиры и устройства"""

    error: "PutRoomDeviceAttachResponseError | None" = betterproto.message_field(
        1, optional=True, group="type"
    )
    """Ошибка"""

    @model_validator(mode="after")
    def check_oneof(cls, values):
        return cls._validate_field_groups(values)


@dataclass(eq=False, repr=False, config={"extra": "forbid"})
class PutRoomDeviceAttachResponseError(betterproto.Message):
    """Ошибка запроса на создание связи квартиры и устройства"""

    validation: "ValidationError | None" = betterproto.message_field(
        1, optional=True, group="reason"
    )
    """Ошибка валидации"""

    @model_validator(mode="after")
    def check_oneof(cls, values):
        return cls._validate_field_groups(values)


@dataclass(eq=False, repr=False, config={"extra": "forbid"})
class PutRoomDeviceDetachRequest(betterproto.Message):
    """Запрос удаления связи квартиры и устройства"""

    room_device: "RoomDevice" = betterproto.message_field(1)
    """Связь квартиры и устройства"""


@dataclass(eq=False, repr=False, config={"extra": "forbid"})
class PutRoomDeviceDetachResponse(betterproto.Message):
    """Ответ на запрос удаления связи квартиры и устройства"""

    error: "PutRoomDeviceDetachResponseError | None" = betterproto.message_field(
        1, optional=True, group="type"
    )
    """Ошибка"""

    @model_validator(mode="after")
    def check_oneof(cls, values):
        return cls._validate_field_groups(values)


@dataclass(eq=False, repr=False, config={"extra": "forbid"})
class PutRoomDeviceDetachResponseError(betterproto.Message):
    """Ошибка запроса на удаления связи квартиры и устройства"""

    validation: "ValidationError | None" = betterproto.message_field(
        1, optional=True, group="reason"
    )
    """Ошибка валидации"""

    @model_validator(mode="after")
    def check_oneof(cls, values):
        return cls._validate_field_groups(values)


@dataclass(eq=False, repr=False, config={"extra": "forbid"})
class RoomDeviceFilter(betterproto.Message):
    """Фильтр связок помещение-устройство"""

    flatgramm_ids: "list[int]" = betterproto.int32_field(1)
    """По идентификаторам квартирограмм"""

    orpons: "list[int]" = betterproto.int64_field(2)
    """По ОРПОН"""

    room_numbers: "list[str]" = betterproto.string_field(3)
    """По номерам квартир"""

    device_ids: "list[int]" = betterproto.int32_field(4)
    """По идентификаторам привязанных устройств"""


@dataclass(eq=False, repr=False, config={"extra": "forbid"})
class RoomDevicePaging(betterproto.Message):
    """Постраничный вывод"""

    order_by_type: "RoomDevicePagingOrderByType" = betterproto.enum_field(1)
    """
    Тип значения сортировки.
     Если значение не передано, то будет взято значение по умолчанию.
     # По умолчанию: ORPON_THEN_ENTRANCE_NUMBER
    """

    direction_type: "RoomDevicePagingDirectionType" = betterproto.enum_field(2)
    """
    Тип направления сортировки.
     # По умолчанию: DESC
    """

    limit: int = betterproto.int32_field(3)
    """
    Количество записей на страницу.
     Если значение 0 (не передано), то будет взято значение по умолчанию.
     # Диапазон: 0..100.
     # По умолчанию: 20
    """

    offset: int = betterproto.int32_field(4)
    """
    Сдвиг.
     # Диапазон: 0..2147483647
    """


@dataclass(eq=False, repr=False, config={"extra": "forbid"})
class GetRoomDeviceListRequest(betterproto.Message):
    """Запрос на получение связок помещение-устройство"""

    filter: "RoomDeviceFilter" = betterproto.message_field(1)
    """Фильтр по связкам помещение-устройство"""

    paging: "RoomDevicePaging | None" = betterproto.message_field(
        2, optional=True, group="pagination"
    )
    """Стандартный постраничный вывод"""

    @model_validator(mode="after")
    def check_oneof(cls, values):
        return cls._validate_field_groups(values)


@dataclass(eq=False, repr=False, config={"extra": "forbid"})
class GetRoomDeviceListResponse(betterproto.Message):
    """Ответ на запрос на получение списка связок помещение-устройство"""

    data: "RoomDevice | None" = betterproto.message_field(
        1, optional=True, group="type"
    )
    """Связка помещение-устройство"""

    error: "GetRoomDeviceListResponseError | None" = betterproto.message_field(
        2, optional=True, group="type"
    )
    """Ошибка"""

    @model_validator(mode="after")
    def check_oneof(cls, values):
        return cls._validate_field_groups(values)


@dataclass(eq=False, repr=False, config={"extra": "forbid"})
class GetRoomDeviceListResponseError(betterproto.Message):
    """Ошибка запроса на получение списка связок помещение-устройство"""

    validation: "ValidationError | None" = betterproto.message_field(
        1, optional=True, group="reason"
    )
    """Ошибка валидации"""

    @model_validator(mode="after")
    def check_oneof(cls, values):
        return cls._validate_field_groups(values)


@dataclass(eq=False, repr=False, config={"extra": "forbid"})
class GetRoomDeviceCountRequest(betterproto.Message):
    """Запрос получения количества домов"""

    filter: "RoomDeviceFilter" = betterproto.message_field(1)
    """Фильтр"""


@dataclass(eq=False, repr=False, config={"extra": "forbid"})
class GetRoomDeviceCountResponse(betterproto.Message):
    """Ответ на запрос получения количества домов"""

    data: "int | None" = betterproto.int32_field(1, optional=True, group="type")
    """Количество"""

    @model_validator(mode="after")
    def check_oneof(cls, values):
        return cls._validate_field_groups(values)


@dataclass(eq=False, repr=False, config={"extra": "forbid"})
class Rfid(betterproto.Message):
    """
    Ключ.
     # Описание модели
    """

    id: int = betterproto.int32_field(1)
    """
    Идентификатор ключа.
     # Диапазон: 0..2147483647
    """

    user_id: "int | None" = betterproto.message_field(2, wraps=betterproto.TYPE_INT32)
    """Идентификатор пользователя"""

    description: "str | None" = betterproto.message_field(
        3, wraps=betterproto.TYPE_STRING
    )
    """
    Системное описание.
     Обычно оставляет УК/Админ, пользователь его не видет
    """

    company_id: "int | None" = betterproto.message_field(
        4, wraps=betterproto.TYPE_INT32
    )
    """Идентификатор компании"""

    creator_id: "int | None" = betterproto.message_field(
        5, wraps=betterproto.TYPE_INT32
    )
    """Идентификатор создателя"""

    key: str = betterproto.string_field(6)
    """
    Код ключа (UID).
     Уникальное значение.
     # Паттерн: /^[0-9a-fA-F]{1,14}$/
    """

    pay_type: "RfidPayType" = betterproto.enum_field(7)
    """Тип оплаты"""

    holder_type: "RfidHolderType" = betterproto.enum_field(8)
    """Тип владельца ключа"""

    created_at: datetime = betterproto.message_field(9)
    """
    Дата создания.
     # Тип: DateTime
    """

    changed_at: datetime = betterproto.message_field(10)
    """
    Дата обновления.
     # Тип: DateTime?
    """

    orpon: int = betterproto.int64_field(11)
    """
    ОРПОН дома.
     # Диапазон: 1..9223372036854775807
    """

    room_number: str = betterproto.string_field(12)
    """
    Номер квартиры.
     # Диапазон: 1..4
    """


@dataclass(eq=False, repr=False, config={"extra": "forbid"})
class RfidSavingError(betterproto.Message):
    """
    Ошибка сохранения ключа.
     Эти проверки выполняются при работе с базой данных и сторонними сервисами
    """

    conflict: "RfidSavingErrorConflict | None" = betterproto.message_field(
        1, optional=True, group="reason"
    )
    """Конфликт версий"""

    key_exist: "RfidSavingErrorKeyExist | None" = betterproto.message_field(
        2, optional=True, group="reason"
    )
    """Данный ключ уже существует"""

    key_code_cannot_be_changed: "RfidSavingErrorKeyCodeCannotBeChanged | None" = (
        betterproto.message_field(3, optional=True, group="reason")
    )
    """Нельзя изменить код ключа"""

    exceeded_quantity_of_keys_for_room: (
        "RfidSavingErrorExceededQuantityOfKeysForRoom | None"
    ) = betterproto.message_field(4, optional=True, group="reason")
    """Превышено максимально допустимое количество ключей (16) для квартиры"""

    key_is_used: "RfidSavingErrorKeyIsUsed | None" = betterproto.message_field(
        5, optional=True, group="reason"
    )
    """Ключ используется на другой квартире"""

    holder_type_forbidden: "RfidSavingErrorHolderTypeForbidden | None" = (
        betterproto.message_field(6, optional=True, group="reason")
    )
    """Нельзя создавать / изменять ключ с переданным типом владельца"""

    @model_validator(mode="after")
    def check_oneof(cls, values):
        return cls._validate_field_groups(values)


@dataclass(eq=False, repr=False, config={"extra": "forbid"})
class RfidSavingErrorConflict(betterproto.Message):
    """
    Конфликт версий.
     Причины:
     - В базе хранится другая версия строки, значения changed_at отличаются
    """

    pass


@dataclass(eq=False, repr=False, config={"extra": "forbid"})
class RfidSavingErrorKeyExist(betterproto.Message):
    """
    Данный ключ уже существует.
     Причины:
     - При попытке создания ключа в системе уже существует ключ с таким же кодом
    """

    pass


@dataclass(eq=False, repr=False, config={"extra": "forbid"})
class RfidSavingErrorKeyCodeCannotBeChanged(betterproto.Message):
    """
    Нельзя изменить код ключа.
     Причины:
     - При изменении ключа нельзя менять поле key (код ключа)
    """

    pass


@dataclass(eq=False, repr=False, config={"extra": "forbid"})
class RfidSavingErrorExceededQuantityOfKeysForRoom(betterproto.Message):
    """Превышено максимально допустимое количество ключей (16) для квартиры"""

    pass


@dataclass(eq=False, repr=False, config={"extra": "forbid"})
class RfidSavingErrorKeyIsUsed(betterproto.Message):
    """Ключ используется на другой квартире"""

    pass


@dataclass(eq=False, repr=False, config={"extra": "forbid"})
class RfidSavingErrorHolderTypeForbidden(betterproto.Message):
    """
    Нельзя создавать / изменять ключ с переданным типом владельца.
     Доступные типы владельца:
     - Жилец (мастер)
    """

    pass


@dataclass(eq=False, repr=False, config={"extra": "forbid"})
class GetRfidRequest(betterproto.Message):
    """Запрос получения ключа"""

    id: int = betterproto.int32_field(1)
    """
    Идентификатор ключа.
     # Диапазон: 0..2147483647
    """


@dataclass(eq=False, repr=False, config={"extra": "forbid"})
class GetRfidResponse(betterproto.Message):
    """Ответ на запрос получения ключа"""

    data: "Rfid | None" = betterproto.message_field(1, optional=True, group="type")
    """Ключ"""

    error: "GetRfidResponseError | None" = betterproto.message_field(
        2, optional=True, group="type"
    )
    """Ошибка"""

    @model_validator(mode="after")
    def check_oneof(cls, values):
        return cls._validate_field_groups(values)


@dataclass(eq=False, repr=False, config={"extra": "forbid"})
class GetRfidResponseError(betterproto.Message):
    """Ошибка"""

    validation: "ValidationError | None" = betterproto.message_field(
        1, optional=True, group="reason"
    )
    """Ошибка валидации"""

    @model_validator(mode="after")
    def check_oneof(cls, values):
        return cls._validate_field_groups(values)


@dataclass(eq=False, repr=False, config={"extra": "forbid"})
class GetRfidListRequest(betterproto.Message):
    """Запрос получения списка ключей"""

    filter: "RfidFilter" = betterproto.message_field(1)
    """Фильтр"""

    paging: "RfidPaging | None" = betterproto.message_field(
        2, optional=True, group="pagination"
    )
    """Стандартный постраничный вывод"""

    @model_validator(mode="after")
    def check_oneof(cls, values):
        return cls._validate_field_groups(values)


@dataclass(eq=False, repr=False, config={"extra": "forbid"})
class GetRfidListResponse(betterproto.Message):
    """Ответ на запрос получения списка ключей"""

    data: "Rfid | None" = betterproto.message_field(1, optional=True, group="type")
    """Ключ"""

    error: "GetRfidListResponseError | None" = betterproto.message_field(
        2, optional=True, group="type"
    )
    """Ошибка"""

    @model_validator(mode="after")
    def check_oneof(cls, values):
        return cls._validate_field_groups(values)


@dataclass(eq=False, repr=False, config={"extra": "forbid"})
class GetRfidListResponseError(betterproto.Message):
    """Ошибка"""

    validation: "ValidationError | None" = betterproto.message_field(
        1, optional=True, group="reason"
    )
    """Ошибка валидации"""

    @model_validator(mode="after")
    def check_oneof(cls, values):
        return cls._validate_field_groups(values)


@dataclass(eq=False, repr=False, config={"extra": "forbid"})
class GetRfidCountRequest(betterproto.Message):
    """Запрос получения количества ключей"""

    filter: "RfidFilter" = betterproto.message_field(1)
    """Фильтр"""


@dataclass(eq=False, repr=False, config={"extra": "forbid"})
class GetRfidCountResponse(betterproto.Message):
    """Ответ на запрос получения количества ключей"""

    data: "int | None" = betterproto.int32_field(1, optional=True, group="type")
    """Количество"""

    error: "GetRfidCountResponseError | None" = betterproto.message_field(
        2, optional=True, group="type"
    )
    """Ошибка"""

    @model_validator(mode="after")
    def check_oneof(cls, values):
        return cls._validate_field_groups(values)


@dataclass(eq=False, repr=False, config={"extra": "forbid"})
class GetRfidCountResponseError(betterproto.Message):
    """Ошибка"""

    validation: "ValidationError | None" = betterproto.message_field(
        1, optional=True, group="reason"
    )
    """Ошибка валидации"""

    @model_validator(mode="after")
    def check_oneof(cls, values):
        return cls._validate_field_groups(values)


@dataclass(eq=False, repr=False, config={"extra": "forbid"})
class PostRfidRequest(betterproto.Message):
    """Запрос создания ключа"""

    data: "Rfid" = betterproto.message_field(1)
    """Ключ"""


@dataclass(eq=False, repr=False, config={"extra": "forbid"})
class PostRfidResponse(betterproto.Message):
    """Ответ на запрос создания ключа"""

    data: "Rfid | None" = betterproto.message_field(1, optional=True, group="type")
    """Ключ"""

    error: "PostRfidResponseError | None" = betterproto.message_field(
        2, optional=True, group="type"
    )
    """Ошибка"""

    @model_validator(mode="after")
    def check_oneof(cls, values):
        return cls._validate_field_groups(values)


@dataclass(eq=False, repr=False, config={"extra": "forbid"})
class PostRfidResponseError(betterproto.Message):
    """Ошибка"""

    validation: "ValidationError | None" = betterproto.message_field(
        1, optional=True, group="reason"
    )
    """Ошибка валидации"""

    saving: "RfidSavingError | None" = betterproto.message_field(
        2, optional=True, group="reason"
    )
    """Ошибка сохранения"""

    @model_validator(mode="after")
    def check_oneof(cls, values):
        return cls._validate_field_groups(values)


@dataclass(eq=False, repr=False, config={"extra": "forbid"})
class DeleteRfidRequest(betterproto.Message):
    """Запрос удаления ключа"""

    id: int = betterproto.int32_field(1)
    """
    Идентификатор ключа.
     # Диапазон: 0..2147483647
    """

    is_force_delete: bool = betterproto.bool_field(2)
    """
    Флаг принудительного удаления ключа.
     При принудительном удалении не гарантируется удаление ключа со всех физических устройств
    """


@dataclass(eq=False, repr=False, config={"extra": "forbid"})
class DeleteRfidResponse(betterproto.Message):
    """Ответ на запрос удаления ключа"""

    error: "DeleteRfidResponseError | None" = betterproto.message_field(
        1, optional=True, group="type"
    )
    """Ошибка"""

    @model_validator(mode="after")
    def check_oneof(cls, values):
        return cls._validate_field_groups(values)


@dataclass(eq=False, repr=False, config={"extra": "forbid"})
class DeleteRfidResponseError(betterproto.Message):
    """Ошибка запроса на удаление ключа"""

    validation: "ValidationError | None" = betterproto.message_field(
        1, optional=True, group="reason"
    )
    """Ошибка валидации"""

    @model_validator(mode="after")
    def check_oneof(cls, values):
        return cls._validate_field_groups(values)


@dataclass(eq=False, repr=False, config={"extra": "forbid"})
class RfidFilter(betterproto.Message):
    """Фильтр по ключам"""

    holder_types: "list[RfidHolderType]" = betterproto.enum_field(1)
    """По типам владельца"""

    pay_types: "list[RfidPayType]" = betterproto.enum_field(2)
    """По типам оплаты"""

    orpons: "list[int]" = betterproto.int64_field(3)
    """По ОРПОНам"""

    room_numbers: "list[str]" = betterproto.string_field(4)
    """По номерам квартир"""

    user_ids: "list[int]" = betterproto.int32_field(5)
    """По идентификаторам пользователей"""

    company_ids: "list[int]" = betterproto.int32_field(6)
    """По идентификаторам компаний"""

    keys: "list[str]" = betterproto.string_field(7)
    """По кодам ключа"""


@dataclass(eq=False, repr=False, config={"extra": "forbid"})
class RfidPaging(betterproto.Message):
    """Постраничный вывод"""

    order_by_type: "RfidPagingOrderByType" = betterproto.enum_field(1)
    """
    Тип значения сортировки.
     Если значение не передано, то будет взято значение по умолчанию.
     # По умолчанию: CHANGED_AT
    """

    direction_type: "RfidPagingDirectionType" = betterproto.enum_field(2)
    """
    Тип направления сортировки.
     # По умолчанию: DESC
    """

    limit: int = betterproto.int32_field(3)
    """
    Количество записей на страницу.
     Если значение 0 (не передано), то будет взято значение по умолчанию.
     # Диапазон: 0..100.
     # По умолчанию: 20
    """

    offset: int = betterproto.int32_field(4)
    """
    Сдвиг.
     # Диапазон: 0..2147483647
    """


@dataclass(eq=False, repr=False, config={"extra": "forbid"})
class AccessPoint(betterproto.Message):
    """
    Точка доступа.
     # Описание модели
    """

    id: str = betterproto.string_field(1)
    """
    Идентификатор точки доступа.
     # Тип: Guid
    """

    title: str = betterproto.string_field(2)
    """
    Наименование.
     # Диапазон: 3..40
    """

    description: "str | None" = betterproto.message_field(
        3, wraps=betterproto.TYPE_STRING
    )
    """
    Описание.
     # Диапазон: 3..200
    """

    device_id: int = betterproto.int32_field(4)
    """
    Идентификатор устройства.
     # Диапазон: 1..2147483647
    """

    relay_index: "int | None" = betterproto.message_field(
        5, wraps=betterproto.TYPE_INT32
    )
    """
    Номер реле.
     # Диапазон: 0..100
    """

    delay: int = betterproto.int32_field(6)
    """
    Время задержки в секундах.
     # Диапазон: 1..3600
    """

    flatgramm_id: int = betterproto.int32_field(7)
    """
    Идентификатор квартирограммы.
     # Диапазон: 1..2147483647
    """

    direction_type: "AccessPointDirectionType" = betterproto.enum_field(8)
    """Тип направления"""

    cameras: "list[AccessPointCamera]" = betterproto.message_field(9)
    """Список камер"""

    created_at: datetime = betterproto.message_field(10)
    """
    Дата создания.
     # Тип: DateTime
    """

    changed_at: datetime = betterproto.message_field(11)
    """
    Дата последнего изменения.
     Заполняется и обновляется сервером.
     Заполняется при создании и изменении.
     Является версией объекта.
     # Тип: DateTime
    """

    deleted_at: datetime = betterproto.message_field(12)
    """
    Дата удаления.
     # Тип: DateTime?
    """


@dataclass(eq=False, repr=False, config={"extra": "forbid"})
class AccessPointCamera(betterproto.Message):
    """Камера"""

    uid: str = betterproto.string_field(1)
    """UID камеры"""

    recognition_types: "list[AccessPointCameraRecognitionType]" = (
        betterproto.enum_field(2)
    )
    """Типы распознавания"""


@dataclass(eq=False, repr=False, config={"extra": "forbid"})
class AccessPointSavingError(betterproto.Message):
    """
    Ошибка сохранения.
     Эти проверки выполняются при работе с базой данных и сторонними сервисами
    """

    conflict: "AccessPointSavingErrorConflict | None" = betterproto.message_field(
        1, optional=True, group="reason"
    )
    """Конфликт версий"""

    @model_validator(mode="after")
    def check_oneof(cls, values):
        return cls._validate_field_groups(values)


@dataclass(eq=False, repr=False, config={"extra": "forbid"})
class AccessPointSavingErrorConflict(betterproto.Message):
    """
    Конфликт версий.
     Причины:
     - В базе хранится другая версия строки, значения changed_at оличаются
    """

    pass


@dataclass(eq=False, repr=False, config={"extra": "forbid"})
class AccessPointFilter(betterproto.Message):
    """Фильтр по точкам доступа"""

    text: "str | None" = betterproto.message_field(1, wraps=betterproto.TYPE_STRING)
    """
    По тексту.
     Если значение не передано то поиск по нему не производится.
     # Диапазон: 3..64.
     # Поиск производится по полям:
     # - Наименование;
     # - Описание
    """

    device_ids: "list[int]" = betterproto.int32_field(2)
    """По идентификаторам устройств"""

    flatgramm_ids: "list[int]" = betterproto.int32_field(3)
    """По идентификаторам квартирограмм"""

    direction_types: "list[AccessPointDirectionType]" = betterproto.enum_field(4)
    """По типам направления"""

    group_ids: "list[str]" = betterproto.string_field(5)
    """
    По идентификаторам группы.
     # Тип: Guid
    """

    camera_uids: "list[str]" = betterproto.string_field(6)
    """По идентификаторам камер"""


@dataclass(eq=False, repr=False, config={"extra": "forbid"})
class AccessPointPaging(betterproto.Message):
    """Постраничный вывод"""

    order_by_type: "AccessPointPagingOrderByType" = betterproto.enum_field(1)
    """
    Тип значения сортировки.
     Если значение не передано, то будет взято значение по умолчанию.
     # По умолчанию: CHANGED_AT
    """

    direction_type: "AccessPointPagingDirectionType" = betterproto.enum_field(2)
    """
    Тип направления сортировки.
     # По умолчанию: DESC
    """

    limit: int = betterproto.int32_field(3)
    """
    Количество записей на страницу.
     Если значение 0 (не передано), то будет взято значение по умолчанию.
     # Диапазон: 0..100.
     # По умолчанию: 20
    """

    offset: int = betterproto.int32_field(4)
    """
    Сдвиг.
     # Диапазон: 0..2147483647
    """


@dataclass(eq=False, repr=False, config={"extra": "forbid"})
class PostAccessPointRequest(betterproto.Message):
    """Запрос на создание/изменение точки доступа"""

    data: "AccessPoint" = betterproto.message_field(1)
    """Точка доступа"""


@dataclass(eq=False, repr=False, config={"extra": "forbid"})
class PostAccessPointResponse(betterproto.Message):
    """Ответ на запрос на создание/изменение точки доступа"""

    data: "AccessPoint | None" = betterproto.message_field(
        1, optional=True, group="type"
    )
    """Точка доступа"""

    error: "PostAccessPointResponseError | None" = betterproto.message_field(
        2, optional=True, group="type"
    )
    """Ошибка"""

    @model_validator(mode="after")
    def check_oneof(cls, values):
        return cls._validate_field_groups(values)


@dataclass(eq=False, repr=False, config={"extra": "forbid"})
class PostAccessPointResponseError(betterproto.Message):
    """Ошибка запроса сохранения точки доступа"""

    validation: "ValidationError | None" = betterproto.message_field(
        1, optional=True, group="reason"
    )
    """Ошибка валидации"""

    saving: "AccessPointSavingError | None" = betterproto.message_field(
        2, optional=True, group="reason"
    )
    """Ошибка сохранения"""

    @model_validator(mode="after")
    def check_oneof(cls, values):
        return cls._validate_field_groups(values)


@dataclass(eq=False, repr=False, config={"extra": "forbid"})
class GetAccessPointListRequest(betterproto.Message):
    """Запрос на получение списка точек доступа"""

    filter: "AccessPointFilter" = betterproto.message_field(1)
    """Фильтр"""

    paging: "AccessPointPaging | None" = betterproto.message_field(
        2, optional=True, group="pagination"
    )
    """Стандартный постраничный вывод"""

    @model_validator(mode="after")
    def check_oneof(cls, values):
        return cls._validate_field_groups(values)


@dataclass(eq=False, repr=False, config={"extra": "forbid"})
class GetAccessPointListResponse(betterproto.Message):
    """Ответ на получение списка точек доступа"""

    data: "AccessPoint | None" = betterproto.message_field(
        1, optional=True, group="type"
    )
    """Точка доступа"""

    error: "GetAccessPointListResponseError | None" = betterproto.message_field(
        2, optional=True, group="type"
    )
    """Ошибка"""

    @model_validator(mode="after")
    def check_oneof(cls, values):
        return cls._validate_field_groups(values)


@dataclass(eq=False, repr=False, config={"extra": "forbid"})
class GetAccessPointListResponseError(betterproto.Message):
    """Ошибка запроса получения списка точек доступа"""

    validation: "ValidationError | None" = betterproto.message_field(
        1, optional=True, group="reason"
    )
    """Ошибка валидации"""

    @model_validator(mode="after")
    def check_oneof(cls, values):
        return cls._validate_field_groups(values)


@dataclass(eq=False, repr=False, config={"extra": "forbid"})
class GetAccessPointRequest(betterproto.Message):
    """Запрос получения точки доступа"""

    id: str = betterproto.string_field(1)
    """
    Идентификатор.
     # Тип: Guid
    """


@dataclass(eq=False, repr=False, config={"extra": "forbid"})
class GetAccessPointResponse(betterproto.Message):
    """Ответ на запрос получения точки доступа"""

    data: "AccessPoint | None" = betterproto.message_field(
        1, optional=True, group="type"
    )
    """Точка доступа"""

    error: "GetAccessPointResponseError | None" = betterproto.message_field(
        2, optional=True, group="type"
    )
    """Ошибка"""

    @model_validator(mode="after")
    def check_oneof(cls, values):
        return cls._validate_field_groups(values)


@dataclass(eq=False, repr=False, config={"extra": "forbid"})
class GetAccessPointResponseError(betterproto.Message):
    """Ошибка запроса получения точки доступа"""

    validation: "ValidationError | None" = betterproto.message_field(
        1, optional=True, group="reason"
    )
    """Ошибка валидации"""

    @model_validator(mode="after")
    def check_oneof(cls, values):
        return cls._validate_field_groups(values)


@dataclass(eq=False, repr=False, config={"extra": "forbid"})
class GetAccessPointCountRequest(betterproto.Message):
    """Запрос получения количества точек доступа"""

    filter: "AccessPointFilter" = betterproto.message_field(1)
    """Фильтр"""


@dataclass(eq=False, repr=False, config={"extra": "forbid"})
class GetAccessPointCountResponse(betterproto.Message):
    """Ответ на запрос получения количества точек доступа"""

    data: "int | None" = betterproto.int32_field(1, optional=True, group="type")
    """Всего точек доступа"""

    error: "GetAccessPointCountResponseError | None" = betterproto.message_field(
        2, optional=True, group="type"
    )
    """Ошибка"""

    @model_validator(mode="after")
    def check_oneof(cls, values):
        return cls._validate_field_groups(values)


@dataclass(eq=False, repr=False, config={"extra": "forbid"})
class GetAccessPointCountResponseError(betterproto.Message):
    """Ошибка запроса получения количества точек доступа"""

    validation: "ValidationError | None" = betterproto.message_field(
        1, optional=True, group="reason"
    )
    """Ошибка валидации"""

    @model_validator(mode="after")
    def check_oneof(cls, values):
        return cls._validate_field_groups(values)


@dataclass(eq=False, repr=False, config={"extra": "forbid"})
class DeleteAccessPointRequest(betterproto.Message):
    """Запрос удаления точки доступа"""

    id: str = betterproto.string_field(1)
    """
    Идентификатор.
     # Тип: Guid
    """


@dataclass(eq=False, repr=False, config={"extra": "forbid"})
class DeleteAccessPointResponse(betterproto.Message):
    """Ответ на запрос удаления точки доступа"""

    error: "DeleteAccessPointResponseError | None" = betterproto.message_field(
        1, optional=True, group="type"
    )
    """Ошибка"""

    @model_validator(mode="after")
    def check_oneof(cls, values):
        return cls._validate_field_groups(values)


@dataclass(eq=False, repr=False, config={"extra": "forbid"})
class DeleteAccessPointResponseError(betterproto.Message):
    """Ошибка запроса удаления точки доступа"""

    validation: "ValidationError | None" = betterproto.message_field(
        1, optional=True, group="reason"
    )
    """Ошибка валидации"""

    @model_validator(mode="after")
    def check_oneof(cls, values):
        return cls._validate_field_groups(values)


@dataclass(eq=False, repr=False, config={"extra": "forbid"})
class PostAccessPointOpenRequest(betterproto.Message):
    """Запрос открытия точки доступа"""

    access_point_id: str = betterproto.string_field(1)
    """
    Идентификатор точки доступа.
     # Тип: Guid
    """

    car_number: "str | None" = betterproto.message_field(
        2, wraps=betterproto.TYPE_STRING
    )
    """
    ГРЗ авто.
     # Диапазон: 3..20
    """

    vehicle_type: "PostAccessPointOpenRequestVehicleType" = betterproto.enum_field(3)
    """Тип ТС"""

    courier_company_name: "str | None" = betterproto.message_field(
        4, wraps=betterproto.TYPE_STRING
    )
    """
    Наименование курьерской компании.
     # Диапазон: 3..150
    """

    order_number: "str | None" = betterproto.message_field(
        5, wraps=betterproto.TYPE_STRING
    )
    """
    Номер заказа.
     # Диапазон: 3..64
    """

    courier_id: "str | None" = betterproto.message_field(
        6, wraps=betterproto.TYPE_STRING
    )
    """
    Идентификатор курьера.
     # Диапазон: 3..64
    """


@dataclass(eq=False, repr=False, config={"extra": "forbid"})
class PostAccessPointOpenResponse(betterproto.Message):
    """Ответ на запрос открытия точки доступа"""

    error: "PostAccessPointOpenResponseError | None" = betterproto.message_field(
        1, optional=True, group="type"
    )
    """Ошибка"""

    @model_validator(mode="after")
    def check_oneof(cls, values):
        return cls._validate_field_groups(values)


@dataclass(eq=False, repr=False, config={"extra": "forbid"})
class PostAccessPointOpenResponseError(betterproto.Message):
    """Ошибка запроса открытия точки доступа"""

    validation: "ValidationError | None" = betterproto.message_field(
        1, optional=True, group="reason"
    )
    """Ошибка валидации"""

    @model_validator(mode="after")
    def check_oneof(cls, values):
        return cls._validate_field_groups(values)


@dataclass(eq=False, repr=False, config={"extra": "forbid"})
class RoomUser(betterproto.Message):
    """Связь помещения и пользователя"""

    orpon: int = betterproto.int64_field(1)
    """ОРПОН дома"""

    room_number: str = betterproto.string_field(2)
    """
    Номер квартиры.
     # Диапазон: 1..4
    """

    user_id: int = betterproto.int32_field(3)
    """
    Идентификатор пользователя.
     # Диапазон: 1..2147483647
    """


@dataclass(eq=False, repr=False, config={"extra": "forbid"})
class GetRoomUserListRequest(betterproto.Message):
    """Запрос получения списка связей помещений и пользователей"""

    filter: "RoomUserFilter" = betterproto.message_field(1)
    """Фильтр"""

    paging: "RoomUserPaging | None" = betterproto.message_field(
        2, optional=True, group="pagination"
    )
    """Стандартный постраничный вывод"""

    @model_validator(mode="after")
    def check_oneof(cls, values):
        return cls._validate_field_groups(values)


@dataclass(eq=False, repr=False, config={"extra": "forbid"})
class GetRoomUserListResponse(betterproto.Message):
    """Ответ на запрос получения списка связей помещений и пользователей"""

    data: "RoomUser | None" = betterproto.message_field(1, optional=True, group="type")
    """Связь помещения и пользователя"""

    error: "GetRoomUserListResponseError | None" = betterproto.message_field(
        2, optional=True, group="type"
    )
    """Ошибка"""

    @model_validator(mode="after")
    def check_oneof(cls, values):
        return cls._validate_field_groups(values)


@dataclass(eq=False, repr=False, config={"extra": "forbid"})
class GetRoomUserListResponseError(betterproto.Message):
    """Ошибка"""

    validation: "ValidationError | None" = betterproto.message_field(
        1, optional=True, group="reason"
    )
    """Ошибка валидации"""

    @model_validator(mode="after")
    def check_oneof(cls, values):
        return cls._validate_field_groups(values)


@dataclass(eq=False, repr=False, config={"extra": "forbid"})
class GetRoomUserCountRequest(betterproto.Message):
    """Запрос получения количества связей помещений и пользователей"""

    filter: "RoomUserFilter" = betterproto.message_field(1)
    """Фильтр"""


@dataclass(eq=False, repr=False, config={"extra": "forbid"})
class GetRoomUserCountResponse(betterproto.Message):
    """
    Ответ на запрос получения количества связей помещений и пользователей
    """

    data: "int | None" = betterproto.int32_field(1, optional=True, group="type")
    """Количество"""

    @model_validator(mode="after")
    def check_oneof(cls, values):
        return cls._validate_field_groups(values)


@dataclass(eq=False, repr=False, config={"extra": "forbid"})
class RoomUserFilter(betterproto.Message):
    """Фильтр по связям помещений и пользователей"""

    orpons: "list[int]" = betterproto.int64_field(1)
    """По ОРПОНам"""

    room_numbers: "list[str]" = betterproto.string_field(2)
    """По номерам квартир"""

    user_ids: "list[int]" = betterproto.int32_field(3)
    """По идентификаторам пользователей"""


@dataclass(eq=False, repr=False, config={"extra": "forbid"})
class RoomUserPaging(betterproto.Message):
    """Постраничный вывод"""

    order_by_type: "RoomUserPagingOrderByType" = betterproto.enum_field(1)
    """
    Тип значения сортировки.
     Если значение не передано, то будет взято значение по умолчанию.
     # По умолчанию: USER_ID
    """

    direction_type: "RoomUserPagingDirectionType" = betterproto.enum_field(2)
    """
    Тип направления сортировки.
     # По умолчанию: DESC
    """

    limit: int = betterproto.int32_field(3)
    """
    Количество записей на страницу.
     Если значение 0 (не передано), то будет взято значение по умолчанию.
     # Диапазон: 0..100.
     # По умолчанию: 20
    """

    offset: int = betterproto.int32_field(4)
    """
    Сдвиг.
     # Диапазон: 0..2147483647
    """


class AccessControlServiceStub(betterproto.ServiceStub):
    async def get_room(
        self,
        get_room_request: "GetRoomRequest",
        *,
        timeout: "float | None" = None,
        deadline: "Deadline | None" = None,
        metadata: "MetadataLike | None" = None
    ) -> "GetRoomResponse":
        return await self._unary_unary(
            "/keyapis.access_control.v1.AccessControlService/GetRoom",
            get_room_request,
            GetRoomResponse,
            timeout=timeout,
            deadline=deadline,
            metadata=metadata,
        )

    async def get_room_list(
        self,
        get_room_list_request: "GetRoomListRequest",
        *,
        timeout: "float | None" = None,
        deadline: "Deadline | None" = None,
        metadata: "MetadataLike | None" = None
    ) -> "AsyncIterator[GetRoomListResponse]":
        async for response in self._unary_stream(
            "/keyapis.access_control.v1.AccessControlService/GetRoomList",
            get_room_list_request,
            GetRoomListResponse,
            timeout=timeout,
            deadline=deadline,
            metadata=metadata,
        ):
            yield response

    async def get_room_count(
        self,
        get_room_count_request: "GetRoomCountRequest",
        *,
        timeout: "float | None" = None,
        deadline: "Deadline | None" = None,
        metadata: "MetadataLike | None" = None
    ) -> "GetRoomCountResponse":
        return await self._unary_unary(
            "/keyapis.access_control.v1.AccessControlService/GetRoomCount",
            get_room_count_request,
            GetRoomCountResponse,
            timeout=timeout,
            deadline=deadline,
            metadata=metadata,
        )

    async def patch_room_set_subscription_mode(
        self,
        patch_room_set_subscription_mode_request: "PatchRoomSetSubscriptionModeRequest",
        *,
        timeout: "float | None" = None,
        deadline: "Deadline | None" = None,
        metadata: "MetadataLike | None" = None
    ) -> "PatchRoomSetSubscriptionModeResponse":
        return await self._unary_unary(
            "/keyapis.access_control.v1.AccessControlService/PatchRoomSetSubscriptionMode",
            patch_room_set_subscription_mode_request,
            PatchRoomSetSubscriptionModeResponse,
            timeout=timeout,
            deadline=deadline,
            metadata=metadata,
        )

    async def get_room_orpon_number_exists(
        self,
        get_room_orpon_number_exists_request: "GetRoomOrponNumberExistsRequest",
        *,
        timeout: "float | None" = None,
        deadline: "Deadline | None" = None,
        metadata: "MetadataLike | None" = None
    ) -> "GetRoomOrponNumberExistsResponse":
        return await self._unary_unary(
            "/keyapis.access_control.v1.AccessControlService/GetRoomOrponNumberExists",
            get_room_orpon_number_exists_request,
            GetRoomOrponNumberExistsResponse,
            timeout=timeout,
            deadline=deadline,
            metadata=metadata,
        )


class SystemServiceStub(betterproto.ServiceStub):
    async def get_system_status(
        self,
        get_system_status_request: "GetSystemStatusRequest",
        *,
        timeout: "float | None" = None,
        deadline: "Deadline | None" = None,
        metadata: "MetadataLike | None" = None
    ) -> "GetSystemStatusResponse":
        return await self._unary_unary(
            "/keyapis.access_control.v1.SystemService/GetSystemStatus",
            get_system_status_request,
            GetSystemStatusResponse,
            timeout=timeout,
            deadline=deadline,
            metadata=metadata,
        )


class BroadcastAlertServiceStub(betterproto.ServiceStub):
    async def post_broadcast_alert_start(
        self,
        post_broadcast_alert_start_request: "PostBroadcastAlertStartRequest",
        *,
        timeout: "float | None" = None,
        deadline: "Deadline | None" = None,
        metadata: "MetadataLike | None" = None
    ) -> "PostBroadcastAlertStartResponse":
        return await self._unary_unary(
            "/keyapis.access_control.v1.BroadcastAlertService/PostBroadcastAlertStart",
            post_broadcast_alert_start_request,
            PostBroadcastAlertStartResponse,
            timeout=timeout,
            deadline=deadline,
            metadata=metadata,
        )

    async def post_broadcast_alert_stop(
        self,
        post_broadcast_alert_stop_request: "PostBroadcastAlertStopRequest",
        *,
        timeout: "float | None" = None,
        deadline: "Deadline | None" = None,
        metadata: "MetadataLike | None" = None
    ) -> "PostBroadcastAlertStopResponse":
        return await self._unary_unary(
            "/keyapis.access_control.v1.BroadcastAlertService/PostBroadcastAlertStop",
            post_broadcast_alert_stop_request,
            PostBroadcastAlertStopResponse,
            timeout=timeout,
            deadline=deadline,
            metadata=metadata,
        )


class EntranceServiceStub(betterproto.ServiceStub):
    async def post_entrance(
        self,
        post_entrance_request: "PostEntranceRequest",
        *,
        timeout: "float | None" = None,
        deadline: "Deadline | None" = None,
        metadata: "MetadataLike | None" = None
    ) -> "PostEntranceResponse":
        return await self._unary_unary(
            "/keyapis.access_control.v1.EntranceService/PostEntrance",
            post_entrance_request,
            PostEntranceResponse,
            timeout=timeout,
            deadline=deadline,
            metadata=metadata,
        )

    async def delete_entrance(
        self,
        delete_entrance_request: "DeleteEntranceRequest",
        *,
        timeout: "float | None" = None,
        deadline: "Deadline | None" = None,
        metadata: "MetadataLike | None" = None
    ) -> "DeleteEntranceResponse":
        return await self._unary_unary(
            "/keyapis.access_control.v1.EntranceService/DeleteEntrance",
            delete_entrance_request,
            DeleteEntranceResponse,
            timeout=timeout,
            deadline=deadline,
            metadata=metadata,
        )

    async def get_entrance_list(
        self,
        get_entrance_list_request: "GetEntranceListRequest",
        *,
        timeout: "float | None" = None,
        deadline: "Deadline | None" = None,
        metadata: "MetadataLike | None" = None
    ) -> "AsyncIterator[GetEntranceListResponse]":
        async for response in self._unary_stream(
            "/keyapis.access_control.v1.EntranceService/GetEntranceList",
            get_entrance_list_request,
            GetEntranceListResponse,
            timeout=timeout,
            deadline=deadline,
            metadata=metadata,
        ):
            yield response

    async def put_entrance_device_attach(
        self,
        put_entrance_device_attach_request: "PutEntranceDeviceAttachRequest",
        *,
        timeout: "float | None" = None,
        deadline: "Deadline | None" = None,
        metadata: "MetadataLike | None" = None
    ) -> "PutEntranceDeviceAttachResponse":
        return await self._unary_unary(
            "/keyapis.access_control.v1.EntranceService/PutEntranceDeviceAttach",
            put_entrance_device_attach_request,
            PutEntranceDeviceAttachResponse,
            timeout=timeout,
            deadline=deadline,
            metadata=metadata,
        )

    async def put_entrance_device_detach(
        self,
        put_entrance_device_detach_request: "PutEntranceDeviceDetachRequest",
        *,
        timeout: "float | None" = None,
        deadline: "Deadline | None" = None,
        metadata: "MetadataLike | None" = None
    ) -> "PutEntranceDeviceDetachResponse":
        return await self._unary_unary(
            "/keyapis.access_control.v1.EntranceService/PutEntranceDeviceDetach",
            put_entrance_device_detach_request,
            PutEntranceDeviceDetachResponse,
            timeout=timeout,
            deadline=deadline,
            metadata=metadata,
        )

    async def get_entrance_device_list(
        self,
        get_entrance_device_list_request: "GetEntranceDeviceListRequest",
        *,
        timeout: "float | None" = None,
        deadline: "Deadline | None" = None,
        metadata: "MetadataLike | None" = None
    ) -> "AsyncIterator[GetEntranceDeviceListResponse]":
        async for response in self._unary_stream(
            "/keyapis.access_control.v1.EntranceService/GetEntranceDeviceList",
            get_entrance_device_list_request,
            GetEntranceDeviceListResponse,
            timeout=timeout,
            deadline=deadline,
            metadata=metadata,
        ):
            yield response


class BuildingServiceStub(betterproto.ServiceStub):
    async def get_building(
        self,
        get_building_request: "GetBuildingRequest",
        *,
        timeout: "float | None" = None,
        deadline: "Deadline | None" = None,
        metadata: "MetadataLike | None" = None
    ) -> "GetBuildingResponse":
        return await self._unary_unary(
            "/keyapis.access_control.v1.BuildingService/GetBuilding",
            get_building_request,
            GetBuildingResponse,
            timeout=timeout,
            deadline=deadline,
            metadata=metadata,
        )

    async def get_building_list(
        self,
        get_building_list_request: "GetBuildingListRequest",
        *,
        timeout: "float | None" = None,
        deadline: "Deadline | None" = None,
        metadata: "MetadataLike | None" = None
    ) -> "AsyncIterator[GetBuildingListResponse]":
        async for response in self._unary_stream(
            "/keyapis.access_control.v1.BuildingService/GetBuildingList",
            get_building_list_request,
            GetBuildingListResponse,
            timeout=timeout,
            deadline=deadline,
            metadata=metadata,
        ):
            yield response

    async def get_building_count(
        self,
        get_building_count_request: "GetBuildingCountRequest",
        *,
        timeout: "float | None" = None,
        deadline: "Deadline | None" = None,
        metadata: "MetadataLike | None" = None
    ) -> "GetBuildingCountResponse":
        return await self._unary_unary(
            "/keyapis.access_control.v1.BuildingService/GetBuildingCount",
            get_building_count_request,
            GetBuildingCountResponse,
            timeout=timeout,
            deadline=deadline,
            metadata=metadata,
        )

    async def get_building_orpon_subscription_mode(
        self,
        get_building_orpon_subscription_mode_request: "GetBuildingOrponSubscriptionModeRequest",
        *,
        timeout: "float | None" = None,
        deadline: "Deadline | None" = None,
        metadata: "MetadataLike | None" = None
    ) -> "GetBuildingOrponSubscriptionModeResponse":
        return await self._unary_unary(
            "/keyapis.access_control.v1.BuildingService/GetBuildingOrponSubscriptionMode",
            get_building_orpon_subscription_mode_request,
            GetBuildingOrponSubscriptionModeResponse,
            timeout=timeout,
            deadline=deadline,
            metadata=metadata,
        )

    async def get_building_orpon_exists(
        self,
        get_building_orpon_exists_request: "GetBuildingOrponExistsRequest",
        *,
        timeout: "float | None" = None,
        deadline: "Deadline | None" = None,
        metadata: "MetadataLike | None" = None
    ) -> "GetBuildingOrponExistsResponse":
        return await self._unary_unary(
            "/keyapis.access_control.v1.BuildingService/GetBuildingOrponExists",
            get_building_orpon_exists_request,
            GetBuildingOrponExistsResponse,
            timeout=timeout,
            deadline=deadline,
            metadata=metadata,
        )


class FlatgrammServiceStub(betterproto.ServiceStub):
    async def get_flatgramm(
        self,
        get_flatgramm_request: "GetFlatgrammRequest",
        *,
        timeout: "float | None" = None,
        deadline: "Deadline | None" = None,
        metadata: "MetadataLike | None" = None
    ) -> "GetFlatgrammResponse":
        return await self._unary_unary(
            "/keyapis.access_control.v1.FlatgrammService/GetFlatgramm",
            get_flatgramm_request,
            GetFlatgrammResponse,
            timeout=timeout,
            deadline=deadline,
            metadata=metadata,
        )

    async def get_flatgramm_list(
        self,
        get_flatgramm_list_request: "GetFlatgrammListRequest",
        *,
        timeout: "float | None" = None,
        deadline: "Deadline | None" = None,
        metadata: "MetadataLike | None" = None
    ) -> "AsyncIterator[GetFlatgrammListResponse]":
        async for response in self._unary_stream(
            "/keyapis.access_control.v1.FlatgrammService/GetFlatgrammList",
            get_flatgramm_list_request,
            GetFlatgrammListResponse,
            timeout=timeout,
            deadline=deadline,
            metadata=metadata,
        ):
            yield response

    async def get_flatgramm_count(
        self,
        get_flatgramm_count_request: "GetFlatgrammCountRequest",
        *,
        timeout: "float | None" = None,
        deadline: "Deadline | None" = None,
        metadata: "MetadataLike | None" = None
    ) -> "GetFlatgrammCountResponse":
        return await self._unary_unary(
            "/keyapis.access_control.v1.FlatgrammService/GetFlatgrammCount",
            get_flatgramm_count_request,
            GetFlatgrammCountResponse,
            timeout=timeout,
            deadline=deadline,
            metadata=metadata,
        )

    async def get_flatgramm_dc_company_list(
        self,
        get_flatgramm_dc_company_list_request: "GetFlatgrammDcCompanyListRequest",
        *,
        timeout: "float | None" = None,
        deadline: "Deadline | None" = None,
        metadata: "MetadataLike | None" = None
    ) -> "AsyncIterator[GetFlatgrammDcCompanyListResponse]":
        warnings.warn(
            "FlatgrammService.get_flatgramm_dc_company_list is deprecated",
            DeprecationWarning,
        )

        async for response in self._unary_stream(
            "/keyapis.access_control.v1.FlatgrammService/GetFlatgrammDcCompanyList",
            get_flatgramm_dc_company_list_request,
            GetFlatgrammDcCompanyListResponse,
            timeout=timeout,
            deadline=deadline,
            metadata=metadata,
        ):
            yield response

    async def get_flatgramm_company_relation_list(
        self,
        get_flatgramm_company_relation_list_request: "GetFlatgrammCompanyRelationListRequest",
        *,
        timeout: "float | None" = None,
        deadline: "Deadline | None" = None,
        metadata: "MetadataLike | None" = None
    ) -> "AsyncIterator[GetFlatgrammCompanyRelationListResponse]":
        async for response in self._unary_stream(
            "/keyapis.access_control.v1.FlatgrammService/GetFlatgrammCompanyRelationList",
            get_flatgramm_company_relation_list_request,
            GetFlatgrammCompanyRelationListResponse,
            timeout=timeout,
            deadline=deadline,
            metadata=metadata,
        ):
            yield response

    async def get_flatgramm_dc_company_count(
        self,
        get_flatgramm_dc_company_count_request: "GetFlatgrammDcCompanyCountRequest",
        *,
        timeout: "float | None" = None,
        deadline: "Deadline | None" = None,
        metadata: "MetadataLike | None" = None
    ) -> "GetFlatgrammDcCompanyCountResponse":
        warnings.warn(
            "FlatgrammService.get_flatgramm_dc_company_count is deprecated",
            DeprecationWarning,
        )

        return await self._unary_unary(
            "/keyapis.access_control.v1.FlatgrammService/GetFlatgrammDcCompanyCount",
            get_flatgramm_dc_company_count_request,
            GetFlatgrammDcCompanyCountResponse,
            timeout=timeout,
            deadline=deadline,
            metadata=metadata,
        )

    async def get_flatgramm_company_relation_count(
        self,
        get_flatgramm_company_relation_count_request: "GetFlatgrammCompanyRelationCountRequest",
        *,
        timeout: "float | None" = None,
        deadline: "Deadline | None" = None,
        metadata: "MetadataLike | None" = None
    ) -> "GetFlatgrammCompanyRelationCountResponse":
        return await self._unary_unary(
            "/keyapis.access_control.v1.FlatgrammService/GetFlatgrammCompanyRelationCount",
            get_flatgramm_company_relation_count_request,
            GetFlatgrammCompanyRelationCountResponse,
            timeout=timeout,
            deadline=deadline,
            metadata=metadata,
        )

    async def put_flatgramm_dc_company_attach(
        self,
        put_flatgramm_dc_company_attach_request: "PutFlatgrammDcCompanyAttachRequest",
        *,
        timeout: "float | None" = None,
        deadline: "Deadline | None" = None,
        metadata: "MetadataLike | None" = None
    ) -> "PutFlatgrammDcCompanyAttachResponse":
        warnings.warn(
            "FlatgrammService.put_flatgramm_dc_company_attach is deprecated",
            DeprecationWarning,
        )

        return await self._unary_unary(
            "/keyapis.access_control.v1.FlatgrammService/PutFlatgrammDcCompanyAttach",
            put_flatgramm_dc_company_attach_request,
            PutFlatgrammDcCompanyAttachResponse,
            timeout=timeout,
            deadline=deadline,
            metadata=metadata,
        )

    async def put_flatgramm_company_relation_attach(
        self,
        put_flatgramm_company_relation_attach_request: "PutFlatgrammCompanyRelationAttachRequest",
        *,
        timeout: "float | None" = None,
        deadline: "Deadline | None" = None,
        metadata: "MetadataLike | None" = None
    ) -> "PutFlatgrammCompanyRelationAttachResponse":
        return await self._unary_unary(
            "/keyapis.access_control.v1.FlatgrammService/PutFlatgrammCompanyRelationAttach",
            put_flatgramm_company_relation_attach_request,
            PutFlatgrammCompanyRelationAttachResponse,
            timeout=timeout,
            deadline=deadline,
            metadata=metadata,
        )

    async def put_flatgramm_dc_company_detach(
        self,
        put_flatgramm_dc_company_detach_request: "PutFlatgrammDcCompanyDetachRequest",
        *,
        timeout: "float | None" = None,
        deadline: "Deadline | None" = None,
        metadata: "MetadataLike | None" = None
    ) -> "PutFlatgrammDcCompanyDetachResponse":
        warnings.warn(
            "FlatgrammService.put_flatgramm_dc_company_detach is deprecated",
            DeprecationWarning,
        )

        return await self._unary_unary(
            "/keyapis.access_control.v1.FlatgrammService/PutFlatgrammDcCompanyDetach",
            put_flatgramm_dc_company_detach_request,
            PutFlatgrammDcCompanyDetachResponse,
            timeout=timeout,
            deadline=deadline,
            metadata=metadata,
        )

    async def put_flatgramm_company_relation_detach(
        self,
        put_flatgramm_company_relation_detach_request: "PutFlatgrammCompanyRelationDetachRequest",
        *,
        timeout: "float | None" = None,
        deadline: "Deadline | None" = None,
        metadata: "MetadataLike | None" = None
    ) -> "PutFlatgrammCompanyRelationDetachResponse":
        return await self._unary_unary(
            "/keyapis.access_control.v1.FlatgrammService/PutFlatgrammCompanyRelationDetach",
            put_flatgramm_company_relation_detach_request,
            PutFlatgrammCompanyRelationDetachResponse,
            timeout=timeout,
            deadline=deadline,
            metadata=metadata,
        )


class AccessPointGroupServiceStub(betterproto.ServiceStub):
    async def get_access_point_group_list(
        self,
        get_access_point_group_list_request: "GetAccessPointGroupListRequest",
        *,
        timeout: "float | None" = None,
        deadline: "Deadline | None" = None,
        metadata: "MetadataLike | None" = None
    ) -> "AsyncIterator[GetAccessPointGroupListResponse]":
        async for response in self._unary_stream(
            "/keyapis.access_control.v1.AccessPointGroupService/GetAccessPointGroupList",
            get_access_point_group_list_request,
            GetAccessPointGroupListResponse,
            timeout=timeout,
            deadline=deadline,
            metadata=metadata,
        ):
            yield response

    async def get_access_point_group_count(
        self,
        get_access_point_group_count_request: "GetAccessPointGroupCountRequest",
        *,
        timeout: "float | None" = None,
        deadline: "Deadline | None" = None,
        metadata: "MetadataLike | None" = None
    ) -> "GetAccessPointGroupCountResponse":
        return await self._unary_unary(
            "/keyapis.access_control.v1.AccessPointGroupService/GetAccessPointGroupCount",
            get_access_point_group_count_request,
            GetAccessPointGroupCountResponse,
            timeout=timeout,
            deadline=deadline,
            metadata=metadata,
        )

    async def put_access_point_group_attach(
        self,
        put_access_point_group_attach_request: "PutAccessPointGroupAttachRequest",
        *,
        timeout: "float | None" = None,
        deadline: "Deadline | None" = None,
        metadata: "MetadataLike | None" = None
    ) -> "PutAccessPointGroupAttachResponse":
        return await self._unary_unary(
            "/keyapis.access_control.v1.AccessPointGroupService/PutAccessPointGroupAttach",
            put_access_point_group_attach_request,
            PutAccessPointGroupAttachResponse,
            timeout=timeout,
            deadline=deadline,
            metadata=metadata,
        )

    async def put_access_point_group_detach(
        self,
        put_access_point_group_detach_request: "PutAccessPointGroupDetachRequest",
        *,
        timeout: "float | None" = None,
        deadline: "Deadline | None" = None,
        metadata: "MetadataLike | None" = None
    ) -> "PutAccessPointGroupDetachResponse":
        return await self._unary_unary(
            "/keyapis.access_control.v1.AccessPointGroupService/PutAccessPointGroupDetach",
            put_access_point_group_detach_request,
            PutAccessPointGroupDetachResponse,
            timeout=timeout,
            deadline=deadline,
            metadata=metadata,
        )


class RoomDeviceServiceStub(betterproto.ServiceStub):
    async def put_room_device_attach(
        self,
        put_room_device_attach_request: "PutRoomDeviceAttachRequest",
        *,
        timeout: "float | None" = None,
        deadline: "Deadline | None" = None,
        metadata: "MetadataLike | None" = None
    ) -> "PutRoomDeviceAttachResponse":
        return await self._unary_unary(
            "/keyapis.access_control.v1.RoomDeviceService/PutRoomDeviceAttach",
            put_room_device_attach_request,
            PutRoomDeviceAttachResponse,
            timeout=timeout,
            deadline=deadline,
            metadata=metadata,
        )

    async def put_room_device_detach(
        self,
        put_room_device_detach_request: "PutRoomDeviceDetachRequest",
        *,
        timeout: "float | None" = None,
        deadline: "Deadline | None" = None,
        metadata: "MetadataLike | None" = None
    ) -> "PutRoomDeviceDetachResponse":
        return await self._unary_unary(
            "/keyapis.access_control.v1.RoomDeviceService/PutRoomDeviceDetach",
            put_room_device_detach_request,
            PutRoomDeviceDetachResponse,
            timeout=timeout,
            deadline=deadline,
            metadata=metadata,
        )

    async def get_room_device_list(
        self,
        get_room_device_list_request: "GetRoomDeviceListRequest",
        *,
        timeout: "float | None" = None,
        deadline: "Deadline | None" = None,
        metadata: "MetadataLike | None" = None
    ) -> "AsyncIterator[GetRoomDeviceListResponse]":
        async for response in self._unary_stream(
            "/keyapis.access_control.v1.RoomDeviceService/GetRoomDeviceList",
            get_room_device_list_request,
            GetRoomDeviceListResponse,
            timeout=timeout,
            deadline=deadline,
            metadata=metadata,
        ):
            yield response

    async def get_room_device_count(
        self,
        get_room_device_count_request: "GetRoomDeviceCountRequest",
        *,
        timeout: "float | None" = None,
        deadline: "Deadline | None" = None,
        metadata: "MetadataLike | None" = None
    ) -> "GetRoomDeviceCountResponse":
        return await self._unary_unary(
            "/keyapis.access_control.v1.RoomDeviceService/GetRoomDeviceCount",
            get_room_device_count_request,
            GetRoomDeviceCountResponse,
            timeout=timeout,
            deadline=deadline,
            metadata=metadata,
        )


class RfidServiceStub(betterproto.ServiceStub):
    async def get_rfid(
        self,
        get_rfid_request: "GetRfidRequest",
        *,
        timeout: "float | None" = None,
        deadline: "Deadline | None" = None,
        metadata: "MetadataLike | None" = None
    ) -> "GetRfidResponse":
        return await self._unary_unary(
            "/keyapis.access_control.v1.RfidService/GetRfid",
            get_rfid_request,
            GetRfidResponse,
            timeout=timeout,
            deadline=deadline,
            metadata=metadata,
        )

    async def get_rfid_list(
        self,
        get_rfid_list_request: "GetRfidListRequest",
        *,
        timeout: "float | None" = None,
        deadline: "Deadline | None" = None,
        metadata: "MetadataLike | None" = None
    ) -> "AsyncIterator[GetRfidListResponse]":
        async for response in self._unary_stream(
            "/keyapis.access_control.v1.RfidService/GetRfidList",
            get_rfid_list_request,
            GetRfidListResponse,
            timeout=timeout,
            deadline=deadline,
            metadata=metadata,
        ):
            yield response

    async def get_rfid_count(
        self,
        get_rfid_count_request: "GetRfidCountRequest",
        *,
        timeout: "float | None" = None,
        deadline: "Deadline | None" = None,
        metadata: "MetadataLike | None" = None
    ) -> "GetRfidCountResponse":
        return await self._unary_unary(
            "/keyapis.access_control.v1.RfidService/GetRfidCount",
            get_rfid_count_request,
            GetRfidCountResponse,
            timeout=timeout,
            deadline=deadline,
            metadata=metadata,
        )

    async def post_rfid(
        self,
        post_rfid_request: "PostRfidRequest",
        *,
        timeout: "float | None" = None,
        deadline: "Deadline | None" = None,
        metadata: "MetadataLike | None" = None
    ) -> "PostRfidResponse":
        return await self._unary_unary(
            "/keyapis.access_control.v1.RfidService/PostRfid",
            post_rfid_request,
            PostRfidResponse,
            timeout=timeout,
            deadline=deadline,
            metadata=metadata,
        )

    async def delete_rfid(
        self,
        delete_rfid_request: "DeleteRfidRequest",
        *,
        timeout: "float | None" = None,
        deadline: "Deadline | None" = None,
        metadata: "MetadataLike | None" = None
    ) -> "DeleteRfidResponse":
        return await self._unary_unary(
            "/keyapis.access_control.v1.RfidService/DeleteRfid",
            delete_rfid_request,
            DeleteRfidResponse,
            timeout=timeout,
            deadline=deadline,
            metadata=metadata,
        )


class AccessPointServiceStub(betterproto.ServiceStub):
    async def post_access_point(
        self,
        post_access_point_request: "PostAccessPointRequest",
        *,
        timeout: "float | None" = None,
        deadline: "Deadline | None" = None,
        metadata: "MetadataLike | None" = None
    ) -> "PostAccessPointResponse":
        return await self._unary_unary(
            "/keyapis.access_control.v1.AccessPointService/PostAccessPoint",
            post_access_point_request,
            PostAccessPointResponse,
            timeout=timeout,
            deadline=deadline,
            metadata=metadata,
        )

    async def get_access_point(
        self,
        get_access_point_request: "GetAccessPointRequest",
        *,
        timeout: "float | None" = None,
        deadline: "Deadline | None" = None,
        metadata: "MetadataLike | None" = None
    ) -> "GetAccessPointResponse":
        return await self._unary_unary(
            "/keyapis.access_control.v1.AccessPointService/GetAccessPoint",
            get_access_point_request,
            GetAccessPointResponse,
            timeout=timeout,
            deadline=deadline,
            metadata=metadata,
        )

    async def get_access_point_list(
        self,
        get_access_point_list_request: "GetAccessPointListRequest",
        *,
        timeout: "float | None" = None,
        deadline: "Deadline | None" = None,
        metadata: "MetadataLike | None" = None
    ) -> "AsyncIterator[GetAccessPointListResponse]":
        async for response in self._unary_stream(
            "/keyapis.access_control.v1.AccessPointService/GetAccessPointList",
            get_access_point_list_request,
            GetAccessPointListResponse,
            timeout=timeout,
            deadline=deadline,
            metadata=metadata,
        ):
            yield response

    async def get_access_point_count(
        self,
        get_access_point_count_request: "GetAccessPointCountRequest",
        *,
        timeout: "float | None" = None,
        deadline: "Deadline | None" = None,
        metadata: "MetadataLike | None" = None
    ) -> "GetAccessPointCountResponse":
        return await self._unary_unary(
            "/keyapis.access_control.v1.AccessPointService/GetAccessPointCount",
            get_access_point_count_request,
            GetAccessPointCountResponse,
            timeout=timeout,
            deadline=deadline,
            metadata=metadata,
        )

    async def delete_access_point(
        self,
        delete_access_point_request: "DeleteAccessPointRequest",
        *,
        timeout: "float | None" = None,
        deadline: "Deadline | None" = None,
        metadata: "MetadataLike | None" = None
    ) -> "DeleteAccessPointResponse":
        return await self._unary_unary(
            "/keyapis.access_control.v1.AccessPointService/DeleteAccessPoint",
            delete_access_point_request,
            DeleteAccessPointResponse,
            timeout=timeout,
            deadline=deadline,
            metadata=metadata,
        )

    async def post_access_point_open(
        self,
        post_access_point_open_request: "PostAccessPointOpenRequest",
        *,
        timeout: "float | None" = None,
        deadline: "Deadline | None" = None,
        metadata: "MetadataLike | None" = None
    ) -> "PostAccessPointOpenResponse":
        return await self._unary_unary(
            "/keyapis.access_control.v1.AccessPointService/PostAccessPointOpen",
            post_access_point_open_request,
            PostAccessPointOpenResponse,
            timeout=timeout,
            deadline=deadline,
            metadata=metadata,
        )


class RoomUserServiceStub(betterproto.ServiceStub):
    async def get_room_user_list(
        self,
        get_room_user_list_request: "GetRoomUserListRequest",
        *,
        timeout: "float | None" = None,
        deadline: "Deadline | None" = None,
        metadata: "MetadataLike | None" = None
    ) -> "AsyncIterator[GetRoomUserListResponse]":
        async for response in self._unary_stream(
            "/keyapis.access_control.v1.RoomUserService/GetRoomUserList",
            get_room_user_list_request,
            GetRoomUserListResponse,
            timeout=timeout,
            deadline=deadline,
            metadata=metadata,
        ):
            yield response

    async def get_room_user_count(
        self,
        get_room_user_count_request: "GetRoomUserCountRequest",
        *,
        timeout: "float | None" = None,
        deadline: "Deadline | None" = None,
        metadata: "MetadataLike | None" = None
    ) -> "GetRoomUserCountResponse":
        return await self._unary_unary(
            "/keyapis.access_control.v1.RoomUserService/GetRoomUserCount",
            get_room_user_count_request,
            GetRoomUserCountResponse,
            timeout=timeout,
            deadline=deadline,
            metadata=metadata,
        )


class AccessControlServiceBase(ServiceBase):

    async def get_room(self, get_room_request: "GetRoomRequest") -> "GetRoomResponse":
        raise grpclib.GRPCError(grpclib.const.Status.UNIMPLEMENTED)

    async def get_room_list(
        self, get_room_list_request: "GetRoomListRequest"
    ) -> "AsyncIterator[GetRoomListResponse]":
        raise grpclib.GRPCError(grpclib.const.Status.UNIMPLEMENTED)
        yield GetRoomListResponse()

    async def get_room_count(
        self, get_room_count_request: "GetRoomCountRequest"
    ) -> "GetRoomCountResponse":
        raise grpclib.GRPCError(grpclib.const.Status.UNIMPLEMENTED)

    async def patch_room_set_subscription_mode(
        self,
        patch_room_set_subscription_mode_request: "PatchRoomSetSubscriptionModeRequest",
    ) -> "PatchRoomSetSubscriptionModeResponse":
        raise grpclib.GRPCError(grpclib.const.Status.UNIMPLEMENTED)

    async def get_room_orpon_number_exists(
        self, get_room_orpon_number_exists_request: "GetRoomOrponNumberExistsRequest"
    ) -> "GetRoomOrponNumberExistsResponse":
        raise grpclib.GRPCError(grpclib.const.Status.UNIMPLEMENTED)

    async def __rpc_get_room(
        self, stream: "grpclib.server.Stream[GetRoomRequest, GetRoomResponse]"
    ) -> None:
        request = await stream.recv_message()
        response = await self.get_room(request)
        await stream.send_message(response)

    async def __rpc_get_room_list(
        self, stream: "grpclib.server.Stream[GetRoomListRequest, GetRoomListResponse]"
    ) -> None:
        request = await stream.recv_message()
        await self._call_rpc_handler_server_stream(
            self.get_room_list,
            stream,
            request,
        )

    async def __rpc_get_room_count(
        self, stream: "grpclib.server.Stream[GetRoomCountRequest, GetRoomCountResponse]"
    ) -> None:
        request = await stream.recv_message()
        response = await self.get_room_count(request)
        await stream.send_message(response)

    async def __rpc_patch_room_set_subscription_mode(
        self,
        stream: "grpclib.server.Stream[PatchRoomSetSubscriptionModeRequest, PatchRoomSetSubscriptionModeResponse]",
    ) -> None:
        request = await stream.recv_message()
        response = await self.patch_room_set_subscription_mode(request)
        await stream.send_message(response)

    async def __rpc_get_room_orpon_number_exists(
        self,
        stream: "grpclib.server.Stream[GetRoomOrponNumberExistsRequest, GetRoomOrponNumberExistsResponse]",
    ) -> None:
        request = await stream.recv_message()
        response = await self.get_room_orpon_number_exists(request)
        await stream.send_message(response)

    def __mapping__(self) -> "dict[str, grpclib.const.Handler]":
        return {
            "/keyapis.access_control.v1.AccessControlService/GetRoom": grpclib.const.Handler(
                self.__rpc_get_room,
                grpclib.const.Cardinality.UNARY_UNARY,
                GetRoomRequest,
                GetRoomResponse,
            ),
            "/keyapis.access_control.v1.AccessControlService/GetRoomList": grpclib.const.Handler(
                self.__rpc_get_room_list,
                grpclib.const.Cardinality.UNARY_STREAM,
                GetRoomListRequest,
                GetRoomListResponse,
            ),
            "/keyapis.access_control.v1.AccessControlService/GetRoomCount": grpclib.const.Handler(
                self.__rpc_get_room_count,
                grpclib.const.Cardinality.UNARY_UNARY,
                GetRoomCountRequest,
                GetRoomCountResponse,
            ),
            "/keyapis.access_control.v1.AccessControlService/PatchRoomSetSubscriptionMode": grpclib.const.Handler(
                self.__rpc_patch_room_set_subscription_mode,
                grpclib.const.Cardinality.UNARY_UNARY,
                PatchRoomSetSubscriptionModeRequest,
                PatchRoomSetSubscriptionModeResponse,
            ),
            "/keyapis.access_control.v1.AccessControlService/GetRoomOrponNumberExists": grpclib.const.Handler(
                self.__rpc_get_room_orpon_number_exists,
                grpclib.const.Cardinality.UNARY_UNARY,
                GetRoomOrponNumberExistsRequest,
                GetRoomOrponNumberExistsResponse,
            ),
        }


class SystemServiceBase(ServiceBase):

    async def get_system_status(
        self, get_system_status_request: "GetSystemStatusRequest"
    ) -> "GetSystemStatusResponse":
        raise grpclib.GRPCError(grpclib.const.Status.UNIMPLEMENTED)

    async def __rpc_get_system_status(
        self,
        stream: "grpclib.server.Stream[GetSystemStatusRequest, GetSystemStatusResponse]",
    ) -> None:
        request = await stream.recv_message()
        response = await self.get_system_status(request)
        await stream.send_message(response)

    def __mapping__(self) -> "dict[str, grpclib.const.Handler]":
        return {
            "/keyapis.access_control.v1.SystemService/GetSystemStatus": grpclib.const.Handler(
                self.__rpc_get_system_status,
                grpclib.const.Cardinality.UNARY_UNARY,
                GetSystemStatusRequest,
                GetSystemStatusResponse,
            ),
        }


class BroadcastAlertServiceBase(ServiceBase):

    async def post_broadcast_alert_start(
        self, post_broadcast_alert_start_request: "PostBroadcastAlertStartRequest"
    ) -> "PostBroadcastAlertStartResponse":
        raise grpclib.GRPCError(grpclib.const.Status.UNIMPLEMENTED)

    async def post_broadcast_alert_stop(
        self, post_broadcast_alert_stop_request: "PostBroadcastAlertStopRequest"
    ) -> "PostBroadcastAlertStopResponse":
        raise grpclib.GRPCError(grpclib.const.Status.UNIMPLEMENTED)

    async def __rpc_post_broadcast_alert_start(
        self,
        stream: "grpclib.server.Stream[PostBroadcastAlertStartRequest, PostBroadcastAlertStartResponse]",
    ) -> None:
        request = await stream.recv_message()
        response = await self.post_broadcast_alert_start(request)
        await stream.send_message(response)

    async def __rpc_post_broadcast_alert_stop(
        self,
        stream: "grpclib.server.Stream[PostBroadcastAlertStopRequest, PostBroadcastAlertStopResponse]",
    ) -> None:
        request = await stream.recv_message()
        response = await self.post_broadcast_alert_stop(request)
        await stream.send_message(response)

    def __mapping__(self) -> "dict[str, grpclib.const.Handler]":
        return {
            "/keyapis.access_control.v1.BroadcastAlertService/PostBroadcastAlertStart": grpclib.const.Handler(
                self.__rpc_post_broadcast_alert_start,
                grpclib.const.Cardinality.UNARY_UNARY,
                PostBroadcastAlertStartRequest,
                PostBroadcastAlertStartResponse,
            ),
            "/keyapis.access_control.v1.BroadcastAlertService/PostBroadcastAlertStop": grpclib.const.Handler(
                self.__rpc_post_broadcast_alert_stop,
                grpclib.const.Cardinality.UNARY_UNARY,
                PostBroadcastAlertStopRequest,
                PostBroadcastAlertStopResponse,
            ),
        }


class EntranceServiceBase(ServiceBase):

    async def post_entrance(
        self, post_entrance_request: "PostEntranceRequest"
    ) -> "PostEntranceResponse":
        raise grpclib.GRPCError(grpclib.const.Status.UNIMPLEMENTED)

    async def delete_entrance(
        self, delete_entrance_request: "DeleteEntranceRequest"
    ) -> "DeleteEntranceResponse":
        raise grpclib.GRPCError(grpclib.const.Status.UNIMPLEMENTED)

    async def get_entrance_list(
        self, get_entrance_list_request: "GetEntranceListRequest"
    ) -> "AsyncIterator[GetEntranceListResponse]":
        raise grpclib.GRPCError(grpclib.const.Status.UNIMPLEMENTED)
        yield GetEntranceListResponse()

    async def put_entrance_device_attach(
        self, put_entrance_device_attach_request: "PutEntranceDeviceAttachRequest"
    ) -> "PutEntranceDeviceAttachResponse":
        raise grpclib.GRPCError(grpclib.const.Status.UNIMPLEMENTED)

    async def put_entrance_device_detach(
        self, put_entrance_device_detach_request: "PutEntranceDeviceDetachRequest"
    ) -> "PutEntranceDeviceDetachResponse":
        raise grpclib.GRPCError(grpclib.const.Status.UNIMPLEMENTED)

    async def get_entrance_device_list(
        self, get_entrance_device_list_request: "GetEntranceDeviceListRequest"
    ) -> "AsyncIterator[GetEntranceDeviceListResponse]":
        raise grpclib.GRPCError(grpclib.const.Status.UNIMPLEMENTED)
        yield GetEntranceDeviceListResponse()

    async def __rpc_post_entrance(
        self, stream: "grpclib.server.Stream[PostEntranceRequest, PostEntranceResponse]"
    ) -> None:
        request = await stream.recv_message()
        response = await self.post_entrance(request)
        await stream.send_message(response)

    async def __rpc_delete_entrance(
        self,
        stream: "grpclib.server.Stream[DeleteEntranceRequest, DeleteEntranceResponse]",
    ) -> None:
        request = await stream.recv_message()
        response = await self.delete_entrance(request)
        await stream.send_message(response)

    async def __rpc_get_entrance_list(
        self,
        stream: "grpclib.server.Stream[GetEntranceListRequest, GetEntranceListResponse]",
    ) -> None:
        request = await stream.recv_message()
        await self._call_rpc_handler_server_stream(
            self.get_entrance_list,
            stream,
            request,
        )

    async def __rpc_put_entrance_device_attach(
        self,
        stream: "grpclib.server.Stream[PutEntranceDeviceAttachRequest, PutEntranceDeviceAttachResponse]",
    ) -> None:
        request = await stream.recv_message()
        response = await self.put_entrance_device_attach(request)
        await stream.send_message(response)

    async def __rpc_put_entrance_device_detach(
        self,
        stream: "grpclib.server.Stream[PutEntranceDeviceDetachRequest, PutEntranceDeviceDetachResponse]",
    ) -> None:
        request = await stream.recv_message()
        response = await self.put_entrance_device_detach(request)
        await stream.send_message(response)

    async def __rpc_get_entrance_device_list(
        self,
        stream: "grpclib.server.Stream[GetEntranceDeviceListRequest, GetEntranceDeviceListResponse]",
    ) -> None:
        request = await stream.recv_message()
        await self._call_rpc_handler_server_stream(
            self.get_entrance_device_list,
            stream,
            request,
        )

    def __mapping__(self) -> "dict[str, grpclib.const.Handler]":
        return {
            "/keyapis.access_control.v1.EntranceService/PostEntrance": grpclib.const.Handler(
                self.__rpc_post_entrance,
                grpclib.const.Cardinality.UNARY_UNARY,
                PostEntranceRequest,
                PostEntranceResponse,
            ),
            "/keyapis.access_control.v1.EntranceService/DeleteEntrance": grpclib.const.Handler(
                self.__rpc_delete_entrance,
                grpclib.const.Cardinality.UNARY_UNARY,
                DeleteEntranceRequest,
                DeleteEntranceResponse,
            ),
            "/keyapis.access_control.v1.EntranceService/GetEntranceList": grpclib.const.Handler(
                self.__rpc_get_entrance_list,
                grpclib.const.Cardinality.UNARY_STREAM,
                GetEntranceListRequest,
                GetEntranceListResponse,
            ),
            "/keyapis.access_control.v1.EntranceService/PutEntranceDeviceAttach": grpclib.const.Handler(
                self.__rpc_put_entrance_device_attach,
                grpclib.const.Cardinality.UNARY_UNARY,
                PutEntranceDeviceAttachRequest,
                PutEntranceDeviceAttachResponse,
            ),
            "/keyapis.access_control.v1.EntranceService/PutEntranceDeviceDetach": grpclib.const.Handler(
                self.__rpc_put_entrance_device_detach,
                grpclib.const.Cardinality.UNARY_UNARY,
                PutEntranceDeviceDetachRequest,
                PutEntranceDeviceDetachResponse,
            ),
            "/keyapis.access_control.v1.EntranceService/GetEntranceDeviceList": grpclib.const.Handler(
                self.__rpc_get_entrance_device_list,
                grpclib.const.Cardinality.UNARY_STREAM,
                GetEntranceDeviceListRequest,
                GetEntranceDeviceListResponse,
            ),
        }


class BuildingServiceBase(ServiceBase):

    async def get_building(
        self, get_building_request: "GetBuildingRequest"
    ) -> "GetBuildingResponse":
        raise grpclib.GRPCError(grpclib.const.Status.UNIMPLEMENTED)

    async def get_building_list(
        self, get_building_list_request: "GetBuildingListRequest"
    ) -> "AsyncIterator[GetBuildingListResponse]":
        raise grpclib.GRPCError(grpclib.const.Status.UNIMPLEMENTED)
        yield GetBuildingListResponse()

    async def get_building_count(
        self, get_building_count_request: "GetBuildingCountRequest"
    ) -> "GetBuildingCountResponse":
        raise grpclib.GRPCError(grpclib.const.Status.UNIMPLEMENTED)

    async def get_building_orpon_subscription_mode(
        self,
        get_building_orpon_subscription_mode_request: "GetBuildingOrponSubscriptionModeRequest",
    ) -> "GetBuildingOrponSubscriptionModeResponse":
        raise grpclib.GRPCError(grpclib.const.Status.UNIMPLEMENTED)

    async def get_building_orpon_exists(
        self, get_building_orpon_exists_request: "GetBuildingOrponExistsRequest"
    ) -> "GetBuildingOrponExistsResponse":
        raise grpclib.GRPCError(grpclib.const.Status.UNIMPLEMENTED)

    async def __rpc_get_building(
        self, stream: "grpclib.server.Stream[GetBuildingRequest, GetBuildingResponse]"
    ) -> None:
        request = await stream.recv_message()
        response = await self.get_building(request)
        await stream.send_message(response)

    async def __rpc_get_building_list(
        self,
        stream: "grpclib.server.Stream[GetBuildingListRequest, GetBuildingListResponse]",
    ) -> None:
        request = await stream.recv_message()
        await self._call_rpc_handler_server_stream(
            self.get_building_list,
            stream,
            request,
        )

    async def __rpc_get_building_count(
        self,
        stream: "grpclib.server.Stream[GetBuildingCountRequest, GetBuildingCountResponse]",
    ) -> None:
        request = await stream.recv_message()
        response = await self.get_building_count(request)
        await stream.send_message(response)

    async def __rpc_get_building_orpon_subscription_mode(
        self,
        stream: "grpclib.server.Stream[GetBuildingOrponSubscriptionModeRequest, GetBuildingOrponSubscriptionModeResponse]",
    ) -> None:
        request = await stream.recv_message()
        response = await self.get_building_orpon_subscription_mode(request)
        await stream.send_message(response)

    async def __rpc_get_building_orpon_exists(
        self,
        stream: "grpclib.server.Stream[GetBuildingOrponExistsRequest, GetBuildingOrponExistsResponse]",
    ) -> None:
        request = await stream.recv_message()
        response = await self.get_building_orpon_exists(request)
        await stream.send_message(response)

    def __mapping__(self) -> "dict[str, grpclib.const.Handler]":
        return {
            "/keyapis.access_control.v1.BuildingService/GetBuilding": grpclib.const.Handler(
                self.__rpc_get_building,
                grpclib.const.Cardinality.UNARY_UNARY,
                GetBuildingRequest,
                GetBuildingResponse,
            ),
            "/keyapis.access_control.v1.BuildingService/GetBuildingList": grpclib.const.Handler(
                self.__rpc_get_building_list,
                grpclib.const.Cardinality.UNARY_STREAM,
                GetBuildingListRequest,
                GetBuildingListResponse,
            ),
            "/keyapis.access_control.v1.BuildingService/GetBuildingCount": grpclib.const.Handler(
                self.__rpc_get_building_count,
                grpclib.const.Cardinality.UNARY_UNARY,
                GetBuildingCountRequest,
                GetBuildingCountResponse,
            ),
            "/keyapis.access_control.v1.BuildingService/GetBuildingOrponSubscriptionMode": grpclib.const.Handler(
                self.__rpc_get_building_orpon_subscription_mode,
                grpclib.const.Cardinality.UNARY_UNARY,
                GetBuildingOrponSubscriptionModeRequest,
                GetBuildingOrponSubscriptionModeResponse,
            ),
            "/keyapis.access_control.v1.BuildingService/GetBuildingOrponExists": grpclib.const.Handler(
                self.__rpc_get_building_orpon_exists,
                grpclib.const.Cardinality.UNARY_UNARY,
                GetBuildingOrponExistsRequest,
                GetBuildingOrponExistsResponse,
            ),
        }


class FlatgrammServiceBase(ServiceBase):

    async def get_flatgramm(
        self, get_flatgramm_request: "GetFlatgrammRequest"
    ) -> "GetFlatgrammResponse":
        raise grpclib.GRPCError(grpclib.const.Status.UNIMPLEMENTED)

    async def get_flatgramm_list(
        self, get_flatgramm_list_request: "GetFlatgrammListRequest"
    ) -> "AsyncIterator[GetFlatgrammListResponse]":
        raise grpclib.GRPCError(grpclib.const.Status.UNIMPLEMENTED)
        yield GetFlatgrammListResponse()

    async def get_flatgramm_count(
        self, get_flatgramm_count_request: "GetFlatgrammCountRequest"
    ) -> "GetFlatgrammCountResponse":
        raise grpclib.GRPCError(grpclib.const.Status.UNIMPLEMENTED)

    async def get_flatgramm_dc_company_list(
        self, get_flatgramm_dc_company_list_request: "GetFlatgrammDcCompanyListRequest"
    ) -> "AsyncIterator[GetFlatgrammDcCompanyListResponse]":
        raise grpclib.GRPCError(grpclib.const.Status.UNIMPLEMENTED)
        yield GetFlatgrammDcCompanyListResponse()

    async def get_flatgramm_company_relation_list(
        self,
        get_flatgramm_company_relation_list_request: "GetFlatgrammCompanyRelationListRequest",
    ) -> "AsyncIterator[GetFlatgrammCompanyRelationListResponse]":
        raise grpclib.GRPCError(grpclib.const.Status.UNIMPLEMENTED)
        yield GetFlatgrammCompanyRelationListResponse()

    async def get_flatgramm_dc_company_count(
        self,
        get_flatgramm_dc_company_count_request: "GetFlatgrammDcCompanyCountRequest",
    ) -> "GetFlatgrammDcCompanyCountResponse":
        raise grpclib.GRPCError(grpclib.const.Status.UNIMPLEMENTED)

    async def get_flatgramm_company_relation_count(
        self,
        get_flatgramm_company_relation_count_request: "GetFlatgrammCompanyRelationCountRequest",
    ) -> "GetFlatgrammCompanyRelationCountResponse":
        raise grpclib.GRPCError(grpclib.const.Status.UNIMPLEMENTED)

    async def put_flatgramm_dc_company_attach(
        self,
        put_flatgramm_dc_company_attach_request: "PutFlatgrammDcCompanyAttachRequest",
    ) -> "PutFlatgrammDcCompanyAttachResponse":
        raise grpclib.GRPCError(grpclib.const.Status.UNIMPLEMENTED)

    async def put_flatgramm_company_relation_attach(
        self,
        put_flatgramm_company_relation_attach_request: "PutFlatgrammCompanyRelationAttachRequest",
    ) -> "PutFlatgrammCompanyRelationAttachResponse":
        raise grpclib.GRPCError(grpclib.const.Status.UNIMPLEMENTED)

    async def put_flatgramm_dc_company_detach(
        self,
        put_flatgramm_dc_company_detach_request: "PutFlatgrammDcCompanyDetachRequest",
    ) -> "PutFlatgrammDcCompanyDetachResponse":
        raise grpclib.GRPCError(grpclib.const.Status.UNIMPLEMENTED)

    async def put_flatgramm_company_relation_detach(
        self,
        put_flatgramm_company_relation_detach_request: "PutFlatgrammCompanyRelationDetachRequest",
    ) -> "PutFlatgrammCompanyRelationDetachResponse":
        raise grpclib.GRPCError(grpclib.const.Status.UNIMPLEMENTED)

    async def __rpc_get_flatgramm(
        self, stream: "grpclib.server.Stream[GetFlatgrammRequest, GetFlatgrammResponse]"
    ) -> None:
        request = await stream.recv_message()
        response = await self.get_flatgramm(request)
        await stream.send_message(response)

    async def __rpc_get_flatgramm_list(
        self,
        stream: "grpclib.server.Stream[GetFlatgrammListRequest, GetFlatgrammListResponse]",
    ) -> None:
        request = await stream.recv_message()
        await self._call_rpc_handler_server_stream(
            self.get_flatgramm_list,
            stream,
            request,
        )

    async def __rpc_get_flatgramm_count(
        self,
        stream: "grpclib.server.Stream[GetFlatgrammCountRequest, GetFlatgrammCountResponse]",
    ) -> None:
        request = await stream.recv_message()
        response = await self.get_flatgramm_count(request)
        await stream.send_message(response)

    async def __rpc_get_flatgramm_dc_company_list(
        self,
        stream: "grpclib.server.Stream[GetFlatgrammDcCompanyListRequest, GetFlatgrammDcCompanyListResponse]",
    ) -> None:
        request = await stream.recv_message()
        await self._call_rpc_handler_server_stream(
            self.get_flatgramm_dc_company_list,
            stream,
            request,
        )

    async def __rpc_get_flatgramm_company_relation_list(
        self,
        stream: "grpclib.server.Stream[GetFlatgrammCompanyRelationListRequest, GetFlatgrammCompanyRelationListResponse]",
    ) -> None:
        request = await stream.recv_message()
        await self._call_rpc_handler_server_stream(
            self.get_flatgramm_company_relation_list,
            stream,
            request,
        )

    async def __rpc_get_flatgramm_dc_company_count(
        self,
        stream: "grpclib.server.Stream[GetFlatgrammDcCompanyCountRequest, GetFlatgrammDcCompanyCountResponse]",
    ) -> None:
        request = await stream.recv_message()
        response = await self.get_flatgramm_dc_company_count(request)
        await stream.send_message(response)

    async def __rpc_get_flatgramm_company_relation_count(
        self,
        stream: "grpclib.server.Stream[GetFlatgrammCompanyRelationCountRequest, GetFlatgrammCompanyRelationCountResponse]",
    ) -> None:
        request = await stream.recv_message()
        response = await self.get_flatgramm_company_relation_count(request)
        await stream.send_message(response)

    async def __rpc_put_flatgramm_dc_company_attach(
        self,
        stream: "grpclib.server.Stream[PutFlatgrammDcCompanyAttachRequest, PutFlatgrammDcCompanyAttachResponse]",
    ) -> None:
        request = await stream.recv_message()
        response = await self.put_flatgramm_dc_company_attach(request)
        await stream.send_message(response)

    async def __rpc_put_flatgramm_company_relation_attach(
        self,
        stream: "grpclib.server.Stream[PutFlatgrammCompanyRelationAttachRequest, PutFlatgrammCompanyRelationAttachResponse]",
    ) -> None:
        request = await stream.recv_message()
        response = await self.put_flatgramm_company_relation_attach(request)
        await stream.send_message(response)

    async def __rpc_put_flatgramm_dc_company_detach(
        self,
        stream: "grpclib.server.Stream[PutFlatgrammDcCompanyDetachRequest, PutFlatgrammDcCompanyDetachResponse]",
    ) -> None:
        request = await stream.recv_message()
        response = await self.put_flatgramm_dc_company_detach(request)
        await stream.send_message(response)

    async def __rpc_put_flatgramm_company_relation_detach(
        self,
        stream: "grpclib.server.Stream[PutFlatgrammCompanyRelationDetachRequest, PutFlatgrammCompanyRelationDetachResponse]",
    ) -> None:
        request = await stream.recv_message()
        response = await self.put_flatgramm_company_relation_detach(request)
        await stream.send_message(response)

    def __mapping__(self) -> "dict[str, grpclib.const.Handler]":
        return {
            "/keyapis.access_control.v1.FlatgrammService/GetFlatgramm": grpclib.const.Handler(
                self.__rpc_get_flatgramm,
                grpclib.const.Cardinality.UNARY_UNARY,
                GetFlatgrammRequest,
                GetFlatgrammResponse,
            ),
            "/keyapis.access_control.v1.FlatgrammService/GetFlatgrammList": grpclib.const.Handler(
                self.__rpc_get_flatgramm_list,
                grpclib.const.Cardinality.UNARY_STREAM,
                GetFlatgrammListRequest,
                GetFlatgrammListResponse,
            ),
            "/keyapis.access_control.v1.FlatgrammService/GetFlatgrammCount": grpclib.const.Handler(
                self.__rpc_get_flatgramm_count,
                grpclib.const.Cardinality.UNARY_UNARY,
                GetFlatgrammCountRequest,
                GetFlatgrammCountResponse,
            ),
            "/keyapis.access_control.v1.FlatgrammService/GetFlatgrammDcCompanyList": grpclib.const.Handler(
                self.__rpc_get_flatgramm_dc_company_list,
                grpclib.const.Cardinality.UNARY_STREAM,
                GetFlatgrammDcCompanyListRequest,
                GetFlatgrammDcCompanyListResponse,
            ),
            "/keyapis.access_control.v1.FlatgrammService/GetFlatgrammCompanyRelationList": grpclib.const.Handler(
                self.__rpc_get_flatgramm_company_relation_list,
                grpclib.const.Cardinality.UNARY_STREAM,
                GetFlatgrammCompanyRelationListRequest,
                GetFlatgrammCompanyRelationListResponse,
            ),
            "/keyapis.access_control.v1.FlatgrammService/GetFlatgrammDcCompanyCount": grpclib.const.Handler(
                self.__rpc_get_flatgramm_dc_company_count,
                grpclib.const.Cardinality.UNARY_UNARY,
                GetFlatgrammDcCompanyCountRequest,
                GetFlatgrammDcCompanyCountResponse,
            ),
            "/keyapis.access_control.v1.FlatgrammService/GetFlatgrammCompanyRelationCount": grpclib.const.Handler(
                self.__rpc_get_flatgramm_company_relation_count,
                grpclib.const.Cardinality.UNARY_UNARY,
                GetFlatgrammCompanyRelationCountRequest,
                GetFlatgrammCompanyRelationCountResponse,
            ),
            "/keyapis.access_control.v1.FlatgrammService/PutFlatgrammDcCompanyAttach": grpclib.const.Handler(
                self.__rpc_put_flatgramm_dc_company_attach,
                grpclib.const.Cardinality.UNARY_UNARY,
                PutFlatgrammDcCompanyAttachRequest,
                PutFlatgrammDcCompanyAttachResponse,
            ),
            "/keyapis.access_control.v1.FlatgrammService/PutFlatgrammCompanyRelationAttach": grpclib.const.Handler(
                self.__rpc_put_flatgramm_company_relation_attach,
                grpclib.const.Cardinality.UNARY_UNARY,
                PutFlatgrammCompanyRelationAttachRequest,
                PutFlatgrammCompanyRelationAttachResponse,
            ),
            "/keyapis.access_control.v1.FlatgrammService/PutFlatgrammDcCompanyDetach": grpclib.const.Handler(
                self.__rpc_put_flatgramm_dc_company_detach,
                grpclib.const.Cardinality.UNARY_UNARY,
                PutFlatgrammDcCompanyDetachRequest,
                PutFlatgrammDcCompanyDetachResponse,
            ),
            "/keyapis.access_control.v1.FlatgrammService/PutFlatgrammCompanyRelationDetach": grpclib.const.Handler(
                self.__rpc_put_flatgramm_company_relation_detach,
                grpclib.const.Cardinality.UNARY_UNARY,
                PutFlatgrammCompanyRelationDetachRequest,
                PutFlatgrammCompanyRelationDetachResponse,
            ),
        }


class AccessPointGroupServiceBase(ServiceBase):

    async def get_access_point_group_list(
        self, get_access_point_group_list_request: "GetAccessPointGroupListRequest"
    ) -> "AsyncIterator[GetAccessPointGroupListResponse]":
        raise grpclib.GRPCError(grpclib.const.Status.UNIMPLEMENTED)
        yield GetAccessPointGroupListResponse()

    async def get_access_point_group_count(
        self, get_access_point_group_count_request: "GetAccessPointGroupCountRequest"
    ) -> "GetAccessPointGroupCountResponse":
        raise grpclib.GRPCError(grpclib.const.Status.UNIMPLEMENTED)

    async def put_access_point_group_attach(
        self, put_access_point_group_attach_request: "PutAccessPointGroupAttachRequest"
    ) -> "PutAccessPointGroupAttachResponse":
        raise grpclib.GRPCError(grpclib.const.Status.UNIMPLEMENTED)

    async def put_access_point_group_detach(
        self, put_access_point_group_detach_request: "PutAccessPointGroupDetachRequest"
    ) -> "PutAccessPointGroupDetachResponse":
        raise grpclib.GRPCError(grpclib.const.Status.UNIMPLEMENTED)

    async def __rpc_get_access_point_group_list(
        self,
        stream: "grpclib.server.Stream[GetAccessPointGroupListRequest, GetAccessPointGroupListResponse]",
    ) -> None:
        request = await stream.recv_message()
        await self._call_rpc_handler_server_stream(
            self.get_access_point_group_list,
            stream,
            request,
        )

    async def __rpc_get_access_point_group_count(
        self,
        stream: "grpclib.server.Stream[GetAccessPointGroupCountRequest, GetAccessPointGroupCountResponse]",
    ) -> None:
        request = await stream.recv_message()
        response = await self.get_access_point_group_count(request)
        await stream.send_message(response)

    async def __rpc_put_access_point_group_attach(
        self,
        stream: "grpclib.server.Stream[PutAccessPointGroupAttachRequest, PutAccessPointGroupAttachResponse]",
    ) -> None:
        request = await stream.recv_message()
        response = await self.put_access_point_group_attach(request)
        await stream.send_message(response)

    async def __rpc_put_access_point_group_detach(
        self,
        stream: "grpclib.server.Stream[PutAccessPointGroupDetachRequest, PutAccessPointGroupDetachResponse]",
    ) -> None:
        request = await stream.recv_message()
        response = await self.put_access_point_group_detach(request)
        await stream.send_message(response)

    def __mapping__(self) -> "dict[str, grpclib.const.Handler]":
        return {
            "/keyapis.access_control.v1.AccessPointGroupService/GetAccessPointGroupList": grpclib.const.Handler(
                self.__rpc_get_access_point_group_list,
                grpclib.const.Cardinality.UNARY_STREAM,
                GetAccessPointGroupListRequest,
                GetAccessPointGroupListResponse,
            ),
            "/keyapis.access_control.v1.AccessPointGroupService/GetAccessPointGroupCount": grpclib.const.Handler(
                self.__rpc_get_access_point_group_count,
                grpclib.const.Cardinality.UNARY_UNARY,
                GetAccessPointGroupCountRequest,
                GetAccessPointGroupCountResponse,
            ),
            "/keyapis.access_control.v1.AccessPointGroupService/PutAccessPointGroupAttach": grpclib.const.Handler(
                self.__rpc_put_access_point_group_attach,
                grpclib.const.Cardinality.UNARY_UNARY,
                PutAccessPointGroupAttachRequest,
                PutAccessPointGroupAttachResponse,
            ),
            "/keyapis.access_control.v1.AccessPointGroupService/PutAccessPointGroupDetach": grpclib.const.Handler(
                self.__rpc_put_access_point_group_detach,
                grpclib.const.Cardinality.UNARY_UNARY,
                PutAccessPointGroupDetachRequest,
                PutAccessPointGroupDetachResponse,
            ),
        }


class RoomDeviceServiceBase(ServiceBase):

    async def put_room_device_attach(
        self, put_room_device_attach_request: "PutRoomDeviceAttachRequest"
    ) -> "PutRoomDeviceAttachResponse":
        raise grpclib.GRPCError(grpclib.const.Status.UNIMPLEMENTED)

    async def put_room_device_detach(
        self, put_room_device_detach_request: "PutRoomDeviceDetachRequest"
    ) -> "PutRoomDeviceDetachResponse":
        raise grpclib.GRPCError(grpclib.const.Status.UNIMPLEMENTED)

    async def get_room_device_list(
        self, get_room_device_list_request: "GetRoomDeviceListRequest"
    ) -> "AsyncIterator[GetRoomDeviceListResponse]":
        raise grpclib.GRPCError(grpclib.const.Status.UNIMPLEMENTED)
        yield GetRoomDeviceListResponse()

    async def get_room_device_count(
        self, get_room_device_count_request: "GetRoomDeviceCountRequest"
    ) -> "GetRoomDeviceCountResponse":
        raise grpclib.GRPCError(grpclib.const.Status.UNIMPLEMENTED)

    async def __rpc_put_room_device_attach(
        self,
        stream: "grpclib.server.Stream[PutRoomDeviceAttachRequest, PutRoomDeviceAttachResponse]",
    ) -> None:
        request = await stream.recv_message()
        response = await self.put_room_device_attach(request)
        await stream.send_message(response)

    async def __rpc_put_room_device_detach(
        self,
        stream: "grpclib.server.Stream[PutRoomDeviceDetachRequest, PutRoomDeviceDetachResponse]",
    ) -> None:
        request = await stream.recv_message()
        response = await self.put_room_device_detach(request)
        await stream.send_message(response)

    async def __rpc_get_room_device_list(
        self,
        stream: "grpclib.server.Stream[GetRoomDeviceListRequest, GetRoomDeviceListResponse]",
    ) -> None:
        request = await stream.recv_message()
        await self._call_rpc_handler_server_stream(
            self.get_room_device_list,
            stream,
            request,
        )

    async def __rpc_get_room_device_count(
        self,
        stream: "grpclib.server.Stream[GetRoomDeviceCountRequest, GetRoomDeviceCountResponse]",
    ) -> None:
        request = await stream.recv_message()
        response = await self.get_room_device_count(request)
        await stream.send_message(response)

    def __mapping__(self) -> "dict[str, grpclib.const.Handler]":
        return {
            "/keyapis.access_control.v1.RoomDeviceService/PutRoomDeviceAttach": grpclib.const.Handler(
                self.__rpc_put_room_device_attach,
                grpclib.const.Cardinality.UNARY_UNARY,
                PutRoomDeviceAttachRequest,
                PutRoomDeviceAttachResponse,
            ),
            "/keyapis.access_control.v1.RoomDeviceService/PutRoomDeviceDetach": grpclib.const.Handler(
                self.__rpc_put_room_device_detach,
                grpclib.const.Cardinality.UNARY_UNARY,
                PutRoomDeviceDetachRequest,
                PutRoomDeviceDetachResponse,
            ),
            "/keyapis.access_control.v1.RoomDeviceService/GetRoomDeviceList": grpclib.const.Handler(
                self.__rpc_get_room_device_list,
                grpclib.const.Cardinality.UNARY_STREAM,
                GetRoomDeviceListRequest,
                GetRoomDeviceListResponse,
            ),
            "/keyapis.access_control.v1.RoomDeviceService/GetRoomDeviceCount": grpclib.const.Handler(
                self.__rpc_get_room_device_count,
                grpclib.const.Cardinality.UNARY_UNARY,
                GetRoomDeviceCountRequest,
                GetRoomDeviceCountResponse,
            ),
        }


class RfidServiceBase(ServiceBase):

    async def get_rfid(self, get_rfid_request: "GetRfidRequest") -> "GetRfidResponse":
        raise grpclib.GRPCError(grpclib.const.Status.UNIMPLEMENTED)

    async def get_rfid_list(
        self, get_rfid_list_request: "GetRfidListRequest"
    ) -> "AsyncIterator[GetRfidListResponse]":
        raise grpclib.GRPCError(grpclib.const.Status.UNIMPLEMENTED)
        yield GetRfidListResponse()

    async def get_rfid_count(
        self, get_rfid_count_request: "GetRfidCountRequest"
    ) -> "GetRfidCountResponse":
        raise grpclib.GRPCError(grpclib.const.Status.UNIMPLEMENTED)

    async def post_rfid(
        self, post_rfid_request: "PostRfidRequest"
    ) -> "PostRfidResponse":
        raise grpclib.GRPCError(grpclib.const.Status.UNIMPLEMENTED)

    async def delete_rfid(
        self, delete_rfid_request: "DeleteRfidRequest"
    ) -> "DeleteRfidResponse":
        raise grpclib.GRPCError(grpclib.const.Status.UNIMPLEMENTED)

    async def __rpc_get_rfid(
        self, stream: "grpclib.server.Stream[GetRfidRequest, GetRfidResponse]"
    ) -> None:
        request = await stream.recv_message()
        response = await self.get_rfid(request)
        await stream.send_message(response)

    async def __rpc_get_rfid_list(
        self, stream: "grpclib.server.Stream[GetRfidListRequest, GetRfidListResponse]"
    ) -> None:
        request = await stream.recv_message()
        await self._call_rpc_handler_server_stream(
            self.get_rfid_list,
            stream,
            request,
        )

    async def __rpc_get_rfid_count(
        self, stream: "grpclib.server.Stream[GetRfidCountRequest, GetRfidCountResponse]"
    ) -> None:
        request = await stream.recv_message()
        response = await self.get_rfid_count(request)
        await stream.send_message(response)

    async def __rpc_post_rfid(
        self, stream: "grpclib.server.Stream[PostRfidRequest, PostRfidResponse]"
    ) -> None:
        request = await stream.recv_message()
        response = await self.post_rfid(request)
        await stream.send_message(response)

    async def __rpc_delete_rfid(
        self, stream: "grpclib.server.Stream[DeleteRfidRequest, DeleteRfidResponse]"
    ) -> None:
        request = await stream.recv_message()
        response = await self.delete_rfid(request)
        await stream.send_message(response)

    def __mapping__(self) -> "dict[str, grpclib.const.Handler]":
        return {
            "/keyapis.access_control.v1.RfidService/GetRfid": grpclib.const.Handler(
                self.__rpc_get_rfid,
                grpclib.const.Cardinality.UNARY_UNARY,
                GetRfidRequest,
                GetRfidResponse,
            ),
            "/keyapis.access_control.v1.RfidService/GetRfidList": grpclib.const.Handler(
                self.__rpc_get_rfid_list,
                grpclib.const.Cardinality.UNARY_STREAM,
                GetRfidListRequest,
                GetRfidListResponse,
            ),
            "/keyapis.access_control.v1.RfidService/GetRfidCount": grpclib.const.Handler(
                self.__rpc_get_rfid_count,
                grpclib.const.Cardinality.UNARY_UNARY,
                GetRfidCountRequest,
                GetRfidCountResponse,
            ),
            "/keyapis.access_control.v1.RfidService/PostRfid": grpclib.const.Handler(
                self.__rpc_post_rfid,
                grpclib.const.Cardinality.UNARY_UNARY,
                PostRfidRequest,
                PostRfidResponse,
            ),
            "/keyapis.access_control.v1.RfidService/DeleteRfid": grpclib.const.Handler(
                self.__rpc_delete_rfid,
                grpclib.const.Cardinality.UNARY_UNARY,
                DeleteRfidRequest,
                DeleteRfidResponse,
            ),
        }


class AccessPointServiceBase(ServiceBase):

    async def post_access_point(
        self, post_access_point_request: "PostAccessPointRequest"
    ) -> "PostAccessPointResponse":
        raise grpclib.GRPCError(grpclib.const.Status.UNIMPLEMENTED)

    async def get_access_point(
        self, get_access_point_request: "GetAccessPointRequest"
    ) -> "GetAccessPointResponse":
        raise grpclib.GRPCError(grpclib.const.Status.UNIMPLEMENTED)

    async def get_access_point_list(
        self, get_access_point_list_request: "GetAccessPointListRequest"
    ) -> "AsyncIterator[GetAccessPointListResponse]":
        raise grpclib.GRPCError(grpclib.const.Status.UNIMPLEMENTED)
        yield GetAccessPointListResponse()

    async def get_access_point_count(
        self, get_access_point_count_request: "GetAccessPointCountRequest"
    ) -> "GetAccessPointCountResponse":
        raise grpclib.GRPCError(grpclib.const.Status.UNIMPLEMENTED)

    async def delete_access_point(
        self, delete_access_point_request: "DeleteAccessPointRequest"
    ) -> "DeleteAccessPointResponse":
        raise grpclib.GRPCError(grpclib.const.Status.UNIMPLEMENTED)

    async def post_access_point_open(
        self, post_access_point_open_request: "PostAccessPointOpenRequest"
    ) -> "PostAccessPointOpenResponse":
        raise grpclib.GRPCError(grpclib.const.Status.UNIMPLEMENTED)

    async def __rpc_post_access_point(
        self,
        stream: "grpclib.server.Stream[PostAccessPointRequest, PostAccessPointResponse]",
    ) -> None:
        request = await stream.recv_message()
        response = await self.post_access_point(request)
        await stream.send_message(response)

    async def __rpc_get_access_point(
        self,
        stream: "grpclib.server.Stream[GetAccessPointRequest, GetAccessPointResponse]",
    ) -> None:
        request = await stream.recv_message()
        response = await self.get_access_point(request)
        await stream.send_message(response)

    async def __rpc_get_access_point_list(
        self,
        stream: "grpclib.server.Stream[GetAccessPointListRequest, GetAccessPointListResponse]",
    ) -> None:
        request = await stream.recv_message()
        await self._call_rpc_handler_server_stream(
            self.get_access_point_list,
            stream,
            request,
        )

    async def __rpc_get_access_point_count(
        self,
        stream: "grpclib.server.Stream[GetAccessPointCountRequest, GetAccessPointCountResponse]",
    ) -> None:
        request = await stream.recv_message()
        response = await self.get_access_point_count(request)
        await stream.send_message(response)

    async def __rpc_delete_access_point(
        self,
        stream: "grpclib.server.Stream[DeleteAccessPointRequest, DeleteAccessPointResponse]",
    ) -> None:
        request = await stream.recv_message()
        response = await self.delete_access_point(request)
        await stream.send_message(response)

    async def __rpc_post_access_point_open(
        self,
        stream: "grpclib.server.Stream[PostAccessPointOpenRequest, PostAccessPointOpenResponse]",
    ) -> None:
        request = await stream.recv_message()
        response = await self.post_access_point_open(request)
        await stream.send_message(response)

    def __mapping__(self) -> "dict[str, grpclib.const.Handler]":
        return {
            "/keyapis.access_control.v1.AccessPointService/PostAccessPoint": grpclib.const.Handler(
                self.__rpc_post_access_point,
                grpclib.const.Cardinality.UNARY_UNARY,
                PostAccessPointRequest,
                PostAccessPointResponse,
            ),
            "/keyapis.access_control.v1.AccessPointService/GetAccessPoint": grpclib.const.Handler(
                self.__rpc_get_access_point,
                grpclib.const.Cardinality.UNARY_UNARY,
                GetAccessPointRequest,
                GetAccessPointResponse,
            ),
            "/keyapis.access_control.v1.AccessPointService/GetAccessPointList": grpclib.const.Handler(
                self.__rpc_get_access_point_list,
                grpclib.const.Cardinality.UNARY_STREAM,
                GetAccessPointListRequest,
                GetAccessPointListResponse,
            ),
            "/keyapis.access_control.v1.AccessPointService/GetAccessPointCount": grpclib.const.Handler(
                self.__rpc_get_access_point_count,
                grpclib.const.Cardinality.UNARY_UNARY,
                GetAccessPointCountRequest,
                GetAccessPointCountResponse,
            ),
            "/keyapis.access_control.v1.AccessPointService/DeleteAccessPoint": grpclib.const.Handler(
                self.__rpc_delete_access_point,
                grpclib.const.Cardinality.UNARY_UNARY,
                DeleteAccessPointRequest,
                DeleteAccessPointResponse,
            ),
            "/keyapis.access_control.v1.AccessPointService/PostAccessPointOpen": grpclib.const.Handler(
                self.__rpc_post_access_point_open,
                grpclib.const.Cardinality.UNARY_UNARY,
                PostAccessPointOpenRequest,
                PostAccessPointOpenResponse,
            ),
        }


class RoomUserServiceBase(ServiceBase):

    async def get_room_user_list(
        self, get_room_user_list_request: "GetRoomUserListRequest"
    ) -> "AsyncIterator[GetRoomUserListResponse]":
        raise grpclib.GRPCError(grpclib.const.Status.UNIMPLEMENTED)
        yield GetRoomUserListResponse()

    async def get_room_user_count(
        self, get_room_user_count_request: "GetRoomUserCountRequest"
    ) -> "GetRoomUserCountResponse":
        raise grpclib.GRPCError(grpclib.const.Status.UNIMPLEMENTED)

    async def __rpc_get_room_user_list(
        self,
        stream: "grpclib.server.Stream[GetRoomUserListRequest, GetRoomUserListResponse]",
    ) -> None:
        request = await stream.recv_message()
        await self._call_rpc_handler_server_stream(
            self.get_room_user_list,
            stream,
            request,
        )

    async def __rpc_get_room_user_count(
        self,
        stream: "grpclib.server.Stream[GetRoomUserCountRequest, GetRoomUserCountResponse]",
    ) -> None:
        request = await stream.recv_message()
        response = await self.get_room_user_count(request)
        await stream.send_message(response)

    def __mapping__(self) -> "dict[str, grpclib.const.Handler]":
        return {
            "/keyapis.access_control.v1.RoomUserService/GetRoomUserList": grpclib.const.Handler(
                self.__rpc_get_room_user_list,
                grpclib.const.Cardinality.UNARY_STREAM,
                GetRoomUserListRequest,
                GetRoomUserListResponse,
            ),
            "/keyapis.access_control.v1.RoomUserService/GetRoomUserCount": grpclib.const.Handler(
                self.__rpc_get_room_user_count,
                grpclib.const.Cardinality.UNARY_UNARY,
                GetRoomUserCountRequest,
                GetRoomUserCountResponse,
            ),
        }


rebuild_dataclass(Room)  # type: ignore
rebuild_dataclass(GetRoomResponse)  # type: ignore
rebuild_dataclass(GetRoomResponseError)  # type: ignore
rebuild_dataclass(PatchRoomSetSubscriptionModeRequest)  # type: ignore
rebuild_dataclass(PatchRoomSetSubscriptionModeResponse)  # type: ignore
rebuild_dataclass(PatchRoomSetSubscriptionModeResponseError)  # type: ignore
rebuild_dataclass(GetRoomListRequest)  # type: ignore
rebuild_dataclass(GetRoomListResponse)  # type: ignore
rebuild_dataclass(GetRoomListResponseError)  # type: ignore
rebuild_dataclass(GetRoomCountRequest)  # type: ignore
rebuild_dataclass(RoomFilter)  # type: ignore
rebuild_dataclass(GetRoomOrponNumberExistsResponse)  # type: ignore
rebuild_dataclass(GetRoomOrponNumberExistsResponseError)  # type: ignore
rebuild_dataclass(RoomPaging)  # type: ignore
rebuild_dataclass(ConfigureRoomsResultTask)  # type: ignore
rebuild_dataclass(LoadRfidsToDevicesTask)  # type: ignore
rebuild_dataclass(LoadCodesToDevicesTask)  # type: ignore
rebuild_dataclass(DeleteRfidsFromDevicesTask)  # type: ignore
rebuild_dataclass(DeleteCodesFromDevicesTask)  # type: ignore
rebuild_dataclass(PrepareStartTask)  # type: ignore
rebuild_dataclass(DeleteRfidsFromAllDevicesTask)  # type: ignore
rebuild_dataclass(DeleteRfidsFromAllDevicesResultTask)  # type: ignore
rebuild_dataclass(PostBroadcastAlertStartRequest)  # type: ignore
rebuild_dataclass(PostBroadcastAlertStartResponse)  # type: ignore
rebuild_dataclass(PostBroadcastAlertStartResponseError)  # type: ignore
rebuild_dataclass(PostBroadcastAlertStopResponse)  # type: ignore
rebuild_dataclass(PostBroadcastAlertStopResponseError)  # type: ignore
rebuild_dataclass(EntranceFilter)  # type: ignore
rebuild_dataclass(EntrancePaging)  # type: ignore
rebuild_dataclass(GetEntranceListRequest)  # type: ignore
rebuild_dataclass(GetEntranceListResponse)  # type: ignore
rebuild_dataclass(GetEntranceListResponseError)  # type: ignore
rebuild_dataclass(PutEntranceDeviceAttachRequest)  # type: ignore
rebuild_dataclass(PutEntranceDeviceAttachResponse)  # type: ignore
rebuild_dataclass(PutEntranceDeviceAttachResponseError)  # type: ignore
rebuild_dataclass(PutEntranceDeviceDetachRequest)  # type: ignore
rebuild_dataclass(PutEntranceDeviceDetachResponse)  # type: ignore
rebuild_dataclass(PutEntranceDeviceDetachResponseError)  # type: ignore
rebuild_dataclass(PostEntranceRequest)  # type: ignore
rebuild_dataclass(PostEntranceResponse)  # type: ignore
rebuild_dataclass(PostEntranceResponseError)  # type: ignore
rebuild_dataclass(DeleteEntranceResponse)  # type: ignore
rebuild_dataclass(DeleteEntranceResponseError)  # type: ignore
rebuild_dataclass(EntranceDevice)  # type: ignore
rebuild_dataclass(EntranceDevicePaging)  # type: ignore
rebuild_dataclass(GetEntranceDeviceListRequest)  # type: ignore
rebuild_dataclass(GetEntranceDeviceListResponse)  # type: ignore
rebuild_dataclass(GetEntranceDeviceListResponseError)  # type: ignore
rebuild_dataclass(Building)  # type: ignore
rebuild_dataclass(GetBuildingResponse)  # type: ignore
rebuild_dataclass(GetBuildingResponseError)  # type: ignore
rebuild_dataclass(GetBuildingListRequest)  # type: ignore
rebuild_dataclass(GetBuildingListResponse)  # type: ignore
rebuild_dataclass(GetBuildingListResponseError)  # type: ignore
rebuild_dataclass(GetBuildingCountRequest)  # type: ignore
rebuild_dataclass(BuildingPaging)  # type: ignore
rebuild_dataclass(BuildingSubscriptionMode)  # type: ignore
rebuild_dataclass(GetBuildingOrponSubscriptionModeResponse)  # type: ignore
rebuild_dataclass(GetBuildingOrponSubscriptionModeResponseError)  # type: ignore
rebuild_dataclass(GetBuildingOrponExistsResponse)  # type: ignore
rebuild_dataclass(GetBuildingOrponExistsResponseError)  # type: ignore
rebuild_dataclass(Flatgramm)  # type: ignore
rebuild_dataclass(GetFlatgrammResponse)  # type: ignore
rebuild_dataclass(GetFlatgrammResponseError)  # type: ignore
rebuild_dataclass(GetFlatgrammListRequest)  # type: ignore
rebuild_dataclass(GetFlatgrammListResponse)  # type: ignore
rebuild_dataclass(GetFlatgrammListResponseError)  # type: ignore
rebuild_dataclass(GetFlatgrammCountRequest)  # type: ignore
rebuild_dataclass(FlatgrammFilter)  # type: ignore
rebuild_dataclass(FlatgrammPaging)  # type: ignore
rebuild_dataclass(GetFlatgrammDcCompanyListRequest)  # type: ignore
rebuild_dataclass(GetFlatgrammCompanyRelationListRequest)  # type: ignore
rebuild_dataclass(GetFlatgrammDcCompanyCountRequest)  # type: ignore
rebuild_dataclass(GetFlatgrammCompanyRelationCountRequest)  # type: ignore
rebuild_dataclass(GetFlatgrammDcCompanyCountResponse)  # type: ignore
rebuild_dataclass(GetFlatgrammDcCompanyCountResponseError)  # type: ignore
rebuild_dataclass(GetFlatgrammCompanyRelationCountResponse)  # type: ignore
rebuild_dataclass(GetFlatgrammCompanyRelationCountResponseError)  # type: ignore
rebuild_dataclass(DcCompanyFlatgrammPaging)  # type: ignore
rebuild_dataclass(FlatgrammCompanyRelationPaging)  # type: ignore
rebuild_dataclass(GetFlatgrammDcCompanyListResponse)  # type: ignore
rebuild_dataclass(GetFlatgrammDcCompanyListResponseError)  # type: ignore
rebuild_dataclass(GetFlatgrammCompanyRelationListResponse)  # type: ignore
rebuild_dataclass(GetFlatgrammCompanyRelationListResponseError)  # type: ignore
rebuild_dataclass(PutFlatgrammDcCompanyAttachRequest)  # type: ignore
rebuild_dataclass(PutFlatgrammCompanyRelationAttachRequest)  # type: ignore
rebuild_dataclass(PutFlatgrammDcCompanyAttachResponse)  # type: ignore
rebuild_dataclass(PutFlatgrammDcCompanyAttachResponseError)  # type: ignore
rebuild_dataclass(PutFlatgrammCompanyRelationAttachResponse)  # type: ignore
rebuild_dataclass(PutFlatgrammCompanyRelationAttachResponseError)  # type: ignore
rebuild_dataclass(PutFlatgrammDcCompanyDetachRequest)  # type: ignore
rebuild_dataclass(PutFlatgrammCompanyRelationDetachRequest)  # type: ignore
rebuild_dataclass(FlatgrammCompanyRelation)  # type: ignore
rebuild_dataclass(FlatgrammCompanyRelationFilter)  # type: ignore
rebuild_dataclass(PutFlatgrammDcCompanyDetachResponse)  # type: ignore
rebuild_dataclass(PutFlatgrammDcCompanyDetachResponseError)  # type: ignore
rebuild_dataclass(PutFlatgrammCompanyRelationDetachResponse)  # type: ignore
rebuild_dataclass(PutFlatgrammCompanyRelationDetachResponseError)  # type: ignore
rebuild_dataclass(AccessPointGroupPaging)  # type: ignore
rebuild_dataclass(GetAccessPointGroupListRequest)  # type: ignore
rebuild_dataclass(GetAccessPointGroupListResponse)  # type: ignore
rebuild_dataclass(GetAccessPointGroupListResponseError)  # type: ignore
rebuild_dataclass(GetAccessPointGroupCountRequest)  # type: ignore
rebuild_dataclass(GetAccessPointGroupCountResponse)  # type: ignore
rebuild_dataclass(GetAccessPointGroupCountResponseError)  # type: ignore
rebuild_dataclass(PutAccessPointGroupAttachRequest)  # type: ignore
rebuild_dataclass(PutAccessPointGroupAttachResponse)  # type: ignore
rebuild_dataclass(PutAccessPointGroupAttachResponseError)  # type: ignore
rebuild_dataclass(PutAccessPointGroupDetachRequest)  # type: ignore
rebuild_dataclass(PutAccessPointGroupDetachResponse)  # type: ignore
rebuild_dataclass(PutAccessPointGroupDetachResponseError)  # type: ignore
rebuild_dataclass(PutRoomDeviceAttachRequest)  # type: ignore
rebuild_dataclass(PutRoomDeviceAttachResponse)  # type: ignore
rebuild_dataclass(PutRoomDeviceAttachResponseError)  # type: ignore
rebuild_dataclass(PutRoomDeviceDetachRequest)  # type: ignore
rebuild_dataclass(PutRoomDeviceDetachResponse)  # type: ignore
rebuild_dataclass(PutRoomDeviceDetachResponseError)  # type: ignore
rebuild_dataclass(RoomDevicePaging)  # type: ignore
rebuild_dataclass(GetRoomDeviceListRequest)  # type: ignore
rebuild_dataclass(GetRoomDeviceListResponse)  # type: ignore
rebuild_dataclass(GetRoomDeviceListResponseError)  # type: ignore
rebuild_dataclass(GetRoomDeviceCountRequest)  # type: ignore
rebuild_dataclass(Rfid)  # type: ignore
rebuild_dataclass(RfidSavingError)  # type: ignore
rebuild_dataclass(GetRfidResponse)  # type: ignore
rebuild_dataclass(GetRfidResponseError)  # type: ignore
rebuild_dataclass(GetRfidListRequest)  # type: ignore
rebuild_dataclass(GetRfidListResponse)  # type: ignore
rebuild_dataclass(GetRfidListResponseError)  # type: ignore
rebuild_dataclass(GetRfidCountRequest)  # type: ignore
rebuild_dataclass(GetRfidCountResponse)  # type: ignore
rebuild_dataclass(GetRfidCountResponseError)  # type: ignore
rebuild_dataclass(PostRfidRequest)  # type: ignore
rebuild_dataclass(PostRfidResponse)  # type: ignore
rebuild_dataclass(PostRfidResponseError)  # type: ignore
rebuild_dataclass(DeleteRfidResponse)  # type: ignore
rebuild_dataclass(DeleteRfidResponseError)  # type: ignore
rebuild_dataclass(RfidFilter)  # type: ignore
rebuild_dataclass(RfidPaging)  # type: ignore
rebuild_dataclass(AccessPoint)  # type: ignore
rebuild_dataclass(AccessPointCamera)  # type: ignore
rebuild_dataclass(AccessPointSavingError)  # type: ignore
rebuild_dataclass(AccessPointFilter)  # type: ignore
rebuild_dataclass(AccessPointPaging)  # type: ignore
rebuild_dataclass(PostAccessPointRequest)  # type: ignore
rebuild_dataclass(PostAccessPointResponse)  # type: ignore
rebuild_dataclass(PostAccessPointResponseError)  # type: ignore
rebuild_dataclass(GetAccessPointListRequest)  # type: ignore
rebuild_dataclass(GetAccessPointListResponse)  # type: ignore
rebuild_dataclass(GetAccessPointListResponseError)  # type: ignore
rebuild_dataclass(GetAccessPointResponse)  # type: ignore
rebuild_dataclass(GetAccessPointResponseError)  # type: ignore
rebuild_dataclass(GetAccessPointCountRequest)  # type: ignore
rebuild_dataclass(GetAccessPointCountResponse)  # type: ignore
rebuild_dataclass(GetAccessPointCountResponseError)  # type: ignore
rebuild_dataclass(DeleteAccessPointResponse)  # type: ignore
rebuild_dataclass(DeleteAccessPointResponseError)  # type: ignore
rebuild_dataclass(PostAccessPointOpenRequest)  # type: ignore
rebuild_dataclass(PostAccessPointOpenResponse)  # type: ignore
rebuild_dataclass(PostAccessPointOpenResponseError)  # type: ignore
rebuild_dataclass(GetRoomUserListRequest)  # type: ignore
rebuild_dataclass(GetRoomUserListResponse)  # type: ignore
rebuild_dataclass(GetRoomUserListResponseError)  # type: ignore
rebuild_dataclass(GetRoomUserCountRequest)  # type: ignore
rebuild_dataclass(RoomUserPaging)  # type: ignore
