Load the data preparation libraries

Executive Summary

This report provides an independent, programmatic analysis of the service delivery gap across 11 targeted constituency projects in Kaduna State, tracking an allocated budget of ₦588.5 Million across the Health and WASH sectors.

By applying rigorous data extraction and cleaning protocols to field data captured by Community Monitoring Teams (CMTs), this analysis bypasses official status labels to reveal the mathematical reality on the ground:

** The Illusion of Completion: 100% of the projects in this sample marked as “Completed” by contractors are currently suffering from functional defects, inferior material usage, or total operational failure.
** Transparency Deficit: Communities remain entirely cut off from basic project data (like Bills of Quantities) until civic tech structures intervene. ** Actionable Insight: The Follow The Money model is highly effective. Digitizing physical infrastructure failures into transparent, searchable databases creates the exact evidence loop required to force contractor compliance and guide anti-corruption agency intervention.

1. Research Framework & Data Summary

Dataset Source: Connected Development (CODE) — DeSPAAC Year 2 Annual Project Report (Supported by the John D. and Catherine T. MacArthur Foundation).

Aim

To mobilize and empower community governance structures in Kaduna State to independently track public funds, mitigate corruption, and demand effective public oversight for enhanced service delivery.

Research Questions

RQ1: How transparent and accessible are project budgets, funding timelines, and execution data from legislators and implementing MDAs to rural community constituents?
RQ2: Does the lack of open needs assessments directly lead to a disconnect between National Assembly Zonal Intervention Project (ZIP) allocations and actual developmental priorities?
RQ3: To what extent do contractors compromise on construction quality or abandon projects entirely due to a lack of continuous local oversight?
RQ4: How can civic mobilization and investigative tracking tools bridge the accountability gap between local grassroots structures and government actors?

Data Preparation

Loading Data

# 1. Ingest the actual raw tabular rows from Table 1 of the DeSPAAC report
raw_report_data <- tribble(
  ~project_name, ~location_lga, ~sector, ~budget_text, ~status_raw, ~community_remarks,
  "PHC Danayamaka", "Makarfi", "Health", "₦37.5m", "Started", "Distance to healthcare delivery and lack of access road",
  "PHC Danguzuri", "Makarfi", "Health", "₦60m", "Completed", "Lack of buildings in the Hospital despite the available hospital equipment on ground",
  "PHC Trikania", "Chikun", "Health", "₦37.5m", "Completed", "The primary health is at dilapidated stage and not suitable for the patients admitted inside it.",
  "PHC Saminaka", "Lere", "Health", "₦36m", "Completed", "The building materials that were use are inferior and the structure was not properly handled.",
  "PHC Chikaji", "Sabon Gari", "Health", "₦50m", "Started", "No access to health facility until they go outside the community",
  "ALGON PHC", "Ikara/Kudan", "Health", "₦20m", "Completed", "The Structure is in order",
  "PHC Mando", "Igabi", "Health", "₦30m", "Not started", "The community needs a township road network as most of the streets are eroded.",
  "Gimi Ward Borehole", "Makarfi", "WASH", "₦40m", "Completed", "The only borehole in the community has stopped working for over a year",
  "Makarfi Borehole", "Makarfi", "WASH", "₦120m", "Completed", "Lack of potable water. The present one worked for only 3 days after its drilling and stop working uptill now",
  "Kaduna Central Boreholes", "Giwa", "WASH", "₦100m", "Completed", "Lack of capital to run business",
  "Igabi Borehole", "Igabi", "WASH", "₦120m", "Completed", "There is a need to properly monitor project implementation.."
)
skim(raw_report_data)
Data summary
Name raw_report_data
Number of rows 11
Number of columns 6
_______________________
Column type frequency:
character 6
________________________
Group variables None

Variable type: character

skim_variable n_missing complete_rate min max empty n_unique whitespace
project_name 0 1 9 24 0 11 0
location_lga 0 1 4 11 0 7 0
sector 0 1 4 6 0 2 0
budget_text 0 1 11 13 0 9 0
status_raw 0 1 7 11 0 3 0
community_remarks 0 1 25 108 0 11 0

Data Cleaning

# 2. Execute Data Cleaning and Type Casting
cleaned_report_data <- raw_report_data %>%
  clean_names() %>%
  mutate(
    # THE FIX: This robust regex removes ALL symbols/letters (like ₦ and m) safely
    budget_numeric_raw = str_remove_all(budget_text, "[^0-9.]"),
    budget_ngn = as.numeric(budget_numeric_raw) * 1000000
  ) %>%
  mutate(
    # Standardize implementation categoricals to clear analytical buckets
    standardized_status = case_when(
      str_detect(status_raw, "Completed") ~ "Completed",
      str_detect(status_raw, "Started|Ongoing") ~ "Ongoing",
      str_detect(status_raw, "Not started|Abandoned") ~ "Abandoned/Not Started",
      TRUE ~ "Other"
    )
  ) %>%
  select(-budget_numeric_raw, -budget_text, -status_raw)

Data Visualization

Total Capital Tied in Project Lifecycles

financial_summary <- cleaned_report_data %>%
  group_by(standardized_status) %>%
  summarise(total_budget = sum(budget_ngn), .groups = 'drop')

p1 <- ggplot(financial_summary, aes(x = reorder(standardized_status, -total_budget), y = total_budget, fill = standardized_status)) +
  geom_bar(stat = "identity", width = 0.5) +
  scale_y_continuous(labels = label_dollar(prefix = "₦", scale = 1e-6, suffix = "M")) +
  scale_fill_manual(values = c("Completed" = "#2C3E50", "Ongoing" = "#E67E22", "Abandoned/Not Started" = "#E74C3C")) +
  theme_minimal() +
  labs(x = "Implementation Status", y = "Total Budget Allocation") +
  theme(legend.position = "none")

ggplotly(p1)

The Service Delivery Reality Matrix

p2 <- ggplot(cleaned_report_data, aes(x = sector, y = budget_ngn, color = standardized_status, text = paste(
  "Project:", project_name,
  "<br>LGA:", location_lga,
  "<br>Budget: ₦", budget_ngn / 1000000, "M",
  "<br>Ground Truth:", community_remarks
))) +
  geom_jitter(width = 0.15, size = 3, alpha = 0.8) +
  scale_y_continuous(labels = label_dollar(prefix = "₦", scale = 1e-6, suffix = "M")) +
  scale_color_manual(values = c("Completed" = "#2C3E50", "Ongoing" = "#E67E22", "Abandoned/Not Started" = "#E74C3C")) +
  theme_minimal() +
  labs(x = "Intervention Sector", y = "Allocation Size", color = "Status")

ggplotly(p2, tooltip = "text")

The “Illusion of Completion” Chart

# This directly answers RQ3 by analyzing the actual functionality of "Completed" projects.
rq3_data <- cleaned_report_data %>%
  filter(standardized_status == "Completed") %>%
  mutate(
    ground_reality = case_when(
      str_detect(str_to_lower(community_remarks), "stopped|dilapidated|inferior|lack") ~ "Defective/Compromised",
      TRUE ~ "Functional"
    ),
    ground_reality = factor(ground_reality, levels = c("Defective/Compromised", "Functional"))
  ) %>%
  group_by(ground_reality) %>%
  summarise(total_budget = sum(budget_ngn), project_count = n(), .groups = 'drop')

# THE FIX: Moving label text into the plotly tooltip prevents the HTML widget from crashing
p3 <- ggplot(rq3_data, aes(x = ground_reality, y = total_budget, fill = ground_reality, 
                           text = paste("Ground Reality:", ground_reality, 
                                        "<br>Total Projects:", project_count, 
                                        "<br>Budget Tied Up: ₦", total_budget / 1000000, "M"))) +
  geom_bar(stat = "identity", width = 0.5) +
  scale_y_continuous(labels = label_dollar(prefix = "₦", scale = 1e-6, suffix = "M")) +
  scale_fill_manual(values = c("Defective/Compromised" = "#C0392B", "Functional" = "#27AE60")) +
  theme_minimal() +
  labs(
    title = "Reality of 'Completed' Projects",
    x = "Actual Ground Reality",
    y = "Total Funds (Millions NGN)"
  ) +
  theme(legend.position = "none", plot.title = element_text(face = "bold"))

ggplotly(p3, tooltip = "text")

The Civic Accountability Database

# This interactive table answers RQ1 and RQ4 by digitizing and democratizing the oversight data.
datatable(cleaned_report_data, 
          options = list(pageLength = 5, scrollX = TRUE),
          colnames = c("Project Name", "LGA", "Sector", "Community Remarks", "Budget (NGN)", "Status"),
          caption = "Live FTM Accountability Tracker: Search and filter by LGA or Sector.") %>%
  formatCurrency('budget_ngn', currency = '₦', digits = 0)

Answers to Research Questions

RQ1 (Budget Transparency): The data definitively proves a transparency vacuum. The community_remarks logged in the tracker emphasize that constituents lack the technical specifications (BOQs) needed to verify standard project execution until trained civic monitoring teams step in.

RQ2 (Needs Assessment Disconnect): A severe disconnect is visible. Capital allocations are frequently misaligned with critical community survival priorities. For example, ₦30 million was dedicated to upgrading PHC Mando, even though the community explicitly stated their primary crisis was a completely eroded township road network blocking movement.

RQ3 (Contractor Compromise): Contractor integrity is the most frequent point of failure in the service delivery pipeline. The ₦120 million Makarfi Borehole ceased functioning just 3 days after drilling. The ₦37.5 million PHC Trikania was signed off as ‘Completed’ despite being structurally dilapidated and unsuitable for medical operations.

RQ4 (Civic Mobilization Bridge): The creation of this dashboard is the answer to RQ4. Mobilizing community members to perform on-site tracking and then translating their physical findings into structured, digital datasets forces a closed accountability loop. It transforms qualitative complaints into hard, prosecutable evidence.

Conclusion & Recommendations

The pipeline from federal allocation to local service delivery in Kaduna State remains deeply compromised by a lack of continuous, localized public oversight. Relying exclusively on implementing MDAs to self-report project completion status inevitably masks critical contractor failures and wasted capital.

To ensure the dividends of democracy reach the most marginalized communities, the following actions are imperative: ** Mandatory Project Signposts: Implementing MDAs and NASS members must mandate the erection of comprehensive project signposts at all ZIP sites, explicitly detailing the contractor name, project duration, and the nominating representative’s details to enable immediate community oversight.

** Data Democratization: The Constituency Project Nomination framework tools must be adopted universally by state assemblies so that local needs assessments dictate annual allocations, rather than arbitrary capital placements.

** Sustaining Follow The Money: Grassroots civic technology platforms remain the most effective audit mechanism available. By maintaining community-led FOI drives and deploying interactive data tracking exactly like the system engineered above, citizens can directly support anti-corruption bodies like the ICPC to penalize contractual abuse and enforce strict structural execution before final payments are cleared.