Un tentativo di gestionale "local-first" per la Medicina del Lavoro. Formattazione dati compatibile per l'invio degli Allegati 3B all' INAIL con standardizzazione della cartella sanitaria digitale (Allegato 3A).
Software in stato PRE-ALPHA. L'architettura è soggetta a modifiche radicali. Utilizzare esclusivamente per test e ricerca.
Definizione dello schema relazionale per l'archiviazione conforme agli Allegati 3A e 3B. Gestione automatizzata di Unità Produttive e Codici ATECO.
// data/database.dart
@DataClassName('Azienda')
class Aziende extends Table {
IntColumn get id => integer().autoIncrement()();
TextColumn get ragioneSociale => text()();
TextColumn get codiceAteco => text()();
// Dati occupazionali aggregati (3B)
IntColumn get occupati3112Maschi => integer().withDefault(const Constant(0))();
IntColumn get occupati3112Femmine => integer().withDefault(const Constant(0))();
}
Centralizzazione dei dati del Medico Competente e gestione degli asset per la firma digitale nei PDF dei Giudizi di Idoneità.
// config_medico.dart
class ConfigMedico {
static const String nome = "NOME";
static const String codiceFiscale = "CFMEDICO12345678";
static const String email = "medico@competente.it";
// Asset firma per export PDF
static const String pathFirma = "assets/images/firma.png";
}
Tracking completo dei rischi (MMC, VDT, Rumore) e dei dati clinici necessari per la generazione automatica dell'Allegato 3A.
// data/database.dart (Table: Visite)
@DataClassName('Visita')
class Visite extends Table {
IntColumn get lavoratoreId => integer().references(Lavoratori, #id)();
DateTimeColumn get dataVisita => dateTime()();
// ALLEGATO 3B - Rischi per Aggregazione
BoolColumn get rMmc => boolean().withDefault(const Constant(false))();
BoolColumn get rRumore => boolean().withDefault(const Constant(false))();
IntColumn get giudizioIdoneita => integer()();
}
Motore di conversione per la generazione del file XML Allegato 3B. Trasformazione dei dati aggregati nel formato conforme alle specifiche tecniche INAIL.
// data/convertitore_xml_3b.dart
String generaXmlInail(Map<String, dynamic> dati) {
final builder = XmlBuilder();
builder.processing('xml', 'version="1.0" encoding="UTF-8"');
builder.element('ComunicazioneAllegato3B', nest: () {
builder.element('AnnoRiferimento', nest: dati['anno'].toString());
final Azienda az = dati['azienda'];
builder.element('DatiAzienda', nest: az.ragioneSociale);
});
return builder.buildDocument().toString();
}