Порушення договорів
Фіксуйте та відстежуйте порушення умов договору наймачами
Огляд
Модуль порушень договору дозволяє документувати та відстежувати випадки недотримання умов орендного договору. Кожне порушення може бути пов'язане з конкретними пунктами договору та підтверджене фотодоказами.
Відстеження порушень
Ведіть історію всіх порушень по кожному об'єкту та договору
Прив'язка до пунктів
Вказуйте які саме пункти договору були порушені
Фотодокази
Прикріплюйте фото та документи для підтвердження порушень
Рівні серйозності
Оцінюйте серйозність порушень за шкалою від 1 до 10
Рівні серйозності
Система використовує 4 рівні серйозності для класифікації порушень:
Низький - незначні порушення, попередження
Середній - помірні порушення, потребують уваги
Високий - серйозні порушення, можуть призвести до штрафів
Критичний - підстава для розірвання договору
Процес роботи
Типовий процес документування порушення:
Виявлення
Власник виявляє порушення умов договору
Документування
Створення запису з описом, датою та рівнем серйозності
Докази
Прикріплення фото та прив'язка до пунктів договору
Сповіщення
Порушник може переглянути зафіксоване порушення
Права доступу
Різні користувачі мають різні права:
| Дія | Хто може |
|---|---|
| Створення порушення | Власники, адміністратори |
| Перегляд порушення | Власники, адміністратори, порушник |
| Редагування порушення | Власники, адміністратори |
| Видалення порушення | Власники, адміністратори |
| Прикріплення документів | Власники, адміністратори |
Automatic Overdue Payment Control
The system automatically detects late payments and creates contract violations. A daily cron job (app:payments:check-overdue) runs at 05:00 UTC and checks the previous month's payments.
How it works
- For each property with an active contract, the system reads RENT_PAYMENT_DAY and UTILITIES_PAYMENT_DAY + grace period from the contract blocks
- Finds payments made after the deadline (charge date + grace period)
- Groups overdue payments by deadline date
- Creates a ContractViolation with auto-generated description in the tenant's language
- Links overdue payments to the violation via
violation_overdue_paymentsjunction table
Severity rules
| Days overdue | Severity | Level |
|---|---|---|
| 1–5 | 3 | Low |
| 6–14 | 5 | Medium |
| 15–30 | 7 | High |
| 31+ | 9 | Critical |
Utilities overdue always gets severity 5 (medium).
If a contract does not have RENT_PAYMENT_DAY or UTILITIES_PAYMENT_DAY blocks — no violation is created for that type.
Payment linking
Each violation can be linked to one or more overdue payments. One payment can be linked to at most one violation (UNIQUE constraint). Payments can also be linked manually when creating or editing a violation.
REST API
REST API для інтеграції з зовнішніми системами:
Примітка рівня обслуговування
GET /api/v1/properties/{id}/violations - Список порушень
POST /api/v1/properties/{id}/violations - Створити порушення
GET /api/v1/properties/{id}/violations/{vid} - Деталі порушення
PUT /api/v1/properties/{id}/violations/{vid} - Оновити порушення
DELETE /api/v1/properties/{id}/violations/{vid} - Видалити порушення
POST /api/v1/properties/{id}/violations/{vid}/documents - Прикріпити документ
DELETE /api/v1/properties/{id}/violations/{vid}/documents/{did} - Відкріпити документ
GET /api/v1/properties/{id}/violations/{vid}/overdue-payments - List linked overdue payments
POST /api/v1/properties/{id}/violations/{vid}/overdue-payments - Link payments (payment_ids[])
DELETE /api/v1/properties/{id}/violations/{vid}/overdue-payments/{payId} - Unlink payment
GET /api/v1/properties/{id}/overdue-payments - List unlinked overdue payments
Приклад відповіді
{
"data": [
{
"id": 1,
"property_id": 5,
"contract_id": 12,
"violation_date": "2026-01-10",
"severity": 7,
"severity_level": "high",
"description": "Unauthorized subletting of the property to third party",
"violator": {
"id": 15,
"name": "John Tenant"
},
"created_by": {
"id": 8,
"name": "Owner Name"
},
"documents_count": 2,
"blocks": [
{
"id": 5,
"code": "SUBLETTING",
"name": "Subletting Prohibition"
}
],
"created_at": "2026-01-10T14:30:00+00:00"
}
],
"total": 1,
"page": 1,
"totalPages": 1
}
Swagger / OpenAPI
Повна документація API доступна за адресою /api/v1/doc