QBGest

QBGest è un software open source pensato per la gestione della contabilità di una piccola azienda, prende spunto dai software Odoo ed Esatto coniugando quelli che sono a mio avviso i loro punti di forza. Come dice il suo stesso nome QB="Quanto Basta" il software è di impronta minimalista ed essenziale, ma fa comunque tutto quello che serve. Viene utilizzato ormai da un anno per gestire la contabilità di una piccola azienda e ha raggiunto un buon grado di maturità. Ho ritenuto quindi opportuno condividere con la comunità open source sia il software, che le nozioni che ho appreso/sviluppato nella speranza che possa essere di aiuto per qualcuno.

QBGest è di tipo web based quindi utilizzabile con un normale browser web, è scritto in Python e utilizza il framework Flask e il database PostgreSQL.

QBGest gestisce tutte le funzionalità basilari che ci si può aspettare da un software per la contabilità italiana, offre inoltre una gestione documentale, permette l'importazione automatica dell'estratto conto bancario, gestisce la riconciliazione dei movimenti bancari con i relativi documenti di competenza, gestisce la ricezione e l'invio delle fatture elettroniche con il sistema di interscambio mediante pec.

L'impostazione non è classica ma a oggetti, non esistono quindi le Causali ma esistono le Registrazioni e viene sfruttata l'ipertestualità per la navigazione nel database. La contabilità viene quindi tenuta mediante l'utilizzo di opportuni registri che contengono le registrazioni che a loro volta, se validate, generano in automatico le scritture contabili. Le registrazioni possono essere riconciliate e sul meccanismo della riconciliazone si base tutta la logica di funzionamento, rendendo superfluo l'utilizzo delle scritture di prima nota, se non per casi particolari. Un esempio classico di riconciliazione si ha quando una fattura emessa viene segnata come pagata riconciliandola con il relativo movimento risultante dall'importazione dell'estratto conto dalla banca.

Le registrazioni possono essere annullate, e tornare quindi in fase di bozza per essere editate, o possono essere eliminate definitivamente (per esempio se si è fatto un errore). In ogni caso il database rimane sempre autoconsistente essendo il software in grado di gestire in automatico l'annullamento di tutte le registrazioni correlate.

Altra caratteristica è la capacità di gestire in automatico e con semplicità la numerazione delle registrazioni, senza vincoli troppo rigidi, ma garantendo comunque la corretta numerazione.

Qui si trova una DEMO (user demo passwd demo) dove è possibile testare il software. Il database viene resettato ogni notte per cui tutte le operazioni registrate vengono perse.

Tutorial

Panoramica

Registrazione di una fattura fornitore

Registrazione di una fattura fornitore in reverse charge

Registrazione di una fattura fornitore con ritenuta d'acconto

Emissione di una fattura cliente

importazione dell'estratto conto bancario e riconciliazione dei movimenti bancari

estratto_conto.qif.txt

Modifica di una registrazione già validata

Registrazione della liquidazione IVA

Generazione delle stampe

Navigazione

Nozioni di base

Esistono solo 4 tipologie di registro con le quali è possibile gestire in maniera armonica e autoconsistente tutta la logica di funzionamento.

Registro di tipo Fattura

Con questo registro si gestiscono le fatture clienti e fornitore, le note di credito e le autofatture per il reverse charge.

Registro di tipo Cassa

Con questo registro si gestiscono i conti correnti bancari e la cassa.

Registro di tipo Ricevuta

Con questo registro si gestiscono i debiti e i crediti verso terzi.

Registro di tipo IVA

Con questo registro si gestisce la liquidazione dell'IVA.

Registro di tipo Generico

Questa è la tipologia più semplice che permette di fare direttamente le scritture di prima nota.

Le registrazioni una volta validate oltre a generare le scritture contabili possono generare altre registrazioni. Una registrazione validata può essere sempre annullata tornando in fase di bozza, in questo caso le registrazioni che erano state generate a seguito della validazione vengono automaticamente annullate. Per esempio una registrazione di tipo fattura fornitore emessa in reverse charge genererà in automatico una autofattura reverse charge e una riconciliazione reverse charge con tutte le relative scritture contabili, più avanti dettaglierò meglio questo esempio.

Rappresentazione grafica Fattura Cliente

fattura_cliente

Lo schema sopra riporta il processo di emissione di una fattura verso un cliente e il successivo incasso della stessa. I riquadri ellittici rappresentano i conti (giallo conto economico, azzurro conto patrimoniale) mentre i riquadri rettangolari rappresentano le registrazioni (arancione fattura, verde cassa). Le frecce che uniscono gli oggetti rappresentano lo spostamento di valuta da un conto ad un altro e passano attraverso la registrazione che di fatto è l'oggetto logico che le genera. Possiamo vedere che la registrazione fattura genera 3 spostamenti di valuta, due prelievi dai conti ricavi e iva vendite e un versamento nel conto Clienti. Ovviamente la somma dei prelievi deve essere uguale al versamento, ovvero la registrazione deve essere Quadrata. Nella nomenclatura classica dei ragionieri e dei commercialisti il prelievo qui descritto corrisponde al movimento in Avere mentre il versamento corrisponde al movimento in Dare. Nella tabella di seguito vengono riportate le registrazioni contabili generate dalla fattura appena descrita,

ContoDareAvere
Clienti1.220,000,00
Ricavi0,001000,00
Iva vendite0,00220,00
Totale1.220,001.220,00


La registrazione cassa, conseguente all'incasso del pagamento della fattura, genera 2 spostamenti di valuta, un prelievo dal conto Clienti ed un versamento nel conto Banca, chiudendo il giro.

Rappresentazione grafica Fattura Cliente Split Payment

fattura_cliente_sp

In questo esempio si vede il caso in cui una registrazione (Fattura cliente) ne genera un'altra (Split payment, di tipo generico, colore viola). Graficamente la generazione viene indicata con una freccia che collega la registrazione padre alla registrazione figlio.

Rappresentazione grafica Fattura Fornitore

fattura_fornitore

Rappresentazione grafica Fattura Fornitore Reverse Charge

fattura_fornitore_rc

Si noti in questo caso l'utilizzo di un conto di tipo transitorio (colore grigio). In caso di annullamento della Fattura anche le registrazioni generate, ovvero la Riconciliazione RC (tipo generico) e l'Autofattura RC (tipo fattura) verranno annullate automaticamente. Da notare che tutte le registrazioni, e non solo le fatture, hanno una numerazione propria. In caso di anullamento di una registrazione resta quindi un buco nella numerazione. La logica di assegnazione della numerazione per tutte le registrazioni è quella della prima posizione disponibile, quindi se c'è un buco verrà occupato quello. Ciò porta al risultato che se annullo una registrazione, la modifico, e poi la rivalido allora sia la registrazione madre che le figlie otterranno lo stesso numero che avevano prima di esser annullate.

Rappresentazione grafica Fattura Fornitore con Ritenuta d'Acconto

fattura_fornitore_ra

La riconciliazione delle registrazioni

In generale per segnare una fattura come pagata questa va in qualche modo associata con il suo pagamento. In QBGest le registrazioni di tipo cassa e generico (le registrazioni di tipo IVA meritano un discorso a parte) possono essere associate o in altri termini riconciliate con le registrazioni di tipo fattura o ricevuta. Non ci sono vincoli sulle combinazioni possibili e in questo modo è possibile gestire senza problemi anche pagamenti parziali (una fattura pagata in più bonifici), pagamenti cumultivi (un bonifico per saldare diverse fatture) oppure situazioni miste. Ogni registrazione visualizzerà con quale/quali altre registrazioni è stata riconciliata e risulterà quindi molto comodo risalire a come per esempio è stato fatto un pagamento. Da notare che questo meccanismo non si applica solo per i pagamenti delle fatture ma per tutti i casi in cui è necessario tenere traccia dei crediti e dei debiti, un altro esempio sono le ritenute d'acconto, come verrà mostrato nel tutorial.

Il modello scelto è molto semplice e molto potente ma ha qualche limitazione: non è possibile riconciliare direttamente una registrazione di tipo fattura/ricevuta con un'altra registrazione di tipo fattura/ricevuta (per esempio fattura e nota di credito che la annulla) e neanche registrazione di tipo cassa con registrazione di tipo cassa (per esempio il trasferimento di valuta da una banca ad un'altra). In realtà la soluzione è molto semplice, per riconciliare una fattura con una nota di credito basta creare una registrazione di tipo generico e riconciliare lì entrambi i documenti. Per il trasferimento di valuta da una banca ad un'altra basterà invece appoggiarsi semplicemente ad un conto di transito.

Un'ultima nota sulle riconciliazioni: anche qui si applica il principio dell'autoconsistenza del database. Se annullo una registrazione che è coinvolta in una riconciliazione allora anche la riconciliazione verrà annullata insieme alle altre registrazioni eventualmente correlate. Le registrazioni eventualmente annullate vengono comunque elencate a video in modo che ci si possa rendere conto di cosa si sta facendo. Un caso tipico è quello di una fattura già pagata che devo annullare perchè mi sono reso conto di un errore per esempio nel conto utilizzato e che devo quindi andare a correggere. Nel momento in cui annullo la fattura si annullerà automaticamente (o meglio tornerà in fase di bozza) anche il pagamento, ovvero la registrazione di tipo cassa con cui avevo segnato la fattura come pagata. Per ripristinare il tutto basterà quindi correggere la fattura, validarla, e poi rivalidare il pagamento che era tornato bozza. In realtà è più semplice a farsi che a dirsi.

Installazione

Questo è il codice sorgente QBGest.zip, potete contattarmi per aiuto o richieste di informazioni.