Завдання
Девелопер будує три котеджні об'єкти на Львівщині. Частина витрат стосується одного будинку, а частина, наприклад матеріали чи роботи для кількох ділянок одразу, ділиться між будинками в різних пропорціях. У таблицях такий розподіл швидко стає непрозорим, і собівартість кожного будинку доводиться рахувати вручну.
До цього додаються інші складнощі:
- витрати проводяться в різних валютах, а для звітів потрібен курс на дату операції;
- рахунки й документи накопичуються у вигляді фото й файлів, які треба вносити вручну;
- частина даних уже є в Excel або CSV, і їх треба перенести без втрат;
- крім будівництва, потрібно вести продажі й оренду готових об'єктів.
Окремо стояло питання безпеки. Йдеться про фінансові дані власника, тому доступ мав бути лише для запрошених людей, з обов'язковою двофакторною автентифікацією і повною історією змін. Звичайного пароля для такої системи замало.
Що ми зробили
Ми розробили систему на Next.js 16, React 19, Tailwind CSS v4 і Supabase з розгортанням на Vercel. У ній 16 екранів і 12 таблиць у базі даних.
Модулі
- будинки й етапи будівництва;
- витрати з розподілом на кілька будинків, де частки в сумі дорівнюють 1, тож жодна гривня не губиться і не рахується двічі;
- документи й рахунки з AI-розпізнаванням у структурований вигляд;
- імпорт з Excel і CSV без участі AI, щоб перенесення старих даних було передбачуваним;
- продажі й оренда;
- звіти й керування користувачами.
Валюта і курс
Кожна витрата зберігає валюту, курс операції і курс НБУ на дату. Так звіти можна будувати в потрібній валюті без ручного перерахунку.
Безпека
- обов'язкова двофакторна автентифікація TOTP, яку вимагає сама база даних: політики RLS пропускають лише сесії з рівнем aal2;
- журнал змін через тригери бази даних;
- анонімна роль не має жодних прав;
- самостійна реєстрація вимкнена, нові користувачі приходять лише за запрошенням-посиланням;
- сервери застосунку працюють в одному регіоні з базою даних, у Франкфурті.
Систему зроблено як PWA, тож її можна встановити на телефон і вносити витрати прямо з об'єкта.
Результат
Девелопер отримав одну систему для всіх трьох об'єктів замість набору таблиць. Витрати, що стосуються кількох будинків, розподіляються за частками, тому собівартість кожного будинку рахується автоматично.
Що змінилось:
- кожна витрата має валюту, курс і курс НБУ на дату;
- старі дані з Excel і CSV переносяться імпортом;
- документи можна завантажувати для AI-розпізнавання, а результат перевіряє людина;
- продажі й оренда ведуться в тій самій системі, що й будівництво;
- через PWA витрати можна вносити з телефону.
Чесно про AI: розпізнавання документів реалізоване, але ми не стверджуємо, що воно вже пройшло перевірку на великому обсязі реальних документів. Саме тому імпорт Excel і CSV зроблено окремо і без AI.
Чим проєкт особливий
Більшість систем обліку захищають дані паролем і, можливо, двофакторною перевіркою на екрані входу. Тут двофакторна автентифікація вимагається на рівні бази даних: без підтвердженого другого фактора запит до даних просто не пройде, навіть в обхід інтерфейсу. Разом із журналом змін через тригери, вимкненою реєстрацією і роботою серверів в одному регіоні з базою це дає рівень захисту, якого зазвичай немає в коробкових рішеннях для малого бізнесу.
Друга особливість - розподіл витрат між будинками з контролем, що частки в сумі дорівнюють 1. Це та деталь, через яку таблиці зазвичай і перестають сходитись.
Опубліковано: · Оновлено: