diff --git a/taxes_az/fixtures/tax_article.json b/taxes_az/fixtures/tax_article.json index bc52ef6..22f42cc 100644 --- a/taxes_az/fixtures/tax_article.json +++ b/taxes_az/fixtures/tax_article.json @@ -10,17 +10,6 @@ "old_parent": null, "parent_tax_article": "Verginin hesablanması" }, - { - "article_name": "Vergi Məcəlləsinin 165.5-ci maddəsinə əsasən ƏDV-si qaytarılan malların geri qaytarılması halları üzrə ƏDV-nin hesablanması (NAĞD ödənişlər)", - "declaration": "Declaration of value added tax", - "docstatus": 0, - "doctype": "Tax Article", - "is_group": 0, - "modified": "2025-08-26 20:39:37.642557", - "name": "Vergi Məcəlləsinin 165.5-ci maddəsinə əsasən ƏDV-si qaytarılan malların geri qaytarılması halları üzrə ƏDV-nin hesablanması (NAĞD ödənişlər)", - "old_parent": null, - "parent_tax_article": "Dəqiqləşdirilən vergi" - }, { "article_name": "Vergi Məcəlləsinin 199.4.1-ci maddəsinə əsasən", "declaration": "Property tax return", @@ -527,17 +516,6 @@ "old_parent": null, "parent_tax_article": "ƏDV-yə 0% dərəcə ilə tutulan əməliyyatlar" }, - { - "article_name": "Vergi Məcəlləsinin 165.1.3-cü maddəsinə əsasən aparılan əməliyyatlar", - "declaration": "Declaration of value added tax", - "docstatus": 0, - "doctype": "Tax Article", - "is_group": 0, - "modified": "2025-09-19 16:35:19.690000", - "name": "Vergi Məcəlləsinin 165.1.3-cü maddəsinə əsasən aparılan əməliyyatlar", - "old_parent": null, - "parent_tax_article": "ƏDV-yə 0% dərəcə ilə tutulan əməliyyatlar" - }, { "article_name": "Vergi Məcəlləsinin 165.1.3-cü maddəsinə əsasən malların ixracı üzrə aparılmış əməliyyatlar", "declaration": "Declaration of value added tax", @@ -1319,17 +1297,6 @@ "old_parent": null, "parent_tax_article": "ƏDV-dən azad olunan əməliyyatlar" }, - { - "article_name": "VM 175.1-ci maddəsinə əsasən alınmış elektron qaimə-fakturalar (elektron vergi hesab-fakturalar) üzrə nağdsız qaydada ödənilmiş məbləğ", - "declaration": "Declaration of value added tax", - "docstatus": 0, - "doctype": "Tax Article", - "is_group": 0, - "modified": "2025-09-19 16:35:19.691000", - "name": "VM 175.1-ci maddəsinə əsasən alınmış elektron qaimə-fakturalar (elektron vergi hesab-fakturalar) üzrə nağdsız qaydada ödənilmiş məbləğ", - "old_parent": null, - "parent_tax_article": "Əvəzləşdirilən vergi" - }, { "article_name": "VM 169.4-cü maddəsinə əsasən qeyri-rezidentə ödənilmiş məbləğ", "declaration": "Declaration of value added tax", @@ -1374,28 +1341,6 @@ "old_parent": null, "parent_tax_article": "Əvəzləşdirilən vergi" }, - { - "article_name": "Vergi Məcəlləsinin 165.5-ci maddəsinə əsasən ƏDV-si qaytarılan malların geri qaytarılması halları üzrə ƏDV-nin hesablanması (NAĞD ödənişlər)", - "declaration": "Declaration of value added tax", - "docstatus": 0, - "doctype": "Tax Article", - "is_group": 0, - "modified": "2025-09-19 16:35:19.691000", - "name": "Vergi Məcəlləsinin 165.5-ci maddəsinə əsasən ƏDV-si qaytarılan malların geri qaytarılması halları üzrə ƏDV-nin hesablanması (NAĞD ödənişl...", - "old_parent": null, - "parent_tax_article": "Dəqiqləşdirilən vergi" - }, - { - "article_name": "Vergi Məcəlləsinin 165.5-ci maddəsinə əsasən ƏDV-si qaytarılan malların geri qaytarılması halları üzrə ƏDV-nin hesablanması (NAĞDSIZ ödənişlər)", - "declaration": "Declaration of value added tax", - "docstatus": 0, - "doctype": "Tax Article", - "is_group": 0, - "modified": "2025-09-19 16:35:19.691000", - "name": "Vergi Məcəlləsinin 165.5-ci maddəsinə əsasən ƏDV-si qaytarılan malların geri qaytarılması halları üzrə ƏDV-nin hesablanması (NAĞDSIZ ödən...", - "old_parent": null, - "parent_tax_article": "Dəqiqləşdirilən vergi" - }, { "article_name": "Vergi Məcəlləsinin 165.6-cı maddəsinə əsasən ƏDV-si qaytarılan malların geri qaytarılması halları üzrə ƏDV-nin hesablanması (NAĞDSIZ ödənişlər)", "declaration": "Declaration of value added tax", @@ -2331,28 +2276,6 @@ "old_parent": null, "parent_tax_article": "Əlavə Dəyər Vergisi (ƏDV)" }, - { - "article_name": "301.1 Təqdim edilmiş mallar (işlər, xidmətlər) üzrə ƏDV-yə 18 faiz dərəcə ilə cəlb olunan əməliyyatların məbləği CƏMİ", - "declaration": "Declaration of value added tax", - "docstatus": 0, - "doctype": "Tax Article", - "is_group": 0, - "modified": "2026-06-08 00:00:00.000000", - "name": "301.1 Təqdim edilmiş mallar (işlər, xidmətlər) üzrə ƏDV-yə 18 faiz dərəcə ilə cəlb olunan əməliyyatların məbləği CƏMİ", - "old_parent": null, - "parent_tax_article": "ƏDV tutulan dövriyyə barədə məlumat" - }, - { - "article_name": "301.1.1 Malların təqdim edilməsindən gəlir", - "declaration": "Declaration of value added tax", - "docstatus": 0, - "doctype": "Tax Article", - "is_group": 0, - "modified": "2026-06-08 00:00:00.000000", - "name": "301.1.1 Malların təqdim edilməsindən gəlir", - "old_parent": null, - "parent_tax_article": "ƏDV tutulan dövriyyə barədə məlumat" - }, { "article_name": "301.1.1.1 Girov əmlakların(malların) təqdim edilməsi", "declaration": "Declaration of value added tax", @@ -2507,17 +2430,6 @@ "old_parent": null, "parent_tax_article": "ƏDV tutulan dövriyyə barədə məlumat" }, - { - "article_name": "301.1.2 İşlərin görülməsi və xidmətlərin göstərilməsi üzrə əməliyyatlar", - "declaration": "Declaration of value added tax", - "docstatus": 0, - "doctype": "Tax Article", - "is_group": 0, - "modified": "2026-06-08 00:00:00.000000", - "name": "301.1.2 İşlərin görülməsi və xidmətlərin göstərilməsi üzrə əməliyyatlar", - "old_parent": null, - "parent_tax_article": "ƏDV tutulan dövriyyə barədə məlumat" - }, { "article_name": "301.1.2.1 Daşınan və daşınmaz əmlakın icarəyə verilməsindən gəlirlər", "declaration": "Declaration of value added tax", diff --git a/taxes_az/patches.txt b/taxes_az/patches.txt index a3e0bf7..b80c0ba 100644 --- a/taxes_az/patches.txt +++ b/taxes_az/patches.txt @@ -4,4 +4,5 @@ [post_model_sync] # Patches added in this section will be executed after doctypes are migrated -taxes_az.patches.remove_legacy_mixed_vat_tax_articles \ No newline at end of file +taxes_az.patches.remove_legacy_mixed_vat_tax_articles +taxes_az.patches.remove_aggregate_vat_tax_articles \ No newline at end of file diff --git a/taxes_az/patches/remove_aggregate_vat_tax_articles.py b/taxes_az/patches/remove_aggregate_vat_tax_articles.py new file mode 100644 index 0000000..23cfd89 --- /dev/null +++ b/taxes_az/patches/remove_aggregate_vat_tax_articles.py @@ -0,0 +1,42 @@ +"""Drop the aggregate/total VAT articles from the Tax Article picker. + +These are ФНО summary lines (301.1 CƏMİ, its two subtotals, the umbrella 165.1.3 +article that sits above the goods/services export ones, 308, 319.2, 319.3), not +leaf articles an accountant should be able to pick on an invoice line. They stay +in the declaration form itself, where those rows are filled in by hand. + +Matched on article_name rather than name: Frappe truncates name at 140 chars, so +some of these exist under an ellipsised name — and 165.5 (NAĞD) shipped twice, +once under each spelling. Equality (not LIKE) keeps the 165.1.3 goods/services +siblings and 165.6 alive. + +Runs in post_model_sync, i.e. before fixtures are imported, and the same rows are +gone from tax_article.json — otherwise sync_fixtures would just put them back. +Idempotent: a no-op once they are gone. +""" + +import frappe + +DOOMED = [ + "301.1 Təqdim edilmiş mallar (işlər, xidmətlər) üzrə ƏDV-yə 18 faiz dərəcə ilə cəlb olunan əməliyyatların məbləği CƏMİ", + "301.1.1 Malların təqdim edilməsindən gəlir", + "301.1.2 İşlərin görülməsi və xidmətlərin göstərilməsi üzrə əməliyyatlar", + "Vergi Məcəlləsinin 165.1.3-cü maddəsinə əsasən aparılan əməliyyatlar", + "VM 175.1-ci maddəsinə əsasən alınmış elektron qaimə-fakturalar (elektron vergi hesab-fakturalar) üzrə nağdsız qaydada ödənilmiş məbləğ", + "Vergi Məcəlləsinin 165.5-ci maddəsinə əsasən ƏDV-si qaytarılan malların geri qaytarılması halları üzrə ƏDV-nin hesablanması (NAĞD ödənişlər)", + "Vergi Məcəlləsinin 165.5-ci maddəsinə əsasən ƏDV-si qaytarılan malların geri qaytarılması halları üzrə ƏDV-nin hesablanması (NAĞDSIZ ödənişlər)", +] + + +def execute(): + if not frappe.db.exists("DocType", "Tax Article"): + return + + names = frappe.get_all( + "Tax Article", + filters={"article_name": ("in", DOOMED), "is_group": 0}, + pluck="name", + ) + + for name in names: + frappe.delete_doc("Tax Article", name, force=1, ignore_permissions=True) diff --git a/taxes_az/taxes_az/report/tax_articles_revenue_report/tax_articles_revenue_report.py b/taxes_az/taxes_az/report/tax_articles_revenue_report/tax_articles_revenue_report.py index 9d83709..33acd31 100644 --- a/taxes_az/taxes_az/report/tax_articles_revenue_report/tax_articles_revenue_report.py +++ b/taxes_az/taxes_az/report/tax_articles_revenue_report/tax_articles_revenue_report.py @@ -128,7 +128,6 @@ def get_tax_articles_mapping(): # 165.1.x статьи "Vergi Məcəlləsinin 165.1.1-ci maddəsinə əsasən aparılan əməliyyatlar": "vm_165_1_1", "Vergi Məcəlləsinin 165.1.2-ci maddəsinə əsasən aparılan əməliyyatlar": "vm_165_1_2", - "Vergi Məcəlləsinin 165.1.3-cü maddəsinə əsasən aparılan əməliyyatlar": "vm_165_1_3", "Vergi Məcəlləsinin 165.1.3-cü maddəsinə əsasən malların ixracı üzrə aparılmış əməliyyatlar": "vm_165_1_3_mal", "Vergi Məcəlləsinin 165.1.3-cü maddəsinə əsasən bu Məcəllənin 168.1.5-ci maddəsində göstərilmiş xidmətlərin ixracı üzrə aparılmış əməliyyatlar": "vm_165_1_3_xid", "Vergi Məcəlləsinin 165.1.4-cü maddəsinə əsasən aparılan əməliyyatlar": "vm_165_1_4", @@ -212,7 +211,6 @@ def get_field_to_label_mapping(): # 165.1.x статьи "vm_165_1_1": "VM 165.1.1", "vm_165_1_2": "VM 165.1.2", - "vm_165_1_3": "VM 165.1.3", "vm_165_1_3_mal": "VM 165.1.3 Mal", "vm_165_1_3_xid": "VM 165.1.3 Xid", "vm_165_1_4": "VM 165.1.4", diff --git a/taxes_az/taxes_az/report/vat_allocation_tax_articles_report/vat_allocation_tax_articles_report.py b/taxes_az/taxes_az/report/vat_allocation_tax_articles_report/vat_allocation_tax_articles_report.py index dd5a027..74bcd4e 100644 --- a/taxes_az/taxes_az/report/vat_allocation_tax_articles_report/vat_allocation_tax_articles_report.py +++ b/taxes_az/taxes_az/report/vat_allocation_tax_articles_report/vat_allocation_tax_articles_report.py @@ -152,7 +152,6 @@ def get_tax_articles_mapping(): # 165.1.x статьи "Vergi Məcəlləsinin 165.1.1-ci maddəsinə əsasən aparılan əməliyyatlar": "vm_165_1_1", "Vergi Məcəlləsinin 165.1.2-ci maddəsinə əsasən aparılan əməliyyatlar": "vm_165_1_2", - "Vergi Məcəlləsinin 165.1.3-cü maddəsinə əsasən aparılan əməliyyatlar": "vm_165_1_3", "Vergi Məcəlləsinin 165.1.3-cü maddəsinə əsasən malların ixracı üzrə aparılmış əməliyyatlar": "vm_165_1_3_mal", "Vergi Məcəlləsinin 165.1.3-cü maddəsinə əsasən bu Məcəllənin 168.1.5-ci maddəsində göstərilmiş xidmətlərin ixracı üzrə aparılmış əməliyyatlar": "vm_165_1_3_xid", "Vergi Məcəlləsinin 165.1.4-cü maddəsinə əsasən aparılan əməliyyatlar": "vm_165_1_4", @@ -228,8 +227,6 @@ def get_tax_articles_mapping(): "303.42 Azərbaycan Respublikasının tərəfdar çıxdığı beynəlxalq müqavilələr üzrə": "vm_303_42", "303.53 Xüsusi iqtisadi zonalar haqqında qanunlar çərçivəsində aparılan əməliyyatlar": "vm_303_53", # --- 301.x новые статьи (ƏDV tutulan dövriyyə barədə məlumat, Əlavə 3) --- - "301.1 Təqdim edilmiş mallar (işlər, xidmətlər) üzrə ƏDV-yə 18 faiz dərəcə ilə cəlb olunan əməliyyatların məbləği CƏMİ": "vm_301_1_cemi", - "301.1.1 Malların təqdim edilməsindən gəlir": "vm_301_1_1", "301.1.1.1 Girov əmlakların(malların) təqdim edilməsi": "vm_301_1_1_1", "301.1.1.2 Əmək haqqının əvəzınə təqdim edilmiş mallar": "vm_301_1_1_2", "301.1.1.3 Agent vasitəsi ilə təqdim edilmiş mallar üzrə gəlirlər": "vm_301_1_1_3", @@ -244,7 +241,6 @@ def get_tax_articles_mapping(): "301.1.1.12 Malların təqdim edilməsi üzrə yaranan debitor borclar üzrə iddia müddətinin bitməsi": "vm_301_1_1_12", "301.1.1.13 Qarşılıqlı hesablaşmalar aparıldıqda öhdəliyin ləğv edilməsi və ya ödənilməsi": "vm_301_1_1_13", "301.1.1.14 Tələb hüququ güzəşt edildikdə – güzəşt edilən məbləğ": "vm_301_1_1_14", - "301.1.2 İşlərin görülməsi və xidmətlərin göstərilməsi üzrə əməliyyatlar": "vm_301_1_2", "301.1.2.1 Daşınan və daşınmaz əmlakın icarəyə verilməsindən gəlirlər": "vm_301_1_2_1", "301.1.2.2 Əmək haqqının əvəzinə işlərin görülməsi və xidmətlərin göstərilməsi üzrə əməliyyatlar": "vm_301_1_2_2", "301.1.2.3 Müstəqil ƏDV ödəyicisi olan struktur bölmələri arasında işlərin görülməsi və xidmətlərin göstərilməsi üzrə əməliyyatlar": "vm_301_1_2_3", @@ -283,7 +279,6 @@ def get_field_to_label_mapping(): # 165.1.x статьи "vm_165_1_1": "VM 165.1.1", "vm_165_1_2": "VM 165.1.2", - "vm_165_1_3": "VM 165.1.3", "vm_165_1_3_mal": "VM 165.1.3 Mal", "vm_165_1_3_xid": "VM 165.1.3 Xid", "vm_165_1_4": "VM 165.1.4", @@ -359,8 +354,6 @@ def get_field_to_label_mapping(): "vm_303_42": "303.42", "vm_303_53": "303.53", # --- 301.x новые статьи --- - "vm_301_1_cemi": "301.1", - "vm_301_1_1": "301.1.1", "vm_301_1_1_1": "301.1.1.1", "vm_301_1_1_2": "301.1.1.2", "vm_301_1_1_3": "301.1.1.3", @@ -375,7 +368,6 @@ def get_field_to_label_mapping(): "vm_301_1_1_12": "301.1.1.12", "vm_301_1_1_13": "301.1.1.13", "vm_301_1_1_14": "301.1.1.14", - "vm_301_1_2": "301.1.2", "vm_301_1_2_1": "301.1.2.1", "vm_301_1_2_2": "301.1.2.2", "vm_301_1_2_3": "301.1.2.3",