diff --git a/stacks/monitoring/modules/monitoring/dashboards/uk-payslip.json b/stacks/monitoring/modules/monitoring/dashboards/uk-payslip.json index e131dc28..736ec160 100644 --- a/stacks/monitoring/modules/monitoring/dashboards/uk-payslip.json +++ b/stacks/monitoring/modules/monitoring/dashboards/uk-payslip.json @@ -3,7 +3,10 @@ "list": [ { "builtIn": 1, - "datasource": { "type": "datasource", "uid": "grafana" }, + "datasource": { + "type": "datasource", + "uid": "grafana" + }, "enable": true, "hide": true, "iconColor": "rgba(0, 211, 255, 1)", @@ -12,7 +15,7 @@ } ] }, - "description": "UK payslip breakdown — gross/net/tax/NI trends, YTD progression against income tax bands, deductions split, and effective rate.", + "description": "UK payslip breakdown \u2014 gross/net/tax/NI trends, YTD progression against income tax bands, deductions split, and effective rate.", "editable": true, "fiscalYearStartMonth": 0, "graphTooltip": 1, @@ -23,11 +26,21 @@ "id": 1, "title": "Monthly gross / net / tax / NI", "type": "timeseries", - "datasource": { "type": "grafana-postgresql-datasource", "uid": "payslips-pg" }, - "gridPos": { "h": 9, "w": 12, "x": 0, "y": 0 }, + "datasource": { + "type": "grafana-postgresql-datasource", + "uid": "payslips-pg" + }, + "gridPos": { + "h": 9, + "w": 12, + "x": 0, + "y": 0 + }, "fieldConfig": { "defaults": { - "color": { "mode": "palette-classic" }, + "color": { + "mode": "palette-classic" + }, "unit": "currencyGBP", "custom": { "axisBorderShow": false, @@ -39,28 +52,54 @@ "drawStyle": "line", "fillOpacity": 10, "gradientMode": "none", - "hideFrom": { "legend": false, "tooltip": false, "viz": false }, + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, "lineWidth": 2, "pointSize": 5, - "scaleDistribution": { "type": "linear" }, + "scaleDistribution": { + "type": "linear" + }, "showPoints": "auto", "spanNulls": false, - "stacking": { "group": "A", "mode": "none" }, - "thresholdsStyle": { "mode": "off" } + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } } }, "overrides": [] }, "options": { - "legend": { "calcs": ["last", "mean"], "displayMode": "table", "placement": "bottom" }, - "tooltip": { "mode": "multi", "sort": "desc" } + "legend": { + "calcs": [ + "last", + "mean" + ], + "displayMode": "table", + "placement": "bottom" + }, + "tooltip": { + "mode": "multi", + "sort": "desc" + } }, "targets": [ { - "datasource": { "type": "grafana-postgresql-datasource", "uid": "payslips-pg" }, + "datasource": { + "type": "grafana-postgresql-datasource", + "uid": "payslips-pg" + }, "rawSql": "SELECT pay_date AS \"time\", gross_pay, net_pay, income_tax, national_insurance FROM payslip_ingest.payslip WHERE $__timeFilter(pay_date) ORDER BY pay_date", "format": "time_series", - "refId": "A" + "refId": "A", + "rawQuery": true, + "editorMode": "code" } ] }, @@ -68,11 +107,21 @@ "id": 2, "title": "YTD gross (this tax year) with UK band thresholds", "type": "timeseries", - "datasource": { "type": "grafana-postgresql-datasource", "uid": "payslips-pg" }, - "gridPos": { "h": 9, "w": 12, "x": 12, "y": 0 }, + "datasource": { + "type": "grafana-postgresql-datasource", + "uid": "payslips-pg" + }, + "gridPos": { + "h": 9, + "w": 12, + "x": 12, + "y": 0 + }, "fieldConfig": { "defaults": { - "color": { "mode": "palette-classic" }, + "color": { + "mode": "palette-classic" + }, "unit": "currencyGBP", "custom": { "axisBorderShow": false, @@ -84,37 +133,75 @@ "drawStyle": "line", "fillOpacity": 15, "gradientMode": "none", - "hideFrom": { "legend": false, "tooltip": false, "viz": false }, + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, "lineWidth": 2, "pointSize": 5, - "scaleDistribution": { "type": "linear" }, + "scaleDistribution": { + "type": "linear" + }, "showPoints": "auto", "spanNulls": false, - "stacking": { "group": "A", "mode": "none" }, - "thresholdsStyle": { "mode": "line" } + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "line" + } }, "thresholds": { "mode": "absolute", "steps": [ - { "color": "green", "value": null }, - { "color": "yellow", "value": 12570 }, - { "color": "orange", "value": 50270 }, - { "color": "red", "value": 125140 } + { + "color": "green", + "value": null + }, + { + "color": "yellow", + "value": 12570 + }, + { + "color": "orange", + "value": 50270 + }, + { + "color": "red", + "value": 125140 + } ] } }, "overrides": [] }, "options": { - "legend": { "calcs": ["last", "max"], "displayMode": "table", "placement": "bottom" }, - "tooltip": { "mode": "multi", "sort": "desc" } + "legend": { + "calcs": [ + "last", + "max" + ], + "displayMode": "table", + "placement": "bottom" + }, + "tooltip": { + "mode": "multi", + "sort": "desc" + } }, "targets": [ { - "datasource": { "type": "grafana-postgresql-datasource", "uid": "payslips-pg" }, + "datasource": { + "type": "grafana-postgresql-datasource", + "uid": "payslips-pg" + }, "rawSql": "SELECT pay_date AS \"time\", SUM(gross_pay) OVER (PARTITION BY tax_year ORDER BY pay_date) AS ytd_gross FROM payslip_ingest.payslip WHERE $__timeFilter(pay_date) ORDER BY pay_date", "format": "time_series", - "refId": "A" + "refId": "A", + "rawQuery": true, + "editorMode": "code" } ] }, @@ -122,11 +209,21 @@ "id": 3, "title": "Deductions breakdown per payslip", "type": "timeseries", - "datasource": { "type": "grafana-postgresql-datasource", "uid": "payslips-pg" }, - "gridPos": { "h": 9, "w": 12, "x": 0, "y": 9 }, + "datasource": { + "type": "grafana-postgresql-datasource", + "uid": "payslips-pg" + }, + "gridPos": { + "h": 9, + "w": 12, + "x": 0, + "y": 9 + }, "fieldConfig": { "defaults": { - "color": { "mode": "palette-classic" }, + "color": { + "mode": "palette-classic" + }, "unit": "currencyGBP", "custom": { "axisBorderShow": false, @@ -138,28 +235,54 @@ "drawStyle": "bars", "fillOpacity": 80, "gradientMode": "none", - "hideFrom": { "legend": false, "tooltip": false, "viz": false }, + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, "lineWidth": 1, "pointSize": 5, - "scaleDistribution": { "type": "linear" }, + "scaleDistribution": { + "type": "linear" + }, "showPoints": "never", "spanNulls": false, - "stacking": { "group": "A", "mode": "normal" }, - "thresholdsStyle": { "mode": "off" } + "stacking": { + "group": "A", + "mode": "normal" + }, + "thresholdsStyle": { + "mode": "off" + } } }, "overrides": [] }, "options": { - "legend": { "calcs": ["sum", "mean"], "displayMode": "table", "placement": "bottom" }, - "tooltip": { "mode": "multi", "sort": "desc" } + "legend": { + "calcs": [ + "sum", + "mean" + ], + "displayMode": "table", + "placement": "bottom" + }, + "tooltip": { + "mode": "multi", + "sort": "desc" + } }, "targets": [ { - "datasource": { "type": "grafana-postgresql-datasource", "uid": "payslips-pg" }, + "datasource": { + "type": "grafana-postgresql-datasource", + "uid": "payslips-pg" + }, "rawSql": "SELECT pay_date AS \"time\", income_tax, national_insurance, pension_employee, student_loan FROM payslip_ingest.payslip WHERE $__timeFilter(pay_date) ORDER BY pay_date", "format": "time_series", - "refId": "A" + "refId": "A", + "rawQuery": true, + "editorMode": "code" } ] }, @@ -167,11 +290,21 @@ "id": 4, "title": "Latest effective rate & take-home %", "type": "timeseries", - "datasource": { "type": "grafana-postgresql-datasource", "uid": "payslips-pg" }, - "gridPos": { "h": 9, "w": 12, "x": 12, "y": 9 }, + "datasource": { + "type": "grafana-postgresql-datasource", + "uid": "payslips-pg" + }, + "gridPos": { + "h": 9, + "w": 12, + "x": 12, + "y": 9 + }, "fieldConfig": { "defaults": { - "color": { "mode": "palette-classic" }, + "color": { + "mode": "palette-classic" + }, "unit": "percent", "min": 0, "max": 100, @@ -185,40 +318,75 @@ "drawStyle": "line", "fillOpacity": 10, "gradientMode": "none", - "hideFrom": { "legend": false, "tooltip": false, "viz": false }, + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, "lineWidth": 2, "pointSize": 5, - "scaleDistribution": { "type": "linear" }, + "scaleDistribution": { + "type": "linear" + }, "showPoints": "auto", "spanNulls": false, - "stacking": { "group": "A", "mode": "none" }, - "thresholdsStyle": { "mode": "off" } + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } } }, "overrides": [] }, "options": { - "legend": { "calcs": ["last", "mean"], "displayMode": "table", "placement": "bottom" }, - "tooltip": { "mode": "multi", "sort": "desc" } + "legend": { + "calcs": [ + "last", + "mean" + ], + "displayMode": "table", + "placement": "bottom" + }, + "tooltip": { + "mode": "multi", + "sort": "desc" + } }, "targets": [ { - "datasource": { "type": "grafana-postgresql-datasource", "uid": "payslips-pg" }, + "datasource": { + "type": "grafana-postgresql-datasource", + "uid": "payslips-pg" + }, "rawSql": "SELECT pay_date AS \"time\", ROUND(((income_tax + national_insurance)::numeric / NULLIF(gross_pay, 0)) * 100, 2) AS \"effective_rate_pct\", ROUND((net_pay::numeric / NULLIF(gross_pay, 0)) * 100, 2) AS \"take_home_pct\" FROM payslip_ingest.payslip WHERE $__timeFilter(pay_date) ORDER BY pay_date", "format": "time_series", - "refId": "A" + "refId": "A", + "rawQuery": true, + "editorMode": "code" } ] } ], "refresh": "5m", "schemaVersion": 39, - "tags": ["finance", "personal", "uk-tax"], - "templating": { "list": [] }, - "time": { "from": "now-2y", "to": "now" }, + "tags": [ + "finance", + "personal", + "uk-tax" + ], + "templating": { + "list": [] + }, + "time": { + "from": "now-2y", + "to": "now" + }, "timepicker": {}, "timezone": "browser", "title": "UK Payslip", "uid": "uk-payslip", "version": 1 -} +} \ No newline at end of file