# АТОЛ 30Ф в сервере печати HoReCaERP

Версия пакета: 1.7.5-atol-preview. Windows 10/11, USB, платформа ККТ 5.x.
Это тестовый выпуск существующего сервера печати, отдельная служба HoReCaERP не нужна.
Оборудование при разработке не подключалось. Автоматическая фискализация продаж ERP
ещё не включена. ЕГАИС, маркировка, коррекции, частичные возвраты, авансы и агентские
расчёты не поддерживаются. Печать кухни и обычных чеков продолжает работать отдельно.

## Подготовка

1. Установите официальный [Драйвер ККТ АТОЛ 10](https://www.atol.ru/company/service-support/dkkt10-platforma5/)
   с компонентом **АТОЛ Web Requests** той же разрядности. Старый «Web-сервер ККТ»
   использует другой контракт и здесь не поддерживается. Схема проверена по
   [документации Web Requests 1.0.6.0](https://integration.atol.ru/web_requests/).
2. Подключите кассу по USB и проверьте связь в тесте драйвера. Настройте и активируйте
   устройство в Web Requests по инструкции АТОЛ. Запишите его ID и заводской номер.
   Для учётной записи Web Requests используйте локальную утилиту АТОЛ из его поставки.
3. Web Requests должен быть доступен только на этом компьютере, по адресу
   `http://127.0.0.1:16732`. Не открывайте этот порт в интернет. Проверка настроек
   не меняет регистрацию, СНО, время кассы или состояние смены.
4. Сохраните старую установку сервера печати и остановите её перед обновлением.
   Распакуйте тестовый пакет в отдельную папку и запустите `START-PRINT-AGENT.cmd`.
   Не устанавливайте тестовую сборку вместо действующей службы до испытаний.
5. В настройках сервера печати нажмите **«Настроить АТОЛ 30Ф (тестовый выпуск)»**.
   Введите ID, заводской номер, порт и учётные данные Web Requests. Нажмите
   «Сохранить и проверить связь». Модель, номер и платформа должны совпасть.

Пароль хранится через Windows DPAPI для текущего пользователя в
`%LOCALAPPDATA%\HoReCaERP\Atol\credentials.dpapi`. Он не передаётся в ERP.
Операции выполняются только из окна настройки под этим пользователем;
автоматическое исполнение фискальных команд службой Windows не включено.

## Испытание фискальных операций

Окно позволяет специалисту загрузить JSON операции. После отдельного подтверждения
она отправляется в **настоящую кассу**, это не симуляция. Используйте испытательную ККТ
и подходящий тестовый ФН. На рабочей кассе не создавайте фиктивные продажи.

Формат обычного чека (пример структуры, значения нужно заменить под сценарий):

```json
{
  "operationId": "unique-sale-id-001",
  "type": "sell",
  "operator": { "name": "ФИО кассира" },
  "taxationType": "usnIncome",
  "lines": [{
    "name": "Обычная услуга",
    "priceKopecks": 10000,
    "quantityMilli": 1000,
    "amountKopecks": 10000,
    "tax": "none",
    "paymentObject": "service",
    "regulated": false
  }],
  "payments": [{ "type": "cash", "amountKopecks": 10000 }],
  "totalKopecks": 10000
}
```

Суммы — целые копейки; количество — тысячные единицы. СНО и налог задаются явно.
Этот пример не определяет налоговый режим организации. Значения налогов первого
контракта: `none`, `vat0`, `vat10`, `vat20`; другие ставки блокируются, а не заменяются.
Для ставок 5/7/22% нужно подтвердить контракт установленного драйвера и расширить адаптер.
Оплата: `cash` или `electronically`, сумма оплат точно равна итогу. Последнее значение
не запускает банковский терминал. Все позиции — полный расчёт, обычный товар `commodity`
или услуга `service`, без маркировки и алкоголя. Произвольные поля не принимаются.

Другие типы:

- `openShift`, `closeShift`: только `operationId`, `type`, `operator`.
- `cashIn`, `cashOut`: те же поля и `cashKopecks`.
- `sellReturn`: поля исходного чека с новым `operationId`, `type: "sellReturn"`
  и `originalOperationId`. Допускается один полный возврат подтверждённого чека
  этого же локального журнала с неизменными позициями, итогом и СНО.

## Восстановление

До отправки сохраняются UUID и содержимое операции в `operations.json` рядом с
настройками. Повтор того же `operationId` с другим содержимым запрещён. После
обрыва связи, перезапуска, ошибки разбора или ответа 404 модуль **не отправляет чек
повторно**, а читает результат исходного UUID. Неизвестный результат блокирует новые
операции этой кассы. В списке выберите операцию и нажмите сверку результата.
Журнал нельзя удалять или редактировать ради разблокировки: необходима сверка с ФН.
Работайте под одним пользователем Windows; перенос компьютера требует переноса журнала.

Подтверждённый документ без бумаги показывается отдельно. Не создавайте новый чек:
восстановите печать средствами драйвера АТОЛ. `CONFIRMED` относится к ответу кассы,
а не к подтверждению доставки в ОФД или проведению продажи в ERP.

Перед включением в кассовый процесс нужны испытания устройства: продажа и полный
возврат, смена, конец бумаги, обрыв USB, перезапуск после отправки, недоступный ОФД.
Затем — серверная привязка к кассе ERP, сверка реквизитов и сумм, налоговые настройки
товаров и синхронное подтверждение в оплате. Этот пакет сам не включает эти функции.
