From 3549a1754c5f6633a53b987ab0a9de468f7e3ca7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Dalibor=20Markovi=C4=87?= Date: Wed, 24 Jun 2026 22:13:15 +0200 Subject: [PATCH] README: Teron mock server sekcija, fiskalizacija u toku --- Readme.md | 77 +++++++++++++++++++++++++++++++++++++++++++++++++++- Readme_sr.md | 77 +++++++++++++++++++++++++++++++++++++++++++++++++++- 2 files changed, 152 insertions(+), 2 deletions(-) diff --git a/Readme.md b/Readme.md index 5d76b6b..06b127b 100644 --- a/Readme.md +++ b/Readme.md @@ -62,9 +62,12 @@ The goal is simple: everything the repair shop needs to track is located in one - Automated tests — unit and integration over a SQLite database (crypto, RBAC, login flows, form validators, reports) - **Demo mode** (`NTECH_ENV=demo`) — auto-created demo user, pre-filled login form, restricted backup count, blocked password/2FA changes +### In Progress + +- **Fiscalization (ESIR/PFR)** — Teron L-PFR mock server included in `Fisk/`; Go client integration planned + ### Planned -- Fiscalization (ESIR/PFR) - KPO book and double-entry bookkeeping (optional, later phase) - PostgreSQL support (for multi-user environments) - WebAuthn / Passkey login (database schema is already prepared) @@ -188,6 +191,78 @@ your.domain.com { } ``` +### With Teron L-PFR Mock (Fiscalization Testing) + +The `Fisk/` directory contains a Python mock server that simulates a [Teron](https://teron.rs) L-PFR fiscal device (port 4566). It implements the Teron HTTP API — invoice signing, PDV calculation, QR code generation, and per-type counters — without requiring real hardware or a certificate. + +Use it alongside NTech for fiscalization development and testing: + +```yaml +# docker-compose.yml +services: + ntech: + image: ghcr.io/dalibor31/ntech:latest + container_name: ntech + restart: unless-stopped + ports: + - "8000:8000" + environment: + NTECH_ENV: production + NTECH_PORT: "8000" + NTECH_SQLITE: /app/data/ntech.db + volumes: + - ./data:/app/data + - ./uploads:/app/web/static/uploads + - ./logs:/var/log/ntech + - ./backups:/app/backups + networks: + - ntech-net + + teron-mock: + image: ghcr.io/dalibor31/ntech-fisk:latest + container_name: teron_mock + restart: unless-stopped + volumes: + - teron-data:/app/data + networks: + - ntech-net + +volumes: + teron-data: + +networks: + ntech-net: +``` + +The `teron-mock` service is reachable from `ntech` at `http://teron-mock:4566` over the internal Docker network — the port is not exposed to the host. + +To run the mock server locally (without Docker): + +```bash +cd Fisk +pip install -r requirements.txt +python server.py +# or: ./start.sh +``` + +#### Teron Mock Endpoints + +| Method | Path | Description | +|--------|------|-------------| +| GET | `/api/status` | Device status and last invoice number | +| GET | `/api/attention` | Active alerts | +| POST | `/api/pin` | PIN verification (BE unlock) | +| GET | `/api/settings` | Device settings | +| POST | `/api/invoices` | Issue a fiscal invoice | +| POST | `/api/invoices/final` | Finalize an advance invoice | +| GET | `/api/invoices/last` | Last issued invoice | +| GET | `/api/invoices/:invoiceNumber` | Invoice by number | +| POST | `/api/invoices/search` | Search invoices | + +Counters, signed receipts, QR codes, and JSON invoice data are persisted in `Fisk/data/`. + +--- + ### Demo Mode Demo mode runs a fully functional copy with a pre-created `Demo` / `Demo1234` admin account. Password and 2FA changes are blocked. Backup is limited to 2 copies. diff --git a/Readme_sr.md b/Readme_sr.md index 361bef2..5913f34 100644 --- a/Readme_sr.md +++ b/Readme_sr.md @@ -62,9 +62,12 @@ Cilj je jednostavan: sve što servis treba da prati nalazi se na jednom mestu, b - Automatski testovi — jedinični i integracioni nad SQLite bazom (kripto, RBAC, tokovi prijave, validatori forme, izveštaji) - **Demo mod** (`NTECH_ENV=demo`) — automatski kreiran demo korisnik, pre-popunjeni login, ograničen bekap, blokirana promena lozinke i 2FA +### U toku + +- **Fiskalizacija (ESIR/PFR)** — Teron L-PFR mock server dostupan u `Fisk/`; integracija Go klijenta u planu + ### Planirano -- Fiskalizacija (ESIR/PFR) - KPO knjiga i dvojno knjigovodstvo (opciono, kasnija faza) - Podrška za PostgreSQL (za višekorisničko okruženje) - WebAuthn / Passkey prijava (šema baze je pripremljena) @@ -188,6 +191,78 @@ tvoj.domen.com { } ``` +### Sa Teron L-PFR mokom (testiranje fiskalizacije) + +Folder `Fisk/` sadrži Python mock server koji simulira [Teron](https://teron.rs) L-PFR fiskalni uređaj (port 4566). Implementira Teron HTTP API — potpisivanje računa, PDV obračun, generisanje QR koda i brojače po tipu računa — bez potrebe za pravim hardverom ili sertifikatom. + +Koristi se uz NTech za razvoj i testiranje fiskalizacije: + +```yaml +# docker-compose.yml +services: + ntech: + image: ghcr.io/dalibor31/ntech:latest + container_name: ntech + restart: unless-stopped + ports: + - "8000:8000" + environment: + NTECH_ENV: production + NTECH_PORT: "8000" + NTECH_SQLITE: /app/data/ntech.db + volumes: + - ./data:/app/data + - ./uploads:/app/web/static/uploads + - ./logs:/var/log/ntech + - ./backups:/app/backups + networks: + - ntech-net + + teron-mock: + image: ghcr.io/dalibor31/ntech-fisk:latest + container_name: teron_mock + restart: unless-stopped + volumes: + - teron-data:/app/data + networks: + - ntech-net + +volumes: + teron-data: + +networks: + ntech-net: +``` + +Servis `teron-mock` je dostupan iz `ntech` kontejnera na adresi `http://teron-mock:4566` preko interne Docker mreže — port nije izložen spolja. + +Za lokalno pokretanje moka (bez Dockera): + +```bash +cd Fisk +pip install -r requirements.txt +python server.py +# ili: ./start.sh +``` + +#### Teron Mock endpointi + +| Metod | Putanja | Opis | +|-------|---------|------| +| GET | `/api/status` | Status uređaja i poslednji broj računa | +| GET | `/api/attention` | Aktivna upozorenja | +| POST | `/api/pin` | Verifikacija PIN-a (otključavanje BE) | +| GET | `/api/settings` | Podešavanja uređaja | +| POST | `/api/invoices` | Izdavanje fiskalnog računa | +| POST | `/api/invoices/final` | Finalizacija avansnog računa | +| GET | `/api/invoices/last` | Poslednji izdati račun | +| GET | `/api/invoices/:invoiceNumber` | Račun po broju | +| POST | `/api/invoices/search` | Pretraga računa | + +Brojači, potpisane priznanice, QR kodovi i JSON podaci o računima čuvaju se u `Fisk/data/`. + +--- + ### Demo mod Demo mod pokreće potpuno funkcionalnu kopiju sa pre-kreiranim nalogom `Demo` / `Demo1234` (admin). Promena lozinke i 2FA su blokirani. Bekap je ograničen na 2 kopije.