feat: add Tax Free tab to Salary Slip with Tax Free Indicator DocType

Adds a Tax Free tab to Salary Slip with 4 nested sub-tabs (Vergi, MDSS,
İşsizlik sığorta, İcbari Tibbi Sığorta) rendered via the custom_subtabs
app. Each sub-tab has a Göstəricilər (Link to Tax Free Indicator, filtered
by group) and an Amount (Currency) field arranged in two columns.

Introduces a new Tax Free Indicator tree DocType mirroring the tax_article
pattern from taxes_az, seeded via fixtures with 74 indicators scraped from
the e-taxes.gov.az unified declaration (32 Vergi + 30 MDSS + 5 İşsizlik
+ 7 İcbari Tibbi Sığorta) grouped under 4 roots.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
Ali 2026-04-14 11:06:04 +00:00
parent 72f9973000
commit cf4d66c2d2
8 changed files with 1108 additions and 1 deletions

View File

@ -1632,6 +1632,139 @@ def create_custom_fields():
reqd=0
),
],
"Salary Slip": [
dict(
fieldname='custom_tax_free_tab',
label='Tax Free',
fieldtype='Tab Break',
# Effective last field in meta is `leave_details` inside the
# Leaves tab (hrms reorders tabs via insert_after — raw JSON
# position is misleading). Anchoring here puts Tax Free at the
# very end of the document.
insert_after='leave_details'
),
# Real .frappe-control inside Tax Free so the tab isn't auto-hidden.
# Frappe (tab.js / layout.js refresh_sections) marks any section with
# zero frappe-controls as 'empty-section', and then hides any tab
# whose sections are all empty. A Section Break alone is not enough —
# an actual field element is required. HTML field is the cheapest
# no-UI-impact option that counts as a real control.
dict(
fieldname='custom_tax_free_placeholder',
fieldtype='HTML',
options='',
insert_after='custom_tax_free_tab'
),
# === Subtab 1: Vergi ===
dict(
fieldname='custom_vergi_tab',
label='Vergi',
fieldtype='Tab Break',
insert_after='custom_tax_free_placeholder'
),
dict(
fieldname='custom_vergi_indicator',
label='Göstəricilər',
fieldtype='Link',
options='Tax Free Indicator',
link_filters='[["Tax Free Indicator","parent_tax_free_indicator","=","Vergi tutulmayan gəlirlər"],["Tax Free Indicator","is_group","=",0]]',
insert_after='custom_vergi_tab'
),
dict(
fieldname='custom_vergi_column_break',
fieldtype='Column Break',
insert_after='custom_vergi_indicator'
),
dict(
fieldname='custom_vergi_amount',
label='Amount',
fieldtype='Currency',
insert_after='custom_vergi_column_break'
),
# === Subtab 2: MDSS ===
dict(
fieldname='custom_mdss_tab',
label='MDSS',
fieldtype='Tab Break',
insert_after='custom_vergi_amount'
),
dict(
fieldname='custom_mdss_indicator',
label='Göstəricilər',
fieldtype='Link',
options='Tax Free Indicator',
link_filters='[["Tax Free Indicator","parent_tax_free_indicator","=","MDSS cəlb olunmayan gəlirlər"],["Tax Free Indicator","is_group","=",0]]',
insert_after='custom_mdss_tab'
),
dict(
fieldname='custom_mdss_column_break',
fieldtype='Column Break',
insert_after='custom_mdss_indicator'
),
dict(
fieldname='custom_mdss_amount',
label='Amount',
fieldtype='Currency',
insert_after='custom_mdss_column_break'
),
# === Subtab 3: İşsizlik sığorta ===
dict(
fieldname='custom_unemployment_insurance_tab',
label='İşsizlik sığorta',
fieldtype='Tab Break',
insert_after='custom_mdss_amount'
),
dict(
fieldname='custom_unemployment_insurance_indicator',
label='Göstəricilər',
fieldtype='Link',
options='Tax Free Indicator',
link_filters='[["Tax Free Indicator","parent_tax_free_indicator","=","İşsizlikdən sığorta haqqına cəlb olunmayan gəlirlər"],["Tax Free Indicator","is_group","=",0]]',
insert_after='custom_unemployment_insurance_tab'
),
dict(
fieldname='custom_unemployment_insurance_column_break',
fieldtype='Column Break',
insert_after='custom_unemployment_insurance_indicator'
),
dict(
fieldname='custom_unemployment_insurance_amount',
label='Amount',
fieldtype='Currency',
insert_after='custom_unemployment_insurance_column_break'
),
# === Subtab 4: İcbari Tibbi Sığorta ===
dict(
fieldname='custom_medical_insurance_tab',
label='İcbari Tibbi Sığorta',
fieldtype='Tab Break',
insert_after='custom_unemployment_insurance_amount'
),
dict(
fieldname='custom_medical_insurance_indicator',
label='Göstəricilər',
fieldtype='Link',
options='Tax Free Indicator',
link_filters='[["Tax Free Indicator","parent_tax_free_indicator","=","İcbari tibbi sığorta haqqına cəlb olunmayan gəlirlər"],["Tax Free Indicator","is_group","=",0]]',
insert_after='custom_medical_insurance_tab'
),
dict(
fieldname='custom_medical_insurance_column_break',
fieldtype='Column Break',
insert_after='custom_medical_insurance_indicator'
),
dict(
fieldname='custom_medical_insurance_amount',
label='Amount',
fieldtype='Currency',
insert_after='custom_medical_insurance_column_break'
),
],
}
# Rename: remove old Cyrillic-prefixed field if it still exists
@ -1668,6 +1801,49 @@ def create_custom_fields():
except Exception as e:
print(f"Failed to create field {field['fieldname']} in {doctype}: {e}")
# === Sub-tab wiring for Salary Slip via custom_subtabs ===
# The custom_subtabs app reads `js_parent_subtab` on Tab Break fields in meta.
# That property only lives on DocField (added by the app's patch). Custom Fields
# drop unknown keys on save, so we set it through Property Setters — Frappe
# applies them to Custom Field rows in meta by matching fieldname.
from frappe.custom.doctype.property_setter.property_setter import make_property_setter
salary_slip_subtabs = {
"custom_vergi_tab": "Tax Free",
"custom_mdss_tab": "Tax Free",
"custom_unemployment_insurance_tab": "Tax Free",
"custom_medical_insurance_tab": "Tax Free",
}
frappe.clear_cache(doctype="Salary Slip")
for fn, parent_label in salary_slip_subtabs.items():
existing = frappe.db.get_value(
"Property Setter",
{
"doc_type": "Salary Slip",
"field_name": fn,
"property": "js_parent_subtab",
},
"name",
)
if existing:
try:
frappe.delete_doc("Property Setter", existing, force=True)
except Exception as e:
print(f"Failed to delete old js_parent_subtab PS for {fn}: {e}")
try:
make_property_setter(
"Salary Slip",
fn,
"js_parent_subtab",
parent_label,
"Data",
validate_fields_for_doctype=False,
)
print(f"Set js_parent_subtab={parent_label} on Salary Slip.{fn}")
except Exception as e:
print(f"Failed to set js_parent_subtab on {fn}: {e}")
frappe.clear_cache(doctype="Salary Slip")
# Коммит всех изменений
frappe.db.commit()
print("Setting up VAT calculation hooks...")

View File

@ -0,0 +1,704 @@
[
{
"docstatus": 0,
"doctype": "Tax Free Indicator",
"indicator_name": "Vergi tutulmayan gəlirlər",
"is_group": 1,
"name": "Vergi tutulmayan gəlirlər",
"old_parent": null,
"parent_tax_free_indicator": null
},
{
"docstatus": 0,
"doctype": "Tax Free Indicator",
"indicator_name": "MDSS cəlb olunmayan gəlirlər",
"is_group": 1,
"name": "MDSS cəlb olunmayan gəlirlər",
"old_parent": null,
"parent_tax_free_indicator": null
},
{
"docstatus": 0,
"doctype": "Tax Free Indicator",
"indicator_name": "İşsizlikdən sığorta haqqına cəlb olunmayan gəlirlər",
"is_group": 1,
"name": "İşsizlikdən sığorta haqqına cəlb olunmayan gəlirlər",
"old_parent": null,
"parent_tax_free_indicator": null
},
{
"docstatus": 0,
"doctype": "Tax Free Indicator",
"indicator_name": "İcbari tibbi sığorta haqqına cəlb olunmayan gəlirlər",
"is_group": 1,
"name": "İcbari tibbi sığorta haqqına cəlb olunmayan gəlirlər",
"old_parent": null,
"parent_tax_free_indicator": null
},
{
"docstatus": 0,
"doctype": "Tax Free Indicator",
"indicator_name": "4.1 Vergi Məcəlləsinin 98.5-ci maddəsi üzrə",
"is_group": 0,
"name": "4.1 Vergi Məcəlləsinin 98.5-ci maddəsi üzrə",
"old_parent": null,
"parent_tax_free_indicator": "Vergi tutulmayan gəlirlər"
},
{
"docstatus": 0,
"doctype": "Tax Free Indicator",
"indicator_name": "4.2.1 VM-nin 102.1.1-ci maddəsi",
"is_group": 0,
"name": "4.2.1 VM-nin 102.1.1-ci maddəsi",
"old_parent": null,
"parent_tax_free_indicator": "Vergi tutulmayan gəlirlər"
},
{
"docstatus": 0,
"doctype": "Tax Free Indicator",
"indicator_name": "4.2.2 VM-nin 102.1.2-ci maddəsi",
"is_group": 0,
"name": "4.2.2 VM-nin 102.1.2-ci maddəsi",
"old_parent": null,
"parent_tax_free_indicator": "Vergi tutulmayan gəlirlər"
},
{
"docstatus": 0,
"doctype": "Tax Free Indicator",
"indicator_name": "4.2.3 VM-nin 102.1.3.1-ci maddəsi",
"is_group": 0,
"name": "4.2.3 VM-nin 102.1.3.1-ci maddəsi",
"old_parent": null,
"parent_tax_free_indicator": "Vergi tutulmayan gəlirlər"
},
{
"docstatus": 0,
"doctype": "Tax Free Indicator",
"indicator_name": "4.2.4 VM-nin 102.1.4-cü maddəsi",
"is_group": 0,
"name": "4.2.4 VM-nin 102.1.4-cü maddəsi",
"old_parent": null,
"parent_tax_free_indicator": "Vergi tutulmayan gəlirlər"
},
{
"docstatus": 0,
"doctype": "Tax Free Indicator",
"indicator_name": "4.2.5 VM-nin 102.1.6-cı maddəsi",
"is_group": 0,
"name": "4.2.5 VM-nin 102.1.6-cı maddəsi",
"old_parent": null,
"parent_tax_free_indicator": "Vergi tutulmayan gəlirlər"
},
{
"docstatus": 0,
"doctype": "Tax Free Indicator",
"indicator_name": "4.2.6 VM-nin 102.1.8-ci maddəsi",
"is_group": 0,
"name": "4.2.6 VM-nin 102.1.8-ci maddəsi",
"old_parent": null,
"parent_tax_free_indicator": "Vergi tutulmayan gəlirlər"
},
{
"docstatus": 0,
"doctype": "Tax Free Indicator",
"indicator_name": "4.2.7.1 VM-nin 102.1.14.1-ci maddəsi",
"is_group": 0,
"name": "4.2.7.1 VM-nin 102.1.14.1-ci maddəsi",
"old_parent": null,
"parent_tax_free_indicator": "Vergi tutulmayan gəlirlər"
},
{
"docstatus": 0,
"doctype": "Tax Free Indicator",
"indicator_name": "4.2.7.2 VM-nin 102.1.14.4-cü maddəsi",
"is_group": 0,
"name": "4.2.7.2 VM-nin 102.1.14.4-cü maddəsi",
"old_parent": null,
"parent_tax_free_indicator": "Vergi tutulmayan gəlirlər"
},
{
"docstatus": 0,
"doctype": "Tax Free Indicator",
"indicator_name": "4.2.7.3 VM-nin 102.1.14.5-ci maddəsi",
"is_group": 0,
"name": "4.2.7.3 VM-nin 102.1.14.5-ci maddəsi",
"old_parent": null,
"parent_tax_free_indicator": "Vergi tutulmayan gəlirlər"
},
{
"docstatus": 0,
"doctype": "Tax Free Indicator",
"indicator_name": "4.2.7.4 VM-nin 102.1.14.6-cı maddəsi",
"is_group": 0,
"name": "4.2.7.4 VM-nin 102.1.14.6-cı maddəsi",
"old_parent": null,
"parent_tax_free_indicator": "Vergi tutulmayan gəlirlər"
},
{
"docstatus": 0,
"doctype": "Tax Free Indicator",
"indicator_name": "4.2.7.5 VM-nin 102.1.14.13-cü maddəsi",
"is_group": 0,
"name": "4.2.7.5 VM-nin 102.1.14.13-cü maddəsi",
"old_parent": null,
"parent_tax_free_indicator": "Vergi tutulmayan gəlirlər"
},
{
"docstatus": 0,
"doctype": "Tax Free Indicator",
"indicator_name": "4.2.7.6 VM-nin 102.1.14.15-ci maddəsi",
"is_group": 0,
"name": "4.2.7.6 VM-nin 102.1.14.15-ci maddəsi",
"old_parent": null,
"parent_tax_free_indicator": "Vergi tutulmayan gəlirlər"
},
{
"docstatus": 0,
"doctype": "Tax Free Indicator",
"indicator_name": "4.2.7.7 VM-nin 102.1.14.16-cı maddəsi",
"is_group": 0,
"name": "4.2.7.7 VM-nin 102.1.14.16-cı maddəsi",
"old_parent": null,
"parent_tax_free_indicator": "Vergi tutulmayan gəlirlər"
},
{
"docstatus": 0,
"doctype": "Tax Free Indicator",
"indicator_name": "4.2.7.8 VM-nin 102.1.14.33-cü maddəsi",
"is_group": 0,
"name": "4.2.7.8 VM-nin 102.1.14.33-cü maddəsi",
"old_parent": null,
"parent_tax_free_indicator": "Vergi tutulmayan gəlirlər"
},
{
"docstatus": 0,
"doctype": "Tax Free Indicator",
"indicator_name": "4.2.8 VM-nin 102.1.16-cı maddəsi",
"is_group": 0,
"name": "4.2.8 VM-nin 102.1.16-cı maddəsi",
"old_parent": null,
"parent_tax_free_indicator": "Vergi tutulmayan gəlirlər"
},
{
"docstatus": 0,
"doctype": "Tax Free Indicator",
"indicator_name": "4.2.9 VM-nin 102.1.17-ci maddəsi",
"is_group": 0,
"name": "4.2.9 VM-nin 102.1.17-ci maddəsi",
"old_parent": null,
"parent_tax_free_indicator": "Vergi tutulmayan gəlirlər"
},
{
"docstatus": 0,
"doctype": "Tax Free Indicator",
"indicator_name": "4.2.10 VM-nin 102.1.33-cü maddəsi",
"is_group": 0,
"name": "4.2.10 VM-nin 102.1.33-cü maddəsi",
"old_parent": null,
"parent_tax_free_indicator": "Vergi tutulmayan gəlirlər"
},
{
"docstatus": 0,
"doctype": "Tax Free Indicator",
"indicator_name": "4.2.11 VM-nin 102.1-1-ci maddəsi",
"is_group": 0,
"name": "4.2.11 VM-nin 102.1-1-ci maddəsi",
"old_parent": null,
"parent_tax_free_indicator": "Vergi tutulmayan gəlirlər"
},
{
"docstatus": 0,
"doctype": "Tax Free Indicator",
"indicator_name": "4.3.1 VM-nin 102.2.1-ci maddəsi",
"is_group": 0,
"name": "4.3.1 VM-nin 102.2.1-ci maddəsi",
"old_parent": null,
"parent_tax_free_indicator": "Vergi tutulmayan gəlirlər"
},
{
"docstatus": 0,
"doctype": "Tax Free Indicator",
"indicator_name": "4.3.2 VM-nin 102.2.1-1-ci maddəsi",
"is_group": 0,
"name": "4.3.2 VM-nin 102.2.1-1-ci maddəsi",
"old_parent": null,
"parent_tax_free_indicator": "Vergi tutulmayan gəlirlər"
},
{
"docstatus": 0,
"doctype": "Tax Free Indicator",
"indicator_name": "4.3.3 VM-nin 102.2.2-ci maddəsi",
"is_group": 0,
"name": "4.3.3 VM-nin 102.2.2-ci maddəsi",
"old_parent": null,
"parent_tax_free_indicator": "Vergi tutulmayan gəlirlər"
},
{
"docstatus": 0,
"doctype": "Tax Free Indicator",
"indicator_name": "4.3.4 VM-nin 102.2.4-cü maddəsi",
"is_group": 0,
"name": "4.3.4 VM-nin 102.2.4-cü maddəsi",
"old_parent": null,
"parent_tax_free_indicator": "Vergi tutulmayan gəlirlər"
},
{
"docstatus": 0,
"doctype": "Tax Free Indicator",
"indicator_name": "4.3.5 VM-nin 102.2.5-ci maddəsi",
"is_group": 0,
"name": "4.3.5 VM-nin 102.2.5-ci maddəsi",
"old_parent": null,
"parent_tax_free_indicator": "Vergi tutulmayan gəlirlər"
},
{
"docstatus": 0,
"doctype": "Tax Free Indicator",
"indicator_name": "4.3.6 VM-nin 102.2.6-cı maddəsi",
"is_group": 0,
"name": "4.3.6 VM-nin 102.2.6-cı maddəsi",
"old_parent": null,
"parent_tax_free_indicator": "Vergi tutulmayan gəlirlər"
},
{
"docstatus": 0,
"doctype": "Tax Free Indicator",
"indicator_name": "4.3.7 VM-nin 102.2.7-ci maddəsi",
"is_group": 0,
"name": "4.3.7 VM-nin 102.2.7-ci maddəsi",
"old_parent": null,
"parent_tax_free_indicator": "Vergi tutulmayan gəlirlər"
},
{
"docstatus": 0,
"doctype": "Tax Free Indicator",
"indicator_name": "4.3.8 VM-nin 102.2.8-ci maddəsi",
"is_group": 0,
"name": "4.3.8 VM-nin 102.2.8-ci maddəsi",
"old_parent": null,
"parent_tax_free_indicator": "Vergi tutulmayan gəlirlər"
},
{
"docstatus": 0,
"doctype": "Tax Free Indicator",
"indicator_name": "4.4 VM-nin 102.3-cü maddəsi üzrə",
"is_group": 0,
"name": "4.4 VM-nin 102.3-cü maddəsi üzrə",
"old_parent": null,
"parent_tax_free_indicator": "Vergi tutulmayan gəlirlər"
},
{
"docstatus": 0,
"doctype": "Tax Free Indicator",
"indicator_name": "4.5.1 VM-nin 102.4.1-ci maddəsi",
"is_group": 0,
"name": "4.5.1 VM-nin 102.4.1-ci maddəsi",
"old_parent": null,
"parent_tax_free_indicator": "Vergi tutulmayan gəlirlər"
},
{
"docstatus": 0,
"doctype": "Tax Free Indicator",
"indicator_name": "4.5.2 VM-nin 102.4.3-cü maddəsi",
"is_group": 0,
"name": "4.5.2 VM-nin 102.4.3-cü maddəsi",
"old_parent": null,
"parent_tax_free_indicator": "Vergi tutulmayan gəlirlər"
},
{
"docstatus": 0,
"doctype": "Tax Free Indicator",
"indicator_name": "4.5.3 VM-nin 102.4.5-ci maddəsi",
"is_group": 0,
"name": "4.5.3 VM-nin 102.4.5-ci maddəsi",
"old_parent": null,
"parent_tax_free_indicator": "Vergi tutulmayan gəlirlər"
},
{
"docstatus": 0,
"doctype": "Tax Free Indicator",
"indicator_name": "4.6 VM-nin 102.5-ci maddəsi üzrə",
"is_group": 0,
"name": "4.6 VM-nin 102.5-ci maddəsi üzrə",
"old_parent": null,
"parent_tax_free_indicator": "Vergi tutulmayan gəlirlər"
},
{
"docstatus": 0,
"doctype": "Tax Free Indicator",
"indicator_name": "5.1.1 Qanunla təsdiq olunmuş neft-qaz ehtiyatlarının kəşfiyyatı, işlənməsi və hasilatın pay bölgüsü, ixrac boru kəmərləri haqqında Sazişlər çərçivəsində fəaliyyət göstərən podratçı və subpodratçı tərəflərdə işləyən əcnəbilərin gəlirləri",
"is_group": 0,
"name": "5.1.1 Qanunla təsdiq olunmuş neft-qaz ehtiyatlarının kəşfiyyatı, işlənməsi və hasilatın pay bölgüsü, ixrac boru kəmərləri haqqında Sazişl...",
"old_parent": null,
"parent_tax_free_indicator": "MDSS cəlb olunmayan gəlirlər"
},
{
"docstatus": 0,
"doctype": "Tax Free Indicator",
"indicator_name": "5.1.1.1 O cümlədən məcburi dövlət sosial sığorta haqqına cəlb olunmayan kompensasiya məbləği (istifadə edilməmiş əmək məzuniyyətinə görə)",
"is_group": 0,
"name": "5.1.1.1 O cümlədən məcburi dövlət sosial sığorta haqqına cəlb olunmayan kompensasiya məbləği (istifadə edilməmiş əmək məzuniyyətinə görə)",
"old_parent": null,
"parent_tax_free_indicator": "MDSS cəlb olunmayan gəlirlər"
},
{
"docstatus": 0,
"doctype": "Tax Free Indicator",
"indicator_name": "5.1.2 Texnologiyalar parkının rezidenti (o cümlədən sistem inteqrasiyası, proqram təminatının hazırlanması və inkişaf etdirilməsi fəaliyyətini həyata keçirən şəxslər), onun podratçısı və podratçısı ilə birbaşa müqavilə bağlamış subpodratçı tərəfindən həmin fəaliyyətin məqsədləri üçün cəlb edilən (2023-cü il yanvarın 1-dən 10 il müddətinə) vətəndaşlığı olmayan şəxslərin və əcnəbilərin gəlirləri",
"is_group": 0,
"name": "5.1.2 Texnologiyalar parkının rezidenti (o cümlədən sistem inteqrasiyası, proqram təminatının hazırlanması və inkişaf etdirilməsi fəaliyy...",
"old_parent": null,
"parent_tax_free_indicator": "MDSS cəlb olunmayan gəlirlər"
},
{
"docstatus": 0,
"doctype": "Tax Free Indicator",
"indicator_name": "5.1.2.1 O cümlədən məcburi dövlət sosial sığorta haqqına cəlb olunmayan kompensasiya məbləği (istifadə edilməmiş əmək məzuniyyətinə görə)",
"is_group": 0,
"name": "5.1.2.1 O cümlədən məcburi dövlət sosial sığorta haqqına cəlb olunmayan kompensasiya məbləği (istifadə edilməmiş əmək məzuniyyətinə görə)",
"old_parent": null,
"parent_tax_free_indicator": "MDSS cəlb olunmayan gəlirlər"
},
{
"docstatus": 0,
"doctype": "Tax Free Indicator",
"indicator_name": "5.2.1 İş vaxtı daimi yolda olan və ya işi gediş-gəliş (səyyar) xarakteri daşıyan, çöl təşkilatlarında işləyən işçilərə gündəlik ezamiyyə xərclərinin əvəzində verilən əlavələr",
"is_group": 0,
"name": "5.2.1 İş vaxtı daimi yolda olan və ya işi gediş-gəliş (səyyar) xarakteri daşıyan, çöl təşkilatlarında işləyən işçilərə gündəlik ezamiyyə ...",
"old_parent": null,
"parent_tax_free_indicator": "MDSS cəlb olunmayan gəlirlər"
},
{
"docstatus": 0,
"doctype": "Tax Free Indicator",
"indicator_name": "5.2.2 Digər işgüzar xərclərin (görüşlərin keçirilməsi ilə bağlı qonaqların görüş yerinə gətirilməsi və görüş yerindən aparılması xərcləri, ictimai-iaşə obyektlərində qonaqlar üçün ziyafətlərin təşkili, habelə bu tədbirlərin keçirilməsi üçün hazır yeməklərin alınması üzrə çəkilmiş xərclər və görüşlərə cəlb edilmiş tərcüməçilərin xidmət haqları) əvəzinin ödənilməsi",
"is_group": 0,
"name": "5.2.2 Digər işgüzar xərclərin (görüşlərin keçirilməsi ilə bağlı qonaqların görüş yerinə gətirilməsi və görüş yerindən aparılması xərcləri...",
"old_parent": null,
"parent_tax_free_indicator": "MDSS cəlb olunmayan gəlirlər"
},
{
"docstatus": 0,
"doctype": "Tax Free Indicator",
"indicator_name": "5.2.3 Müəssisənin ləğvi, işçilərin sayının azaldılması, ştatların ixtisar edilməsi və ya işçinin vəfatı ilə əlaqədar əmək müqaviləsinə xitam verilərkən birdəfəlik ödənilən məbləğlər",
"is_group": 0,
"name": "5.2.3 Müəssisənin ləğvi, işçilərin sayının azaldılması, ştatların ixtisar edilməsi və ya işçinin vəfatı ilə əlaqədar əmək müqaviləsinə xi...",
"old_parent": null,
"parent_tax_free_indicator": "MDSS cəlb olunmayan gəlirlər"
},
{
"docstatus": 0,
"doctype": "Tax Free Indicator",
"indicator_name": "5.2.4 Əmək şəraiti zərərli, ağır olan və yeraltı işlərdə çalışan işçilərə verilən pulsuz müalicə-profilaktik yeməklər, süd və ona bərabər tutulan digər məhsulların dəyəri və işçilərə müəyyən edilmiş müddətlərdə və tələb olunan çeşidlərdə verilən xüsusi geyim, xüsusi ayaqqabı və digər fərdi mühafizə vasitələrinin dəyəri",
"is_group": 0,
"name": "5.2.4 Əmək şəraiti zərərli, ağır olan və yeraltı işlərdə çalışan işçilərə verilən pulsuz müalicə-profilaktik yeməklər, süd və ona bərabər...",
"old_parent": null,
"parent_tax_free_indicator": "MDSS cəlb olunmayan gəlirlər"
},
{
"docstatus": 0,
"doctype": "Tax Free Indicator",
"indicator_name": "5.2.5 İstehsalatdan ayrılmaqla təhsil almağa göndərilmiş tələbələrə, doktorantlara və magistrlərə müəssisə və təşkilatların hesabına ödənilən təqaüd məbləğləri",
"is_group": 0,
"name": "5.2.5 İstehsalatdan ayrılmaqla təhsil almağa göndərilmiş tələbələrə, doktorantlara və magistrlərə müəssisə və təşkilatların hesabına ödən...",
"old_parent": null,
"parent_tax_free_indicator": "MDSS cəlb olunmayan gəlirlər"
},
{
"docstatus": 0,
"doctype": "Tax Free Indicator",
"indicator_name": "5.2.6 Məcburi dövlət sosial sığorta haqları hesabına verilən sosial sığorta ödəmələrinin məbləğləri",
"is_group": 0,
"name": "5.2.6 Məcburi dövlət sosial sığorta haqları hesabına verilən sosial sığorta ödəmələrinin məbləğləri",
"old_parent": null,
"parent_tax_free_indicator": "MDSS cəlb olunmayan gəlirlər"
},
{
"docstatus": 0,
"doctype": "Tax Free Indicator",
"indicator_name": "5.2.7 Azərbaycan Respublikasının qanunları və müvafiq icra hakimiyyəti orqanlarının qərarları əsasında dövlət büdcəsinin vəsaiti hesabına verilən dövlət təqaüdləri və dövlət müavinətləri",
"is_group": 0,
"name": "5.2.7 Azərbaycan Respublikasının qanunları və müvafiq icra hakimiyyəti orqanlarının qərarları əsasında dövlət büdcəsinin vəsaiti hesabına...",
"old_parent": null,
"parent_tax_free_indicator": "MDSS cəlb olunmayan gəlirlər"
},
{
"docstatus": 0,
"doctype": "Tax Free Indicator",
"indicator_name": "5.2.8 Sığorta hadisəsi baş verdikdə, sığortalının əmlakına və ya əmlak mənafelərinə dəymiş zərərin yerini doldurmaq üçün pul və ya natura şəklində ödənilmiş vəsait-sığorta ödənişi, həmçinin sığortaedən tərəfindən ödənilən bütün növ icbari sığorta və könüllü tibbi sığorta haqları",
"is_group": 0,
"name": "5.2.8 Sığorta hadisəsi baş verdikdə, sığortalının əmlakına və ya əmlak mənafelərinə dəymiş zərərin yerini doldurmaq üçün pul və ya natura...",
"old_parent": null,
"parent_tax_free_indicator": "MDSS cəlb olunmayan gəlirlər"
},
{
"docstatus": 0,
"doctype": "Tax Free Indicator",
"indicator_name": "5.2.9 Üç ildən az olmayan müddətə bağlanan müqavilə ilə həyatın yığım sığortası və pensiya sığortası üzrə qeyri-dövlət sektoruna aid edilən sığortaedənin sığortaolunanın gəlirlərinin 50 faizindən çox olmayan hissəsindən Azərbaycan Respublikasının sığortaçılarına ödənilən sığorta haqları",
"is_group": 0,
"name": "5.2.9 Üç ildən az olmayan müddətə bağlanan müqavilə ilə həyatın yığım sığortası və pensiya sığortası üzrə qeyri-dövlət sektoruna aid edil...",
"old_parent": null,
"parent_tax_free_indicator": "MDSS cəlb olunmayan gəlirlər"
},
{
"docstatus": 0,
"doctype": "Tax Free Indicator",
"indicator_name": "5.2.9.1 O cümlədən məcburi dövlət sosial sığorta haqqına cəlb olunmayan kompensasiya məbləği",
"is_group": 0,
"name": "5.2.9.1 O cümlədən məcburi dövlət sosial sığorta haqqına cəlb olunmayan kompensasiya məbləği",
"old_parent": null,
"parent_tax_free_indicator": "MDSS cəlb olunmayan gəlirlər"
},
{
"docstatus": 0,
"doctype": "Tax Free Indicator",
"indicator_name": "5.2.10 Həyatın yığım sığortası və pensiya sığortası üzrə müqavilənin qüvvəyə mindiyi andan etibarən 3 illik müddət keçdikdən sonra sığorta olunana və faydalanan şəxsə ödənilən hər hansı məbləğlər",
"is_group": 0,
"name": "5.2.10 Həyatın yığım sığortası və pensiya sığortası üzrə müqavilənin qüvvəyə mindiyi andan etibarən 3 illik müddət keçdikdən sonra sığort...",
"old_parent": null,
"parent_tax_free_indicator": "MDSS cəlb olunmayan gəlirlər"
},
{
"docstatus": 0,
"doctype": "Tax Free Indicator",
"indicator_name": "5.2.11 Dövlət qulluqçusuna pensiya yaşına çatmasına görə könüllü işdən çıxması ilə əlaqədar verilən birdəfəlik haqq",
"is_group": 0,
"name": "5.2.11 Dövlət qulluqçusuna pensiya yaşına çatmasına görə könüllü işdən çıxması ilə əlaqədar verilən birdəfəlik haqq",
"old_parent": null,
"parent_tax_free_indicator": "MDSS cəlb olunmayan gəlirlər"
},
{
"docstatus": 0,
"doctype": "Tax Free Indicator",
"indicator_name": "5.2.12 Sığortaedənin vəsaiti hesabına əmək qabiliyyətini müvəqqəti itirməyə görə verilən müavinət",
"is_group": 0,
"name": "5.2.12 Sığortaedənin vəsaiti hesabına əmək qabiliyyətini müvəqqəti itirməyə görə verilən müavinət",
"old_parent": null,
"parent_tax_free_indicator": "MDSS cəlb olunmayan gəlirlər"
},
{
"docstatus": 0,
"doctype": "Tax Free Indicator",
"indicator_name": "5.2.13 Dövlət orqanları tərəfindən köçürmə yolu ilə başqa yerlərə işləməyə göndərilən işçilərə köçürülmə və kirayə xərclərinin əvəzi üçün ödənilən kompensasiya",
"is_group": 0,
"name": "5.2.13 Dövlət orqanları tərəfindən köçürmə yolu ilə başqa yerlərə işləməyə göndərilən işçilərə köçürülmə və kirayə xərclərinin əvəzi üçün...",
"old_parent": null,
"parent_tax_free_indicator": "MDSS cəlb olunmayan gəlirlər"
},
{
"docstatus": 0,
"doctype": "Tax Free Indicator",
"indicator_name": "5.2.14 Azərbaycan Respublikasının diplomatik nümayəndəliyində və ya konsulluğunda işləyən diplomatik xidmət əməkdaşlarına, diplomatik xidmət orqanlarının inzibati-texniki xidmətini həyata keçirən şəxslərə “Diplomatik xidmət haqqında” Azərbaycan Respublikası Qanununun 21-ci və 23.2-ci maddələrinə uyğun olaraq ödənilən müavinətlər, kompensasiyalar və aylıq əlavə, müvafiq icra hakimiyyəti orqanının müəyyən etdiyi orqanın (qurumun) xarici dövlətlərdə və beynəlxalq təşkilatlarda nümayəndələrinə dövlət məvacibi istisna olmaqla, müvafiq icra hakimiyyəti orqanının müəyyən etdiyi orqanın (qurumun) müəyyən etdiyi qaydaya uyğun olaraq ödənilən bütün növ ödənişlər, həmçinin mühafizəsi zəruri hesab edilən Azərbaycan Respublikasının xarici ölkələrdə və beynəlxalq təşkilatlarda fəaliyyət göstərən diplomatik nümayəndəliklərinin və konsulluqlarının mühafizəsini həyata keçirən hərbi qulluqçuların xarici ölkədə aldığı əmək haqqı",
"is_group": 0,
"name": "5.2.14 Azərbaycan Respublikasının diplomatik nümayəndəliyində və ya konsulluğunda işləyən diplomatik xidmət əməkdaşlarına, diplomatik xid...",
"old_parent": null,
"parent_tax_free_indicator": "MDSS cəlb olunmayan gəlirlər"
},
{
"docstatus": 0,
"doctype": "Tax Free Indicator",
"indicator_name": "5.2.15 Fəaliyyətləri müvafiq icra hakimiyyəti orqanı vasitəsilə əlaqələndirilən beynəlxalq, yerli humanitar və onların təsis etdikləri inkişaf təşkilatlarının (sığortaedənlərin) donor ölkə, təşkilat, özəl şirkətlər tərəfindən maliyyələşdirilən humanitar proqramlar çərçivəsində ayrılan vəsait hesabına əcnəbilər üzrə formalaşan əmək haqqı fondu (Azərbaycan Respublikası Prezidentinin 2004-cü il 1 iyul tarixli, 298 nömrəli sərəncamı ilə təsdiq olunmuş «Qaçqınların və məcburi köçkünlərin yaşayış şəraitinin yaxşılaşdırılması və məşğulluğunun artırılması üzrə Dövlət Proqramı»nın icrası müddətində)",
"is_group": 0,
"name": "5.2.15 Fəaliyyətləri müvafiq icra hakimiyyəti orqanı vasitəsilə əlaqələndirilən beynəlxalq, yerli humanitar və onların təsis etdikləri in...",
"old_parent": null,
"parent_tax_free_indicator": "MDSS cəlb olunmayan gəlirlər"
},
{
"docstatus": 0,
"doctype": "Tax Free Indicator",
"indicator_name": "5.2.15.1 O cümlədən məcburi dövlət sosial sığorta haqqına cəlb olunmayan kompensasiya məbləği (istifadə edilməmiş əmək məzuniyyətinə görə)",
"is_group": 0,
"name": "5.2.15.1 O cümlədən məcburi dövlət sosial sığorta haqqına cəlb olunmayan kompensasiya məbləği (istifadə edilməmiş əmək məzuniyyətinə görə)",
"old_parent": null,
"parent_tax_free_indicator": "MDSS cəlb olunmayan gəlirlər"
},
{
"docstatus": 0,
"doctype": "Tax Free Indicator",
"indicator_name": "5.2.16 Əmək xəsarəti və ya sağlamlığın başqa cür pozulması nəticəsində işçilərə dəymiş zərərin əvəzində verilən ödəmələr",
"is_group": 0,
"name": "5.2.16 Əmək xəsarəti və ya sağlamlığın başqa cür pozulması nəticəsində işçilərə dəymiş zərərin əvəzində verilən ödəmələr",
"old_parent": null,
"parent_tax_free_indicator": "MDSS cəlb olunmayan gəlirlər"
},
{
"docstatus": 0,
"doctype": "Tax Free Indicator",
"indicator_name": "5.2.17 İctimai təşkilatlar, xeyriyyə cəmiyyətləri və fondları tərəfindən verilən maddi yardımlar",
"is_group": 0,
"name": "5.2.17 İctimai təşkilatlar, xeyriyyə cəmiyyətləri və fondları tərəfindən verilən maddi yardımlar",
"old_parent": null,
"parent_tax_free_indicator": "MDSS cəlb olunmayan gəlirlər"
},
{
"docstatus": 0,
"doctype": "Tax Free Indicator",
"indicator_name": "5.2.18 Əməliyyat-axtarış fəaliyyəti subyektləri ilə əməkdaşlıq edən şəxslərə, kəşfiyyat və əks-kəşfiyyat fəaliyyəti subyektlərinə kömək edən şəxslərə ödənilən bütün növ əməkhaqqı, mükafat və digər maddi təminatlar",
"is_group": 0,
"name": "5.2.18 Əməliyyat-axtarış fəaliyyəti subyektləri ilə əməkdaşlıq edən şəxslərə, kəşfiyyat və əks-kəşfiyyat fəaliyyəti subyektlərinə kömək e...",
"old_parent": null,
"parent_tax_free_indicator": "MDSS cəlb olunmayan gəlirlər"
},
{
"docstatus": 0,
"doctype": "Tax Free Indicator",
"indicator_name": "5.2.19 Müvafiq icra hakimiyyəti orqanının müəyyən etdiyi orqan (qurum) tərəfindən ödənilən maddi yardım (dəstək)",
"is_group": 0,
"name": "5.2.19 Müvafiq icra hakimiyyəti orqanının müəyyən etdiyi orqan (qurum) tərəfindən ödənilən maddi yardım (dəstək)",
"old_parent": null,
"parent_tax_free_indicator": "MDSS cəlb olunmayan gəlirlər"
},
{
"docstatus": 0,
"doctype": "Tax Free Indicator",
"indicator_name": "5.2.20 Sığortaedənin işçilərin sosial xarakterli xərclərinin çəkilməsinin nəticəsi kimi əldə edilən gəlirləri, o cümlədən üçüncü tərəfə ödədiyi vəsait",
"is_group": 0,
"name": "5.2.20 Sığortaedənin işçilərin sosial xarakterli xərclərinin çəkilməsinin nəticəsi kimi əldə edilən gəlirləri, o cümlədən üçüncü tərəfə ö...",
"old_parent": null,
"parent_tax_free_indicator": "MDSS cəlb olunmayan gəlirlər"
},
{
"docstatus": 0,
"doctype": "Tax Free Indicator",
"indicator_name": "5.3 Azərbaycan Respublikasının iştirak etdiyi beynəlxalq müqavilələrdə \"Sosial sığorta haqqında\" Qanundan fərqli qaydalar",
"is_group": 0,
"name": "5.3 Azərbaycan Respublikasının iştirak etdiyi beynəlxalq müqavilələrdə \"Sosial sığorta haqqında\" Qanundan fərqli qaydalar",
"old_parent": null,
"parent_tax_free_indicator": "MDSS cəlb olunmayan gəlirlər"
},
{
"docstatus": 0,
"doctype": "Tax Free Indicator",
"indicator_name": "5.3.1 O cümlədən məcburi dövlət sosial sığorta haqqına cəlb olunmayan kompensasiya məbləği (istifadə edilməmiş əmək məzuniyyətinə görə)",
"is_group": 0,
"name": "5.3.1 O cümlədən məcburi dövlət sosial sığorta haqqına cəlb olunmayan kompensasiya məbləği (istifadə edilməmiş əmək məzuniyyətinə görə)",
"old_parent": null,
"parent_tax_free_indicator": "MDSS cəlb olunmayan gəlirlər"
},
{
"docstatus": 0,
"doctype": "Tax Free Indicator",
"indicator_name": "5.4 \"Ələt azad iqtisadi zonası haqqında\" Azərbaycan Respublikası Qanununun tələblərinə uyğun olaraq gəlirləri məcburi dövlət sosial sığorta haqqına cəlb edilməyən işçilər",
"is_group": 0,
"name": "5.4 \"Ələt azad iqtisadi zonası haqqında\" Azərbaycan Respublikası Qanununun tələblərinə uyğun olaraq gəlirləri məcburi dövlət sosial sığor...",
"old_parent": null,
"parent_tax_free_indicator": "MDSS cəlb olunmayan gəlirlər"
},
{
"docstatus": 0,
"doctype": "Tax Free Indicator",
"indicator_name": "5.4.1 O cümlədən məcburi dövlət sosial sığorta haqqına cəlb olunmayan kompensasiya məbləği (istifadə edilməmiş əmək məzuniyyətinə görə)",
"is_group": 0,
"name": "5.4.1 O cümlədən məcburi dövlət sosial sığorta haqqına cəlb olunmayan kompensasiya məbləği (istifadə edilməmiş əmək məzuniyyətinə görə)",
"old_parent": null,
"parent_tax_free_indicator": "MDSS cəlb olunmayan gəlirlər"
},
{
"docstatus": 0,
"doctype": "Tax Free Indicator",
"indicator_name": "6.1 \"İşsizlikdən sığorta haqqında\" Qanunun 1.3-cü maddəsinə əsasən siyasi vəzifə tutan şəxslərin gəlirləri",
"is_group": 0,
"name": "6.1 \"İşsizlikdən sığorta haqqında\" Qanunun 1.3-cü maddəsinə əsasən siyasi vəzifə tutan şəxslərin gəlirləri",
"old_parent": null,
"parent_tax_free_indicator": "İşsizlikdən sığorta haqqına cəlb olunmayan gəlirlər"
},
{
"docstatus": 0,
"doctype": "Tax Free Indicator",
"indicator_name": "6.2 \"İşsizlikdən sığorta haqqında\" Qanunun 2.0.3-cü maddəsinə əsasən Azərbaycan Respublikasının qanunlarına uyğun olaraq işəgötürənlə əmək müqaviləsi bağlamamış işçilərin gəlirləri",
"is_group": 0,
"name": "6.2 \"İşsizlikdən sığorta haqqında\" Qanunun 2.0.3-cü maddəsinə əsasən Azərbaycan Respublikasının qanunlarına uyğun olaraq işəgötürənlə əmə...",
"old_parent": null,
"parent_tax_free_indicator": "İşsizlikdən sığorta haqqına cəlb olunmayan gəlirlər"
},
{
"docstatus": 0,
"doctype": "Tax Free Indicator",
"indicator_name": "6.3 \"İşsizlikdən sığorta haqqında\" Qanunun 9.0.1-ci maddəsinə əsasən hesablanmış əməyin ödənişi fonduna daxil olmayan gəlirlər",
"is_group": 0,
"name": "6.3 \"İşsizlikdən sığorta haqqında\" Qanunun 9.0.1-ci maddəsinə əsasən hesablanmış əməyin ödənişi fonduna daxil olmayan gəlirlər",
"old_parent": null,
"parent_tax_free_indicator": "İşsizlikdən sığorta haqqına cəlb olunmayan gəlirlər"
},
{
"docstatus": 0,
"doctype": "Tax Free Indicator",
"indicator_name": "6.4 \"İşsizlikdən sığorta haqqında\" Qanunun 9.0.2-ci maddəsinə əsasən hesablanmış əməkhaqqının tərkibinə daxil olmayan gəlirlər fonduna daxil olmayan gəlirlər",
"is_group": 0,
"name": "6.4 \"İşsizlikdən sığorta haqqında\" Qanunun 9.0.2-ci maddəsinə əsasən hesablanmış əməkhaqqının tərkibinə daxil olmayan gəlirlər fonduna da...",
"old_parent": null,
"parent_tax_free_indicator": "İşsizlikdən sığorta haqqına cəlb olunmayan gəlirlər"
},
{
"docstatus": 0,
"doctype": "Tax Free Indicator",
"indicator_name": "6.5 Qanunla təsdiq olunmuş hasilatın pay bölgüsü haqqında, əsas boru kəməri haqqında və digər bu qəbildən olan sazişlərdə və ya qanunlarda, o cümlədən neft və qaz haqqında, ixrac məqsədli neft-qaz fəaliyyəti və xüsusi iqtisadi zonalar haqqında qanunlarda \"İşsizlikdən sığorta haqqında\" Qanunundan fərqli müddəalar müəyyən edildikdə, həmin sazişlərin və ya qanunların müddəalarına əsasən gəlirləri işsizlikdən sığorta haqqına cəlb edilməyən işçilər",
"is_group": 0,
"name": "6.5 Qanunla təsdiq olunmuş hasilatın pay bölgüsü haqqında, əsas boru kəməri haqqında və digər bu qəbildən olan sazişlərdə və ya qanunlard...",
"old_parent": null,
"parent_tax_free_indicator": "İşsizlikdən sığorta haqqına cəlb olunmayan gəlirlər"
},
{
"docstatus": 0,
"doctype": "Tax Free Indicator",
"indicator_name": "7.1 \"Tibbi sığorta haqqında\" Qanunun 15-2.3-cü maddəsinə əsasən həbs edilmiş şəxslərin, müəyyən müddətə azadlıqdan məhrumetmə və ömürlük azadlıqdan məhrum etmə növündə cəza çəkən şəxslərin (məntəqə tipli cəzaçəkmə müəssisələri istisna olmaqla), habelə bu Qanunun 15-2.1-ci, 15-2.2.1-ci, 15-2.2.2-ci, 15-2.2.3-cü maddələrində göstərilən şəxslərə aid olunduğu hallar istisna olmaqla, Azərbaycan Respublikasının Miqrasiya Məcəlləsinə əsasən Azərbaycan Respublikasında müvəqqəti olan, müvəqqəti və ya daimi yaşayan əcnəbilərə və vətəndaşlığı olmayan şəxslərin gəlirləri",
"is_group": 0,
"name": "7.1 \"Tibbi sığorta haqqında\" Qanunun 15-2.3-cü maddəsinə əsasən həbs edilmiş şəxslərin, müəyyən müddətə azadlıqdan məhrumetmə və ömürlük ...",
"old_parent": null,
"parent_tax_free_indicator": "İcbari tibbi sığorta haqqına cəlb olunmayan gəlirlər"
},
{
"docstatus": 0,
"doctype": "Tax Free Indicator",
"indicator_name": "7.1.1 O cümlədən icbari tibbi sığorta haqqına cəlb olunmayan kompensasiya məbləği (istifadə edilməmiş əmək məzuniyyətinə görə)",
"is_group": 0,
"name": "7.1.1 O cümlədən icbari tibbi sığorta haqqına cəlb olunmayan kompensasiya məbləği (istifadə edilməmiş əmək məzuniyyətinə görə)",
"old_parent": null,
"parent_tax_free_indicator": "İcbari tibbi sığorta haqqına cəlb olunmayan gəlirlər"
},
{
"docstatus": 0,
"doctype": "Tax Free Indicator",
"indicator_name": "7.2 \"Tibbi sığorta haqqında\" Qanunun 15-10.1.2-ci maddəsinə əsasən hesablanmış əməkhaqqının tərkibinə daxil olmayan gəlirlər",
"is_group": 0,
"name": "7.2 \"Tibbi sığorta haqqında\" Qanunun 15-10.1.2-ci maddəsinə əsasən hesablanmış əməkhaqqının tərkibinə daxil olmayan gəlirlər",
"old_parent": null,
"parent_tax_free_indicator": "İcbari tibbi sığorta haqqına cəlb olunmayan gəlirlər"
},
{
"docstatus": 0,
"doctype": "Tax Free Indicator",
"indicator_name": "7.3 Qanunla təsdiq olunmuş hasilatın pay bölgüsü haqqında, əsas boru kəməri haqqında və digər bu qəbildən olan sazişlərdə və ya qanunlarda, o cümlədən neft və qaz haqqında, ixrac məqsədli neft-qaz fəaliyyəti və xüsusi iqtisadi zonalar haqqında qanunlarda \"Tibbi sığorta haqqında\" Qanunundan fərqli müddəalar müəyyən edildikdə, həmin sazişlərin və ya qanunların müddəalarına əsasən gəlirləri icbari tibbi sığorta haqqına cəlb edilməyən işçilər",
"is_group": 0,
"name": "7.3 Qanunla təsdiq olunmuş hasilatın pay bölgüsü haqqında, əsas boru kəməri haqqında və digər bu qəbildən olan sazişlərdə və ya qanunlard...",
"old_parent": null,
"parent_tax_free_indicator": "İcbari tibbi sığorta haqqına cəlb olunmayan gəlirlər"
},
{
"docstatus": 0,
"doctype": "Tax Free Indicator",
"indicator_name": "7.3.1 O cümlədən icbari tibbi sığorta haqqına cəlb olunmayan kompensasiya məbləği (istifadə edilməmiş əmək məzuniyyətinə görə)",
"is_group": 0,
"name": "7.3.1 O cümlədən icbari tibbi sığorta haqqına cəlb olunmayan kompensasiya məbləği (istifadə edilməmiş əmək məzuniyyətinə görə)",
"old_parent": null,
"parent_tax_free_indicator": "İcbari tibbi sığorta haqqına cəlb olunmayan gəlirlər"
},
{
"docstatus": 0,
"doctype": "Tax Free Indicator",
"indicator_name": "7.4 “Ələt azad iqtisadi zonası haqqında” Azərbaycan Respublikası Qanununun tələblərinə uyğun olaraq gəlirləri gəlirləri icbari tibbi sığorta haqqına cəlb edilməyən işçilər",
"is_group": 0,
"name": "7.4 “Ələt azad iqtisadi zonası haqqında” Azərbaycan Respublikası Qanununun tələblərinə uyğun olaraq gəlirləri gəlirləri icbari tibbi sığo...",
"old_parent": null,
"parent_tax_free_indicator": "İcbari tibbi sığorta haqqına cəlb olunmayan gəlirlər"
},
{
"docstatus": 0,
"doctype": "Tax Free Indicator",
"indicator_name": "7.4.1 O cümlədən icbari tibbi sığorta haqqına cəlb olunmayan kompensasiya məbləği (istifadə edilməmiş əmək məzuniyyətinə görə)",
"is_group": 0,
"name": "7.4.1 O cümlədən icbari tibbi sığorta haqqına cəlb olunmayan kompensasiya məbləği (istifadə edilməmiş əmək məzuniyyətinə görə)",
"old_parent": null,
"parent_tax_free_indicator": "İcbari tibbi sığorta haqqına cəlb olunmayan gəlirlər"
}
]

View File

@ -103,6 +103,15 @@ def after_migrate_combined():
patch_sales_documents()
from jey_erp.custom.rename_default_groups import rename_default_groups
rename_default_groups()
# Rebuild NSM tree for Tax Free Indicator — fixtures loader doesn't
# recompute lft/rgt, so tree view and descendant queries need this.
import frappe
from frappe.utils.nestedset import rebuild_tree
if frappe.db.exists("DocType", "Tax Free Indicator"):
try:
rebuild_tree("Tax Free Indicator")
except Exception as e:
print(f"Tax Free Indicator NSM rebuild failed: {e}")
# REMOVED: Asset categories creation moved to setup_wizard_complete hook
# from jey_erp.custom.create_asset_categories import create_asset_categories
# create_asset_categories()

View File

@ -0,0 +1,18 @@
frappe.ui.form.on('Tax Free Indicator', {
date_from: function(frm) {
calculate_date_to(frm);
},
duration: function(frm) {
calculate_date_to(frm);
}
});
function calculate_date_to(frm) {
if (!frm.doc.date_from || !frm.doc.duration) return;
let from_date = frappe.datetime.str_to_obj(frm.doc.date_from);
let to_date = new Date(from_date);
to_date.setFullYear(to_date.getFullYear() + frm.doc.duration);
frm.set_value('date_to', frappe.datetime.obj_to_str(to_date));
}

View File

@ -0,0 +1,133 @@
{
"actions": [],
"allow_import": 1,
"allow_rename": 1,
"autoname": "Prompt",
"creation": "2026-04-14 10:30:00.000000",
"doctype": "DocType",
"engine": "InnoDB",
"field_order": [
"section_break_main",
"indicator_name",
"parent_tax_free_indicator",
"declaration",
"lft",
"rgt",
"is_group",
"old_parent",
"validity_period",
"date_from",
"duration",
"column_break_validity",
"date_to"
],
"fields": [
{
"fieldname": "section_break_main",
"fieldtype": "Section Break"
},
{
"description": "Name of the tax free indicator",
"fieldname": "indicator_name",
"fieldtype": "Text",
"in_list_view": 1,
"label": "Indicator Name",
"reqd": 1
},
{
"description": "Declaration text for tax free indicator",
"fieldname": "declaration",
"fieldtype": "Text",
"label": "Declaration"
},
{
"default": "0",
"fieldname": "is_group",
"fieldtype": "Check",
"label": "Is Group"
},
{
"fieldname": "lft",
"fieldtype": "Float",
"hidden": 1,
"label": "Left",
"no_copy": 1,
"precision": "2",
"read_only": 1
},
{
"fieldname": "rgt",
"fieldtype": "Float",
"hidden": 1,
"label": "Right",
"precision": "2",
"read_only": 1
},
{
"fieldname": "old_parent",
"fieldtype": "Link",
"label": "Old Parent",
"options": "Tax Free Indicator"
},
{
"fieldname": "parent_tax_free_indicator",
"fieldtype": "Link",
"ignore_user_permissions": 1,
"label": "Parent Tax Free Indicator",
"options": "Tax Free Indicator"
},
{
"fieldname": "validity_period",
"fieldtype": "Section Break",
"label": "Validity Period"
},
{
"fieldname": "date_from",
"fieldtype": "Date",
"label": "Date From"
},
{
"fieldname": "duration",
"fieldtype": "Int",
"label": "Duration"
},
{
"fieldname": "column_break_validity",
"fieldtype": "Column Break"
},
{
"fieldname": "date_to",
"fieldtype": "Date",
"label": "Date To",
"read_only": 1
}
],
"index_web_pages_for_search": 1,
"is_tree": 1,
"links": [],
"modified": "2026-04-14 10:30:00.000000",
"modified_by": "Administrator",
"module": "Jey Erp",
"name": "Tax Free Indicator",
"naming_rule": "By script",
"nsm_parent_field": "parent_tax_free_indicator",
"owner": "Administrator",
"permissions": [
{
"create": 1,
"delete": 1,
"email": 1,
"export": 1,
"print": 1,
"read": 1,
"report": 1,
"role": "System Manager",
"share": 1,
"write": 1
}
],
"row_format": "Dynamic",
"sort_field": "creation",
"sort_order": "DESC",
"states": []
}

View File

@ -0,0 +1,56 @@
# -*- coding: utf-8 -*-
# Copyright (c) 2026, Jey and contributors
# For license information, please see license.txt
from __future__ import unicode_literals
import frappe
from frappe.model.document import Document
from frappe.utils import getdate, add_years
class TaxFreeIndicator(Document):
def autoname(self):
"""
Auto-generate document name from indicator_name.
Truncates to 140 chars and appends -N on collision.
"""
if not self.indicator_name:
return
name = str(self.indicator_name)
if len(name) > 140:
name = name[:137] + "..."
counter = 1
original_name = name
while frappe.db.exists("Tax Free Indicator", name):
suffix = f"-{counter}"
max_length = 140 - len(suffix)
name = original_name[:max_length] + suffix
counter += 1
self.name = name
def validate(self):
self.auto_calculate_validity_fields()
self.validate_date_range()
def auto_calculate_validity_fields(self):
if self.date_from and self.duration and not self.date_to:
self.date_to = add_years(getdate(self.date_from), self.duration)
elif self.date_from and self.date_to and not self.duration:
from_date = getdate(self.date_from)
to_date = getdate(self.date_to)
years = (to_date - from_date).days / 365.25
self.duration = round(years)
def validate_date_range(self):
if self.date_from and self.date_to:
from_date = getdate(self.date_from)
to_date = getdate(self.date_to)
if to_date < from_date:
frappe.throw(
frappe._("Date To cannot be earlier than Date From"),
title=frappe._("Invalid Date Range"),
)

View File

@ -0,0 +1,11 @@
# -*- coding: utf-8 -*-
# Copyright (c) 2026, Jey and Contributors
# See license.txt
from __future__ import unicode_literals
import frappe
import unittest
class TestTaxFreeIndicator(unittest.TestCase):
pass