Torna ai progetti
Concluso

SULKO Management

Gestionale multi-tenant che porta un cliente dal primo preventivo alla manutenzione ricorrente: documenti generati, firmati digitalmente e archiviati, senza mai uscire dal sistema.

|
SULKO Management
RuoloAnalisi, progettazione, sviluppo e gestione del server
SquadraProgetto individuale
Tecnologie9 tecnologie

Di cosa si tratta

Un'applicazione ASP.NET Core che copre l'intero ciclo commerciale di uno studio di sviluppo. Genera preventivi, contratti, NDA e atti di nomina a responsabile del trattamento come PDF veri, li manda in firma digitale, riceve i documenti sigillati e li mette a disposizione del cliente in un portale suo. Ogni documento è costruito dai dati, non compilato a mano: cambiare un canone significa cambiare un numero, non rileggere sei PDF. Gira su una macchina ARM da 2 core dietro nginx, con PostgreSQL a schema separato per tenant.

Funzionalità principali

Documenti

  • Preventivi con piano di pagamento e diciture fiscali per regime
  • Contratti di sviluppo, NDA e atti di nomina a responsabile (art. 28 GDPR)
  • Fatture di acconto e saldo, e canoni di manutenzione
  • Verbale di recesso con firma di entrambe le parti

Portale clienti

  • Accesso separato dal gestionale, con autenticazione dedicata
  • Documenti firmati e certificati di firma scaricabili
  • Avanzamento del progetto e fase in lavorazione
  • Chat con risposte pronte e diario degli interventi

Automazioni

  • Promemoria di scadenza fattura al cliente, con copia interna
  • Promemoria mensile del canone di manutenzione da emettere
  • Richiesta di recensione alla consegna del progetto
  • Notifiche push sul dispositivo, oltre alla posta

Problemi e soluzioni

La manutenzione finiva dentro l'acconto e il saldo del progetto: su un lavoro da 8.000 euro con dodici canoni da 150, l'acconto usciva da 4.900 invece che da 4.000 — e quei 1.800 euro venivano poi rifatturati una seconda volta con le mensili. Nessun errore, nessuna eccezione: solo un numero sbagliato che nessuno aveva motivo di ricontrollare.

SoluzioneBase imponibile separata in due grandezze distinte, una per le voci una tantum e una per i canoni, ed eliminata la proprieta' che le sommava — così nessuno può riusarla per sbaglio. Il conto è coperto da test che falliscono se qualcuno lo rimette insieme.

Il servizio di firma non ripartiva dopo un riavvio della macchina: mancava la direttiva di restart nella configurazione dei container. Il sintomo era ingannevole — il gestionale rispondeva normalmente, solo la firma dava errore 502.

SoluzioneUn file di override che dichiara il riavvio automatico, separato dalla configurazione originale così sopravvive agli aggiornamenti del progetto a monte. Era un guasto latente: sarebbe capitato al primo riavvio per aggiornamenti, di notte, senza nessuno a guardare.

I backup erano cifrati con una passphrase che esisteva solo dentro la macchina da salvare. Una cassaforte con la combinazione chiusa dentro.

SoluzionePassphrase spostata fuori dal server, e ciclo di ripristino provato davvero invece che dato per buono: decifratura completata e archivio aperto, con database e documenti dentro.

Accesso al progetto

Tecnologie

C#
.NET
ASP.NET Core
Razor Pages
Entity Framework Core
PostgreSQL
Docker
nginx
Linux

Indice

  • Di cosa si tratta
  • Funzionalità principali
  • Problemi e soluzioni
  • Immagini