# 18 · FAQ

[← Home](Home.md)

## Общие

**Это официальный софт BAS-IP?**
Нет. Это независимое open-source приложение (MIT), использующее публичный
HTTP API панелей BAS-IP Camdroid. Торговая марка принадлежит правообладателю.

**Нужен ли облачный сервис BAS-IP?**
Нет. Приложение работает полностью локально: ваш сервер (или Raspberry Pi)
+ панель в локальной сети. Интернет нужен только для обновлений, Telegram/SMTP
и оплаты по ссылкам.

**Сколько это стоит?**
0 ₽. MIT-лицензия, без ограничений на число домов/квартир/устройств.

**Какие версии PHP/БД поддерживаются?**
PHP 8.2+ (рекомендуется 8.5), MySQL 8/MariaDB 10.6+, PostgreSQL 13+,
SQLite 3. По умолчанию — MySQL.

**Работает ли без JavaScript?**
Да: все формы и действия доступны без JS (прогрессивное улучшение).
Без JS не будет QR-кодов в браузере и командной палитры.

**Нужен ли Node.js на сервере?**
Нет. Ассеты уже собраны и закоммичены; Node нужен только разработчику
для пересборки (`npm run build`).

## Жители и доступ

**Житель съехал — что делать?**
Карточка → снять «включен». Он мгновенно исчезает из списков, расчётов и
рассылок; история сохраняется. Полное удаление — мягкое, с восстановлением.

**Можно ли несколько машин и телефонов?**
Да: несколько машин (госномер + марка) и контактов (телефоны/e-mail/telegram)
на одну карточку. Уведомления идут на primary-контакт каждого канала.

**Как дать доступ консьержу/охране?**
Роль `operator`: открывать, вести жителей и кассу — без настроек,
пользователей и бэкапов. Плюс журнал всех его действий.

**Житель не платит — можно закрыть доступ?**
Да: снять чекбокс «доступ» (открывать не сможет, в списках остаётся) или
«включен» (полностью вне расчётов). Это ручное решение; автоматически за
долги никто не блокируется.

## Деньги

**Как делится сумма?**
Общая сумма ÷ активные участники: поровну (default), по площади, по числу
жителей или по доле. Расщепление точное до копейки: сумма счетов всегда
равна общей сумме.

**Сумма изменилась после выставления счетов — всё пересоздавать?**
Нет: «Перерасчёт» создаст дополнительные счета на дельту (или сторно
отключённым), уже оплаченное не трогается.

**Житель заплатил больше?**
Переплата остаётся на балансе и учитывается автоматически.

**Поддерживаются ли онлайн-оплаты?**
Приложение не процессит карты (и не требует кассы по 54-ФЗ само по себе):
оно даёт ссылку на оплату (любой сервис) и принимает факт оплаты — вручную
или вебхуком `POST /api/v1/payments` с `external_id` (идемпотентно).

**Валюта только рубли?**
Нет: `billing.currency`/`currency_symbol` — любые (₸, Br, ₴, $…).

## Гостевой доступ

**Гость должен что-то устанавливать?**
Нет: ссылка открывается в браузере телефона, одна большая кнопка.
Альтернативы — короткий код (продиктовать охране) и PIN для клавиатуры панели.

**Почему 12 часов?**
Это default (`guest.default_ttl_hours`), пресеты 1–72 ч. Достаточно, чтобы
курьер/гость приехал и уехал, и безопасно забыть отозвать.

**Можно ли ограничить число открытий по одному пропуску?**
Да: `guest.max_uses` (0 = без лимита в пределах срока).

**Что если гость поделится ссылкой со всеми?**
Ссылка персональная (в журнале видно владельца и имя гостя), действует
ограниченно, лимитируется по частоте, отзывается одним нажатием. Для
систематических въездов (курьерская служба) заведите отдельный пропуск
с `max_uses` и сроком.

## Эксплуатация

**Сервер упал — жители не попадут домой?**
Шлагбаум должен иметь аппаратное аварийное открытие (кнопка/пульт/ключ) —
это требование к любой автоматизации ворот. Приложение при падении сервера
просто не открывает «удалённо»; панель BAS-IP автономна.

**Как поставить на Raspberry Pi?**
Как на любой Linux: PHP 8.2+, nginx/lighttpd + php-fpm, SQLite или MariaDB,
cron. 512 МБ ОЗУ достаточно.

**Есть ли Docker-образ?**
Официального нет (принцип «без внешних зависимостей»); приложение ставится
на любой LEMP/LEPP-стек. Community-образы приветствуются (см. CONTRIBUTING).

**Как мониторить?**
`GET /health.json` (200/503 + статусы подсистем), `GET /metrics`
(Prometheus), `bin/bas-ip health` (код возврата для cron), алерты в Telegram
(`system_alert`).

**Где хранятся персональные данные?**
Только в вашей БД и `storage/` на вашем сервере. Логи маскируют секреты;
экспорт/бэкапы — под вашим контролем. Приложение не звонит «домой»,
кроме GitHub API при проверке обновлений (отключается: `update.enabled=false`).

**Можно ли несколько домов/ЖК на одной установке?**
Технически — корпус (`building`) разделяет жителей в списках и расчётах,
несколько устройств (`device.gates`) — разные ворота. Полностью изолированные
инсталляции проще вести отдельными установками (своя БД, свой домен).

**Как сменить язык интерфейса?**
Сейчас интерфейс на русском (`ui.language`, слой Lang готов к расширениям).
Переводы принимаются — см. CONTRIBUTING.

## Разработка

**Почему без фреймворка/composer?**
Осознанно: система управляет физическими воротами — чем меньше слоёв, тем
надёжнее эксплуатация на любом хостинге и проще аудит безопасности. Ядро
читается целиком, зависимости — ноль.

**Как написать свой драйвер устройства?**
Реализуйте интерфейс `BasIp\Device\GateDriver` (+ `supports()`), зарегистрируйте
в `DeviceManager`. Пример — `HttpRelayDriver` (~150 строк).

**Как добавить канал уведомлений?**
Наследуйте `BasIp\Notify\Channel\AbstractChannel` (`send`, `supports`),
добавьте конфиг в `notify.channels`. Пример — `TelegramChannel`.

**Тесты?**
`php tests/run.php` (200 тестов на SQLite/MySQL/PostgreSQL),
`php tools/smoke.php` (68 end-to-end проверок). Без PHPUnit — свой раннер.

---
[← Home](Home.md) · [Решение проблем](16-Troubleshooting.md) · [SECURITY](https://github.com/paulmann/BAS-IP/blob/main/SECURITY.md)
