3.1 KiB
3.1 KiB
TFM aInventory - Project Architecture & Requirements
This document is the Single Source of Truth for the project's technical architecture, business requirements, and core logic.
1. Application Overview
A unified system to maintain an inventory of "items" and their quantities, inclusive of a web administration interface, offline field operations, audit logging, and AI-powered label extraction functionalities.
2. Technical Stack
2.1 Backend (API & Data)
- Language: Python 3.12+ (Optimized for performance and type safety)
- Framework: FastAPI (Async ASGI)
- Database: SQLite (SQLAlchemy) - Local file-based persistence
- Validation: Pydantic v2
- Auth: Hybrid LDAP (python-ldap) + PBKDF2 local password hash caching
- AI Engine: Google GenAI SDK (Gemini 2.0 Flash) - Location:
backend/ai/
2.2 Frontend (Web & PWA)
- Architecture: Next.js 15+ (App Router)
- Styling: Tailwind CSS (Readability-first config)
- Icons: Lucide Icons (React components)
- Offline persistence: Dexie.js (IndexedDB wrapper)
- Scanner:
html5-qrcode(Client-side, offline-only) - Sync: Axios with bulk-sync idempotency (UUID-based)
2.3 Operations & Tooling
- PWA Deployment:
next-pwa(Service Workers + Manifest.json) - HTTPS Proxy:
local-ssl-proxy(Required for mobile camera access, Port 3003) - Servers: Frontend (
npm run devon 3000), Backend (./start_server.shon 8000)
3. Data Models & Entities
- Item: Name, Category Group (Structured), Item Type (Specific), Quantity, Barcode, Part Number.
- Category: Predefined groups for organizational structure.
- Intervention: Linked to a required items list.
- Audit Log: Immutable ledger detailing CRUD operations and stock fluctuations.
4. Scanning & Optimization Strategy (Crucial)
4.1 AI Usage Policy
- Routine Operations (Check-in/Out): Executes entirely on the local device unconditionally using
html5-qrcode($0 cost). No AI is allowed here. - New Item Onboarding (AI Label OCR): Uses cloud AI (
gemini-2.0-flash). The user takes a photo, AI extracts data based on strict templates. - Validation Mask: AI-extracted data is NEVER saved directly. It is presented in a validation UI for human confirmation.
4.2 Scanner Technical Specs (FROZEN)
- Hardware Access: Direct
MediaStreamTrackaccess. Zoom cycle: 1x -> 2x -> Max/2 -> Max. - Image Pre-processing: Rescaling (1200px), 60% Center Crop, Grayscale/Contrast filters, JPEG (
0.85quality). - OCR Matching Engine (
page.tsx):- Noise Filtering: Ignores
< 3chars, decimals, and dates. - Scoring: Exact S/N (+500), Exact P/N (+200), Token match (+50), Category match (+20).
- Threshold: Minimum 40 points for auto-match without user intervention.
- Noise Filtering: Ignores
5. Offline Sync Protocol
To prevent data loss in basements or unstable networks:
- Offline Engine: Service Workers cache assets. IndexedDB saves data.
- UUID Labeling: Every sync operation generated offline is tagged with a client-side UUID.
- Idempotent Backend: The
bulk_syncendpoint checks UUIDs againstAuditLogbefore applying increments, preventing double-counts.