Add Checkbox ETTN receipts for Nova Poshta COD waybills

Cashier creates an ETTN receipt in Checkbox bound to the TTN with payment
control; Checkbox fiscalizes it itself when the parcel is paid for.

- cash_registers (Fernet-encrypted license key / PIN) and receipts tables
- Checkbox HTTP client + stub (ETTN does not work on test registers)
- two-phase create via ARQ job, timeout reconciliation, cron status polling
- /receipts and /cash-registers API, audit records
- dashboard: per-order and bulk create, prepayment, cancel; cash registers page

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
2026-09-23 23:39:00 +03:00
co-authored by Claude Opus 5.5
parent d13e7ce2b3
commit 518a99197f
44 changed files with 2931 additions and 20 deletions
+65
View File
@@ -325,3 +325,68 @@
color: var(--color-text-muted);
padding: 32px 0;
}
.orders-toolbar-actions {
display: flex;
gap: 8px;
align-items: center;
}
.orders-link-btn {
border: 1px solid var(--color-border);
border-radius: 8px;
padding: 9px 14px;
font-size: 14px;
color: var(--color-text);
text-decoration: none;
}
.orders-prepayment-input--invalid {
border-color: #dc2626;
}
.orders-notice {
display: flex;
justify-content: space-between;
align-items: flex-start;
gap: 12px;
margin-bottom: 12px;
padding: 10px 14px;
border-radius: 8px;
font-size: 14px;
}
.orders-notice ul {
margin: 0;
padding-left: 18px;
}
.orders-notice--ok {
background: #dcfce7;
color: #166534;
}
.orders-notice--error {
background: #fee2e2;
color: #991b1b;
}
.orders-notice-close {
border: none;
background: none;
color: inherit;
font-size: 18px;
cursor: pointer;
}
@media (prefers-color-scheme: dark) {
.orders-notice--ok {
background: rgba(22, 163, 74, 0.18);
color: #86efac;
}
.orders-notice--error {
background: rgba(220, 38, 38, 0.18);
color: #fca5a5;
}
}