7 Liczniki
Skonfiguruj liczniki mediów, śledź odczyty, zarządzaj strefami taryfowymi i jednostkami miary. System monitoruje terminowość podawania odczytów przez najemców.
Dlaczego liczniki są kluczowe
Większość kluczowych kosztów mediów — prąd, gaz, woda, ogrzewanie — jest obliczana na podstawie odczytów liczników. Dokładne i terminowe odczyty zapewniają prawidłowe rozliczenia, zapobiegają sporom między wynajmującymi a najemcami oraz zapewniają przejrzyste dane o zużyciu.
Co zapewniają liczniki
- Automatyczne obliczanie opłat na podstawie zużycia
- Obsługa wielostrefowych taryf (dzień/noc, szczyt/pozaszczyt)
- Śledzenie zużycia w okresie ze średnimi dziennymi
- Monitorowanie terminowości podawania odczytów przez najemców
- Mechanizm korekty przy wymianie licznika lub poprawianiu błędów
Rodzaje kosztów z licznikami
Pięć rodzajów kosztów obsługuje śledzenie za pomocą liczników. Każdy ma domyślną jednostkę miary, którą można zmienić dla konkretnego licznika.
Pola licznika
Podczas tworzenia licznika podajesz rodzaj kosztu, numer seryjny, typ taryfy oraz odczyt początkowy z jego datą.
expense_type_id
Rodzaj kosztu (wymagane)
serial_number
Fabryczny numer seryjny, unikalny na nieruchomość
tariff_type
SINGLE_ZONE, TWO_ZONE lub THREE_ZONE
initial_value
Odczyt początkowy (dla jednostrefowego)
initial_value_date
Data odczytu początkowego (wymagane)
initial_value_t1/t2/t3
Wartości stref dla taryf wielostrefowych
Strefy taryfowe
Liczniki energii elektrycznej obsługują taryfy wielostrefowe. Dla liczników dwu- i trzystrefowych podajesz odczyty dla każdej strefy — suma jest obliczana automatycznie.
| Typ taryfy | Strefy | Pola | Opis |
|---|---|---|---|
| SINGLE_ZONE | 1 | value |
Standardowy licznik jednostrefowy |
| TWO_ZONE | 2 | value_t1, value_t2 |
T1 = Dzień, T2 = Noc (wsp. 50%) |
| THREE_ZONE | 3 | value_t1, value_t2, value_t3 |
T1 = Szczyt (150%), T2 = Półszczyt (100%), T3 = Noc (40%) |
Dla liczników wielostrefowych wartość całkowita jest zawsze obliczana jako suma wartości stref: value = value_t1 + value_t2 [+ value_t3]. Nie musisz podawać sumy — jest obliczana automatycznie.
Rodzaje odczytów
System obsługuje cztery rodzaje odczytów liczników, z których każdy pełni określoną rolę w procesie rozliczeń.
Tylko jeden odczyt dziennie na licznik. Nowe odczyty muszą być >= bieżącej wartości (w przeciwnym razie automatycznie wykrywane jako korekta). Jeśli odczyt jest niższy niż bieżący, system automatycznie tworzy wpis korekty.
Monitorowanie terminowości
System monitoruje, czy najemcy terminowo podają odczyty. Dla każdego licznika można ustawić dzień podawania odczytów, a system śledzi ich realizację.
Funkcje śledzenia
- Konfigurowalny dzień odczytu (1-31) na licznik
- Automatyczna interpolacja dla pominiętych okresów
- Statystyki zużycia: łączne, za okres, średnie dzienne
- Zdjęcia liczników i odczytów do weryfikacji
Dokumenty
Możesz dołączać dokumenty (zdjęcia, PDF) do liczników i ich odczytów. Dokumenty są bezpiecznie przechowywane w S3 i dostępne przez podpisane adresy URL.
Maksymalny rozmiar pliku: 20 MB. Obsługiwane formaty: JPEG, PNG, GIF, WebP, HEIC, PDF. Do każdego licznika lub odczytu można dołączyć wiele plików.
API dokumentów
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
Wszystkie przesłane dokumenty pojawiają się w sekcji Dokumenty (/my/documents) i można je filtrować według typu: „Licznik" lub „Odczyt licznika".
Jak dodać licznik
Przejdź do dowolnej nieruchomości, a następnie kliknij "Liczniki" w menu nieruchomości. Stamtąd możesz dodać nowe liczniki i podać odczyty.
Strona nieruchomości > Menu nieruchomości > Liczniki > Dodaj licznik
Szczegółową dokumentację znajdziesz w sekcji Liczniki biblioteki.
Dla programistów: REST API
Wszystkie operacje na licznikach i odczytach są dostępne przez REST API. Najpierw użyj danych demo, aby uzyskać token JWT.
GET Lista liczników
▶Pobierz wszystkie liczniki nieruchomości z ich bieżącymi wartościami i statusem.
GET /api/v1/properties/{propertyId}/counters
Odpowiedź (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 Utwórz licznik
▶Utwórz nowy licznik z odczytem początkowym. Podaj wartości stref dla taryf wielostrefowych — suma jest obliczana automatycznie.
POST /api/v1/properties/{propertyId}/counters
Nagłówki:
Authorization: Bearer {token}
Content-Type: application/json
Przykład jednostrefowy:
{
"expense_type_id": 10,
"serial_number": "G4-BK-2023-041822",
"tariff_type": "SINGLE_ZONE",
"initial_value": "1245.500",
"initial_value_date": "2025-09-01"
}
Przykład trzystrefowy (prą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"
}
Odpowiedź (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 Szczegóły licznika
▶Pobierz pełne szczegóły licznika, w tym wszystkie odczyty posortowane wg daty (najnowsze najpierw).
GET /api/v1/properties/{propertyId}/counters/{id}
Odpowiedź (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 Zaktualizuj licznik
▶Zaktualizuj metadane licznika (numer seryjny, rodzaj kosztu, typ taryfy). Aktualizowane są tylko podane pola.
PUT /api/v1/properties/{propertyId}/counters/{id}
Aktualizowalne pola:
Treść żądania:
{
"serial_number": "EA-2024-073915-NEW"
}
Odpowiedź (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 Usuń licznik
▶Usuń licznik i wszystkie jego odczyty. Zwraca 204 po pomyślnym usunięciu.
DELETE /api/v1/properties/{propertyId}/counters/{id}
POST Przełącz aktywny/nieaktywny
▶Przełącz status aktywności licznika. Nieaktywne liczniki są wyłączone z automatycznego obliczania opłat.
POST /api/v1/properties/{propertyId}/counters/{id}/toggle-active
Odpowiedź (200 OK):
{"id": 1, "is_active": false}
POST Dodaj odczyt
▶Podaj nowy odczyt licznika. Dla jednostrefowych podaj "value". Dla wielostrefowych podaj wartości stref (value_t1, value_t2, value_t3) — suma jest obliczana automatycznie.
POST /api/v1/properties/{propertyId}/counters/{id}/values
Odczyt jednostrefowy:
{
"value": "1587.340",
"date": "2025-11-01"
}
Odczyt wielostrefowy:
{
"value_t1": "2280.000",
"value_t2": "1620.000",
"value_t3": "925.700",
"date": "2025-11-01"
}
Odpowiedź (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 Zaktualizuj odczyt
▶Zaktualizuj istniejący odczyt licznika. Przez interfejs webowy można edytować tylko odczyty początkowe; API pozwala aktualizować dowolny odczyt.
PUT /api/v1/properties/{propertyId}/counters/{id}/values/{valueId}
Treść żądania:
{
"value": "1590.000",
"date": "2025-11-02"
}
Odpowiedź (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 Usuń odczyt
▶Usuń odczyt licznika. Zwraca 204 po pomyślnym usunięciu.
DELETE /api/v1/properties/{propertyId}/counters/{id}/values/{valueId}
POST Dokumenty licznika
▶Dołącz zdjęcia licznika, certyfikaty instalacji, dokumenty kalibracji. Przesyłaj na stronie szczegółów licznika.
POST /properties/{propertyId}/counters/{id}/documents/upload
Nagłówki:
Content-Type: multipart/form-data
Treść żądania (form-data):
documents[] — file (jpg, jpeg, png, gif, webp, heic, pdf), max 20 MB
comment — string (optional)
Odpowiedź (200 OK):
{
"success": true,
"uploaded": 1
}
DELETE /properties/{propertyId}/counters/{id}/documents/{documentId}/delete
{
"success": true
}
POST Dokumenty odczytu
▶Dołącz zdjęcia wyświetlacza licznika podczas dodawania lub przeglądania odczytów. Przesyłaj podczas tworzenia odczytu lub na stronie szczegółów licznika.
POST /properties/{propertyId}/counters/{id}/values/{valueId}/documents/upload
Treść żądania (form-data):
documents[] — file (jpg, jpeg, png, gif, webp, heic, pdf), max 20 MB
comment — string (optional)
Odpowiedź (200 OK):
{
"success": true,
"uploaded": 2
}
DELETE /properties/{propertyId}/counters/{id}/values/{valueId}/documents/{documentId}/delete
{
"success": true
}
Przykłady cURL
▶1. Utwórz licznik (Przykład jednostrefowy)
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. Utwórz licznik (Przykład trzystrefowy (prąd))
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. Dodaj odczyt
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. Lista liczników
curl https://landlordkeeper.com/api/v1/properties/019a1b2c-3d4e-7f5a-8b9c-0123456789ab/counters \
-H "Authorization: Bearer YOUR_TOKEN_HERE"
5. Dokumenty licznika
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. Dokumenty odczytu
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"