◆ Sezione tecnica

Architettura: 4 layer, 30+ BPL, dati integrati

Ogni BPL si compila, testa e distribuisce indipendentemente, con dipendenze rigorosamente monodirezionali. Più database orchestrati dalla sincronizzazione, con PostgreSQL come hub di piattaforma. Accanto, MemoryLens, sicurezza e integrazione.

4
Layer
30+
BPL modulari
340k+
Righe di codice
580+
Unit Pascal
Architettura a pacchetti
4 layer, zero accoppiamento

Le dipendenze sono monodirezionali. Aggiornare un modulo significa sostituire un file .bpl, senza ricompilare l'eseguibile.

Layer 0
Framework
SF_CoreSF_Database SF_SyncSF_Tools
Layer 1
Common
DtoMes_Common Auth · Config · Menu · Help · SupportPanel · App_MLHelper · Theme
Layer 2
Moduli
ProdottiPrintProdTools MLLaboratorioDocTipoA DocTipoBMLEditorMLSupport PianificazioneProduzioneSBOM
Layer 3
EXE
DtoMesAdmin4.exe Bootstrap minimale — tutta la logica nelle BPL
Layer dati
PostgreSQL come hub di piattaforma

La piattaforma resta multi-database — Firebird per il MES, SQL Server/COBOL per l'ERP — ma i servizi trasversali (identità, permessi, telemetria, documentazione, AI) convergono su PostgreSQL. Il salto è isolato dietro interfacce (IAuthProvider, IAuthRepository): cambiare sorgente dati significa cambiare un'implementazione e una riga di bootstrap, senza toccare i moduli.

🔑 Identità & permessi

Tabelle AUTH_* (risorse, azioni, ruoli, matrice permessi, ruoli utente) e provider di identità su PostgreSQL. FK vere, permessi e identità co-locati.

📡 Telemetria & audit

Eventi applicativi e di sicurezza consolidati in ml_app_events su PostgreSQL, con pattern outbox dal SyncEventHub.

🧮 Ricerca semantica

Con pgvector, gli embedding vivono accanto ai dati: niente secondo database, ricerca semantica dove già stanno le informazioni.

SF.Auth.Provider.pas — un cambio di implementazione, non di moduli
// L'identità è astratta: Firebird oggi, PostgreSQL domani
if HasAuthProvider then
  Result := CurrentAuthProvider.Authenticate(AUser, APwd)
else
  Result := LegacyLogin2(AUser, APwd);  // fallback

// Cutover a PG = una riga di bootstrap:
SetAuthProvider(TAuthPgProvider.Create(connPG));
Infrastruttura trasversale · ereditata via MCP
Il sistema nervoso che ogni modulo eredita

Dashboard, telemetria, audit, documentazione, log e sincronizzazione non sono opzioni per singolo modulo: sono servizi del framework. Uno scaffolding conforme alle regole del server MCP (scaffold_module) li aggancia automaticamente — un modulo generato nasce già osservabile, tracciato e documentato.

SEH · TelemetriaSyncEventHub · outbox → PostgreSQL · :8091
DAH · DashboardDtoMesAnalyticsHub · web interno · :8092
Audit centralizzatoml_app_events su PostgreSQL · vocabolario RBAC
MemoryLens3 pilastri: DEV · USER · SUPPORT
MLPivotarchivio + full-text · via MCP
Logtracciamento strutturato, coerente
Nginxreverse proxy dei cruscotti web
Sync PostgreSQLconsolidamento eventi/doc/embedding
Il punto: queste capacità vivono nel framework, non nei moduli. Il server MCP codifica le regole del framework, così un modulo generato eredita l'intero sistema nervoso — coerente, osservabile e conforme fin dal primo giorno. Vedi AI & MCP →
MemoryLens
Documentazione, diagnostica, help. Unificati.

Un sistema trasversale che serve tre pubblici con un'unica architettura. Ogni modulo accede via TMLHelper: una uses, zero dipendenze aggiuntive.

DEV · Sviluppatore

Cattura errori, misura performance, documenta decisioni architetturali. Browser ML per navigazione cross-modulo.

USER · Utente finale

Help contestuale con pulsante ? su ogni frame. Tips, avvisi, guide. Late-binding: se ML non è caricata, fallback graceful.

SUPPORT · Supporto

Pannello diagnostica con badge eventi. Creazione ticket con contesto automatico. Viewer eventi con dettaglio.

Sicurezza & audit
RBAC, enforcement, tracciabilità

Autenticazione e autorizzazione fatte bene: modello permessi centralizzato, enforcement dichiarativo, audit su PostgreSQL. Checklist interna OWASP ASVS L1, fondamenta pronte per verifiche future.

🔑 RBAC centralizzato

Risorse, azioni e ruoli in tabella. Un permesso è la coppia (risorsa, azione); un ruolo è un insieme di permessi; l'utente riceve uno o più ruoli. Complementare al modello a livelli/enti esistente.

🚫 Enforcement dichiarativo

Guardie configurate in JSON su form, menu e azioni. Rollout incrementale "uno alla volta", con fail-open finché l'enforcement non è attivo sul modulo.

⚖ Segregazione dei compiti (SoD)

Chi crea non approva. Base APPROVE già separata, controllo dinamico su azioni sensibili con override tracciato.

📜 Audit & hash-chain

Eventi di sicurezza (login, accesso negato, override) su PostgreSQL. Catena hash append-only: la proprietà "non manomesso" senza blockchain.

Sincronizzazione · il cuore dell'integrazione
Multi-database, multi-profilo, zero trigger

È il punto centrale dell'architettura: SyncFramework tiene allineati database eterogenei (SQL Server/COBOL dell'ERP, Firebird del MES, PostgreSQL della piattaforma) con un engine hash-based bidirezionale che non richiede trigger né timestamp sulle tabelle sorgente. Ogni sistema resta al suo posto; i dati restano coerenti.

SQL Server

ERP / COBOL

SyncFramework

Hash-based Engine

Firebird

MES locale

PostgreSQL

Piattaforma · AI

🔒 Shadow Database

Deletion tracking senza modificare le tabelle sorgente. Garbage collector per la pulizia automatica delle entry obsolete.

⇄ Parallel Executor

Esecuzione multi-profilo parallela. Ogni profilo ha source, target e transform configurabili.

⚠ Conflict Tracker

Record falliti tracciati con retry. Conflitti gestiti con policy configurabile per profilo.

▶ Windows Service

Console e servizio. Heartbeat su DB per il monitoraggio. Graceful shutdown.

Perché conta: la sincronizzazione è ciò che permette a ERP, MES e piattaforma di coesistere senza duplicare la gestione. Documentazione ed embedding stanno su PostgreSQL, accanto ai dati. Vedi AI & MCP →

Dall'architettura all'AI

PostgreSQL sotto, Ollama accanto, MCP come ponte verso i modelli.

AI & MCP → Esplora i moduli ↑ Torna alla panoramica