Главная › Настройка объекта › Счётчики

7 Счётчики

Настройте счётчики коммунальных услуг, отслеживайте показания, управляйте тарифными зонами и единицами измерения. Система контролирует своевременность подачи показаний арендаторами.

Почему счётчики — это важно

Большинство ключевых коммунальных расходов — электроэнергия, газ, вода, отопление — рассчитываются на основе показаний счётчиков. Точные и своевременные показания обеспечивают правильный расчёт, предотвращают споры между арендодателями и арендаторами и предоставляют прозрачные данные о потреблении.

Что обеспечивают счётчики

  • Автоматический расчёт начислений на основе потребления
  • Поддержка многозонных тарифов (день/ночь, пик/полупик)
  • Отслеживание потребления за период со среднесуточными показателями
  • Контроль своевременности подачи показаний арендаторами
  • Механизм корректировки при замене счётчика или исправлении ошибок

Типы затрат со счётчиками

Пять типов затрат поддерживают учёт по счётчикам. Каждый имеет единицу измерения по умолчанию, которую можно переопределить для конкретного счётчика.

ELECTRICITY kWh — Поддерживает многозонные тарифы
GAS m3 — Потребление природного газа
COLD_WATER m3 — Холодное водоснабжение
HOT_WATER m3 — Горячее водоснабжение
HEATING Gcal — Центральное или индивидуальное отопление

Поля счётчика

При создании счётчика вы указываете тип затрат, серийный номер, тип тарифа и начальное показание с его датой.

expense_type_id Тип затрат (обязательно)
serial_number Заводской серийный номер, уникальный для объекта
tariff_type SINGLE_ZONE, TWO_ZONE или THREE_ZONE
initial_value Начальное показание (для однозонного)
initial_value_date Дата начального показания (обязательно)
initial_value_t1/t2/t3 Зонные показания для многозонных тарифов

Тарифные зоны

Счётчики электроэнергии поддерживают многозонные тарифы. Для двухзонных и трёхзонных счётчиков вы вводите отдельные показания по зонам — общее значение рассчитывается автоматически.

Тип тарифа Зоны Поля Описание
SINGLE_ZONE 1 value Стандартный однозонный счётчик
TWO_ZONE 2 value_t1, value_t2 T1 = День, T2 = Ночь (коэф. 50%)
THREE_ZONE 3 value_t1, value_t2, value_t3 T1 = Пик (150%), T2 = Полупик (100%), T3 = Ночь (40%)
Автоматический подсчёт суммы
Для многозонных счётчиков общее значение всегда рассчитывается как сумма зонных значений: value = value_t1 + value_t2 [+ value_t3]. Вам не нужно указывать общее — оно вычисляется автоматически.

Типы показаний

Система поддерживает четыре типа показаний счётчиков, каждый из которых выполняет определённую роль в процессе начислений.

Начальное
Устанавливается при создании счётчика. Одно на счётчик. Единственный тип, который можно редактировать.
Обычное
Обычное показание. Должно быть >= предыдущего. Может быть привязано к начислениям.
Корректировка
Исправление после замены счётчика или ошибки. Хранится как отрицательная разница. Не может быть привязано к начислениям.
Расчётное
Автоматически интерполировано системой для промежуточных расчётных периодов. Может быть привязано к начислениям.
Правила валидации
Только одно показание в день на счётчик. Новые показания должны быть >= текущего значения (иначе автоматически определяется как корректировка). Если показание меньше текущего, система автоматически создаёт запись корректировки.

Контроль своевременности

Система отслеживает, вовремя ли арендаторы подают показания. Для каждого счётчика можно установить день подачи показаний, и система контролирует выполнение.

Функции отслеживания

  • Настраиваемый день подачи показаний (1-31) для каждого счётчика
  • Автоматическая интерполяция для пропущенных периодов
  • Статистика потребления: общая, за период, среднесуточная
  • Фото счётчиков и фото показаний для верификации

Документы

Вы можете прикладывать документы (фото, PDF) к счётчикам и их показаниям. Документы безопасно хранятся в S3 и доступны через подписанные URL.

Документы счётчика
Прикрепите фото счётчика, акты установки, документы поверки. Загружайте на странице деталей счётчика.
Документы показания
Прикрепите фото дисплея счётчика при добавлении или просмотре показаний. Загружайте при создании показания или на странице деталей счётчика.
Ограничения файлов
Максимальный размер файла: 20 МБ. Поддерживаемые форматы: JPEG, PNG, GIF, WebP, HEIC, PDF. К каждому счётчику или показанию можно прикрепить несколько файлов.

API документов

POST   /properties/{propertyId}/counters/{id}/documents/upload                           # Upload counter document
POST   /properties/{propertyId}/counters/{id}/documents/{documentId}/delete              # Delete counter document
POST   /properties/{propertyId}/counters/{id}/values/{valueId}/documents/upload          # Upload reading document
POST   /properties/{propertyId}/counters/{id}/values/{valueId}/documents/{documentId}/delete  # Delete reading document

Все загруженные документы отображаются в разделе Документы (/my/documents) и могут быть отфильтрованы по типу: «Счётчик» или «Показание счётчика».

Как добавить счётчик

Перейдите к любому объекту, затем нажмите "Счётчики" в меню объекта. Оттуда вы можете добавить новые счётчики и подать показания.

Страница объекта > Меню объекта > Счётчики > Добавить счётчик

Подробную документацию смотрите в разделе Счётчики библиотеки.

Для разработчиков: REST API

Все операции со счётчиками и показаниями доступны через REST API. Сначала используйте демо-данные для получения JWT-токена.

GET Список счётчиков

▶

Получить все счётчики объекта с их текущими показаниями и статусом.

GET /api/v1/properties/{propertyId}/counters

Ответ (200 OK):

{ "counters": [ { "id": 4, "expense_type": {"id": 3, "code": "ELECTRICITY"}, "serial_number": "NIK-2281-073915", "tariff_type": "THREE_ZONE", "zone_count": 3, "current_value": "5729.000", "documents_count": 2, "is_active": true, "created_at": "2026-02-20T15:45:43+00:00" }, { "id": 5, "expense_type": {"id": 10, "code": "GAS"}, "serial_number": "G4-BK-2023-041822", "tariff_type": "SINGLE_ZONE", "zone_count": 1, "current_value": "1612.400", "documents_count": 0, "is_active": true, "created_at": "2026-02-20T15:45:44+00:00" } ], "total": 5 }

POST Создать счётчик

▶

Создать новый счётчик с начальным показанием. Укажите зонные значения для многозонных тарифов — сумма рассчитывается автоматически.

POST /api/v1/properties/{propertyId}/counters

Заголовки:

Authorization: Bearer {token} Content-Type: application/json

Пример однозонного:

{ "expense_type_id": 10, "serial_number": "G4-BK-2023-041822", "tariff_type": "SINGLE_ZONE", "initial_value": "1245.500", "initial_value_date": "2025-09-01" }

Пример трёхзонного (электроэнергия):

{ "expense_type_id": 3, "serial_number": "EA-2024-073915", "tariff_type": "THREE_ZONE", "initial_value_t1": "2100.000", "initial_value_t2": "1500.000", "initial_value_t3": "850.000", "initial_value_date": "2025-09-01" }
Для многозонных тарифов укажите initial_value_t1, initial_value_t2 (и t3 для трёхзонного). Общее initial_value вычисляется как их сумма. Серийные номера должны быть уникальными в пределах объекта.

Ответ (201 Created):

{ "id": 1, "expense_type": {"id": 3, "code": "ELECTRICITY"}, "serial_number": "EA-2024-073915", "tariff_type": "THREE_ZONE", "zone_count": 3, "initial_value": "4450.000", "initial_value_t1": "2100.000", "initial_value_t2": "1500.000", "initial_value_t3": "850.000", "initial_value_date": "2025-09-01", "current_value": "4450.000", "documents_count": 0, "is_active": true, "can_delete": true, "created_at": "2025-09-01T00:00:00+00:00" }

GET Детали счётчика

▶

Получить полные детали счётчика, включая все показания, отсортированные по дате (новейшие сначала).

GET /api/v1/properties/{propertyId}/counters/{id}

Ответ (200 OK):

{ "id": 4, "expense_type": {"id": 3, "code": "ELECTRICITY"}, "serial_number": "NIK-2281-073915", "tariff_type": "THREE_ZONE", "zone_count": 3, "initial_value": "4450.000", "initial_value_t1": "2100.000", "initial_value_t2": "1500.000", "initial_value_t3": "850.000", "initial_value_date": "2025-08-01", "current_value": "5729.000", "documents_count": 2, "is_active": true, "has_linked_charges": false, "can_delete": true, "values": [ { "id": 8, "value": "5729.000", "value_t1": "2752.100", "value_t2": "1851.300", "value_t3": "1125.600", "date": "2025-12-01", "is_initial": false, "is_adjustment": false, "documents_count": 0, "has_linked_charge": false, "can_edit": false, "can_delete": true }, { "id": 5, "value": "4450.000", "value_t1": "2100.000", "value_t2": "1500.000", "value_t3": "850.000", "date": "2025-08-01", "is_initial": true, "is_adjustment": false, "documents_count": 0, "has_linked_charge": false, "can_edit": true, "can_delete": true } ] }

PUT Обновить счётчик

▶

Обновить метаданные счётчика (серийный номер, тип затрат, тип тарифа). Обновляются только предоставленные поля.

PUT /api/v1/properties/{propertyId}/counters/{id}

Обновляемые поля:

expense_type_id integer
serial_number string (max 100)
tariff_type SINGLE_ZONE | TWO_ZONE | THREE_ZONE

Тело запроса:

{ "serial_number": "EA-2024-073915-NEW" }

Ответ (200 OK):

{ "id": 4, "expense_type": {"id": 3, "code": "ELECTRICITY"}, "serial_number": "EA-2024-073915-NEW", "tariff_type": "THREE_ZONE", "zone_count": 3, "current_value": "5729.000", "documents_count": 2, "is_active": true, "has_linked_charges": false, "can_delete": true, "created_at": "2026-02-20T15:45:43+00:00" }

DELETE Удалить счётчик

▶

Удалить счётчик и все его показания. Возвращает 204 при успехе.

DELETE /api/v1/properties/{propertyId}/counters/{id}

Счётчик нельзя удалить, если его показания привязаны к начислениям. В этом случае деактивируйте его через toggle-active.

POST Переключить активный/неактивный

▶

Переключить статус активности счётчика. Неактивные счётчики исключаются из автоматического расчёта начислений.

POST /api/v1/properties/{propertyId}/counters/{id}/toggle-active

Ответ (200 OK):

{"id": 1, "is_active": false}

POST Добавить показание

▶

Подать новое показание счётчика. Для однозонных счётчиков укажите "value". Для многозонных укажите зонные значения (value_t1, value_t2, value_t3) — сумма вычисляется автоматически.

POST /api/v1/properties/{propertyId}/counters/{id}/values

Однозонное показание:

{ "value": "1587.340", "date": "2025-11-01" }

Многозонное показание:

{ "value_t1": "2280.000", "value_t2": "1620.000", "value_t3": "925.700", "date": "2025-11-01" }
Если поданное значение меньше текущего показания, система автоматически создаёт запись корректировки (значения хранятся как отрицательная разница). Допускается только одно показание в день на счётчик.

Ответ (201 Created):

{ "id": 5, "value": "4825.700", "value_t1": "2280.000", "value_t2": "1620.000", "value_t3": "925.700", "date": "2025-11-01", "is_initial": false, "is_adjustment": false, "documents_count": 0, "has_linked_charge": false }

PUT Обновить показание

▶

Обновить существующее показание счётчика. Через веб-интерфейс можно редактировать только начальные показания; API позволяет обновлять любое показание.

PUT /api/v1/properties/{propertyId}/counters/{id}/values/{valueId}

Тело запроса:

{ "value": "1590.000", "date": "2025-11-02" }
Через веб-интерфейс можно редактировать только начальные показания (is_initial=true). Обычные показания можно исправить только с помощью корректировок. API не проверяет минимальное значение при обновлении.

Ответ (200 OK):

{ "id": 5, "value": "1590.000", "value_t1": null, "value_t2": null, "value_t3": null, "date": "2025-11-02", "is_initial": false, "is_adjustment": false, "documents_count": 0, "has_linked_charge": false, "can_edit": true, "can_delete": true }

DELETE Удалить показание

▶

Удалить показание счётчика. Возвращает 204 при успехе.

DELETE /api/v1/properties/{propertyId}/counters/{id}/values/{valueId}

Показания, привязанные к начислениям, нельзя удалить. Сначала нужно удалить привязанное начисление.

POST Документы счётчика

▶

Прикрепите фото счётчика, акты установки, документы поверки. Загружайте на странице деталей счётчика.

POST /properties/{propertyId}/counters/{id}/documents/upload

Заголовки:

Content-Type: multipart/form-data

Тело запроса (form-data):

documents[] — file (jpg, jpeg, png, gif, webp, heic, pdf), max 20 MB comment — string (optional)
Максимальный размер файла: 20 МБ. Поддерживаемые форматы: JPEG, PNG, GIF, WebP, HEIC, PDF. К каждому счётчику или показанию можно прикрепить несколько файлов.

Ответ (200 OK):

{ "success": true, "uploaded": 1 }

DELETE /properties/{propertyId}/counters/{id}/documents/{documentId}/delete

{ "success": true }

POST Документы показания

▶

Прикрепите фото дисплея счётчика при добавлении или просмотре показаний. Загружайте при создании показания или на странице деталей счётчика.

POST /properties/{propertyId}/counters/{id}/values/{valueId}/documents/upload

Тело запроса (form-data):

documents[] — file (jpg, jpeg, png, gif, webp, heic, pdf), max 20 MB comment — string (optional)

Ответ (200 OK):

{ "success": true, "uploaded": 2 }

DELETE /properties/{propertyId}/counters/{id}/values/{valueId}/documents/{documentId}/delete

{ "success": true }

Примеры cURL

▶

1. Создать счётчик (Пример однозонного)

curl -X POST https://landlordkeeper.com/api/v1/properties/019a1b2c-3d4e-7f5a-8b9c-0123456789ab/counters \ -H "Content-Type: application/json" \ -H "Authorization: Bearer YOUR_TOKEN_HERE" \ -d '{ "expense_type_id": 10, "serial_number": "G4-BK-2023-041822", "tariff_type": "SINGLE_ZONE", "initial_value": "1245.500", "initial_value_date": "2025-09-01" }'

2. Создать счётчик (Пример трёхзонного (электроэнергия))

curl -X POST https://landlordkeeper.com/api/v1/properties/019a1b2c-3d4e-7f5a-8b9c-0123456789ab/counters \ -H "Content-Type: application/json" \ -H "Authorization: Bearer YOUR_TOKEN_HERE" \ -d '{ "expense_type_id": 3, "serial_number": "EA-2024-073915", "tariff_type": "THREE_ZONE", "initial_value_t1": "2100.000", "initial_value_t2": "1500.000", "initial_value_t3": "850.000", "initial_value_date": "2025-09-01" }'

3. Добавить показание

curl -X POST https://landlordkeeper.com/api/v1/properties/019a1b2c-3d4e-7f5a-8b9c-0123456789ab/counters/1/values \ -H "Content-Type: application/json" \ -H "Authorization: Bearer YOUR_TOKEN_HERE" \ -d '{ "value_t1": "2280.000", "value_t2": "1620.000", "value_t3": "925.700", "date": "2025-11-01" }'

4. Список счётчиков

curl https://landlordkeeper.com/api/v1/properties/019a1b2c-3d4e-7f5a-8b9c-0123456789ab/counters \ -H "Authorization: Bearer YOUR_TOKEN_HERE"

5. Документы счётчика

curl -X POST https://landlordkeeper.com/properties/019a1b2c-3d4e-7f5a-8b9c-0123456789ab/counters/4/documents/upload \ -H "Cookie: PHPSESSID=your_session" \ -F "documents[][email protected]" \ -F "comment=Meter photo"

6. Документы показания

curl -X POST https://landlordkeeper.com/properties/019a1b2c-3d4e-7f5a-8b9c-0123456789ab/counters/4/values/8/documents/upload \ -H "Cookie: PHPSESSID=your_session" \ -F "documents[]=@reading_jan.jpg" \ -F "documents[]=@reading_jan_2.pdf"
Замените YOUR_TOKEN_HERE на JWT-токен из шага аутентификации.