diff --git a/core/templates/core/_adjustment_row.html b/core/templates/core/_adjustment_row.html
new file mode 100644
index 0000000..d07d830
--- /dev/null
+++ b/core/templates/core/_adjustment_row.html
@@ -0,0 +1,131 @@
+{# === _adjustment_row.html ===
+ Single
used by BOTH the flat Adjustments view and (later) the grouped view.
+ Context:
+ - `adj` — a PayrollAdjustment instance
+ - `additive_types` — list of type labels that are additive (used to decide
+ whether the amount should be prefixed with + or - in the display)
+ Row actions differ based on whether the adjustment has already been paid:
+ - Paid -> single [View Payslip] icon button
+ - Unpaid -> three buttons: [Preview][Edit][x]
+ (these reuse the existing modals on the dashboard — no new JS)
+#}
+{% load format_tags %}
+
+
+ {# --- Bulk-select checkbox --- #}
+ {# Paid rows show a disabled checkbox so the column stays aligned; #}
+ {# only unpaid rows can be bulk-selected for deletion (feature comes in Task 6). #}
+
+
+ {# --- Row actions (eye + pen + x for unpaid; eye only for paid) --- #}
+
+ {% if adj.payroll_record %}
+ {# PAID: view payslip only #}
+
+
+
+ {% else %}
+ {# UNPAID: preview + edit + delete #}
+ {# Preview button — class .preview-payslip-btn is already wired up in the
+ main dashboard JS (opens the preview modal for this worker). #}
+
+ {# Edit button — class .adjustment-badge is already wired up in the
+ main dashboard JS (populates + opens #editAdjustmentModal). We reuse
+ it here so no new JS is needed for editing. #}
+
+ {# Delete button — opens the existing #deleteConfirmModal directly
+ (short-circuits the edit modal's usual two-step flow). #}
+
+ {% endif %}
+
+
diff --git a/core/templates/core/payroll_dashboard.html b/core/templates/core/payroll_dashboard.html
index f3eee51..2166a19 100644
--- a/core/templates/core/payroll_dashboard.html
+++ b/core/templates/core/payroll_dashboard.html
@@ -1,5 +1,6 @@
{% extends 'base.html' %}
{% load static %}
+{% load format_tags %}
{% block title %}Payroll Dashboard | FoxFitt{% endblock %}
@@ -265,6 +266,14 @@
Loans & Advances
+ {# === ADJUSTMENTS TAB LINK === #}
+ {# Task 4: flat table view of every payroll adjustment with filters, #}
+ {# bulk actions, and row edit/delete. See _adjustment_row.html. #}
+
+
+ {# --- Flat table of adjustments --- #}
+ {% if adj_page.object_list %}
+
+
+
+
+
+
+
+
+
+
Date
+
Worker
+
Type
+
Amount
+
Project
+
Team
+
Description
+
Status
+
Actions
+
+
+
+ {% for adj in adj_page.object_list %}
+ {% include 'core/_adjustment_row.html' with adj=adj additive_types=additive_types %}
+ {% endfor %}
+
+
+
+
+
+
+ {# --- Pagination --- #}
+ {% if adj_page.has_other_pages %}
+
+ {% endif %}
+
+ {% else %}
+ {# Simple placeholder empty state — visual polish comes in Task 10 #}
+
+
+
No adjustments match these filters.
+
+ {% endif %}
+
+ {% endif %}
+
{# ================================================================== #}
@@ -903,6 +1070,19 @@
{{ project_chart_json|json_script:"projectChartJson" }}
{{ worker_chart_json|json_script:"workerChartJson" }}
+{# === CHOICES.JS CDN — loaded only when the Adjustments tab is active === #}
+{# Used by the Type / Workers / Teams multi-select filters. If the CDN fails #}
+{# the