summaryrefslogtreecommitdiff
path: root/src/reports.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/reports.c')
-rw-r--r--src/reports.c21
1 files changed, 18 insertions, 3 deletions
diff --git a/src/reports.c b/src/reports.c
index 96b1344..981d02c 100644
--- a/src/reports.c
+++ b/src/reports.c
@@ -379,6 +379,18 @@ static int vat_box_payable(const char *box)
#define VAT_MAX_BOXES 64
+/* Vouchers left out of the momsdeklaration: the momsomföring itself (any
+ voucher with a 2650 row moves the period's VAT to the redovisningskonto
+ and would zero the boxes) and a source system's imported "Stäng ..." year
+ closings, which zero the P&L underlag. */
+#define VAT_VOUCHER_SQL \
+ " AND NOT EXISTS (SELECT 1 FROM voucher_rows r2 JOIN accounts a2" \
+ " ON a2.org_id = r2.org_id AND a2.id = r2.account_id" \
+ " WHERE r2.org_id = v.org_id AND r2.voucher_id = v.id" \
+ " AND a2.number = '2650')" \
+ " AND NOT (v.source = 'sie_import'" \
+ " AND COALESCE(v.description,'') LIKE 'Stäng%')"
+
yyjson_mut_val *report_vat(yyjson_mut_doc *doc, sqlite3 *db, int64_t org_id,
const char *from, const char *to, char **err)
{
@@ -418,14 +430,16 @@ yyjson_mut_val *report_vat(yyjson_mut_doc *doc, sqlite3 *db, int64_t org_id,
" JOIN vouchers v ON v.org_id=r.org_id AND v.id=r.voucher_id"
" JOIN accounts a ON a.org_id=r.org_id AND a.id=r.account_id"
" WHERE r.org_id=?1 AND a.number=?2 AND v.series <> 'IB'"
- " AND v.series <> ?5 AND v.date BETWEEN ?3 AND ?4";
+ " AND v.series <> ?5 AND v.date BETWEEN ?3 AND ?4"
+ VAT_VOUCHER_SQL;
else if (strcmp(mt, "type") == 0)
sql = "SELECT COALESCE(SUM(r.debit_ore),0),"
"COALESCE(SUM(r.credit_ore),0) FROM voucher_rows r"
" JOIN vouchers v ON v.org_id=r.org_id AND v.id=r.voucher_id"
" JOIN accounts a ON a.org_id=r.org_id AND a.id=r.account_id"
" WHERE r.org_id=?1 AND a.type=?2 AND v.series <> 'IB'"
- " AND v.series <> ?5 AND v.date BETWEEN ?3 AND ?4";
+ " AND v.series <> ?5 AND v.date BETWEEN ?3 AND ?4"
+ VAT_VOUCHER_SQL;
else
sql = "SELECT COALESCE(SUM(r.debit_ore),0),"
"COALESCE(SUM(r.credit_ore),0) FROM voucher_rows r"
@@ -433,7 +447,8 @@ yyjson_mut_val *report_vat(yyjson_mut_doc *doc, sqlite3 *db, int64_t org_id,
" JOIN accounts a ON a.org_id=r.org_id AND a.id=r.account_id"
" WHERE r.org_id=?1 AND CAST(a.number AS INTEGER) BETWEEN ?2"
" AND ?3 AND v.series <> 'IB' AND v.series <> ?6"
- " AND v.date BETWEEN ?4 AND ?5";
+ " AND v.date BETWEEN ?4 AND ?5"
+ VAT_VOUCHER_SQL;
if (sqlite3_prepare_v2(db, sql, -1, &qs, NULL) != SQLITE_OK)
break;
sqlite3_bind_int64(qs, 1, org_id);