# ЭльФиСА — Электронная Фармация WinForms-клиент «Электронная Фармация» с современным UI на базе библиотеки **Elfisa.UI** (тема **PharmaTrust**). ## Структура ``` src/ Elfisa.UI/ — UI-библиотека (ThemeManager, Modern* контролы) ElectronicPharmacy/ — основное приложение (SQLite, API, бизнес-логика) ``` ## Сборка Требуется .NET SDK 9+ (или MSBuild 16+) и .NET Framework 4.7.2. ```powershell dotnet build Elfisa.sln -c Release ``` Запуск: ```powershell .\src\ElectronicPharmacy\bin\Release\Электронная` Фармация.exe ``` База `efClient.db` копируется в output (`Data\efClient.db` или рядом с exe). Путь задаётся через `AppConfig.SqliteDbPath`. ## Настройки В диалоге **Авторизация** (и в `Settings`): - **URL API** — базовый адрес сервера (по умолчанию из `AppConfig`) - **Location ID** — UUID точки для отправки заказов - **Region ID** — опциональный фильтр при загрузке прайса Переменная окружения `ELF_API_BASE_URL` переопределяет URL API. Подробное описание всех HTTP-запросов — в [docs/API.md](docs/API.md). ## Архив для заказчика ```powershell .\dist\build-release.ps1 ``` Создаёт `dist\Электронная-Фармация.zip` с Release-сборкой. ## Основной цикл (V2) 1. Старт → проверка БД → выбор грузополучателя → прайс-лист 2. **Загрузить** — прайс с API в SQLite, обновление открытых вкладок прайса 3. Фильтр поставщика, поиск, набор в корзину с проверкой остатка 4. **Сохранить заказ** — мин. сумма по поставщику, уникальный номер, грузополучатель в `Orders` 5. **Отправить** — POST `/api/buyer/orders`, статус `ОТПРАВЛЕН` только у отправленного заказа 6. **Заказы** — фильтры по статусу, поставщику, грузополучателю; отправка одного заказа 7. **Отказы / Накладные** — синхронизация с `/api/buyer/invoices` ## Приёмочный чек-лист 1. Старт → БД → выбор точки → прайс 2. Загрузить → прайс обновился, корзина очищена с предупреждением 3. Фильтр поставщика + поиск + количество + проверка остатка 4. Сохранить заказ (мин. сумма, корректный номер, грузополучатель) 5. Отправить → только выбранные заказы → статус / ошибка API 6. Журнал: фильтры, комментарий, удаление `НОВЫЙ` 7. Отказы: загрузка с API + детали позиций 8. Авторизация + `location_id` в настройках 9. Единый UI: `UiDialogs` / toast, без debug-панелей загрузки