Each cash register stores its own encrypted NP API key. Status polling uses register keys and binds an order to the register whose key sees the TTN as its own (PhoneSender present); ETTN receipts are created from that register. Migration 0008 moves the old NOVA_POSHTA_API_KEY into the default register. Closes #3 Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
76 lines
3.9 KiB
Bash
76 lines
3.9 KiB
Bash
# ---------------------------------------------------------------------------
|
||
# lux_fiscal — пример конфигурации. Скопируйте в .env и заполните.
|
||
# cp .env.example .env
|
||
# ---------------------------------------------------------------------------
|
||
|
||
# --- Общее --------------------------------------------------------------
|
||
ENVIRONMENT=local # local | staging | production
|
||
DEBUG=true
|
||
LOG_LEVEL=INFO
|
||
PROJECT_NAME=lux_fiscal
|
||
|
||
# Базовый публичный URL приложения. Из него строится callback_url для Checkbox,
|
||
# поэтому в проде он обязан быть реальным https-адресом.
|
||
BASE_URL=http://localhost:8000
|
||
|
||
# Домены, которым разрешён доступ к API из браузера (через запятую).
|
||
CORS_ORIGINS=http://localhost:5173,http://localhost:8000
|
||
|
||
# --- Postgres -----------------------------------------------------------
|
||
POSTGRES_HOST=postgres
|
||
POSTGRES_PORT=5432
|
||
POSTGRES_DB=lux_fiscal
|
||
POSTGRES_USER=lux_fiscal
|
||
POSTGRES_PASSWORD=change-me-postgres
|
||
|
||
# --- Redis --------------------------------------------------------------
|
||
REDIS_HOST=redis
|
||
REDIS_PORT=6379
|
||
REDIS_DB=0
|
||
|
||
# --- Криптография -------------------------------------------------------
|
||
# SECRET_KEY подписывает JWT. ENCRYPTION_KEY шифрует ключи Checkbox/CRM в БД.
|
||
#
|
||
# Сгенерировать оба ключа:
|
||
# python -c "import secrets; print(secrets.token_urlsafe(64))" # SECRET_KEY
|
||
# python -c "from cryptography.fernet import Fernet; print(Fernet.generate_key().decode())" # ENCRYPTION_KEY
|
||
#
|
||
# ВАЖНО: при смене ENCRYPTION_KEY все сохранённые ключи касс станут
|
||
# нечитаемыми — их придётся ввести заново через админку.
|
||
SECRET_KEY=change-me-generate-a-real-secret-key
|
||
ENCRYPTION_KEY=change-me-generate-a-real-fernet-key
|
||
|
||
ACCESS_TOKEN_EXPIRE_MINUTES=15
|
||
REFRESH_TOKEN_EXPIRE_DAYS=7
|
||
|
||
# --- Первый администратор ----------------------------------------------
|
||
# Создаётся один раз командой `python -m app.cli bootstrap`.
|
||
FIRST_ADMIN_EMAIL=admin@example.com
|
||
FIRST_ADMIN_PASSWORD=change-me-admin-password
|
||
FIRST_ADMIN_NAME=Администратор
|
||
|
||
# --- CRM (exoCRM) ---------------------------------------------------------
|
||
# Ключи доступа к магазину — запросить у администратора CRM.
|
||
CRM_BASE_URL=https://optstore.exocrm.com/api/1.1/
|
||
CRM_API_KEY=change-me-crm-apikey
|
||
CRM_SECRET_KEY=change-me-crm-secretkey
|
||
CRM_SHOP_KEY=change-me-crm-shopkey
|
||
CRM_SID=1
|
||
|
||
# --- Nova Poshta ----------------------------------------------------------
|
||
# Ключи API Nova Poshta задаются у касс (страница «Кассы»). Эта переменная нужна
|
||
# только миграции 0008: переносит старый общий ключ в кассу по умолчанию.
|
||
NOVA_POSHTA_API_KEY=change-me-novaposhta-apikey
|
||
|
||
# --- Checkbox -------------------------------------------------------------
|
||
# Ключ лицензии кассы и PIN кассира вводятся в админке «Кассы» и хранятся в БД
|
||
# зашифрованными (ENCRYPTION_KEY), а не здесь.
|
||
CHECKBOX_BASE_URL=https://api.checkbox.ua
|
||
CHECKBOX_CLIENT_NAME=lux_fiscal
|
||
CHECKBOX_CLIENT_VERSION=0.1.0
|
||
# Пауза между запросами к Checkbox (мс): Новая Почта за Checkbox ограничивает частоту.
|
||
CHECKBOX_MIN_REQUEST_INTERVAL_MS=1000
|
||
# ЕТТН-чеки на тестовой кассе Checkbox не работают: локально весь цикл
|
||
# прогоняется через стаб (чек «фискализируется» на втором опросе). В production запрещено.
|
||
CHECKBOX_USE_STUB=false
|