# ЭльФиСА — Электронная Фармация



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-панелей загрузки

