Documentazione tecnica

Architettura della piattaforma

Vista d'insieme di frontend, microservizi, database e scheduler, con le note sul perimetro open source. Vedi anche la guida all'installazione · Torna ai download

Architettura

Vista d'insieme

  • Frontend: portale web Angular (portale_angular_18) e app mobile Ionic/Capacitor (app-data-smart). Entrambi parlano REST/JSON con i microservizi, autenticandosi con JWT (header Authorization: Bearer).
  • Backend: microservizi Spring (WAR su Tomcat), uno per dominio funzionale. Ogni servizio ha il proprio database o schema PostgreSQL; le letture cross-database usano postgres_fdw (vedi le migrations FDW nel repository database).
  • Multi-tenant per installazione: la configurazione per installazione vive in config/<company>/ dentro ogni servizio ed è selezionata a runtime con -Dspring.profiles.company=... e -Dspring.profiles.active=....
  • Autorizzazioni: il portale espone menu e pagine in base a azienda → preset → servizi → pagine (+ ruoli), tutto guidato dal database (ws_spring_portal_manager). I ruoli viaggiano nel JWT.

Domini e database principali

Servizio Database/schema Note
ws_spring_portal_login / portal_manager kcs-portal utenti, 2FA, pagine, ruoli, traduzioni, notifiche
ws_spring_cmp companydb aziende, CRM, chat, recensioni, cantieri/SAL/certificati, fatture
ws_spring_biz_appointments bizappointments appuntamenti (FDW verso companydb/kcs-portal)
ws_spring_booking bk_booking prenotazioni risorse
ws_spring_bakeka Bakeka bacheca, luoghi, audioguide
sw_e_ecommerce onlineshop catalogo, carrello, ordini
ws_spring_documentary filesystem + DB repository documentale

Scheduler

Lo scheduler è incluso nella distribuzione: l'host Windows kondorcs.scheduleservices (KCSSchedule.exe) carica via reflection le librerie di job (ILibraryProcess) e le esegue secondo la pianificazione configurata nel database dello scheduler (SqlDataProviders).

Job inclusi (kondorcs.schedulelibrary.datasmart / kondorcs.schedulelibrary.aifileprocessor):

  1. Notificatore — invio SMS/OTP del 2FA (token pendenti del login a due fattori) e fan-out della coda notifiche users_notify (kcs-portal) via SMTP/push; i record con typesent NULL vengono recapitati e marcati. Le preferenze utente sono in user_mail_settings; per il push serve il proprio serviceAccountKey.json Firebase in ws_spring_portal_manager. Endpoint di supporto in ws_spring_portal_login (SchedulerLoginController, IP consentiti via scheduler.allowed.ips).
  2. ReportFotovoltaico — riepilogo periodico della produzione (tabelle cmp_pv_* in companydb).
  3. CreditoSmsHosting — controllo del credito residuo del provider SMS.
  4. AIFileProcessor — estrazione dati dai PDF caricati nel documentale (certificati di pagamento, SAL, PDF generici con fallback AI).

Funzione NON inclusa, da fornire dall'installazione: la scadenza automatica di prenotazioni/preventivi e i promemoria programmatici di BizAppointments (nella piattaforma di origine fanno parte di un job del modulo enterprise; gli helper dati sono già presenti in DBController della libreria datasmart). Riferimento: biz_appointments_add_scaduto_status.sql nel repo database.

Note sul perimetro

Questa distribuzione è il perimetro open source del progetto MyTown e corrisponde ai risultati delle attività di ricerca e sviluppo del progetto cofinanziato (PR FESR Abruzzo 2021-2027, Intervento 1.1.1.1): Core Framework, servizi applicativi trasversali e moduli verticali di settore, rilasciati con licenza AGPL v3.

Alcuni moduli della piattaforma di origine (helpdesk ticketing, gestione flotte, HR/sicurezza, magazzino, webmail, import listini) non fanno parte del progetto finanziato né di questa distribuzione: sono funzionalità enterprise e personalizzazioni realizzate su commessa, distribuite da Kondor CS con licenza commerciale e nella titolarità di Kondor CS ovvero, ove contrattualmente previsto, dei rispettivi clienti che ne hanno commissionato lo sviluppo (vedi LICENSING.md, "Titolarità e doppia licenza").

Il perimetro open source è completo e funzionante senza tali moduli: i punti di estensione corrispondenti (es. chiavi hrurl/urlRFIService negli environment del portale) sono opzionali e possono restare vuoti.