tax exempt now in formula for land tax reprot

This commit is contained in:
Ali 2025-11-28 15:59:45 +04:00
parent c5c7dd8194
commit 4f69e9bc6c
1 changed files with 53 additions and 3 deletions

View File

@ -223,9 +223,16 @@ def calculate_tax_for_agricultural_asset(asset):
# Определяем agricultural_purpose_name
agricultural_purpose_name = get_agricultural_purpose_name(asset.get('agricultural_purpose'))
# Рассчитываем налогооблагаемую площадь
taxable_area = calculate_taxable_area(asset.get('area'), asset.get('tax_exempt_area'))
# Если вся площадь освобождена от налогов, возвращаем 0
if taxable_area <= 0:
return 0
# Вызываем функцию расчета из land_tax_declaration
result = calculate_agricultural_tax(
area_value=asset.get('area'),
area_value=taxable_area,
cadastral_district_name=asset.get('cadastral_district_name'),
quality_groups=asset.get('quality_groups'),
agricultural_land_purpose=asset.get('agricultural_land_purpose'),
@ -241,9 +248,16 @@ def calculate_tax_for_agricultural_asset(asset):
def calculate_tax_for_industrial_asset(asset):
"""Рассчитывает налог для промышленной земли"""
try:
# Рассчитываем налогооблагаемую площадь
taxable_area = calculate_taxable_area(asset.get('area'), asset.get('tax_exempt_area'))
# Если вся площадь освобождена от налогов, возвращаем 0
if taxable_area <= 0:
return 0
# Вызываем функцию расчета из land_tax_declaration
result = calculate_industrial_tax(
area_sqm=asset.get('area'),
area_sqm=taxable_area,
territorial_unit_name=asset.get('territorial_unit_name'),
industrial_land_purpose=asset.get('industrial_land_purpose')
)
@ -263,4 +277,40 @@ def get_agricultural_purpose_name(agricultural_purpose_id):
purpose_doc = frappe.get_doc('Agricultural Purpose Type', agricultural_purpose_id)
return purpose_doc.purpose_name
except:
return None
return None
def calculate_taxable_area(total_area, tax_exempt_area):
"""
Рассчитывает налогооблагаемую площадь, вычитая освобожденную от налогов площадь.
Args:
total_area: Общая площадь (float)
tax_exempt_area: Освобожденная от налогов площадь (строка или число)
Returns:
float: Налогооблагаемая площадь (total_area - tax_exempt_area)
"""
# Если общая площадь не указана, возвращаем 0
if not total_area:
return 0
total_area_float = flt(total_area)
# Если нет освобожденной площади, возвращаем полную площадь
if not tax_exempt_area:
return total_area_float
# Преобразуем tax_exempt_area в число (может быть строкой)
try:
exempt_area_float = flt(tax_exempt_area)
except (ValueError, TypeError):
# Если не удалось преобразовать, игнорируем освобожденную площадь
frappe.log_error(f"Invalid tax_exempt_area value: {tax_exempt_area}. Using full area for tax calculation.")
return total_area_float
# Рассчитываем налогооблагаемую площадь
taxable_area = total_area_float - exempt_area_float
# Возвращаем 0, если результат отрицательный
return max(0, taxable_area)