Strona główna › Konfiguracja nieruchomości › Typy wydatków

8 Typy wydatków

Zadeklaruj, jakie typy wydatków istnieją w nieruchomości i jak są obliczane

Czym są typy wydatków?

Typy wydatków to deklaracja wszystkich kosztów związanych z nieruchomością: co należy zapłacić i jak obliczany jest każdy płatność. To szablon konfiguracji, a nie faktyczne naliczenia czy płatności. Typy wydatków należą do samej nieruchomości, niezależnie od tego, czy jest wynajmowana czy wolna.

Im dokładniej skonfigurowane wydatki, tym lepsze będą Twoje umowy najmu i tym jaśniejsza relacja finansowa między wynajmującym a najemcą.

Przepływ pracy: jak to działa

Krok 1: Utwórz typy wydatków (szablony)

Najpierw definiujesz typy powtarzających się wydatków (szablony), takie jak "Elektryczność", "Woda", "Ogrzewanie". To kategorie, które będą używane miesiąc po miesiącu.

Przykład: Utwórz typ wydatku "Elektryczność" z okresem rozliczeniowym "Miesięcznie", typem zużycia "Według liczników", ceną jednostkową 2,50 EUR/kWh.

↓

Krok 2: Utwórz opłaty (rzeczywiste rachunki)

Po skonfigurowaniu typów wydatków tworzysz opłaty dla określonych okresów. Opłata reprezentuje rzeczywiste zużycie w danym miesiącu.

Przykład: Dla typu wydatku "Elektryczność" utwórz opłatę za styczeń 2026: zużycie 350 kWh × 2,50 EUR = 875 EUR.

Dlaczego takie rozdzielenie?

Typy wydatków definiują JAK obliczane są opłaty (cena, okres, formuła). Opłaty to WYNIKI - rzeczywiste rachunki wysyłane do najemców. To rozdzielenie pozwala ponownie wykorzystywać konfiguracje typów wydatków co miesiąc bez ponownego wprowadzania wszystkich szczegółów.

Typy zużycia

Stały

Znana, stała kwota za okres rozliczeniowy. Cena nie zależy od zużycia ani odczytów liczników.

Przykład: Internet, opłata za zarząd, ochrona

Według liczników

Obliczane na podstawie odczytów liczników: zużycie (bieżący minus poprzedni odczyt) pomnożone przez cenę jednostkową. Wydatek musi być powiązany z jednym lub kilkoma licznikami.

Przykład: Elektryczność, zimna woda, gaz

Według faktu (poniesione)

Miesięczna kwota nie jest znana z góry. Wprowadzasz rzeczywistą kwotę każdego okresu po otrzymaniu faktury od dostawcy usług.

Przykład: Ogrzewanie, konserwacja budynku, wywóz śmieci

Stała opłata

Stała miesięczna kwota niezależna od rzeczywistego zużycia. Najemca płaci tę samą kwotę każdego miesiąca bez względu na to, ile usługi zostało wykorzystane.

Przykład: Internet 15 €/mies., niezależnie od ilości ruchu.

Powiązanie z licznikami

Wydatki według liczników są powiązane z konkretnymi licznikami zainstalowanymi w nieruchomości. Przy tworzeniu naliczenia system bierze bieżące i poprzednie odczyty, oblicza zużycie i mnoży przez skonfigurowaną cenę jednostkową. Taryfy wielostrefowe (dzień/noc lub szczyt/półszczyt/noc) mają oddzielne ceny per strefa, a system oblicza każdą strefę niezależnie.

Okresy rozliczeniowe

Każdy wydatek ma okres rozliczeniowy, który określa, jak często tworzone są naliczenia. System może automatycznie generować naliczenia zgodnie ze skonfigurowanym harmonogramem.

Ręcznie Naliczenia tworzone ręcznie przez użytkownika
Miesięcznie Jedno naliczenie co miesiąc w skonfigurowany dzień
Kwartalnie Jedno naliczenie co 3 miesiące
Półrocznie Jedno naliczenie co 6 miesięcy
Rocznie Jedno naliczenie rocznie
Dzień naliczenia Dzień miesiąca (1-28), kiedy tworzone jest naliczenie. Domyślnie: 15.
Dni na płatność Liczba dni na dokonanie płatności po utworzeniu naliczenia. Domyślnie: 3.
Dni przypomnienia Liczba dni przed terminem, kiedy wysyłane jest przypomnienie. Domyślnie: 3.

Ręczne tworzenie opłat

Dla wydatków z typem zużycia "W miarę występowania" lub okresem obliczeniowym "Ręcznie" możesz tworzyć opłaty ręcznie na stronie Opłaty.

Kiedy używać ręcznych opłat

  • Dla wydatków "W miarę występowania", gdzie rzeczywista kwota różni się w każdym okresie
  • Dla wydatków z okresem "Ręcznie", które nie powinny być generowane automatycznie

Jak utworzyć

  1. Przejdź do Nieruchomości → [Nieruchomość] → Opłaty
  2. Kliknij niebieski przycisk "Dodaj opłatę" (pojawia się tylko jeśli masz wydatki wymagające ręcznych opłat)
  3. Wybierz wydatek z okna modalnego (pokazuje typ wydatku, dostawcę i metodę obliczeniową)
  4. Wypełnij formularz opłaty: data, okres, kwota i notatki

Formularz pokazuje informacje o wydatku, w tym dostawcę i wszelkie notatki z konfiguracji wydatku.

Wielowalutowość

Każdy wydatek może używać własnej waluty. Na przykład jedna nieruchomość może mieć czynsz w dolarach, elektryczność w walucie lokalnej, a internet w euro. Waluta jest ustawiana przy konfiguracji wydatku i ma zastosowanie do wszystkich naliczeń z niego wygenerowanych.

Dostawcy usług

Każdy wydatek może być powiązany z dostawcą usług — stroną otrzymującą płatność. System obsługuje cztery typy dostawców:

Dostawca usług

Firmy z globalnego katalogu — przedsiębiorstwa komunalne, firmy zarządzające, dostawcy internetu. Wyszukiwanie po nazwie lub NIP.

Własny kontrahent

Twój osobisty katalog kontrahentów z pełnymi danymi kontaktowymi i bankowymi — nazwa, NIP, IBAN, adres.

Użytkownik systemu

Istniejący użytkownicy platformy, którzy mogą otrzymywać płatności — pracownicy obsługi, zarządcy nieruchomości. Powiązanie przez email.

Zaproszenie partnera

Partnerzy zaproszeni przez email, którzy nie są jeszcze zarejestrowani w systemie. Automatyczne zaproszenie jest wysyłane na email.

Dokumenty naliczeń

Do każdego naliczenia można dołączyć dokumenty — faktury, rachunki, potwierdzenia płatności lub inne pliki związane z naliczeniem. Dokumenty są przesyłane do bezpiecznego magazynu S3 i udostępniane przez podpisane HMAC adresy URL. Przesyłanie używa formatu multipart/form-data.

file Plik binarny do przesłania (PDF, JPG, PNG itp.). Wymagany.
document_type_id ID typu dokumentu (np. 1 = dokument urzędowy, 2 = rachunek). Wymagany.
comment Opcjonalny komentarz tekstowy opisujący dokument.

Dokumenty są dołączane do konkretnych naliczeń (nie do wydatku). Najpierw utwórz lub odśwież naliczenie, a następnie prześlij do niego dokumenty. Ograniczenia rozmiaru i typu plików konfigurowane są dla każdego typu dokumentu.

Dlaczego dokładna konfiguracja ma znaczenie

Konfiguracja wydatków to fundament wszystkich operacji finansowych. Dokładnie zadeklarowane wydatki prowadzą do prawidłowych umów najmu, precyzyjnych obliczeń naliczeń, terminowych przypomnień o płatnościach i przejrzystych raportów finansowych. Gdy najemca podpisuje umowę, widzi wszystkie koszty związane z nieruchomością.

Czego NIE obejmuje ten krok
Ten krok obejmuje tylko konfigurację wydatków — deklarowanie, jakie koszty istnieją. Faktyczne tworzenie naliczeń, przetwarzanie płatności i generowanie rachunków to osobne operacje, które następują po skonfigurowaniu wydatków i aktywowaniu umowy najmu.

Jak dodać wydatki

Wydatki można dodać przez interfejs webowy lub przez API. W interfejsie webowym przejdź do dowolnej nieruchomości i otwórz zakładkę „Wydatki".

Nieruchomość → Zakładka Wydatki → Przycisk Dodaj wydatek

Szczegółową dokumentację, w tym endpointy API i reguły walidacji, znajdziesz w sekcji Wydatki na nieruchomość w Bibliotece.

Pola wydatku

Przy tworzeniu wydatku wymagane są następujące pola:

expense_type_id Typ wydatku (elektryczność, gaz, internet itp.). Pobierz ID przez GET /api/expense-types
calculation_period MANUAL, MONTHLY, QUARTERLY, SEMI_ANNUAL lub ANNUAL
unit_price Cena za jednostkę jako string (np. "4.3200"). Dla stałych wydatków to całkowita kwota
measurement_unit_id ID jednostki miary (kWh, m3, szt itp.)
currency_id ID waluty dla tego wydatku
start_date Data rozpoczęcia w formacie YYYY-MM-DD

Pola opcjonalne

fixed_consumption Stałe zużycie dla wydatków stałego typu (np. "1.0000" dla usługi ryczałtowej)
end_date Data zakończenia (opcjonalna). Po tej dacie naliczenia nie są tworzone
counter_ids Tablica ID liczników do powiązania (dla wydatków licznikowych). Liczniki muszą należeć do tej samej nieruchomości
zone_prices Obiekt cen strefowych dla taryf wielostrefowych: {"PEAK": "4.32", "HALF_PEAK": "3.24", "NIGHT": "2.16"}
service_provider_id ID dostawcy usług (z endpointu expense-providers)
account_number Numer konta u dostawcy usług
charge_day Dzień miesiąca (1-28) tworzenia naliczenia. Domyślnie: 15
payment_days Dni na płatność po naliczeniu. Domyślnie: 3
reminder_days Dni przed terminem do wysłania przypomnienia. Domyślnie: 3
notes Dowolne notatki (tylko tekst, HTML jest oczyszczany)

Dla programistów: REST API

Wszystkie operacje na wydatkach są dostępne przez REST API. Wymagana autoryzacja przez Bearer token.

GET Lista wydatków

▶

Zwraca wszystkie wydatki nieruchomości. Użyj active_only=true do filtrowania tylko aktywnych wydatków.

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

Filtruj tylko aktywne:

GET /api/v1/properties/{propertyId}/expenses?active_only=true

Odpowiedź (200 OK):

{ "expenses": [ { "id": 1, "expense_type": {"id": 3, "code": "ELECTRICITY", "name_key": "expense_type.electricity"}, "calculation_period": "MONTHLY", "unit_price": "4.3200", "measurement_unit": {"id": 1, "symbol": "kWh", "name_key": "unit.kwh"}, "fixed_consumption": null, "currency": {"id": 1, "code": "UAH", "symbol": "\u20b4"}, "start_date": "2026-01-01", "end_date": null, "service_provider": {"id": 5, "name": "Energozbut"}, "account_number": "0123456789", "is_active": true, "has_charges": true, "can_delete": false, "notes": null, "charge_day": 15, "payment_days": 3, "reminder_days": 3, "counters": [ {"id": 4, "serial_number": "NIK-2281-073915", "tariff_type": "THREE_ZONE"} ], "zone_prices": {"PEAK": "4.32", "HALF_PEAK": "3.24", "NIGHT": "2.16"}, "created_at": "2026-01-01T00:00:00+00:00", "updated_at": "2026-02-15T10:30:00+00:00" }, { "id": 2, "expense_type": {"id": 15, "code": "INTERNET", "name_key": "expense_type.internet"}, "calculation_period": "MONTHLY", "unit_price": "500.0000", "measurement_unit": {"id": 5, "symbol": "unit", "name_key": "unit.unit"}, "fixed_consumption": "1.0000", "currency": {"id": 1, "code": "UAH", "symbol": "\u20b4"}, "start_date": "2026-01-01", "end_date": null, "service_provider": null, "account_number": null, "is_active": true, "has_charges": false, "can_delete": true, "notes": null, "charge_day": 1, "payment_days": 5, "reminder_days": 2, "created_at": "2026-01-01T00:00:00+00:00", "updated_at": "2026-01-01T00:00:00+00:00" } ], "total": 2 }

POST Utwórz wydatek

▶

Tworzy nowy wydatek dla nieruchomości. Dozwolony jest tylko jeden wydatek danego typu na nieruchomość.

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

Nagłówki:

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

Stały wydatek (np. Internet):

{ "expense_type_id": 15, "calculation_period": "MONTHLY", "unit_price": "500.0000", "measurement_unit_id": 5, "fixed_consumption": "1.0000", "currency_id": 1, "start_date": "2026-01-01", "charge_day": 1, "payment_days": 5, "reminder_days": 2, "notes": "Fiber 100 Mbps" }

Wydatek licznikowy z cenami strefowymi (np. Elektryczność):

{ "expense_type_id": 3, "calculation_period": "MONTHLY", "unit_price": "4.3200", "measurement_unit_id": 1, "currency_id": 1, "start_date": "2026-01-01", "counter_ids": [4], "zone_prices": { "PEAK": "4.32", "HALF_PEAK": "3.24", "NIGHT": "2.16" }, "service_provider_id": 5, "account_number": "0123456789" }

Wydatek wg faktu (np. Ogrzewanie):

{ "expense_type_id": 1, "calculation_period": "MONTHLY", "unit_price": "1.0000", "measurement_unit_id": 6, "currency_id": 1, "start_date": "2026-01-01", "charge_day": 20 }
Dozwolony jest tylko jeden wydatek danego typu na nieruchomość. Próba utworzenia duplikatu zwróci błąd 400.

Odpowiedź (201 Created):

{ "id": 3, "expense_type": {"id": 15, "code": "INTERNET", "name_key": "expense_type.internet"}, "calculation_period": "MONTHLY", "unit_price": "500.0000", "measurement_unit": {"id": 5, "symbol": "unit", "name_key": "unit.unit"}, "fixed_consumption": "1.0000", "currency": {"id": 1, "code": "UAH", "symbol": "\u20b4"}, "start_date": "2026-01-01", "end_date": null, "service_provider": null, "account_number": null, "is_active": true, "has_charges": false, "can_delete": true, "notes": "Fiber 100 Mbps", "charge_day": 1, "payment_days": 5, "reminder_days": 2, "created_at": "2026-02-22T10:00:00+00:00", "updated_at": "2026-02-22T10:00:00+00:00" }

GET Pobierz szczegóły wydatku

▶

Zwraca pełne szczegóły wydatku, w tym powiązane liczniki, ceny strefowe i historię naliczeń.

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

Odpowiedź (200 OK):

{ "id": 1, "expense_type": {"id": 3, "code": "ELECTRICITY", "name_key": "expense_type.electricity"}, "calculation_period": "MONTHLY", "unit_price": "4.3200", "measurement_unit": {"id": 1, "symbol": "kWh", "name_key": "unit.kwh"}, "fixed_consumption": null, "currency": {"id": 1, "code": "UAH", "symbol": "\u20b4"}, "start_date": "2026-01-01", "end_date": null, "service_provider": {"id": 5, "name": "Energozbut"}, "account_number": "0123456789", "is_active": true, "has_charges": true, "can_delete": false, "notes": null, "charge_day": 15, "payment_days": 3, "reminder_days": 3, "counters": [ {"id": 4, "serial_number": "NIK-2281-073915", "tariff_type": "THREE_ZONE"} ], "zone_prices": {"PEAK": "4.32", "HALF_PEAK": "3.24", "NIGHT": "2.16"}, "charges": [ { "id": 12, "charge_date": "2026-02-15", "period_start": "2026-02-01", "period_end": "2026-02-28", "quantity": "279.000", "amount": "1205.28", "source": "auto", "has_items": true } ], "total_charges": 1, "required_zones": ["PEAK", "HALF_PEAK", "NIGHT"], "created_at": "2026-01-01T00:00:00+00:00", "updated_at": "2026-02-15T10:30:00+00:00" }

PUT Aktualizuj wydatek

▶

Częściowo aktualizuje wydatek. Dołącz tylko pola, które chcesz zmienić. Gdy podane counter_ids lub zone_prices, zastępują wszystkie istniejące wartości.

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

Pola do aktualizacji (wszystkie opcjonalne):

unit_price string
calculation_period string
counter_ids array
zone_prices object
is_active boolean
charge_day integer (1-28)

Treść żądania:

{ "unit_price": "4.5600", "zone_prices": { "PEAK": "4.56", "HALF_PEAK": "3.42", "NIGHT": "2.28" }, "charge_day": 10 }

Odpowiedź (200 OK):

{ "id": 1, "expense_type": {"id": 3, "code": "ELECTRICITY", "name_key": "expense_type.electricity"}, "calculation_period": "MONTHLY", "unit_price": "4.5600", "charge_day": 10, "zone_prices": {"PEAK": "4.56", "HALF_PEAK": "3.42", "NIGHT": "2.28"}, ... }

DELETE Usuń wydatek

▶

Usuwa wydatek. Zwraca 204 No Content w przypadku sukcesu.

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

Odpowiedź (204 No Content)

Nie można usunąć wydatku, który ma istniejące naliczenia. Zamiast tego dezaktywuj go przez toggle-active lub ustawiając is_active na false w aktualizacji.

POST Przełączanie aktywności

▶

Aktywuje lub dezaktywuje wydatek. Zdezaktywowane wydatki nie są używane do automatycznego tworzenia naliczeń.

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

Odpowiedź (200 OK):

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

POST Odśwież naliczenia dla wydatku

▶

Generuje naliczenie dla jednego wydatku, jeśli jego okres rozliczeniowy zakończył się i nie istnieje naliczenie za bieżący okres.

POST /api/v1/properties/{propertyId}/expenses/{id}/refresh

Odpowiedź (200 OK):

{ "success": true, "charge_id": 15, "message": "Charge created for period 2026-02-01 - 2026-02-28" }
Działa tylko dla aktywnych wydatków z automatycznym okresem. Ręczne wydatki nie obsługują automatycznego odświeżania.

POST Odśwież wszystkie automatyczne naliczenia

▶

Generuje naliczenia dla wszystkich aktywnych automatycznych (nie MANUAL) wydatków nieruchomości. Zwraca liczbę utworzonych, pominiętych i błędnych naliczeń.

POST /api/v1/properties/{propertyId}/expenses/refresh-all

Odpowiedź (200 OK):

{ "created": 3, "skipped": 2, "errors": 0 }

Dokumenty w module wydatków

W module wydatków dokumenty można dołączać na dwóch poziomach:

Po co dołączać dokumenty do wydatków?

Dokumenty wydatków umożliwiają przechowywanie ważnych materiałów referencyjnych dotyczących samej konfiguracji cyklicznych wydatków, a nie poszczególnych naliczeniów. Obejmuje to:

  • Umowy serwisowe z dostawcami mediów
  • Harmonogramy taryfowe i karty stawek
  • Umowy o poziomie usług (SLA)
  • Instrukcje sprzętu i harmonogramy konserwacji

Typ wydatku definiuje powtarzający się szablon (np. "Dostawa wody"). Opłata to rzeczywista instancja rozliczenia utworzona z tego szablonu (np. "Woda za styczeń 2026").

Naliczenie Konkretny wpis rozliczeniowy za okres (np. prąd za styczeń). Faktury, rachunki i potwierdzenia płatności dołączane są tutaj przez API. Ścieżka: /api/properties/{id}/charges/{chargeId}/documents
Typ wydatku (Szablon) Definicja typu powtarzającego się wydatku (np. "Elektryczność, miesięcznie"). Do typu wydatku można dołączyć dokumenty, takie jak umowy z kontrahentami lub harmonogramy taryfowe. Ścieżka API: /api/properties/{id}/expenses/{expenseId}/documents
Nie mylić z dokumentami liczników
Odczyty liczników mają własne załączone dokumenty zarządzane przez moduł liczników. Poniższe endpointy są przeznaczone wyłącznie dla dokumentów naliczeń wydatków.

API dokumentów naliczeń

Ścieżka bazowa: /api/properties/{propertyId}/charges/{chargeId}/documents. Naliczenie jest tworzone z wydatku i reprezentuje konkretny okres rozliczeniowy. Dokumenty dołączone tutaj służą jako dowody płatności lub faktury za to naliczenie.

GET Lista dokumentów naliczenia

▶

Zwraca wszystkie dokumenty dołączone do konkretnego naliczenia. Każdy dokument zawiera bezpieczny link do pobrania, metadane pliku i opcjonalny komentarz.

GET /api/v1/properties/{propertyId}/charges/{chargeId}/documents

Odpowiedź (200 OK):

{ "documents": [ { "id": 1, "document": { "id": 10, "original_name": "invoice_february.pdf", "file_url": "https://landlordkeeper.com/file/abc123hash", "mime_type": "application/pdf", "file_size": 245760, "document_type": { "id": 1, "code": "OFFICIAL_DOCUMENT", "name_key": "document_type.official_document" }, "created_at": "2026-02-15T10:30:00+00:00" }, "comment": "Electricity invoice for February 2026", "created_at": "2026-02-15T10:30:00+00:00" }, { "id": 2, "document": { "id": 11, "original_name": "receipt_scan.jpg", "file_url": "https://landlordkeeper.com/file/def456hash", "mime_type": "image/jpeg", "file_size": 128000, "document_type": { "id": 2, "code": "RECEIPT", "name_key": "document_type.receipt" }, "created_at": "2026-02-16T14:00:00+00:00" }, "comment": null, "created_at": "2026-02-16T14:00:00+00:00" } ], "total": 2 }

POST Prześlij dokument naliczenia

▶

Przesyła plik do naliczenia. Używa multipart/form-data (nie JSON). Plik jest walidowany zgodnie z ograniczeniami typu dokumentu (dozwolone rozszerzenia, maksymalny rozmiar) i przechowywany w S3.

POST /api/v1/properties/{propertyId}/charges/{chargeId}/documents

Nagłówki:

Authorization: Bearer {token} Content-Type: multipart/form-data

Pola przesyłania (multipart/form-data):

file Plik binarny (PDF, JPG, PNG itp.). Wymagany. Walidowany wg ograniczeń typu dokumentu.
document_type_id ID typu dokumentu (liczba całkowita). Wymagany. Definiuje dozwolone rozszerzenia plików i maks. rozmiar.
comment Opcjonalny komentarz tekstowy (string, nullable). Zwykły tekst, tagi HTML usuwane.

Odpowiedź (201 Created):

{ "id": 3, "document": { "id": 12, "original_name": "water_bill_march.pdf", "file_url": "https://landlordkeeper.com/file/ghi789hash", "mime_type": "application/pdf", "file_size": 184320, "document_type": { "id": 1, "code": "OFFICIAL_DOCUMENT", "name_key": "document_type.official_document" }, "created_at": "2026-02-22T12:00:00+00:00" }, "comment": "Water bill March 2026", "created_at": "2026-02-22T12:00:00+00:00" }

GET Szczegóły dokumentu

▶

Zwraca pełne szczegóły konkretnego dokumentu naliczenia, w tym bezpieczny link do pliku, metadane pliku i komentarz.

GET /api/v1/properties/{propertyId}/charges/{chargeId}/documents/{id}

Odpowiedź (200 OK):

{ "id": 1, "document": { "id": 10, "original_name": "invoice_february.pdf", "file_url": "https://landlordkeeper.com/file/abc123hash", "mime_type": "application/pdf", "file_size": 245760, "document_type": { "id": 1, "code": "OFFICIAL_DOCUMENT", "name_key": "document_type.official_document" }, "created_at": "2026-02-15T10:30:00+00:00" }, "comment": "Electricity invoice for February 2026", "created_at": "2026-02-15T10:30:00+00:00" }

PUT Zaktualizuj komentarz dokumentu

▶

Aktualizuje komentarz dokumentu naliczenia. Można zmienić tylko pole komentarza. Wyślij ciało JSON z nową wartością komentarza. Ustaw null aby usunąć komentarz.

PUT /api/v1/properties/{propertyId}/charges/{chargeId}/documents/{id}

Treść żądania:

{ "comment": "Updated: electricity invoice Feb 2026 (paid)" }

Odpowiedź (200 OK):

{ "id": 1, "document": { "id": 10, "original_name": "invoice_february.pdf", "file_url": "https://landlordkeeper.com/file/abc123hash", ... }, "comment": "Updated: electricity invoice Feb 2026 (paid)", "created_at": "2026-02-15T10:30:00+00:00" }

DELETE Usuń dokument naliczenia

▶

Trwale usuwa dokument z naliczenia. Plik jest najpierw usuwany z magazynu S3, a następnie usuwany jest rekord z bazy danych. Tej operacji nie można cofnąć.

DELETE /api/v1/properties/{propertyId}/charges/{chargeId}/documents/{id}

Odpowiedź (204 No Content)

Usunięcie dokumentu trwale usuwa plik z magazynu S3 i nie może zostać cofnięte. Upewnij się, że dokument nie jest już potrzebny przed usunięciem.

Przykłady cURL

▶

1. Stały wydatek (np. Internet)

curl -X POST https://landlordkeeper.com/api/v1/properties/019a1b2c-3d4e-7f5a-8b9c-0123456789ab/expenses \ -H "Content-Type: application/json" \ -H "Authorization: Bearer YOUR_TOKEN_HERE" \ -d '{ "expense_type_id": 15, "calculation_period": "MONTHLY", "unit_price": "500.0000", "measurement_unit_id": 5, "fixed_consumption": "1.0000", "currency_id": 1, "start_date": "2026-01-01", "charge_day": 1 }'

2. Wydatek licznikowy z cenami strefowymi (np. Elektryczność)

curl -X POST https://landlordkeeper.com/api/v1/properties/019a1b2c-3d4e-7f5a-8b9c-0123456789ab/expenses \ -H "Content-Type: application/json" \ -H "Authorization: Bearer YOUR_TOKEN_HERE" \ -d '{ "expense_type_id": 3, "calculation_period": "MONTHLY", "unit_price": "4.3200", "measurement_unit_id": 1, "currency_id": 1, "start_date": "2026-01-01", "counter_ids": [4], "zone_prices": {"PEAK": "4.32", "HALF_PEAK": "3.24", "NIGHT": "2.16"}, "service_provider_id": 5, "account_number": "0123456789" }'

3. Lista wydatków

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

4. Aktualizuj wydatek

curl -X PUT https://landlordkeeper.com/api/v1/properties/019a1b2c-3d4e-7f5a-8b9c-0123456789ab/expenses/1 \ -H "Content-Type: application/json" \ -H "Authorization: Bearer YOUR_TOKEN_HERE" \ -d '{"unit_price": "4.5600", "charge_day": 10}'

5. Przełączanie aktywności

curl -X POST https://landlordkeeper.com/api/v1/properties/019a1b2c-3d4e-7f5a-8b9c-0123456789ab/expenses/1/toggle-active \ -H "Authorization: Bearer YOUR_TOKEN_HERE"

6. Odśwież wszystkie automatyczne naliczenia

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

7. Prześlij dokument naliczenia

curl -X POST https://landlordkeeper.com/api/v1/properties/019a1b2c-3d4e-7f5a-8b9c-0123456789ab/charges/12/documents \ -H "Authorization: Bearer YOUR_TOKEN_HERE" \ -F "file=@/path/to/invoice.pdf" \ -F "document_type_id=1" \ -F "comment=Electricity invoice February 2026"

8. Lista dokumentów naliczenia

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

9. Usuń dokument naliczenia

curl -X DELETE https://landlordkeeper.com/api/v1/properties/019a1b2c-3d4e-7f5a-8b9c-0123456789ab/charges/12/documents/1 \ -H "Authorization: Bearer YOUR_TOKEN_HERE"
Zastąp YOUR_TOKEN_HERE tokenem JWT z kroku uwierzytelniania.

API dokumentów typu wydatku

Ścieżka bazowa: /api/properties/{propertyId}/expenses/{expenseId}/documents. Dokumenty dołączone do wydatku (takie jak umowy z wykonawcami lub harmonogramy taryfowe) są zarządzane za pomocą tych punktów końcowych.

GET List Expense Documents

▶

GET /api/v1/properties/{propertyId}/expenses/{expenseId}/documents

Retrieve all documents attached to an expense.

Response (200 OK):

{ "documents": [...], "total": 2 }

POST Upload Expense Document

▶

POST /api/v1/properties/{propertyId}/expenses/{expenseId}/documents

Upload a new document to an expense (multipart/form-data).

Request Body (multipart/form-data):

file: (binary file) document_type_id: integer (required) comment: string (optional)

Response (201 Created):

{ "id": 3, "document": {...}, "comment": "..." }

GET Get Expense Document

▶

GET /api/v1/properties/{propertyId}/expenses/{expenseId}/documents/{id}

Retrieve details of a specific expense document.

PUT Update Expense Document

▶

PUT /api/v1/properties/{propertyId}/expenses/{expenseId}/documents/{id}

Update the comment of an expense document.

Request Body (application/json):

{ "comment": "Updated comment" }

DELETE Delete Expense Document

▶

DELETE /api/v1/properties/{propertyId}/expenses/{expenseId}/documents/{id}

Delete an expense document and its associated file from S3.

Response (204 No Content):

(empty)
Bilanse początkowe → Przejdź do bilansów początkowych