Ciao charlie
charlie ha scritto:entrambe i motori sono HSQLDB, versione 1.8 quello incorporato in Base, 2.3.2 l'altro.
Mea culpa, aprendo il database con il motore interno leggo solo HSQL e non la versione quindi per mia (ripeto mia) errata convinzione ritenevo il motore interno
"HSQL" e il mootore esterno "HSQLDB"
charlie ha scritto:non mi pare tu mi abbia risposto: adottando 5 cifre decimali dopo la virgola, il problema dello scorporo dell'IVA si risolve, secondo le mie prove.
ti ho risposto eccome!!! forse poco chiaramente ma ti ho risposto:
bydindi ha scritto:se calcolo l'iva su un imponibile di 12,30 il risultato è 2,71 in quanto il prodotto del calcolo 12,30*0,22 mi dà 2,706 che arrotondato sarà 2,71
ma tu nella tua immagine d'esempio mi indichi un calcolo sbagliato!!!
infatti partendo da un imponibile di 12,30 (quello che tu chiami iva) nel tuo esempio compare come importo "ivato" 15,00 che appunto è un errore!
se aggiungo l'iva ad un imponibile di 12,30 il totale deve essere 15,01 altrimenti stai "rubando" € 0,01 all'erario! perchè l'iva di 12,30 è 2,71!
infatti se imposti 5 decimali l'approssimazione non è corretta e il calcolo errato è presente anche nel motore incorporato (invece è corretto se imposto 2 cifre decimali)
facendo diverse prove (ma aimè non mi ritrovo più il file) ero riuscito comunque a fare l'approssimazione anche con HSQLDB 2.3.2.
(utilizzando nella query la funzione "round") purtroppo però era un'approssimazione errata, infatti impostando un imponibile di 12,30 mi dava come risultato un iva di 2,71
continuando le prove però mi sono accorto che la regola adottata per l'approssimazione era diversa da quella "richiesta" dall'agenzia delle entrate nell'ambito iva
infatti l' ADE richiede questo tipo di approssimazione:
Partendo dal presupposto che l'iva và rappresentata con un numero comprensivo di due cifre decimali
applicando l'aliquota IVA ad un determinato importo se il risultato dà un numero decimale di più di due cifre si procede in questo modo:
prendendo in considerazione la terza cifra decimale se questa è pari o inferiore a 4 ( e quindi vale per le cifre 0,1,2,3,4) la seconda cifra decimale rimane invariata
ad esempio un importo iva di 3,564 diventa 3,56 (approsimazione per difetto)
se la terza cifra decimale è una cifra superiore a 4 (e quindi le cifre 5,6,7,8,9) la seconda cifra decimale va approssimata alla cifra superiore
ad esempio un importo di 2,706 diventa 2,71(approssimazione per eccesso)
invece HSQLDB adotta come regola la seguente:
se la terza cifra è 0,1,2,3,4 e 5 si approssima per difetto e per le restanti cifre 6,7,8,9 si approssima per eccesso
infatti un importo di 2,3452 (che "sarebbe" l'iva di 10,66) viene arrotondato a 2,34 (e in ambito IVA non è corretto)
nell'esempio che allego se analizzi la query noterai che
lo stesso calcolo viene eseguito sia su un numero decimale a due cifre sia su un numero a 5 decimali
e il risultato è diverso (è "buono" quello con il decimale a due cifre)
La stessa prova fatta su HSQLDB "splittato" da risultati differenti e non congrui per il calcolo di imponibile e iva partendo da un importo TOTALE (imponibile+iva)
con la versione "split" utilizzando un database già esistente, invece il calcolo effettuato dalle query e "corretto", il mio dubbio (il dubbio che ho esposto nel forum inglese)
sull'utilizzo del "database splittato già esistente" era solo se vi erano differenze tra le due versioni di HSQLDB (quella suggerita da te partendo da un database exnovo è (dovrebbe essere) più recente e magari con correzioni di bug presenti nella versione precedente )