diff --git a/taxes_az/taxes_az/report/monthly_absence_report/__init__.py b/taxes_az/taxes_az/report/monthly_absence_report/__init__.py
new file mode 100644
index 0000000..e69de29
diff --git a/taxes_az/taxes_az/report/monthly_absence_report/monthly_absence_report.js b/taxes_az/taxes_az/report/monthly_absence_report/monthly_absence_report.js
new file mode 100644
index 0000000..af8f0fd
--- /dev/null
+++ b/taxes_az/taxes_az/report/monthly_absence_report/monthly_absence_report.js
@@ -0,0 +1,43 @@
+// Copyright (c) 2024, Company and contributors
+// For license information, please see license.txt
+
+frappe.query_reports["Monthly Absence Report"] = {
+ "filters": [
+ {
+ fieldname: "company",
+ label: __("Şirkət"),
+ fieldtype: "Link",
+ options: "Company",
+ reqd: 1,
+ default: frappe.defaults.get_user_default("Company")
+ },
+ {
+ fieldname: "from_date",
+ label: __("Tarixdən"),
+ fieldtype: "Date",
+ reqd: 1,
+ default: frappe.datetime.add_months(frappe.datetime.get_today(), -1)
+ },
+ {
+ fieldname: "to_date",
+ label: __("Tarixə qədər"),
+ fieldtype: "Date",
+ reqd: 1,
+ default: frappe.datetime.get_today()
+ }
+ ],
+
+ "formatter": function (value, row, column, data, default_formatter) {
+ value = default_formatter(value, row, column, data);
+
+ if (!data || column.fieldname !== "days_absent") return value;
+
+ if (data.days_absent > 10) {
+ value = "" + value + "";
+ } else if (data.days_absent >= 5) {
+ value = "" + value + "";
+ }
+
+ return value;
+ }
+};
diff --git a/taxes_az/taxes_az/report/monthly_absence_report/monthly_absence_report.json b/taxes_az/taxes_az/report/monthly_absence_report/monthly_absence_report.json
new file mode 100644
index 0000000..145d733
--- /dev/null
+++ b/taxes_az/taxes_az/report/monthly_absence_report/monthly_absence_report.json
@@ -0,0 +1,20 @@
+{
+ "add_total_row": 0,
+ "columns": [],
+ "creation": "2026-03-19 00:00:00.000000",
+ "disabled": 0,
+ "docstatus": 0,
+ "doctype": "Report",
+ "filters": [],
+ "idx": 0,
+ "is_standard": "Yes",
+ "modified": "2026-03-19 00:00:00.000000",
+ "modified_by": "Administrator",
+ "module": "Taxes Az",
+ "name": "Monthly Absence Report",
+ "owner": "Administrator",
+ "ref_doctype": "Attendance",
+ "report_name": "Monthly Absence Report",
+ "report_type": "Script Report",
+ "roles": []
+}
diff --git a/taxes_az/taxes_az/report/monthly_absence_report/monthly_absence_report.py b/taxes_az/taxes_az/report/monthly_absence_report/monthly_absence_report.py
new file mode 100644
index 0000000..f08272f
--- /dev/null
+++ b/taxes_az/taxes_az/report/monthly_absence_report/monthly_absence_report.py
@@ -0,0 +1,56 @@
+# Copyright (c) 2024, Company and contributors
+# For license information, please see license.txt
+
+import frappe
+from frappe import _
+
+
+def execute(filters=None):
+ columns = get_columns()
+ data = get_data(filters)
+ return columns, data
+
+
+def get_columns():
+ return [
+ {
+ "label": _("Sıra №"),
+ "fieldname": "employee",
+ "fieldtype": "Link",
+ "options": "Employee",
+ "width": 120
+ },
+ {
+ "label": _("İşçi adı"),
+ "fieldname": "employee_name",
+ "fieldtype": "Data",
+ "width": 200
+ },
+ {
+ "label": _("Qayıb günlər"),
+ "fieldname": "days_absent",
+ "fieldtype": "Int",
+ "width": 120
+ }
+ ]
+
+
+def get_data(filters):
+ if not filters:
+ filters = {}
+
+ return frappe.db.sql("""
+ SELECT
+ a.employee,
+ a.employee_name,
+ COUNT(*) as days_absent
+ FROM `tabAttendance` a
+ WHERE
+ a.docstatus = 1
+ AND a.status = 'Absent'
+ AND a.company = %(company)s
+ AND a.attendance_date >= %(from_date)s
+ AND a.attendance_date <= %(to_date)s
+ GROUP BY a.employee, a.employee_name
+ ORDER BY days_absent DESC, a.employee_name ASC
+ """, filters, as_dict=1)