Overview

The House committee report on the FY 2027 budget (HB 10858, 6 October 2026) keeps the executive’s ₱7.2 trillion total and moves about ₱200 billion around inside it. The money comes out of rail, foreign-assisted roads, pensions, the calamity fund, and public-health commodities, and goes into AICS, MAIFIP, DPWH’s two Basic Infrastructure Program lump lines, and the House’s own budget. This report leads with what the House changed, then revises the assessment of the NEP that PBC published in September: the macro-fiscal backdrop, what is inside the budget, where the pork risks sit, and what advocates can still push for on the floor, in the Senate, and in the bicam.

It draws on three compilations of DBM and congressional data. The first is a Program/Activity/Project (P/A/P) level workbook covering every national government agency, DPWH, the State Universities and Colleges, budgetary support to government corporations, and the special purpose funds, FY 2020 to FY 2027, now with the House committee report encoded against the NEP line by line. The second is DPWH’s appropriations by operating unit, down to each district engineering office. The third is an agency-level series of appropriations, allotments, obligations, and disbursements from FY 2016. Macroeconomic and fiscal actuals come from PSA, BSP, and Bureau of the Treasury series.

1 Key takeaways

  1. The House kept the total to the million and moved ₱199B. It raised 123 lines by ₱198.9B and cut 87 by the same amount. Four lines took 61% of the additions: DPWH’s BIP multi-purpose buildings (+₱42.7B) and access roads (+₱29.2B), AICS (+₱24.8B), and MAIFIP (+₱24.0B). The cuts fell on the foreign-assisted bypass roads (−₱53.5B), the Subway and NSCR (−₱34.7B), the Pension and Gratuity Fund (−₱10B), the calamity fund (−₱9.5B), and DOH’s immunization and family-health commodities (−₱4.9B).
  2. PBC’s red-flag basket grew from ₱864B to ₱948B at the committee stage, or from ₱976B to ₱1,060B counting unprogrammed appropriations. The patronage group rose 50%, from ₱140B to ₱210B, and now sits within ₱10B of what Congress enacted for the same lines in 2026. Congress added ₱5.0B to its own budget. Inside infrastructure, ₱90B swapped out of the national network, flood control, HFEP, and classrooms and into the two BIP lump lines.
  3. DPWH’s total barely moved but its shape did. The Central Office lost ₱42B; the 198 district engineering offices gained ₱54B, 158 of them up, and their share of DPWH rose from 20% to 28%. Ilocos Norte 1st DEO went from ₱414M to ₱4.8B. No project list and no sub-program breakdown by office has been published.
  4. The House’s crisis response is ₱1.5B of fuel relief against ₱49B added to AICS and MAIFIP. Crop insurance, palay procurement, 4Ps, social pension, the food stamp program, PhilHealth, DOE, and NEA are untouched. NIA, for which the BARSc announced ₱4.1B in additions, ends ₱1.2B below the NEP in the bill.
  5. The budget still grows 6% while agency budgets grow 2%. Of the ₱407B increase, ₱316B is automatic appropriations, and interest alone rises ₱164B. Counting payroll, 63.8% of the budget is non-allocable and the allocable remainder falls in nominal pesos. The House did not change the programmed total.
  6. The growth bet is now less national network, more local roads. The NEP’s transport and connectivity lines were ₱442B; the House took ₱108B out of rail and DPWH’s foreign-assisted projects and put most of it into locally identified roads and buildings.
  7. The House cut ₱130B from foreign-assisted projects and kept unprogrammed appropriations at the NEP’s ₱112.0B. Twenty loan-financed projects lost money, none gained, and none was given standby cover. Whether they reappear under unprogrammed appropriations in the Senate or the bicam is the first thing to check in December.
  8. The asks are the same, and the fund sources are now visible. Restore the immunization commodities, the calamity fund, HFEP, and classrooms; convert the MAIFIP and AICS additions into entitlements; fund crop insurance, palay procurement, 4Ps, and fuel relief for farmers and fisherfolk; and make project-level disclosure the condition of release for every peso in the BIP lump lines, which now hold ₱219B.

2 What the House changed

# House committee report (HB 10858, as amended by the Budget Amendments Review Subcommittee, 6 October 2026)
hs <- L %>% filter(!is.na(H27) | !is.na(N27)) %>%
  mutate(H27 = coalesce(H27, 0), N27 = coalesce(N27, 0), dH = H27 - N27,
         status = case_when(coalesce(nia_adj, FALSE) ~ "NIA program-level adjustment",
                            N27 == 0 & H27 > 0 ~ "New line in the House bill",
                            N27 > 0 & H27 == 0 ~ "Line removed by the House",
                            dH > 0.0005 ~ "Increased", dH < -0.0005 ~ "Decreased", TRUE ~ "Unchanged"),
         short = PAP %>% str_replace("^Foreign-Assisted Projects?:\\s*", "FAP: ") %>% str_replace("^Locally-Funded Projects?:\\s*", "LFP: ") %>%
           str_replace("Conduct of police patrol operations.*$", "Conduct of police patrol operations [shortened]") %>%
           str_replace("For Payment of Pension, Retirement and Terminal Leave Benefits.*$", "Pension, retirement and terminal leave benefits [shortened]") %>%
           str_replace("For disaster risk reduction or mitigation, prevention and preparedness activities.*$", "Disaster risk reduction, prevention and preparedness [shortened]") %>%
           str_replace("Protective Services for Individuals and Families in Difficult Circumstances", "Protective Services (AICS)") %>%
           str_replace("Medical Assistance to Indigent and Financially - Incapacitated Patients \\(MAIFIP\\)", "MAIFIP") %>%
           str_replace("\\s+(ADB|JICA|IBRD|Korea|WB|AIIB) Loan.*$", "") %>% str_squish(),
         lab = str_wrap(paste0(dep, ": ", short), 70))
h_tot <- hs %>% summarise(up = sum(pmax(dH, 0)), dn = sum(pmin(dH, 0)),
                          n_up = sum(dH > 0.0005), n_dn = sum(dH < -0.0005), n_new = sum(status == "New line in the House bill"),
                          new_amt = sum(H27[status == "New line in the House bill"]), n_rm = sum(status == "Line removed by the House"),
                          N27 = sum(N27), H27 = sum(H27))
hd <- function(rx, dep = NULL, agy = NULL) { d <- hs %>% filter(str_detect(coalesce(PAP, ""), regex(rx, ignore_case = TRUE)))
  if (!is.null(dep)) d <- d %>% filter(.data$dep %in% !!dep); if (!is.null(agy)) d <- d %>% filter(str_detect(.data$agy, agy))
  d %>% summarise(across(c(N26, G26, N27, H27, dH), ~ sum(.x, na.rm = TRUE))) }

The House Committee on Appropriations reported out HB 10858 on 6 October 2026, after plenary debates from 15 to 25 September and a one-day Budget Amendments Review Subcommittee (BARSc) on 1 October. The bill keeps the executive’s programmed total: ₱4,494.1B against ₱4,494.1B in the NEP, the same total to the million. Inside that total it raised 123 line items by ₱198.9B and cut 87 by ₱198.9B. This part sets out where the money went, where it came from, and what that does to the assessment of the NEP that follows.

The committee report is not the final House version. Individual amendments follow on second reading, and last year the House raised its own budget by ₱10.8B after the amendments subcommittee had finished. The Senate then writes its own bill, and the bicameral conference reconciles the two. Every figure below should be read as the House’s opening position.

2.1 The envelope: a fixed total, ₱199 billion moved

hst <- hs %>% mutate(status = ifelse(status == "NIA program-level adjustment", ifelse(dH > 0, "Increased", "Decreased"), status)) %>%
  group_by(status) %>% summarise(lines = n(), amt = sum(abs(dH)), .groups = "drop") %>%
  filter(status != "Unchanged") %>%
  mutate(status = factor(status, levels = c("Increased", "New line in the House bill", "Decreased", "Line removed by the House")),
         sign = ifelse(status %in% c("Increased", "New line in the House bill"), amt, -amt),
         leg = sprintf("%s: %s lines, PHP %sB", status, lines, comma(amt, accuracy = 0.1)))
leg_lv <- hst %>% arrange(status) %>% pull(leg)
ggplot(hst, aes(sign, "", fill = factor(leg, levels = leg_lv))) +
  geom_col(width = 0.6) + geom_vline(xintercept = 0, color = "grey40") +
  geom_text(data = hst %>% filter(amt > 20), aes(label = paste0(comma(amt, accuracy = 0.1), "B")), position = position_stack(vjust = 0.5), size = 3.4, color = "white", fontface = "bold") +
  scale_fill_manual(values = setNames(c(up_col, "#5AAE61", dn_col, "#E08080"), leg_lv)) +
  scale_x_continuous(labels = function(x) paste0(peso, comma(abs(x)), "B")) +
  labs(x = NULL, y = NULL, title = "The House moved about PHP 200B in each direction and left the total where it was",
       subtitle = "Sum of line-item changes between the NEP and the House committee report, by type",
       caption = "Covers programmed new appropriations in the P/A/P workbook. Unprogrammed and automatic appropriations are not itemized in the House bill data.") +
  theme_pbc() + guides(fill = guide_legend(nrow = 2))

Of the 8,835 lines in the workbook, 210 changed. The additions are concentrated: the ten largest increases account for ₱154B of the ₱199B added, and the ten largest cuts for ₱137B of the ₱199B removed. 38 lines that had no amount in the NEP now carry ₱18.2B, the largest of them the ₱10B Presidential Assistance to Farmers and Fisherfolk, which Congress also created in 2026.

The BARSc tables read into the livestream on 1 October summed to ₱116.3B of additions. The committee report shows ₱199B. The difference is almost entirely DPWH, where the subcommittee announced an ₱11.5B net increase but the bill shows ₱98B added to some lines and ₱86B taken from others. The BARSc also did not say what would be cut to pay for the additions. The bill answers that question, and the answer is in the next sections.

2.2 The largest increases and decreases

top_up <- hs %>% slice_max(dH, n = 20)
ggplot(top_up, aes(dH, reorder(lab, dH))) +
  geom_col(fill = up_col, width = 0.72) +
  geom_text(aes(label = paste0("+", comma(dH, accuracy = 0.01))), hjust = -0.15, size = 3) +
  scale_x_continuous(labels = function(x) paste0(peso, comma(x), "B"), expand = expansion(mult = c(0, 0.12))) +
  labs(x = NULL, y = NULL, title = "Twenty largest increases: House committee report against the NEP",
       subtitle = "Change in programmed new appropriations by line item, PHP billions",
       caption = "FAP = foreign-assisted project; LFP = locally-funded project. Loan references and very long labels are shortened.") +
  theme_pbc(11) + theme(panel.grid.major.y = element_blank(), panel.grid.major.x = element_line(color = "grey90"), axis.text.y = element_text(size = 8.3, lineheight = 0.85))

Four lines take 61% of everything the House added: the two Basic Infrastructure Program lump lines in DPWH (multi-purpose buildings ₱42.7B and access roads ₱29.2B), AICS (₱24.8B) and MAIFIP (₱24.0B). The NEP had cut AICS and MAIFIP back to the executive’s own 2026 proposal levels; the House has restored them to ₱58.1B and ₱48.2B, within a few billion of what Congress enacted for 2026. Add TUPAD, PAFF, Tulong Dunong, and Financial Assistance to LGUs, and the ayuda-and-LGU basket accounts for about ₱69B of the additions.

The rest of the list is smaller and, on the whole, defensible: secondary and tertiary road maintenance, DOH’s vaccine and medicines line (₱1.8B), tertiary education subsidies, DepEd’s private-school vouchers, TESDA scholarships, water supply, DSWD’s quick response fund, and a ₱1.0B fuel subsidy line for the transport sector that the NEP had left empty. The House also gave itself ₱5.0B, split between the legislation and general management lines of the House of Representatives.

top_dn <- hs %>% slice_min(dH, n = 20)
ggplot(top_dn, aes(dH, reorder(lab, -dH))) +
  geom_col(fill = dn_col, width = 0.72) +
  geom_text(aes(label = comma(dH, accuracy = 0.01)), hjust = 1.15, size = 3) +
  scale_x_continuous(labels = function(x) paste0(peso, comma(x), "B"), expand = expansion(mult = c(0.14, 0.02))) +
  labs(x = NULL, y = NULL, title = "Twenty largest decreases: House committee report against the NEP",
       subtitle = "Change in programmed new appropriations by line item, PHP billions",
       caption = "FAP = foreign-assisted project; LFP = locally-funded project. Loan references and very long labels are shortened.") +
  theme_pbc(11) + theme(panel.grid.major.y = element_blank(), panel.grid.major.x = element_line(color = "grey90"), axis.text.y = element_text(size = 8.3, lineheight = 0.85))

The cuts are the familiar list. Foreign-assisted projects pay first and are set out in the next subsection. The other sources are the Pension and Gratuity Fund (₱10B), the calamity fund’s reconstruction assistance to LGUs (₱7.8B) and its new preparedness lump, DOH’s family health and immunization commodities (₱4.9B) and Health Facilities Enhancement Program (₱4.5B), DepEd’s computerization and classroom lines, DPWH’s Support to Operations, and the Philippine Reclamation Authority’s exhibition center. Two of these deserve a second look. Cutting the immunization commodities line by more than half while adding to MAIFIP is a trade of a public-health entitlement for a referral-based benefit. And the HFEP cut goes against the grain of six straight years in which Congress raised that line; it suggests the health-facility money moved into DPWH’s multi-purpose buildings instead.

2.2.1 Foreign-assisted projects

hs <- hs %>% mutate(fap = str_detect(coalesce(PAP, ""), "^Foreign-As+i?s+ted"))
fap_dep <- hs %>% filter(fap) %>% group_by(dep) %>%
  summarise(lines = n(), changed = sum(abs(dH) > 0.0005), N27 = sum(N27), H27 = sum(H27), dH = sum(dH), .groups = "drop") %>%
  filter(N27 + H27 > 0) %>% arrange(dH)
fap_tot <- fap_dep %>% summarise(lines = sum(lines), changed = sum(changed), N27 = sum(N27), H27 = sum(H27), dH = sum(dH))
fap_dpwh <- fap_dep %>% filter(dep == "DPWH")
fap_share <- -fap_tot$dH / -h_tot$dn * 100
fd <- fap_dep %>% filter(abs(dH) > 0.0005) %>% select(dep, `NEP 2027` = N27, `House bill 2027` = H27) %>% pivot_longer(-dep) %>%
  mutate(name = factor(name, levels = c("House bill 2027", "NEP 2027")))
ord_f <- fap_dep %>% filter(abs(dH) > 0.0005) %>% arrange(desc(N27)) %>% pull(dep) %>% rev()
ggplot(fd, aes(value, factor(dep, levels = ord_f), fill = name)) +
  geom_col(position = position_dodge(width = 0.8), width = 0.75) +
  geom_text(aes(label = comma(value, accuracy = 0.1)), position = position_dodge(width = 0.8), hjust = -0.15, size = 3) +
  scale_fill_manual(values = ver_pal[c("NEP 2027", "House bill 2027")], breaks = c("NEP 2027", "House bill 2027")) +
  scale_x_continuous(labels = function(x) paste0(peso, comma(x), "B"), expand = expansion(mult = c(0, 0.1))) +
  labs(x = NULL, y = NULL, title = "Foreign-assisted projects cut by the House, by department",
       subtitle = "Programmed new appropriations for foreign-assisted projects, PHP billions; departments with any change",
       caption = "Includes both the loan-proceeds and the government-counterpart components where the bill shows them as one line.") +
  theme_pbc() + theme(panel.grid.major.y = element_blank(), panel.grid.major.x = element_line(color = "grey90"))

The committee report cut 20 of the 95 foreign-assisted lines in the bill and raised none. Foreign-assisted appropriations fall from ₱414.8B to ₱284.8B, a cut of ₱130.0B that accounts for 65% of everything the House took out of the budget. DPWH’s foreign-assisted lines lose 62% of their NEP amount, from ₱117.7B to ₱44.7B; DOTr’s rail and transport loans lose ₱42.8B. The rest is spread across World Bank and ADB projects in DSWD, DepEd, DICT, DA, the Civil Service Commission, DOH and DAR.

Three things follow. First, these are signed loans. Cutting the appropriation does not cancel the loan; it delays drawdowns, and the government pays commitment fees on undrawn balances in the meantime. Second, the cut does not produce cash for AICS or the BIP lines. Loan proceeds can only be spent on the project they finance, so what the House actually did was use the borrowing room the NEP had reserved for these projects to fund general-fund spending instead. Third, the House kept unprogrammed appropriations at the NEP’s ₱112.0B, so none of these projects has a standby appropriation to fall back on. In 2024 and 2025 Congress moved cut foreign-assisted projects into unprogrammed appropriations at the bicam. If the Senate or the bicam restores them that way, the unprogrammed total will tell.

hs %>% filter(fap, abs(dH) > 0.0005) %>% arrange(dH) %>%
  transmute(Department = dep, `Foreign-assisted project` = PAP, `NEP 2027` = bn(N27, 2), `House bill 2027` = bn(H27, 2), `Change` = fmt_chg(dH), `Change (%)` = sprintf("%.0f", dH / N27 * 100)) %>%
  kbl_clean(font = 12, align = c("l", "l", "r", "r", "r", "r"), caption = "Every foreign-assisted line the House changed (PHP billions)") %>%
  column_spec(2, width = "52%") %>% column_spec(5, bold = TRUE)
Every foreign-assisted line the House changed (PHP billions)
Department Foreign-assisted project NEP 2027 House bill 2027 Change Change (%)
DPWH Foreign-Assisted Projects: Construction of By-Pass and Diversion Roads 80.88 27.38 -53.50 -66
DOTr Foreign-Assisted Project: Metro Manila Subway Project (MMSP) Phase I JICA Loan Nos. PH-P267, PH-P275, PH-P279 and PH-P286 67.44 47.74 -19.70 -29
DOTr Foreign-Assisted Project: North-South Commuter Railway (NSCR) System ADB Loan Nos. 3796-PHI, 4188-PHI and 4589-PHI, and JICA Loan Nos. PH-P262, PH-P270, PH-P276 and PH-P277 123.84 108.84 -15.00 -12
DPWH Foreign-Assisted Projects: Construction/Rehabilitation of Flood Mitigation Facilities within Major River Basins and Principal Rivers 19.60 8.85 -10.75 -55
DSWD Foreign-Assisted Project: Panahon ng Pagkilos: Philippine Community Resilience Project WB Loan No. 98460-PH 17.66 12.12 -5.54 -31
DOTr Foreign-Assisted Project: Davao Public Transport Modernization Project (DPTMP) ADB Loan Nos. 4324-PHI, 8450-PHI and 8449-PHI 15.08 9.98 -5.10 -34
DPWH Foreign-Assisted Projects: Preventive Maintenance - Primary Roads 5.21 1.71 -3.50 -67
DOTr Foreign-Assisted Project: New Cebu International Container Port Project (NCICPP) Korea EDCF Loan No. PHL-19 8.99 5.99 -3.00 -33
DPWH Foreign-Assisted Projects: Rehabilitation/ Major Repair of Permanent Bridges 3.66 1.66 -2.00 -55
DICT Foreign-Assisted Project: Philippine Digital Infrastructure Project IBRD Loan No. 9730-PH 2.16 0.36 -1.80 -83
DPWH Foreign-Assisted Projects: Rehabilitation/ Reconstruction/ Upgrading of Damaged Paved Roads - Tertiary Roads 2.87 1.12 -1.75 -61
DA Foreign-Assisted Project: Philippine Rural Development Project Scale-Up (PRDP-SU) IBRD Loan No. 9577-PH 8.86 7.37 -1.49 -17
DepEd Foreign-Assisted Project: Project for Learning Upgrade Support and Decentralization (PLUS-D) WB Loan No. 9933-PH 10.81 9.41 -1.40 -13
DPWH Foreign-Assisted Projects: Construction of Missing Links/ New Roads 3.57 2.19 -1.38 -39
CSC Foreign-Assisted Project: Philippine Civil Service Modernization Project IBRD Loan No. 9766-PH 1.45 0.33 -1.12 -77
DOH Foreign-Assisted Project: Philippines Health System Resilience Project, Phase 1 WB Loan No. 9781-PH 7.73 6.73 -1.00 -13
DepEd Foreign-Assisted Project: Infrastructure for Safer and Resilient Schools (ISRS) Project WB Loan No. 9704-PH 2.16 1.22 -0.94 -44
DAR Foreign-Assisted Project: Value Chain Innovation for Sustainable Transformation in Agrarian Reform Communities (VISTA) IFAD Loan No. 200000501900 and IFAD Loan No. 200000502000 2.00 1.40 -0.60 -30
DA Foreign-Assisted Project: Mindanao Inclusive Agriculture Development Project (MIADP) IBRD Loan No. 9488-PH 1.51 1.21 -0.30 -20
DPWH Foreign-Assisted Projects: Construction of New Bridges 1.76 1.65 -0.12 -7

2.3 By department and special purpose fund

hdp <- hs %>% group_by(dep) %>% summarise(N27 = sum(N27), H27 = sum(H27), up = sum(pmax(dH, 0)), dn = sum(pmin(dH, 0)), net = sum(dH), .groups = "drop") %>%
  filter(abs(net) > 0.005 | up > 0.005 | dn < -0.005) %>%
  mutate(dep_lab = recode(dep, "ALGU" = "Allocations to LGUs", "BSGC" = "Support to GOCCs", "NDRRMF" = "NDRRM (calamity) fund",
                          "Pension and Gratuity Fund" = "Pension and Gratuity Fund", "OEOs" = "Other Executive Offices", "CONGRESS" = "Congress"))
hdc <- hdp %>% filter(up >= 0.25 | dn <= -0.25)
ord_h <- hdc %>% arrange(net) %>% pull(dep_lab)
hdl <- hdc %>% select(dep_lab, Increases = up, Decreases = dn) %>% pivot_longer(-dep_lab)
ggplot() +
  geom_col(data = hdl, aes(value, factor(dep_lab, levels = ord_h), fill = name), width = 0.72) +
  geom_point(data = hdc, aes(net, factor(dep_lab, levels = ord_h)), shape = 21, fill = "white", size = 2.6, stroke = 1) +
  geom_text(data = hdc, aes(ifelse(net >= 0, up, dn), factor(dep_lab, levels = ord_h), label = ifelse(net >= 0, paste0("+", comma(net, accuracy = 0.1)), comma(net, accuracy = 0.1)),
                            hjust = ifelse(net >= 0, -0.2, 1.2)), size = 2.9, fontface = "bold") +
  geom_vline(xintercept = 0, color = "grey40") +
  scale_fill_manual(values = c(Increases = up_col, Decreases = dn_col)) +
  scale_x_continuous(labels = function(x) paste0(peso, comma(abs(x)), "B"), expand = expansion(mult = c(0.1, 0.1))) +
  labs(x = NULL, y = NULL, title = "Where the House added and where it cut, by department and fund",
       subtitle = "Gross increases (green) and decreases (red) in line items; the dot and label are the net change, PHP billions",
       caption = "Departments and funds with gross changes of PHP 250M or more; the table below has all of them. SUCs are shown as one group. DPWH's bar shows the realignment inside the department: PHP 98B added to some lines, PHP 86B taken from others.") +
  theme_pbc(11) + theme(panel.grid.major.y = element_blank(), panel.grid.major.x = element_line(color = "grey90"))

hdp %>% arrange(desc(net)) %>%
  transmute(`Department or fund` = dep_lab, `NEP 2027` = N27, `House bill 2027` = H27, `Increases` = up, `Decreases` = dn, `Net change` = net, `Net change (%)` = net / N27 * 100) %>%
  dt_table(caption = "Changes by department and special purpose fund, House committee report against the NEP (PHP billions)", page = 15,
           money_cols = c("NEP 2027", "House bill 2027", "Increases", "Decreases", "Net change"), money_digits = 2, pct_cols = "Net change (%)")

Net of its own cuts, the House added most to DSWD (₱22.2B, nearly all AICS), DOH (₱12.2B, where a ₱24B MAIFIP addition is offset by cuts to commodities and HFEP), DPWH (₱11.5B net on ₱98B gross), DA (₱11.2B, led by PAFF and farm-to-market roads), DOLE, Congress itself, Allocations to LGUs, and the CHED and TESDA lines under Other Executive Offices. It took most from DOTr (₱40.5B, all rail and foreign-assisted transport), the Pension and Gratuity Fund, the calamity fund, DepEd, DICT, and GOCC support. DepEd, the department the DBM describes as the budget’s top priority, ends the House stage ₱6.2B below the executive’s proposal.

2.3.1 By expense class

hc <- long %>% filter(year == 2027, cls != "TOTAL", src %in% c("NEP", "HGAB")) %>% group_by(src, cls) %>% summarise(amt = sum(amt, na.rm = TRUE) / 1e9, .groups = "drop") %>%
  pivot_wider(names_from = src, values_from = amt) %>% mutate(cls = factor(cls, levels = c("PS", "MOOE", "FE", "CO"))) %>% arrange(cls) %>%
  mutate(chg = HGAB - NEP)
hc %>% transmute(`Expense class` = recode(as.character(cls), PS = "Personnel services", MOOE = "Maintenance and other operating expenses", FE = "Financial expenses", CO = "Capital outlays"),
                 `NEP 2027` = bn(NEP), `House bill 2027` = bn(HGAB), `Change` = fmt_chg(chg, 1), `Change (%)` = sprintf("%+.1f", chg / NEP * 100)) %>%
  kbl_clean(align = c("l", "r", "r", "r", "r"), caption = "Programmed new appropriations by expense class (PHP billions)") %>%
  footnote(general = sprintf("House figures exclude the net PHP %.1fB NIA program-level change, which the bill does not break down by expense class.", sum(L$H27[L$nia_adj], na.rm = TRUE)), general_title = "")
Programmed new appropriations by expense class (PHP billions)
Expense class NEP 2027 House bill 2027 Change Change (%)
Personnel services 1,891.0 1,882.6 -8.4 -0.4
Maintenance and other operating expenses 1,480.4 1,524.6 +44.2 +3.0
Financial expenses 0.0 0.0 0.00 +0.0
Capital outlays 1,122.6 1,086.4 -36.2 -3.2
House figures exclude the net PHP 0.4B NIA program-level change, which the bill does not break down by expense class.

The House moved ₱36B out of capital outlays and ₱44B into MOOE, the same direction as in 2026 but at about a tenth of the scale. Capital outlays are now ₱1,086B.

2.4 Every line the House changed

hs %>% filter(status != "Unchanged") %>% arrange(desc(dH)) %>%
  transmute(Department = dep, Agency = agy, `Program / Activity / Project` = PAP, Status = status,
            `NEP 2026` = N26, `GAA 2026` = G26, `NEP 2027` = N27, `House bill 2027` = H27, `House vs NEP` = dH, `House vs NEP (%)` = ifelse(N27 > 0, dH / N27 * 100, NA_real_)) %>%
  dt_table(caption = "Every line item the House committee report changed from the NEP, including new and removed lines (PHP billions). Sort by any column; filter by department or keyword.", page = 20,
           money_cols = c("NEP 2026", "GAA 2026", "NEP 2027", "House bill 2027", "House vs NEP"), money_digits = 3, pct_cols = "House vs NEP (%)")

Amounts in PHP billions to three decimals (millions). A blank percentage means the line had no amount in the NEP. SUC lines are included; the bill itemizes most GOCCs only at program level, so changes inside NIA, NEA, PhilHealth and other corporations may not be fully captured (see the data note).

2.5 Changes to the red-flag items

rf <- function(rx, dep, agy = NULL, item, group) hd(rx, dep, agy) %>% mutate(item = item, group = group)
rfp <- function(prog, item) hs %>% filter(dep == "DPWH", prog == !!prog) %>% summarise(across(c(N26, G26, N27, H27, dH), ~ sum(.x, na.rm = TRUE))) %>% mutate(item = item, group = "Infrastructure requiring project-level disclosure")
PG <- "Programs at high risk of political patronage"; PO <- "Political offices"; IN <- "Infrastructure requiring project-level disclosure"
tup <- hd("^Livelihood and Emergency Employment", "DOLE"); cif_nep <- 10.770; cif_h <- 10.910
hrf <- bind_rows(
  rf("^Protective Services for Individuals", "DSWD", item = "DSWD Protective Services (AICS)", group = PG),
  tibble::tibble(N26 = 12.144, G26 = 22.444, N27 = 14.246, H27 = 14.246 + tup$dH, dH = tup$dH, item = "DOLE TUPAD*", group = PG),
  rf("Medical Assistance to Indigent", "DOH", item = "DOH MAIFIP", group = PG),
  rf("Tulong Dunong", "OEOs", item = "CHED Tulong Dunong", group = PG),
  rf("Presidential Assistance to Farmers", "DA", item = "DA Presidential Assistance to Farmers and Fisherfolk", group = PG),
  tibble::tibble(N26 = 10.763, G26 = 11.816, N27 = cif_nep, H27 = cif_h, dH = cif_h - cif_nep, item = "Confidential and intelligence funds, all agencies*", group = PG),
  rf("^Financial Assistance to Local Government", "ALGU", item = "Financial Assistance to LGUs", group = PG),
  rf("Barangay Development Program", "ALGU", item = "NTF-ELCAC support to barangays", group = PG),
  rf("^Growth Equity Fund", "ALGU", item = "Growth Equity Fund", group = PG),
  rf(".", "OP", item = "Office of the President", group = PO),
  rf(".", "OVP", item = "Office of the Vice President", group = PO),
  rf(".", "CONGRESS", item = "Congress", group = PO),
  rf("Farm-to-Market Roads in", "DA", item = "DA farm-to-market roads", group = IN),
  rf("Provision of Agricultural Equipment and Facilities|Fishery On-farm/Postharvest Equipment|Cold Storage", "DA", item = "DA and BFAR equipment, postharvest facilities, and cold storage", group = IN),
  hs %>% filter(dep == "BSGC", str_detect(agy, "National Irrigation")) %>% summarise(across(c(N26, G26, N27, H27, dH), ~ sum(.x, na.rm = TRUE))) %>% mutate(item = "National Irrigation Administration**", group = IN),
  rf("^Health Facilities Enhancement", "DOH", item = "DOH Health Facilities Enhancement Program", group = IN),
  rf("^Basic Education Facilities", "DepEd", item = "DepEd Basic Education Facilities", group = IN),
  rfp("3101", "DPWH Asset Preservation Program"), rfp("3102", "DPWH Network Development Program"), rfp("3103", "DPWH Bridge Program"),
  rfp("3201", "DPWH Flood Management Program"), rfp("3002", "DPWH Convergence and Special Support Program (BIP, SIPAG, other convergence roads)"), rfp("3001", "DPWH Local Program"))
hrf_g <- hrf %>% group_by(group) %>% summarise(across(c(N26, G26, N27, H27, dH), sum), .groups = "drop") %>% mutate(group = factor(group, levels = c(PG, PO, IN))) %>% arrange(group)
hrf_t <- hrf_g %>% summarise(across(c(N26, G26, N27, H27, dH), sum))
# Unprogrammed appropriations: derived from the budget totals for NEP 2026, GAA 2026 and NEP 2027; the House kept the NEP figure
ua_of <- function(s_, y) { tn <- totals[[paste(s_, "New Appropriations")]][totals$year == y]; tp <- pap_tot$amt[pap_tot$src == s_ & pap_tot$year == y]; tn - tp }
ua_row <- tibble::tibble(N26 = ua_of("NEP", 2026), G26 = ua_of("GAA", 2026), N27 = ua_of("NEP", 2027))
ua_row <- ua_row %>% mutate(H27 = N27, dH = 0)
hrf_tu <- bind_cols(hrf_t %>% select(-dH) %>% `+`(ua_row %>% select(N26, G26, N27, H27)), dH = hrf_t$dH)
hst2 <- bind_rows(hrf %>% mutate(group = factor(group, levels = c(PG, PO, IN))), hrf_g %>% mutate(item = "Subtotal")) %>% arrange(group, item == "Subtotal")
idx_r <- table(hst2$group)
bind_rows(hst2 %>% select(item, N26, G26, N27, H27, dH), hrf_t %>% mutate(item = "Total red-flag basket, excluding unprogrammed appropriations"),
          ua_row %>% mutate(item = "Unprogrammed appropriations (unchanged from the NEP in the House bill)"),
          hrf_tu %>% mutate(item = "Total red-flag basket, including unprogrammed appropriations")) %>%
  transmute(` ` = item, `NEP 2026` = bn(N26), `GAA 2026` = bn(G26), `NEP 2027` = bn(N27), `House bill 2027` = bn(H27), `House vs NEP` = fmt_chg(dH, 1)) %>%
  kbl_clean(font = 12.5, align = c("l", rep("r", 5)), caption = "PBC's red-flag basket through the House committee report (PHP billions)") %>%
  pack_rows(index = c(setNames(as.integer(idx_r), names(idx_r)), "Totals" = 3)) %>%
  row_spec(which(hst2$item == "Subtotal"), bold = TRUE) %>% row_spec(nrow(hst2) + c(1, 3), bold = TRUE) %>% column_spec(6, bold = TRUE)
PBC’s red-flag basket through the House committee report (PHP billions)
NEP 2026 GAA 2026 NEP 2027 House bill 2027 House vs NEP
Programs at high risk of political patronage
DSWD Protective Services (AICS) 27.0 63.9 33.3 58.1 +24.8
DOLE TUPAD* 12.1 22.4 14.2 19.0 +4.7
DOH MAIFIP 24.2 51.6 24.2 48.2 +24.0
CHED Tulong Dunong 0.0 2.7 0.0 1.8 +1.8
DA Presidential Assistance to Farmers and Fisherfolk 0.0 10.0 0.0 10.0 +10.0
Confidential and intelligence funds, all agencies* 10.8 11.8 10.8 10.9 +0.1
Financial Assistance to LGUs 5.0 37.5 37.5 41.6 +4.1
NTF-ELCAC support to barangays 8.1 8.1 9.7 9.7 0.00
Growth Equity Fund 1.0 11.3 10.3 10.3 0.00
Subtotal 88.3 219.4 140.1 209.6 +69.5
Political offices
Office of the President 27.3 28.0 10.1 10.1 0.00
Office of the Vice President 0.9 0.9 0.8 0.8 0.00
Congress 26.4 38.6 27.0 32.0 +5.0
Subtotal 54.6 67.5 37.9 42.9 +5.0
Infrastructure requiring project-level disclosure
DA farm-to-market roads 16.0 33.0 16.0 19.6 +3.6
DA and BFAR equipment, postharvest facilities, and cold storage 4.3 4.8 5.7 5.8 +0.1
National Irrigation Administration** 45.1 63.2 46.4 45.2 -1.2
DOH Health Facilities Enhancement Program 14.5 22.3 14.5 10.1 -4.5
DepEd Basic Education Facilities 28.1 85.4 30.6 27.5 -3.1
DPWH Asset Preservation Program 108.3 99.4 76.5 82.6 +6.1
DPWH Network Development Program 182.5 96.8 176.6 122.0 -54.6
DPWH Bridge Program 52.3 34.1 44.4 40.9 -3.5
DPWH Flood Management Program 250.8 4.8 103.5 96.0 -7.4
DPWH Convergence and Special Support Program (BIP, SIPAG, other convergence roads) 167.8 240.5 157.3 231.4 +74.1
DPWH Local Program 15.4 7.8 14.6 14.1 -0.6
Subtotal 885.0 692.1 686.0 695.1 +9.0
Totals
Total red-flag basket, excluding unprogrammed appropriations 1,027.9 979.0 864.0 947.5 +83.5
Unprogrammed appropriations (unchanged from the NEP in the House bill) 250.0 150.9 112.0 112.0 0.00
Total red-flag basket, including unprogrammed appropriations 1,277.8 1,129.9 976.0 1,059.5 +83.5

*TUPAD and confidential and intelligence funds are sub-line figures: TUPAD applies the change in DOLE’s livelihood and emergency employment line to PBC’s NEP sub-line figure; the CIF change (₱140M) is from the BARSc livestream. **The bill itemizes NIA’s restoration and development programs only at program level; NIA’s House total matches the bill, but which activities inside those programs changed is not known (see the El Niño section). Unprogrammed appropriations are derived from the budget totals for 2026 and the NEP; the House bill keeps the NEP figure.

The patronage group rises from ₱140.1B to ₱209.6B, a 50% increase in one committee stage. That puts it within ₱10B of the ₱219.4B Congress enacted for the same lines in 2026, before the Senate and the bicam have touched the bill. The political offices gain ₱5.0B, all of it the House. The infrastructure group is up ₱9.0B net, but that number hides a swap of about ₱90B: Network Development, bridges, flood management, HFEP, and classrooms down; the two BIP lump lines up by ₱72B. The composition moved toward exactly the lines with the weakest project-level documentation. The basket as a whole is ₱948B, up from ₱864B, or ₱1,060B against ₱976B with unprogrammed appropriations, which the House left at the NEP’s ₱112.0B.

2.6 Changes to the El Niño and crisis-response items

nia <- function(p) pick(p, dep = "BSGC", agy = "National Irrigation")
bind_rows(
  pick("Fuel Subsidy to Transport Sector", dep = "DOTr"),
  pick("Fuel Assistance to Fisherfolk", dep = "DA"),
  pick("Service Contracting", dep = "DOTr"),
  pick("Public Transport Modernization Program", dep = "DOTr"),
  pick("NCR Busway|EDSA Busway", dep = "DOTr", label = "NCR / EDSA Busway"),
  pick("^Quick Response Fund", dep = "DA", agy = "OSEC"),
  pick("^Quick Response Fund", dep = "DSWD"),
  pick(".", dep = "BSGC", agy = "Crop Insurance"),
  pick("^Local palay procurement", dep = "BSGC"),
  pick("Production Support Services \\(PSS\\) on the National Rice Program", dep = "DA"),
  pick("Expanded Fertilizer|Fertilizer Assistance", dep = "DA", label = "DA fertilizer assistance lines"),
  pick("Solar-Powered Irrigation", dep = "DA"),
  pick("Small Water Irrigation and Impounding", dep = "DA"),
  pick("Climate Resilient Farm", dep = "DAR"),
  pick("Solar", dep = "DA", agy = "Fisheries|Soils", label = "BSWM solar pumps and BFAR solar ice plants"),
  pick("Water Supply/ Septage", dep = "DPWH"),
  pick(".", dep = "BSGC", agy = "Local Water", label = "Local Water Utilities Administration"),
  pick(".", dep = "BSGC", agy = "National Irrigation", label = "National Irrigation Administration: all lines (see note)"),
  nia("^Repair of National Irrigation"), nia("^Repair of Communal Irrigation"), nia("^Repair of Pump Irrigation"), nia("^Establishment of Pump Irrigation"), nia("Pantingan"),
  pick("Walang Gutom", dep = "DSWD"),
  pick("^Pantawid Pamilyang", dep = "DSWD"),
  pick("^Social Pension for Indigent", dep = "DSWD"),
  pick("School-Based Feeding Program \\(SBFP\\)$", dep = "DepEd"),
  pick(".", dep = "BSGC", agy = "Philippine Health Insurance", label = "PhilHealth: all budgetary support lines"),
  pick(".", dep = "DOE", label = "Department of Energy: all lines"),
  pick(".", dep = "BSGC", agy = "National Electrification", label = "National Electrification Administration: all lines"),
  pick("Fire ?trucks|Ambulances|Search and Rescue", dep = "DILG", label = "BFP fire trucks, ambulances, search and rescue vehicles"),
  pick("Worker's Welfare and Government Placement", dep = "DMW")
) %>% show_lines()
Agency Program / Activity / Project NEP 2026 GAA 2026 NEP 2027 House bill 2027 House vs NEP
DOTr · OSEC Locally-Funded Project: Fuel Subsidy to Transport Sector Affected by Rising Fuel Prices 0.00 0.00 0.00 1.00 +1.00
DA · Bureau of Fisheries and Aquatic Resources Locally-Funded Project: Fuel Assistance to Fisherfolk 0.00 0.00 0.00 0.00 0.00
DOTr · OSEC Locally-Funded Project: Service Contracting of Public Utility Vehicle Program 1.30 0.00 0.00 0.00 0.00
DOTr · OSEC Locally-Funded Project: Service Contracting Program for Public Transport (Intermodal and Multimodal) 0.00 1.00 0.00 0.50 +0.50
DOTr · OSEC Locally-Funded Project: Public Transport Modernization Program (PTMP) 1.23 1.53 0.18 0.18 0.00
DOTr · OSEC NCR / EDSA Busway 0.09 0.09 0.00 0.07 +0.07
DA · OSEC Quick Response Fund 1.00 1.00 1.00 1.00 0.00
DSWD · OSEC Quick Response Fund 1.25 3.00 1.25 3.00 +1.75
BSGC · Philippine Crop Insurance Corporation Agricultural insurance for farmers and fisherfolk under the RSBSA 4.50 6.50 4.50 4.50 0.00
BSGC · National Food Authority Local palay procurement 11.18 11.18 11.18 11.18 0.00
DA · OSEC Production Support Services (PSS) on the National Rice Program 26.41 26.41 25.62 26.12 +0.50
DA · OSEC Locally-Funded Project: Solar-Powered Irrigation System 0.00 0.00 0.00 0.12 +0.12
DA · OSEC Locally-Funded Project: Development of Upland Irrigation Systems and Small Water Irrigation and Impounding Project 0.50 0.50 0.46 0.46 0.00
DAR · OSEC Climate Resilient Farm Productivity Support 0.44 0.88 0.95 1.28 +0.33
DPWH · OSEC Construction/ Rehabilitation of Water Supply/ Septage and Sewerage/ Rain Water Collectors 2.28 1.87 7.30 8.87 +1.57
BSGC · Local Water Utilities Administration Local Water Utilities Administration 0.03 0.00 0.03 0.13 +0.10
BSGC · National Irrigation Administration National Irrigation Administration: all lines (see note) 45.07 63.25 46.36 45.17 -1.18
BSGC · National Irrigation Administration Repair of National Irrigation Systems (NIS) 8.20 11.43 2.02 2.02 0.00
BSGC · National Irrigation Administration Repair of Communal Irrigation Systems (CIS) 2.79 4.21 0.92 0.92 0.00
BSGC · National Irrigation Administration Repair of Pump Irrigation Systems 0.63 0.67 3.00 3.00 0.00
BSGC · National Irrigation Administration Establishment of Pump Irrigation Project (EPIP) 4.02 6.27 7.02 7.02 0.00
BSGC · National Irrigation Administration Locally-Funded Project: Pantingan Small Reservoir Irrigation Project (SRIP), Bataan 0.00 0.00 0.20 0.50 +0.30
DSWD · OSEC Locally-Funded Project: Walang Gutom 2027: Food STAMP Program 1.89 1.89 1.89 1.89 0.00
DSWD · OSEC Pantawid Pamilyang Pilipino Program (Implementation of Conditional Cash Transfer) 113.00 113.00 99.08 99.08 0.00
DSWD · OSEC Social Pension for Indigent Senior Citizens 49.81 51.86 51.64 51.64 0.00
DepEd · OSEC School-Based Feeding Program (SBFP) 11.78 25.70 11.43 11.43 0.00
BSGC · Philippine Health Insurance Corporation PhilHealth: all budgetary support lines 53.26 129.78 74.45 74.45 0.00
DOE · OSEC Department of Energy: all lines 2.37 2.96 2.03 2.03 0.00
BSGC · National Electrification Administration National Electrification Administration: all lines 6.44 10.13 6.49 6.49 0.00
DILG · Bureau of Fire Protection BFP fire trucks, ambulances, search and rescue vehicles 0.00 0.49 0.00 0.27 +0.27
DMW · OSEC Worker’s Welfare and Government Placement Services 4.00 4.80 4.65 4.80 +0.15

The committee chair told the plenary that “the 2027 budget is El Niño ready.” The lines say otherwise. The House’s crisis-related additions that can be seen in the bill (the ₱1.0B fuel subsidy, ₱0.5B for Service Contracting, the small solar, climate-resilience, water supply, DSWD quick response and BFP vehicle items) come to about ₱5.7B. The AICS top-up alone is ₱24.8B. Crop insurance, palay procurement, the food stamp program, 4Ps, social pension, school feeding, PhilHealth, DOE and NEA are all exactly as the NEP left them. The fuel assistance lines for farmers and fisherfolk remain empty; only the transport sector got fuel money, at 20% of what the DOTr had originally requested.

nia_lines <- hs %>% filter(dep == "BSGC", str_detect(agy, "National Irrigation"))
nia_grp <- nia_lines %>% mutate(part = case_when(
    prog == "1000" ~ "General administration and support (incl. operating subsidy, pump O&M)",
    prog == "2000" ~ "Support to operations (incl. quick response fund, FSDE)",
    prog == "3101" ~ "Irrigation Systems Restoration Program",
    str_detect(coalesce(PAP, ""), "^Locally-Funded") ~ "Irrigation Systems Development Program: locally-funded projects",
    str_detect(coalesce(PAP, ""), "^Foreign-") ~ "Irrigation Systems Development Program: Jalaur River (foreign-assisted)",
    prog == "3102" ~ "Irrigation Systems Development Program: other (EPIP, pump projects, SIP, CARP-IC)",
    TRUE ~ "Other")) %>%
  group_by(part) %>% summarise(N27 = sum(N27), H27 = sum(H27), dH = sum(dH), .groups = "drop")
nia_t <- nia_grp %>% summarise(N27 = sum(N27), H27 = sum(H27), dH = sum(dH))
bind_rows(nia_grp, nia_t %>% mutate(part = "National Irrigation Administration, total")) %>%
  transmute(` ` = part, `NEP 2027` = comma(N27 * 1e6, accuracy = 1), `House bill 2027` = comma(H27 * 1e6, accuracy = 1), `Change` = fmt_chg(dH * 1e3, 0)) %>%
  kbl_clean(align = c("l", "r", "r", "r"), caption = "National Irrigation Administration in the House committee report (PHP thousands; change in PHP millions)") %>%
  row_spec(nrow(nia_grp) + 1, bold = TRUE)
National Irrigation Administration in the House committee report (PHP thousands; change in PHP millions)
NEP 2027 House bill 2027 Change
General administration and support (incl. operating subsidy, pump O&M) 12,503,956 12,503,956 0.00
Irrigation Systems Development Program: Jalaur River (foreign-assisted) 961,321 961,321 0.00
Irrigation Systems Development Program: locally-funded projects 11,179,000 9,694,000 -1,485
Irrigation Systems Development Program: other (EPIP, pump projects, SIP, CARP-IC) 9,014,017 9,523,117 +509
Irrigation Systems Restoration Program 9,282,231 9,174,255 -108
Support to operations (incl. quick response fund, FSDE) 3,415,375 3,315,375 -100
National Irrigation Administration, total 46,355,900 45,172,024 -1,184
lfp_nia <- nia_lines %>% filter(str_detect(coalesce(PAP, ""), "^Locally-Funded"), abs(dH) > 0.0005) %>% arrange(dH)

Irrigation is the one crisis line the BARSc said it had addressed, and the bill does not bear that out. The subcommittee announced ₱4.09B for NIA on 1 October: ₱1.31B for repairs of national systems, ₱147M for communal systems, ₱1.18B for pump irrigation, ₱1.0B for new national irrigation locally funded projects, and ₱400M for the Pantingan reservoir. In the committee report NIA ends at ₱45,172,024 thousand, ₱1.18B below the NEP. The restoration program, where repairs sit, is ₱108 million lower. The development program outside locally funded projects, where pump irrigation sits, is ₱509 million higher, less than half the ₱1.18B announced. Locally funded projects fall by ₱1.49B net: the Tumauini River project loses ₱1.0B and several reservoir projects are trimmed, while two new Isabela dams get ₱0.5B each and Pantingan rises by ₱0.3B, not the ₱0.4B announced.

The bill gives NIA’s restoration and development programs as totals, not by activity, so which repair and pump lines moved inside them cannot be read from it. The totals reconcile exactly: general administration, support to operations, the two program totals, the Jalaur project and the itemized locally funded projects add up to the bill’s ₱45,172,024 thousand for NIA.

2.7 DPWH: what moved inside the department

dprog <- hs %>% filter(dep == "DPWH") %>% mutate(program = recode(prog, "1000" = "General Administration and Support", "2000" = "Support to Operations", "3001" = "Local Program",
  "3002" = "Convergence and Special Support Program", "3101" = "Asset Preservation Program", "3102" = "Network Development Program", "3103" = "Bridge Program", "3201" = "Flood Management Program")) %>%
  group_by(program) %>% summarise(across(c(N26, G26, N27, H27, dH), ~ sum(.x, na.rm = TRUE)), .groups = "drop")
dpl <- dprog %>% select(program, `NEP 2026` = N26, `GAA 2026` = G26, `NEP 2027` = N27, `House bill 2027` = H27) %>% pivot_longer(-program) %>%
  mutate(name = factor(name, levels = rev(ver_lv)))
ord_dp <- dprog %>% arrange(H27) %>% pull(program)
ggplot(dpl, aes(value, factor(program, levels = ord_dp), fill = name)) +
  geom_col(position = position_dodge(width = 0.85), width = 0.8) +
  geom_text(aes(label = comma(value, accuracy = 0.1)), position = position_dodge(width = 0.85), hjust = -0.15, size = 2.7) +
  scale_fill_manual(values = ver_pal, breaks = ver_lv) +
  scale_x_continuous(labels = function(x) paste0(peso, comma(x), "B"), expand = expansion(mult = c(0, 0.1))) +
  labs(x = NULL, y = NULL, title = "DPWH by program: the House moved the money back toward the Convergence program",
       subtitle = "Programmed new appropriations, PHP billions", caption = "The Convergence program is almost entirely the two Basic Infrastructure Program lump lines (access roads; multi-purpose buildings).") +
  theme_pbc() + theme(panel.grid.major.y = element_blank(), panel.grid.major.x = element_line(color = "grey90"), axis.text.y = element_text(size = 9)) + guides(fill = guide_legend(nrow = 1))

DPWH’s total barely moves, from ₱642.6B to ₱654.1B. Inside it, the House took ₱54.6B from Network Development (almost all of it the foreign-assisted bypass roads), ₱7.4B from flood management, ₱3.5B from bridges, and ₱2.5B from Support to Operations, and put ₱74.1B into the Convergence program and ₱6.1B into asset preservation. Convergence is now ₱231.4B, within ₱9B of the ₱240.5B Congress enacted in 2026. This is the pattern of every recent year: the executive proposes a national network, Congress rebuilds the department around locally identified projects.

hs %>% filter(dep == "DPWH", status != "Unchanged") %>% arrange(desc(dH)) %>%
  transmute(Program = recode(prog, "1000" = "GAS", "2000" = "STO", "3001" = "Local", "3002" = "Convergence", "3101" = "Asset Preservation", "3102" = "Network Development", "3103" = "Bridge", "3201" = "Flood Management"),
            `Sub-program / line` = PAP, `NEP 2026` = bn(N26), `GAA 2026` = bn(G26), `NEP 2027` = bn(N27), `House bill 2027` = bn(H27), `House vs NEP` = fmt_chg(dH)) %>%
  kbl_clean(font = 12, align = c("l", "l", rep("r", 5)), caption = "Every DPWH sub-program the House changed (PHP billions)") %>% column_spec(2, width = "40%") %>% column_spec(7, bold = TRUE)
Every DPWH sub-program the House changed (PHP billions)
Program Sub-program / line NEP 2026 GAA 2026 NEP 2027 House bill 2027 House vs NEP
Convergence Basic Infrastructure Program (BIP) - Multi-Purpose Buildings / Facilities to support Social Services 29.7 74.7 41.0 83.7 +42.73
Convergence Basic Infrastructure Program (BIP) - Access Roads and/or Bridges from the National Road/s leading to Major / Strategic Public Buildings / Facilities 16.5 33.6 105.7 134.9 +29.20
Flood Management Construction/Maintenance of Flood Mitigation Structures and Drainage Systems 159.1 0.0 63.0 71.0 +7.98
Asset Preservation Preventive Maintenance - Secondary Roads 20.3 15.9 11.7 14.4 +2.75
Asset Preservation Rehabilitation/ Reconstruction/ Upgrading of Damaged Paved Roads - Secondary Roads 6.6 8.7 4.7 6.6 +1.85
Convergence Construction/ Rehabilitation of Water Supply/ Septage and Sewerage/ Rain Water Collectors 2.3 1.9 7.3 8.9 +1.57
Asset Preservation Preventive Maintenance - Tertiary Roads 13.3 10.6 5.7 7.3 +1.55
Bridge Construction of New Bridges 4.2 3.7 4.6 5.7 +1.13
Asset Preservation Preventive Maintenance - Primary Roads 14.2 12.1 13.3 14.4 +1.05
Network Development Off-Carriageway Improvement - Secondary Roads 0.3 1.4 2.0 3.0 +1.05
Asset Preservation Rehabilitation/ Reconstruction/ Upgrading of Damaged Paved Roads - Tertiary Roads 3.8 5.3 2.0 2.9 +0.93
Asset Preservation Rehabilitation/ Reconstruction of Roads with Slips, Slope Collapse, and Landslide - Secondary Roads 12.5 10.5 4.8 5.7 +0.92
Asset Preservation Construction/ Upgrading/ Rehabilitation of Drainage along National Roads - Secondary Roads 4.4 5.8 1.4 2.2 +0.85
Network Development Road Widening - Tertiary Roads 5.5 4.7 1.6 2.4 +0.75
Asset Preservation Rehabilitation/ Reconstruction of Roads with Slips, Slope Collapse, and Landslide - Tertiary Roads 8.3 9.3 2.9 3.6 +0.64
Asset Preservation Construction/ Upgrading/ Rehabilitation of Drainage along National Roads - Tertiary Roads 2.7 4.4 0.2 0.7 +0.54
Network Development Road Widening - Secondary Roads 13.1 18.9 10.4 10.9 +0.54
Network Development Road Widening - Primary Roads 17.9 10.5 4.5 4.8 +0.36
Network Development Off-Carriageway Improvement - Primary Roads 0.8 0.9 1.3 1.7 +0.34
Network Development Off-Carriageway Improvement - Tertiary Roads 0.7 0.7 0.7 1.1 +0.34
Convergence Basic Infrastructure Program (BIP) - Coastal Roads to Augment Resiliency of Coastal Communities 0.5 0.3 1.4 1.7 +0.29
Convergence Basic Infrastructure Program (BIP) - Local Ports and Boat Landings 0.0 0.5 0.4 0.7 +0.28
Asset Preservation Rehabilitation/ Reconstruction/ Upgrading of Damaged Paved Roads - Primary Roads 9.6 5.4 18.3 18.6 +0.28
Network Development Paving of Unpaved Roads - Tertiary Roads 0.8 1.1 0.5 0.6 +0.03
Asset Preservation Construction/ Upgrading/ Rehabilitation of Drainage along National Roads - Primary Roads 4.7 6.7 1.7 1.7 +0.02
Bridge Rehabilitation/ Major Repair of Permanent Bridges 5.2 4.5 3.9 3.8 -0.02
Asset Preservation Rehabilitation/ Reconstruction of Roads with Slips, Slope Collapse, and Landslide - Primary Roads 5.0 4.2 1.7 1.6 -0.09
Bridge Foreign-Assisted Projects: Construction of New Bridges 11.2 2.8 1.8 1.6 -0.12
Bridge Retrofitting/ Strengthening of Permanent Bridges 7.6 4.8 3.0 2.8 -0.16
Bridge Replacement of Bridges (Temporary to Permanent) 0.1 0.1 0.2 0.0 -0.20
Network Development Construction of Flyovers/ Interchanges/ Underpasses/ Long Span Bridges 1.2 1.0 0.7 0.5 -0.22
Bridge Replacement of Permanent Weak Bridges 8.2 7.4 12.0 11.7 -0.34
Local Locally-Funded Projects: Buildings and Other Structures - Multipurpose / Facilities - National Building Program 10.2 6.6 13.4 12.9 -0.56
Network Development Construction of Missing Links/ New Roads 20.7 12.0 23.9 22.7 -1.25
Network Development Foreign-Assisted Projects: Construction of Missing Links/ New Roads 3.1 2.3 3.6 2.2 -1.38
Network Development Construction of By-Pass and Diversion Roads 53.1 36.3 46.5 44.8 -1.67
Asset Preservation Foreign-Assisted Projects: Rehabilitation/ Reconstruction/ Upgrading of Damaged Paved Roads - Tertiary Roads 1.1 0.3 2.9 1.1 -1.75
Bridge Widening of Permanent Bridges 15.1 10.6 15.3 13.5 -1.80
Bridge Foreign-Assisted Projects: Rehabilitation/ Major Repair of Permanent Bridges 0.6 0.2 3.7 1.7 -2.00
STO Support to Operations 82.4 29.6 51.6 49.1 -2.53
Asset Preservation Foreign-Assisted Projects: Preventive Maintenance - Primary Roads 1.8 0.2 5.2 1.7 -3.50
Flood Management Construction/Rehabilitation of Flood Mitigation Facilities within Major River Basins and Principal Rivers 76.0 0.0 20.9 16.2 -4.64
Flood Management Foreign-Assisted Projects: Construction/Rehabilitation of Flood Mitigation Facilities within Major River Basins and Principal Rivers 14.5 4.3 19.6 8.9 -10.75
Network Development Foreign-Assisted Projects: Construction of By-Pass and Diversion Roads 64.7 6.5 80.9 27.4 -53.50

2.7.1 The district engineering offices

ou <- read_excel(dpwh_path, sheet = "NewAppro_ByOperUnit") %>% filter(FY == 2027) %>%
  mutate(across(c(GAA, NEP, HGAB), ~ suppressWarnings(as.numeric(.x)) / 1e9),
         kind = case_when(str_detect(Office, "Central") ~ "Central Office", str_detect(Office, "Regional Office") ~ "Regional offices", TRUE ~ "District engineering offices"))
ou_k <- ou %>% group_by(kind) %>% summarise(n = n(), NEP = sum(NEP, na.rm = TRUE), HGAB = sum(HGAB, na.rm = TRUE), .groups = "drop") %>% mutate(share_n = NEP / sum(NEP) * 100, share_h = HGAB / sum(HGAB) * 100)
deo <- ou %>% filter(kind == "District engineering offices") %>% mutate(chg = HGAB - NEP, pct = chg / NEP * 100,
  office = str_replace(Office, " D\\.E\\. Office$", "") %>% str_replace("District Engineering Office$", "") %>% str_squish(),
  province = str_replace(office, "\\s+(1st|2nd|3rd|4th|5th|6th|7th|First|Second|Third|Fourth)$", "") %>% str_replace("\\s+(City|Lower|Upper)$", "") %>% str_squish())
d_stats <- deo %>% summarise(n = n(), up = sum(chg > 0.001), dn = sum(chg < -0.001), flat = sum(abs(chg) <= 0.001), med = median(chg), tot_chg = sum(chg),
                             top10 = sum(sort(chg, decreasing = TRUE)[1:10]), top20 = sum(sort(chg, decreasing = TRUE)[1:20]))

The DPWH workbook breaks the department’s appropriations down by operating unit: the Central Office, 17 regional offices, and 198 district engineering offices (DEOs). The DEOs are where locally identified projects are implemented and where the 2025 flood-control scandal was concentrated.

ou_k %>% mutate(kind = factor(kind, levels = c("Central Office", "Regional offices", "District engineering offices"))) %>% arrange(kind) %>%
  transmute(`Operating unit` = kind, Offices = n, `NEP 2027` = bn(NEP), `Share (%)` = sprintf("%.1f", share_n), `House bill 2027` = bn(HGAB), `Share (%) ` = sprintf("%.1f", share_h), Change = fmt_chg(HGAB - NEP, 1)) %>%
  kbl_clean(align = c("l", rep("r", 6)), caption = "DPWH new appropriations by type of operating unit (PHP billions)")
DPWH new appropriations by type of operating unit (PHP billions)
Operating unit Offices NEP 2027 Share (%) House bill 2027 Share (%) Change
Central Office 1 510.0 79.4 467.8 71.5 -42.3
Regional offices 17 2.9 0.5 2.9 0.4 0.00
District engineering offices 198 129.7 20.2 183.4 28.0 +53.7

The Central Office loses ₱42.3B and the district offices gain ₱53.7B. The DEO share of DPWH rises from 20% to 28%. 158 of the 198 DEOs gain, 20 lose, and 20 are unchanged. The gains are unequal: the twenty DEOs with the largest increases take ₱24.9B, or 46% of the DEO total, and the median DEO gains ₱151 million.

deo_top <- deo %>% slice_max(HGAB, n = 20) %>% select(office, `NEP 2027` = NEP, `House bill 2027` = HGAB) %>% pivot_longer(-office) %>% mutate(name = factor(name, levels = rev(c("NEP 2027", "House bill 2027"))))
ord_deo <- deo %>% slice_max(HGAB, n = 20) %>% arrange(HGAB) %>% pull(office)
ggplot(deo_top, aes(value, factor(office, levels = ord_deo), fill = name)) +
  geom_col(position = position_dodge(width = 0.8), width = 0.75) +
  geom_text(aes(label = comma(value, accuracy = 0.01)), position = position_dodge(width = 0.8), hjust = -0.15, size = 2.9) +
  scale_fill_manual(values = ver_pal[c("NEP 2027", "House bill 2027")], breaks = c("NEP 2027", "House bill 2027")) +
  scale_x_continuous(labels = function(x) paste0(peso, comma(x), "B"), expand = expansion(mult = c(0, 0.12))) +
  labs(x = NULL, y = NULL, title = "The twenty district engineering offices with the largest allocations in the House bill",
       subtitle = "DPWH new appropriations by district engineering office, PHP billions") +
  theme_pbc() + theme(panel.grid.major.y = element_blank(), panel.grid.major.x = element_line(color = "grey90"))

deo_up <- deo %>% slice_max(chg, n = 20) %>% mutate(lab = sprintf("%s  (%s to %s)", office, comma(NEP, accuracy = 0.01), comma(HGAB, accuracy = 0.01)))
ggplot(deo_up, aes(chg, reorder(lab, chg))) +
  geom_col(fill = up_col, width = 0.72) +
  geom_text(aes(label = sprintf("+%s  (%+.0f%%)", comma(chg, accuracy = 0.01), pct)), hjust = -0.1, size = 2.9) +
  scale_x_continuous(labels = function(x) paste0(peso, comma(x), "B"), expand = expansion(mult = c(0, 0.3))) +
  labs(x = NULL, y = NULL, title = "The twenty district engineering offices with the largest increases over the NEP",
       subtitle = "Change in DPWH new appropriations by district engineering office, PHP billions; NEP and House amounts in brackets") +
  theme_pbc() + theme(panel.grid.major.y = element_blank(), panel.grid.major.x = element_line(color = "grey90"), axis.text.y = element_text(size = 8.6))

The single largest jump is Ilocos Norte 1st, from ₱414 million to ₱4.8B, a 1056% increase that makes it the best-funded DEO in the country. Nine of the twenty largest gainers more than doubled. The provinces whose DEOs gain most in total are Ilocos Norte (₱4.6B across 2 offices), Isabela (₱3.9B), Batangas (₱3.0B), Iloilo (₱2.8B) and Quezon (₱2.2B). The offices that lose are small and few.

Which legislators’ districts these DEOs serve, and which sub-programs the increases sit in, are the two questions this table cannot yet answer. The sub-program breakdown by office exists in the bill and will be added when it is encoded; the BIP access-roads and multi-purpose-buildings lines are the likeliest home of most of the ₱54B.

deo %>% arrange(desc(HGAB)) %>%
  transmute(`District engineering office` = Office, Province = province, `NEP 2027` = NEP, `House bill 2027` = HGAB, `Change` = chg, `Change (%)` = pct) %>%
  dt_table(caption = "All district engineering offices: NEP 2027 and House committee report (PHP billions). Sort by any column.", page = 20,
           money_cols = c("NEP 2027", "House bill 2027", "Change"), money_digits = 3, pct_cols = "Change (%)")
prov %>% arrange(desc(HGAB)) %>%
  transmute(Province = province, `DEOs` = offices, `NEP 2027` = NEP, `House bill 2027` = HGAB, `Change` = chg, `Change (%)` = pct) %>%
  dt_table(caption = "District engineering offices grouped by province (PHP billions). Provinces are inferred from office names.", page = 15,
           money_cols = c("NEP 2027", "House bill 2027", "Change"), money_digits = 3, pct_cols = "Change (%)")

2.8 What the House stage means for the assessment

Three findings from the NEP assessment survive the House stage intact, and one gets worse.

The budget is still written for a normal year. The House added ₱1.5B of transport fuel relief and nothing for crop insurance, palay procurement, the food stamp program, 4Ps, social pension, or the fuel costs of farmers and fisherfolk, while adding ₱49B to AICS and MAIFIP.

The growth strategy still runs on transport concrete and rice, but less of it is the national network: ₱108B came out of rail and foreign-assisted roads and most of it went into local roads and buildings chosen district by district.

Agency budgets still shrink in real terms; the House did not touch the ₱4,494B programmed total.

What got worse is the red-flag basket: ₱864B in the NEP, ₱948B after the committee report, with the patronage group up 50%. The House also cut the two lines that most directly protect people from a bad year, the immunization and family health commodities (₱4.9B) and the calamity fund (₱9.5B), to help pay for it.

The rest of this report is the NEP assessment, revised where the House stage changes a figure. Where a table shows a House bill column, the comparison that matters now is the last one.

3 The macroeconomic and fiscal context

3.1 Growth has slowed for four straight quarters

gdp <- sna_exp %>%
  filter(Valuation == "Constant 2018 Prices", Expenditure == "Gross Domestic Product",
         Quarter >= as.Date("2022-01-01")) %>%
  mutate(g = GrowthRate * 100, lab = sprintf("%.1f", g))
last_q <- max(gdp$Quarter)
ggplot(gdp, aes(Quarter, g)) +
  annotate("rect", xmin = as.Date("2025-11-15"), xmax = as.Date("2026-11-15"), ymin = 3.5, ymax = 4.5,
           fill = "#54278F", alpha = 0.15) +
  annotate("text", x = as.Date("2026-09-01"), y = 5.0, label = "DBCC 2026 target\n3.5 to 4.5%",
           size = 3.2, color = "#54278F", fontface = "bold", lineheight = 0.9) +
  geom_col(aes(fill = Quarter >= as.Date("2025-07-01")), width = 70, show.legend = FALSE) +
  geom_text(aes(label = lab), vjust = -0.5, size = 3.1) +
  scale_fill_manual(values = c(`FALSE` = "grey65", `TRUE` = dn_col)) +
  scale_x_date(breaks = seq(as.Date("2022-01-01"), as.Date("2026-10-01"), by = "6 months"),
               labels = function(d) paste0("Q", (as.integer(format(d, "%m")) - 1) %/% 3 + 1, "\n", format(d, "%Y"))) +
  scale_y_continuous(limits = c(0, 9.5), labels = function(x) paste0(x, "%")) +
  labs(x = NULL, y = "Real GDP growth, year on year",
       title = "Growth has fallen from 5.4% to 2.3% in a year",
       subtitle = "Quarterly real GDP growth, constant 2018 prices",
       caption = "Source: PSA National Accounts. Shaded band is the DBCC's full-year 2026 growth target (193rd DBCC, July 2026).") +
  theme_pbc()

The economy grew 2.3% in the second quarter of 2026, the slowest pace outside the pandemic since 2009, and 2.6% for the first half. The DBCC’s revised full-year target is 3.5 to 4.5%, which now requires growth of at least 4.4% in the second half.

The slowdown has two sources, and both bear on the budget. The first is the state itself. After the flood-control corruption scandal broke in mid-2025, public works procurement froze; public construction contracted by about a third year on year in both quarters of 2026. The second is the oil shock that followed the outbreak of war in the Middle East at the end of February 2026, which pushed inflation from 2.0% in January to 7.2% in April and has squeezed household spending since.

want <- c("01. Household final consumption expenditure" = "Household consumption",
          "02. Government final consumption expenditure" = "Government consumption",
          "03. Gross capital formation" = "Gross capital formation (investment)",
          "1. Construction" = "  of which: construction",
          "2. Durable equipment" = "  of which: durable equipment",
          "04. Exports of goods and services" = "Exports of goods and services",
          "05. Imports of goods and services" = "Imports of goods and services",
          "Gross Domestic Product" = "Gross Domestic Product")
sna_exp %>%
  filter(Valuation == "Constant 2018 Prices", Expenditure %in% names(want),
         Quarter >= as.Date("2025-04-01")) %>%
  mutate(Component = factor(want[as.character(Expenditure)], levels = unname(want)),
         q = paste0("Q", (as.integer(format(Quarter, "%m")) - 1) / 3 + 1, " ", format(Quarter, "%Y")),
         g = sprintf("%.1f", GrowthRate * 100)) %>%
  arrange(Quarter) %>% select(Component, q, g) %>%
  pivot_wider(names_from = q, values_from = g) %>% arrange(Component) %>%
  kbl_clean(align = c("l", rep("r", 5)), caption = "Real growth by expenditure component, year on year (%)")
Real growth by expenditure component, year on year (%)
Component Q2 2025 Q3 2025 Q4 2025 Q1 2026 Q2 2026
Household consumption 5.2 4.0 3.8 3.0 2.8
Government consumption 8.7 5.8 0.7 4.8 8.3
Gross capital formation (investment) 0.9 -2.0 -9.4 -3.1 -9.2
of which: construction 0.9 -0.2 -9.2 -4.3 -14.8
of which: durable equipment 11.8 2.1 -1.7 0.3 -13.6
Exports of goods and services 4.9 7.8 13.3 7.8 12.2
Imports of goods and services 3.6 3.2 3.2 6.8 5.5
Gross Domestic Product 5.4 4.0 3.0 2.8 2.3

Household consumption, which is about three quarters of the economy, has slowed from 5.2% to 2.8% in a year. Investment is contracting: construction fell 14.8% and durable equipment 13.6% in the second quarter. What is holding growth up is exports (electronics, mostly) and government consumption. That makes the size and timing of public spending in 2027 a first-order macroeconomic question.

3.2 Inflation is back above target

infl <- cpi %>%
  filter(Geolocation == "PHILIPPINES",
         Commodity %in% c("ALL ITEMS", "FOOD AND NON-ALCOHOLIC BEVERAGES"),
         Month >= as.Date("2022-01-01"), !is.na(Inflation)) %>%
  mutate(series = ifelse(Commodity == "ALL ITEMS", "Headline", "Food and non-alcoholic beverages"))
infl_last <- infl %>% group_by(series) %>% slice_max(Month, n = 1)
ggplot(infl, aes(Month, Inflation * 100, color = series)) +
  annotate("rect", xmin = min(infl$Month), xmax = max(infl$Month), ymin = 2, ymax = 4, fill = "grey60", alpha = 0.18) +
  annotate("text", x = as.Date("2022-10-01"), y = 3, label = "BSP target band, 2 to 4%", hjust = 0, size = 3.1, color = "grey35") +
  geom_hline(yintercept = 0, color = "grey70") +
  geom_line(linewidth = 1) +
  geom_point(data = infl_last, size = 2) +
  geom_text(data = infl_last, aes(label = sprintf("%.1f%%", Inflation * 100)), hjust = -0.25, size = 3.3, fontface = "bold", show.legend = FALSE) +
  scale_color_manual(values = c("Headline" = "black", "Food and non-alcoholic beverages" = "#E6550D")) +
  scale_x_date(date_breaks = "6 months", date_labels = "%b\n%Y", expand = expansion(mult = c(0.01, 0.07))) +
  scale_y_continuous(labels = function(x) paste0(x, "%")) +
  labs(x = NULL, y = "Year-on-year inflation",
       title = "Inflation tripled between January and April 2026 and has stayed above 6%",
       subtitle = "Monthly CPI inflation, 2018 = 100",
       caption = "Source: PSA Consumer Price Index.") +
  theme_pbc()

Headline inflation was 6.1% in August, the sixth straight month above the BSP’s target, for an eight-month average of 5.2%. Private forecasters expect it to re-accelerate toward 6.5% in September on oil near $95 a barrel and a peso that hit a record ₱62.68. The BSP has reversed its easing cycle and raised the policy rate to 5.00%, with another hike widely expected in October. Severe-weather risk runs in both directions: El Niño through the dry months, and a possible La Niña after it.

The labor market is starting to show the slowdown. Unemployment rose to 6.0% in the latest Labor Force Survey round, from under 5% in the second quarter. The government has repatriated more than 9,000 overseas workers from the Middle East since March, and remittance growth has slowed.

3.3 The fiscal position: a deficit that has stopped closing

fis <- ngcor %>%
  filter(Quarter >= as.Date("2016-01-01")) %>%
  transmute(Quarter,
            `Revenues` = Revenues4Q / NominalGDP4Q * 100,
            `Expenditures` = Expenditures4Q / NominalGDP4Q * 100,
            `Deficit` = -SurplusDeficit4Q / NominalGDP4Q * 100) %>%
  pivot_longer(-Quarter)
fis_last <- fis %>% group_by(name) %>% slice_max(Quarter, n = 1)
ggplot(fis, aes(Quarter, value, color = name)) +
  geom_hline(yintercept = 0, color = "grey70") +
  geom_line(linewidth = 1.05) +
  geom_point(data = fis_last, size = 2) +
  geom_text(data = fis_last, aes(label = sprintf("%.1f%%", value)), hjust = -0.25, size = 3.3, fontface = "bold", show.legend = FALSE) +
  scale_color_manual(values = c("Revenues" = "#08519C", "Expenditures" = "#E6550D", "Deficit" = "black")) +
  scale_x_date(date_breaks = "1 year", date_labels = "%Y", expand = expansion(mult = c(0.01, 0.07))) +
  scale_y_continuous(labels = function(x) paste0(x, "%"), limits = c(0, 26)) +
  labs(x = NULL, y = "% of GDP, rolling four quarters",
       title = "Revenues are slipping as a share of GDP, and the deficit is stuck near 5.5%",
       subtitle = "National government revenues, expenditures, and deficit, rolling four-quarter sums as % of GDP",
       caption = "Source: Bureau of the Treasury cash operations reports; PSA nominal GDP.") +
  theme_pbc()

Over the four quarters to mid-2026, revenues were 15.9% of GDP and spending 21.4%, leaving a deficit of 5.5%. Revenue effort has drifted down from 16.7% at the end of 2024. The DBCC programs a 5.4% deficit for 2026 and 5.1% for 2027, and no longer expects to get below 4% before 2030. A year earlier it was promising 4.3% by 2028.

debt <- ngdebt %>% filter(Month >= as.Date("2016-01-01"), !is.na(NominalGDP4Q)) %>%
  transmute(Date = Month, series = "NG debt, % of GDP", value = TotalObligations / NominalGDP4Q * 100)
ints <- ngcor %>% filter(Quarter >= as.Date("2016-01-01")) %>%
  transmute(Date = Quarter,
            `Interest payments, % of revenues` = InterestPayments4Q / Revenues4Q * 100,
            `Interest payments, % of expenditures` = InterestPayments4Q / Expenditures4Q * 100) %>%
  pivot_longer(-Date, names_to = "series")
both <- bind_rows(debt %>% mutate(panel = "National government debt (% of GDP)"),
                  ints %>% mutate(panel = "Interest payments (rolling four quarters)"))
both_last <- both %>% group_by(series) %>% slice_max(Date, n = 1)
ggplot(both, aes(Date, value, color = series)) +
  geom_line(linewidth = 1.05) +
  geom_point(data = both_last, size = 2) +
  geom_text(data = both_last, aes(label = sprintf("%.1f%%", value)), hjust = -0.2, size = 3.2, fontface = "bold", show.legend = FALSE) +
  facet_wrap(~ panel, scales = "free_y") +
  scale_color_manual(values = c("NG debt, % of GDP" = "black",
                                "Interest payments, % of revenues" = "#B2182B",
                                "Interest payments, % of expenditures" = "#E6550D")) +
  scale_x_date(date_breaks = "2 years", date_labels = "%Y", expand = expansion(mult = c(0.02, 0.14))) +
  scale_y_continuous(labels = function(x) paste0(x, "%")) +
  labs(x = NULL, y = NULL,
       title = "Debt is at 66% of GDP, and interest now takes one peso in five of revenue",
       subtitle = "Outstanding national government debt, and interest payments as a share of revenues and of expenditures",
       caption = "Source: Bureau of the Treasury; PSA nominal GDP (rolling four quarters).") +
  theme_pbc() + guides(color = guide_legend(nrow = 2))

National government debt reached ₱19.07 trillion at the end of June 2026, or 66.0% of GDP, up from 63.2% at the end of 2025 and 39.6% in 2019. The ratio is rising because the denominator has stalled: nominal GDP grew 7.5% in the second quarter, while the DBCC’s 2027 program assumes about 9%. Interest payments now absorb 20.4% of revenues and 15.1% of expenditures, against 11.5% and 9.5% in 2019. The House’s own think tank, the CPBRD, calls the DBCC’s assumptions “notably optimistic” and estimates debt could reach 67% of GDP in 2027 under a moderate downside and 70.7% under a severe one.

This is why the budget’s composition matters more than its size this year. With the deficit program fixed and interest and the NTA growing on their own, every peso for crisis response has to come from somewhere else in the programmed budget.

3.4 The assumptions the budget was built on

tibble::tribble(
  ~Indicator, ~`DBCC, 2026`, ~`DBCC, 2027`, ~`Latest actual`,
  "Real GDP growth", "3.5 to 4.5%", "5.0 to 6.0%", "2.6% (first half 2026); 2.3% (Q2)",
  "Inflation", "6.0 to 7.0%", "4.0 to 5.0%", "6.1% (August); 5.2% (January to August average)",
  "Dubai crude, USD per barrel", "80 to 100", "70 to 90", "About 94 to 100 (September)",
  "Peso per US dollar", "60 to 62", "60 to 62", "62.68 (record low, mid-September)",
  "Revenues, % of GDP", "15.8%", "15.7%", sprintf("%.1f%% (four quarters to Q2 2026)", rev_now),
  "Deficit, % of GDP", "5.4%", "5.1%", sprintf("%.1f%% (four quarters to Q2 2026)", def_now),
  "NG debt, % of GDP", "", "64.4%", sprintf("%.1f%% (end-June 2026)", debt_now)
) %>% kbl_clean(align = c("l","r","r","l"),
  caption = "Macroeconomic assumptions and fiscal program behind the FY 2027 budget, against latest actuals")
Macroeconomic assumptions and fiscal program behind the FY 2027 budget, against latest actuals
Indicator DBCC, 2026 DBCC, 2027 Latest actual
Real GDP growth 3.5 to 4.5% 5.0 to 6.0% 2.6% (first half 2026); 2.3% (Q2)
Inflation 6.0 to 7.0% 4.0 to 5.0% 6.1% (August); 5.2% (January to August average)
Dubai crude, USD per barrel 80 to 100 70 to 90 About 94 to 100 (September)
Peso per US dollar 60 to 62 60 to 62 62.68 (record low, mid-September)
Revenues, % of GDP 15.8% 15.7% 15.9% (four quarters to Q2 2026)
Deficit, % of GDP 5.4% 5.1% 5.5% (four quarters to Q2 2026)
NG debt, % of GDP 64.4% 66.0% (end-June 2026)

DBCC figures from the 193rd DBCC statement (8 July 2026); 2027 debt ratio as reported from the BESF. Actuals from PSA, BSP, and BTr; market figures from mid-September 2026 press reports.

The peso is already outside the band the budget assumes through 2030. Oil is at the top of the 2026 range and above the 2027 range. Growth is a full point below the bottom of the 2026 target. Each of these pushes in the same direction: lower revenues than programmed, higher peso costs for imported fuel, rice, fertilizer, medicines, and foreign-denominated project loans, and higher interest payments.

3.5 What the DBM says about the proposal

The DBM submitted the NEP to Congress on 11 August 2026 under the theme “People-Centered Growth for an Inclusive and Resilient Future,” describing it as the administration’s final full-year spending plan. Its main claims, and what the data in this briefer say about each:

tibble::tribble(
  ~`What the DBM says`, ~`What the data show`,
  "The budget is ₱7.2 trillion, 21.7% of GDP, and 6% or ₱407B higher than 2026. About ₱316B of the increase is mandatory obligations: the higher NTA, the fourth salary tranche, and other fiscal obligations.",
  "Confirmed, and it is the central fact about this budget. Automatic appropriations rise from about ₱2,390B to ₱2,706B. Programmed new appropriations rise ₱91.3B, or 2.1%, below the DBCC's own inflation assumption.",
  "Unprogrammed appropriations are at a historic low of ₱111.984B, limited mainly to restoring PDIC's remitted fund balance and cover for foreign-assisted projects.",
  "True at the proposal stage: NEP 2026 carried ₱250.0B. But Congress enacted ₱150.9B for 2026, and it raised the executive's figure in 2022, 2023, 2024, and 2025. The number to watch is the one that comes out of bicam.",
  "Social services take the largest share at ₱2.456 trillion. Education, health, social protection, food security, jobs, and disaster resilience are the priorities.",
  "DepEd and DOH do grow against NEP 2026 (+4.8% and +4.0%), which is below inflation. 4Ps is cut ₱13.9B. AICS, MAIFIP, TUPAD, school feeding, classrooms, and textbooks all fall well below their 2026 enacted levels. Every dedicated fuel-relief line is zero.",
  "The consolidated health sector budget reaches ₱1.06 trillion, 3.19% of GDP.",
  "This is a broad sector definition the P/A/P data cannot reproduce. The DBM's own narrower figure for DOH, specialty hospitals, and PhilHealth is ₱353.8B. In the P/A/P data, the PhilHealth subsidy falls to ₱74.4B from ₱129.8B enacted, and MAIFIP is halved.",
  "Infrastructure under Build Better More is ₱1.467 trillion, 4.4% of GDP, ₱178.0B above the FY 2026 GAA.",
  "The comparison base is a GAA from which Congress had stripped ₱350B of DPWH. Capital outlays in the programmed budget are ₱1,122.6B: 14% above GAA 2026 but 13% below what the executive itself proposed for 2026.",
  "The DBCC will prioritize rationalizing cash subsidy and financial assistance programs to address overlaps and improve targeting.",
  "The NEP does revert Congress's ayuda add-ons. It does not apply the same logic to Financial Assistance to LGUs (₱37.5B, the executive's own 2026 proposal was ₱5.0B) or to the ₱105.7B DPWH local access-roads line.",
  "Ten departments receive 51.4% of the budget, led by DepEd at ₱976B.",
  "DBM's department figures include automatic appropriations such as retirement premiums, so they run higher than the new-appropriations figures used in this briefer (DepEd: ₱916.8B)."
) %>% kbl_clean(font = 12.5) %>% column_spec(1, width = "46%")
What the DBM says What the data show
The budget is ₱7.2 trillion, 21.7% of GDP, and 6% or ₱407B higher than 2026. About ₱316B of the increase is mandatory obligations: the higher NTA, the fourth salary tranche, and other fiscal obligations. Confirmed, and it is the central fact about this budget. Automatic appropriations rise from about ₱2,390B to ₱2,706B. Programmed new appropriations rise ₱91.3B, or 2.1%, below the DBCC’s own inflation assumption.
Unprogrammed appropriations are at a historic low of ₱111.984B, limited mainly to restoring PDIC’s remitted fund balance and cover for foreign-assisted projects. True at the proposal stage: NEP 2026 carried ₱250.0B. But Congress enacted ₱150.9B for 2026, and it raised the executive’s figure in 2022, 2023, 2024, and 2025. The number to watch is the one that comes out of bicam.
Social services take the largest share at ₱2.456 trillion. Education, health, social protection, food security, jobs, and disaster resilience are the priorities. DepEd and DOH do grow against NEP 2026 (+4.8% and +4.0%), which is below inflation. 4Ps is cut ₱13.9B. AICS, MAIFIP, TUPAD, school feeding, classrooms, and textbooks all fall well below their 2026 enacted levels. Every dedicated fuel-relief line is zero.
The consolidated health sector budget reaches ₱1.06 trillion, 3.19% of GDP. This is a broad sector definition the P/A/P data cannot reproduce. The DBM’s own narrower figure for DOH, specialty hospitals, and PhilHealth is ₱353.8B. In the P/A/P data, the PhilHealth subsidy falls to ₱74.4B from ₱129.8B enacted, and MAIFIP is halved.
Infrastructure under Build Better More is ₱1.467 trillion, 4.4% of GDP, ₱178.0B above the FY 2026 GAA. The comparison base is a GAA from which Congress had stripped ₱350B of DPWH. Capital outlays in the programmed budget are ₱1,122.6B: 14% above GAA 2026 but 13% below what the executive itself proposed for 2026.
The DBCC will prioritize rationalizing cash subsidy and financial assistance programs to address overlaps and improve targeting. The NEP does revert Congress’s ayuda add-ons. It does not apply the same logic to Financial Assistance to LGUs (₱37.5B, the executive’s own 2026 proposal was ₱5.0B) or to the ₱105.7B DPWH local access-roads line.
Ten departments receive 51.4% of the budget, led by DepEd at ₱976B. DBM’s department figures include automatic appropriations such as retirement premiums, so they run higher than the new-appropriations figures used in this briefer (DepEd: ₱916.8B).

DBM claims from its 11 August 2026 press release and the 193rd DBCC statement.

4 What’s inside the budget

4.1 The envelope: a ₱7.2 trillion budget, ₱407 billion more than 2026

env <- totals %>% transmute(year, total = `NEP Total Appropriations`, new_incl_ua = `NEP New Appropriations`) %>%
  left_join(pap_tot %>% filter(src == "NEP") %>% select(year, programmed = amt), by = "year") %>%
  filter(year >= 2020) %>%
  mutate(automatic = total - programmed, ua = new_incl_ua - programmed)
env_long <- env %>% select(year, `Programmed new appropriations (agencies and special purpose funds)` = programmed,
                           `Automatic appropriations (NTA, interest, retirement premiums, others)` = automatic) %>%
  pivot_longer(-year)
ggplot(env_long, aes(factor(year), value, fill = name)) +
  geom_col(width = 0.7) +
  geom_text(aes(label = comma(value, accuracy = 1)), position = position_stack(vjust = 0.5), color = "white", size = 3.2, fontface = "bold") +
  geom_text(data = env, aes(factor(year), total, label = paste0(peso, comma(total, accuracy = 1), "B")), inherit.aes = FALSE, vjust = -0.5, size = 3.3, fontface = "bold") +
  scale_fill_manual(values = c("Programmed new appropriations (agencies and special purpose funds)" = "#54278F",
                               "Automatic appropriations (NTA, interest, retirement premiums, others)" = "grey60")) +
  scale_y_continuous(labels = function(x) paste0(peso, comma(x), "B"), expand = expansion(mult = c(0, 0.08))) +
  labs(x = "Proposed budget (NEP), fiscal year", y = NULL,
       title = "Automatic appropriations now drive the growth of the budget",
       subtitle = "Total proposed obligation program, split between programmed new appropriations and automatic appropriations",
       caption = "Programmed new appropriations are the sum of all P/A/P lines in the compiled workbook. Automatic appropriations are derived as the total program less that sum.\nUnprogrammed appropriations sit outside the total and are shown separately in the red-flags section.") +
  theme_pbc() + guides(fill = guide_legend(nrow = 2))

The proposed program is ₱7,200.2B, against ₱6,793.2B for 2026: an increase of ₱407B, or 6.0%. This section shows where that increase goes. Of that, ₱4,494.1B is programmed new appropriations, the part Congress votes on line by line and the part this briefer can see at P/A/P level. The remaining ₱2,706.1B is automatic: the National Tax Allotment, interest payments, retirement and life insurance premiums, and similar items that do not need annual legislation.

Between the two proposals, automatic appropriations grow by ₱315.8B (13.2%) and programmed new appropriations by ₱91.3B (2.1%). This matches the DBM’s own statement that about ₱316B of the increase is mandatory. With inflation running at 5 to 6%, a 2.1% nominal increase is a real cut of around 3%. The government is tightening the part of the budget that delivers services, during a slowdown in which public spending is one of the few things still growing.

4.1.1 Automatic appropriations

comp_levels <- c("National Tax Allotment (IRA before 2022)", "Interest payments", "BARMM annual block grant",
                 "Retirement and life insurance premiums", "Special accounts and other earmarked funds", "Net lending", "Tax expenditures")
an <- auto_long %>% filter(src == "NEP", !is.na(amt)) %>% mutate(component = factor(component, levels = comp_levels))
a_of <- function(comp, yr) sum(an$amt[an$component == comp & an$year == yr])
auto_tot <- an %>% group_by(year) %>% summarise(amt = sum(amt))
auto_check <- max(abs(auto_tot$amt - env$automatic[match(auto_tot$year, env$year)]))
auto_pal <- c("National Tax Allotment (IRA before 2022)" = "#08519C", "Interest payments" = "#B2182B", "BARMM annual block grant" = "#1B7837",
              "Retirement and life insurance premiums" = "#FF7F0E", "Special accounts and other earmarked funds" = "#9467BD",
              "Net lending" = "grey55", "Tax expenditures" = "grey75")
ggplot(an, aes(factor(year), amt, fill = component)) +
  geom_col(width = 0.72, position = position_stack(reverse = TRUE)) +
  geom_text(data = an %>% filter(component %in% comp_levels[1:2]), aes(label = comma(amt, accuracy = 1)),
            position = position_stack(vjust = 0.5, reverse = TRUE), color = "white", size = 3.1, fontface = "bold") +
  geom_text(data = auto_tot, aes(factor(year), amt, label = comma(amt, accuracy = 1)), inherit.aes = FALSE, vjust = -0.5, size = 3.3, fontface = "bold") +
  scale_fill_manual(values = auto_pal) +
  scale_y_continuous(labels = function(x) paste0(peso, comma(x), "B"), expand = expansion(mult = c(0, 0.08))) +
  labs(x = "Proposed budget (NEP), fiscal year", y = NULL,
       title = "Two items, the NTA and interest, are 90% of automatic appropriations",
       subtitle = "Automatic appropriations by component, PHP billions",
       caption = "Source: automatic appropriations tab of the compiled workbook (BESF). Enacted levels equal proposed levels in every year, so only one series is shown.") +
  theme_pbc() + guides(fill = guide_legend(nrow = 4))

at <- tibble::tibble(component = comp_levels) %>%
  mutate(y2020 = sapply(component, a_of, 2020), y2026 = sapply(component, a_of, 2026), y2027 = sapply(component, a_of, 2027))
at <- bind_rows(at, at %>% summarise(component = "All automatic appropriations", across(-component, sum)))
inc <- at$y2027[nrow(at)] - at$y2026[nrow(at)]
at %>% transmute(` ` = component, `FY 2020` = bn(y2020), `FY 2026` = bn(y2026), `FY 2027` = bn(y2027),
                 `Change, 2026 to 2027` = ifelse(abs(y2027 - y2026) < 0.05, "0.0", sprintf("%+.1f", y2027 - y2026)),
                 `Change (%)` = ifelse(abs(y2027 - y2026) < 0.05, "0.0", sprintf("%+.1f", (y2027 / y2026 - 1) * 100)),
                 `Share of the increase (%)` = sprintf("%.0f", (y2027 - y2026) / inc * 100)) %>%
  kbl_clean(align = c("l", rep("r", 6)), caption = "Automatic appropriations by component (PHP billions)") %>%
  row_spec(nrow(at), bold = TRUE)
Automatic appropriations by component (PHP billions)
FY 2020 FY 2026 FY 2027 Change, 2026 to 2027 Change (%) Share of the increase (%)
National Tax Allotment (IRA before 2022) 648.9 1,190.5 1,319.8 +129.3 +10.9 41
Interest payments 451.0 950.0 1,114.3 +164.3 +17.3 52
BARMM annual block grant 63.6 94.0 104.2 +10.2 +10.9 3
Retirement and life insurance premiums 49.3 82.2 89.0 +6.8 +8.3 2
Special accounts and other earmarked funds 12.5 30.5 35.6 +5.1 +16.8 2
Net lending 10.0 28.7 28.7 0.0 0.0 0
Tax expenditures 14.5 14.5 14.5 0.0 0.0 0
All automatic appropriations 1,249.8 2,390.4 2,706.1 +315.8 +13.2 100
rl <- auto %>% filter(component == "Retirement and life insurance premiums") %>% group_by(UACS_DPT_DSC) %>%
  summarise(v = sum(NEP_2027_EXP_TOTAL) / 1e9) %>% arrange(desc(v))
sa <- auto %>% filter(component == "Special accounts and other earmarked funds") %>%
  transmute(fund = UACS_FUNDSUBCAT_DSC, dept = UACS_DPT_DSC, v26 = NEP_2026_EXP_TOTAL / 1e9, v27 = NEP_2027_EXP_TOTAL / 1e9) %>% arrange(desc(v27))
barmm_new <- L %>% filter(dep == "ALGU", str_detect(agy, "Bangsamoro")) %>% summarise(v = sum(N27, na.rm = TRUE)) %>% pull(v)

Automatic appropriations are spending that standing laws authorize without an annual vote. They total ₱2,706.1B, or 37.6% of the budget, up from 30.5% in 2020. The itemized tab sums to the same figure this briefer derives from the budget totals, in every year.

The National Tax Allotment is the largest item at ₱1,319.8B. It is set by formula: 40% of national tax collections three years earlier, so the 2027 figure reflects 2024 revenues and will keep rising regardless of what happens to the economy in 2026. Interest payments are ₱1,114.3B, two and a half times their 2020 level, and the fastest-growing large item in the entire budget at +17.3%. Together the two are 90% of automatic appropriations and 93% of their increase. Neither can be changed in the budget deliberations; both can be changed by what Congress does about revenues and the deficit.

The BARMM annual block grant, 5% of net national internal revenue collections under the Bangsamoro Organic Law, is ₱104.2B. It is separate from the ₱11.4B in new appropriations for BARMM under Allocations to LGUs, and the two are kept as distinct line items here. Retirement and life insurance premiums are ₱89.0B, of which DepEd alone accounts for ₱59.2B. That is the difference between the ₱916.8B in new appropriations used in this briefer and the ₱976B the DBM cites for the department.

The remaining ₱35.6B is about sixty special accounts and earmarked funds that agencies spend from their own collections. The largest are the Malampaya Gas Fund (₱8.0B), DICT’s Free Public Internet Access Fund (FPIAF) (₱6.8B, up from ₱5.0B), and the AFP Modernization Trust Fund (₱3.6B). These matter when reading agency budgets: DICT’s and DOE’s new appropriations fall, but each has a special account that grows. Net lending has been carried at ₱28.7B since 2021 and tax expenditures at ₱14.5B since 2020.

4.1.2 How much of the budget can Congress actually move?

ps_of <- function(src, yr) sum(wide[[paste0(src, "_", yr, "_EXP_1PS")]], na.rm = TRUE) / 1e9
# Interest payments and the National Tax Allotment, from the automatic appropriations tab
besf <- tibble::tibble(item = c("Interest payments", "National Tax Allotment"),
                       y2026 = c(a_of("Interest payments", 2026), a_of(comp_levels[1], 2026)),
                       y2027 = c(a_of("Interest payments", 2027), a_of(comp_levels[1], 2027)))
na_tbl <- tibble::tibble(
  item  = c("Total obligation program", "Automatic appropriations", "  of which: interest payments",
            "  of which: National Tax Allotment", "  of which: other automatic items",
            "Personnel services in programmed appropriations", "Non-allocable (automatic + personnel services)",
            "Allocable (everything else)"),
  y2026 = c(e26$total, e26$automatic, besf$y2026[1], besf$y2026[2], e26$automatic - sum(besf$y2026),
            ps_of("GAA", 2026), e26$automatic + ps_of("GAA", 2026), e26$total - e26$automatic - ps_of("GAA", 2026)),
  y2027 = c(e27$total, e27$automatic, besf$y2027[1], besf$y2027[2], e27$automatic - sum(besf$y2027),
            ps_of("NEP", 2027), e27$automatic + ps_of("NEP", 2027), e27$total - e27$automatic - ps_of("NEP", 2027)))
na_tbl %>% transmute(` ` = item, `FY 2026 program` = bn(y2026), `Share (%)` = sprintf("%.1f", y2026 / e26$total * 100),
                     `FY 2027 proposed` = bn(y2027), `Share (%) ` = sprintf("%.1f", y2027 / e27$total * 100),
                     `Change (%)` = sprintf("%+.1f", (y2027 / y2026 - 1) * 100)) %>%
  kbl_clean(align = c("l", rep("r", 5)), caption = "The non-allocable share of the budget (PHP billions)")
The non-allocable share of the budget (PHP billions)
FY 2026 program Share (%) FY 2027 proposed Share (%) Change (%)
Total obligation program 6,793.2 100.0 7,200.2 100.0 +6.0
Automatic appropriations 2,390.4 35.2 2,706.1 37.6 +13.2
of which: interest payments 950.0 14.0 1,114.3 15.5 +17.3
of which: National Tax Allotment 1,190.5 17.5 1,319.8 18.3 +10.9
of which: other automatic items 249.8 3.7 272.0 3.8 +8.9
Personnel services in programmed appropriations 1,760.1 25.9 1,891.0 26.3 +7.4
Non-allocable (automatic + personnel services) 4,150.5 61.1 4,597.1 63.8 +10.8
Allocable (everything else) 2,642.7 38.9 2,603.1 36.2 -1.5
nonalloc <- na_tbl[7, ]; alloc <- na_tbl[8, ]

FY 2026 uses enacted personnel services. All rows are computed from the compiled workbook, including its automatic appropriations tab.

Following PBC’s method, treat as non-allocable everything that is either automatically appropriated or committed to payroll. That share rises from 61.1% of the budget to 63.8%. The allocable remainder falls in nominal pesos, from ₱2,642.7B to ₱2,603.1B. Interest payments alone grow by ₱164.3B, or 17.3%, which is more than the entire ₱91.3B increase in programmed appropriations. Interest and the NTA together explain ₱293.6B of the ₱315.8B rise in automatic appropriations.

Counting all personnel services as non-allocable is a simplification, since new positions are a choice, but it is the right order of magnitude. Congress is debating a little over a third of the ₱7.2 trillion, and that third is shrinking.

4.2 By expense class

cls_lab <- c(PS = "Personnel Services (PS)", MOOE = "Maintenance & Other Op. Exp. (MOOE)",
             FE = "Financial Expenses (FE)", CO = "Capital Outlays (CO)")
cls <- long %>% filter(cls != "TOTAL") %>%
  group_by(src, year, cls) %>% summarise(amt = sum(amt, na.rm = TRUE) / 1e9, .groups = "drop") %>%
  filter((src == "NEP" & year %in% 2026:2027) | (src == "GAA" & year == 2026) | (src == "HGAB" & year == 2027), cls != "FE") %>%
  mutate(col = factor(recode(paste(src, year), "HGAB 2027" = "House bill 2027"), levels = ver_lv),
         cls = factor(cls_lab[cls], levels = cls_lab)) %>%
  group_by(col) %>% mutate(share = amt / sum(amt))
ggplot(cls, aes(col, amt, fill = cls)) +
  geom_col(width = 0.62) +
  geom_text(aes(label = paste0(comma(amt, accuracy = 1), "\n(", percent(share, accuracy = 1), ")")),
            position = position_stack(vjust = 0.5), color = "white", size = 3.3, fontface = "bold", lineheight = 0.9) +
  scale_fill_manual(values = ec_pal) +
  scale_y_continuous(labels = function(x) paste0(peso, comma(x), "B")) +
  labs(x = NULL, y = NULL,
       title = "Congress moved about PHP 300B from capital outlays to MOOE in 2026; the NEP restores about half; the House takes another PHP 36B out",
       subtitle = "Programmed new appropriations by expense class, PHP billions",
       caption = "Financial expenses are negligible and omitted.") +
  theme_pbc()

Personnel services are 42% of the programmed budget, MOOE 33%, and capital outlays 25%. Capital outlays are proposed at ₱1,122.6B. Against the executive’s 2026 proposal that is a 12.8% cut; against the 2026 GAA it is a 14.2% increase. The gap between those two readings is the ₱350B Congress took out of DPWH after the flood-control scandal and redistributed, largely into MOOE-funded assistance programs.

The House committee report takes a further ₱36B out of capital outlays and ₱8B out of personnel services, and puts ₱44B into MOOE, which is where AICS and MAIFIP sit.

This is the reason the briefer reports two comparisons throughout. NEP 2026 to NEP 2027 shows how the executive’s own priorities changed. GAA 2026 to NEP 2027 shows what agencies and beneficiaries will feel against the current year. Neither alone is the full story, and claims of “cuts” or “increases” that cite only one should be checked against the other.

4.3 The biggest departments

dept <- L %>% group_by(dep, Department = dept) %>%
  summarise(across(c(N26, G26, N27, H27), ~ if (all(is.na(.x))) NA_real_ else sum(.x, na.rm = TRUE)), .groups = "drop") %>%
  filter(coalesce(N27, 0) > 0) %>%
  mutate(`vs NEP 2026` = N27 - N26, `vs NEP 2026 (%)` = (N27 / N26 - 1) * 100,
         `vs GAA 2026` = N27 - G26, `vs GAA 2026 (%)` = (N27 / G26 - 1) * 100,
         share = N27 / sum(N27) * 100)
top_dept <- dept %>% slice_max(N27, n = 15) %>%
  select(dep, `NEP 2026` = N26, `GAA 2026` = G26, `NEP 2027` = N27, `House bill 2027` = H27) %>%
  pivot_longer(-dep) %>%
  mutate(name = factor(name, levels = rev(ver_lv)),
         dep = recode(dep, "ALGU" = "Allocations to LGUs", "BSGC" = "Support to GOCCs"))
ord <- top_dept %>% filter(name == "NEP 2027") %>% arrange(value) %>% pull(dep)
ggplot(top_dept, aes(value, factor(dep, levels = ord), fill = name)) +
  geom_col(position = position_dodge(width = 0.85), width = 0.8) +
  geom_text(aes(label = comma(value, accuracy = 1)), position = position_dodge(width = 0.85), hjust = -0.15, size = 2.6) +
  scale_fill_manual(values = ver_pal, breaks = ver_lv) +
  scale_x_continuous(labels = function(x) paste0(peso, comma(x), "B"), expand = expansion(mult = c(0, 0.08))) +
  labs(x = NULL, y = NULL,
       title = "Fifteen largest departments and funds, programmed new appropriations",
       subtitle = "NEP 2026, GAA 2026, NEP 2027, and the House committee report, PHP billions",
       caption = "New appropriations only; excludes automatic appropriations such as retirement and life insurance premiums, so figures run below DBM's headline department totals.") +
  theme_pbc() + theme(panel.grid.major.y = element_blank(), panel.grid.major.x = element_line(color = "grey90"))

DepEd is the largest at ₱916.8B, about a fifth of the programmed budget, followed by DPWH, DILG, DND, and DOTr. Three things stand out in the ranking. DOTr moves from eleventh in the 2026 GAA to fifth. DPWH, which held more than a quarter of programmed appropriations in the 2025 GAA, is now at 14%. And Allocations to LGUs, mostly the Local Government Support Fund, has grown by two thirds against the executive’s previous proposal.

dept %>% arrange(desc(N27)) %>%
  transmute(Department, `NEP 2026` = N26, `GAA 2026` = G26, `NEP 2027` = N27, `House bill 2027` = H27, `House vs NEP` = coalesce(H27, 0) - N27,
            `Share of NEP 2027 (%)` = share, `vs NEP 2026` , `vs NEP 2026 (%)`, `vs GAA 2026`, `vs GAA 2026 (%)`) %>%
  dt_table(caption = "All departments and special purpose funds, programmed new appropriations (PHP billions). Sortable and exportable.",
           page = 15, money_cols = c("NEP 2026","GAA 2026","NEP 2027","House bill 2027","House vs NEP","vs NEP 2026","vs GAA 2026"),
           pct_cols = c("Share of NEP 2027 (%)","vs NEP 2026 (%)","vs GAA 2026 (%)"))

4.4 The biggest agencies

agy_tbl <- L %>% group_by(Department = dep, Agency = agy) %>%
  summarise(across(c(N26, G26, N27, H27), ~ if (all(is.na(.x))) NA_real_ else sum(.x, na.rm = TRUE)), .groups = "drop") %>%
  filter(coalesce(N26, 0) + coalesce(G26, 0) + coalesce(N27, 0) > 0) %>% arrange(desc(N27)) %>%
  mutate(`vs NEP 2026` = N27 - coalesce(N26, 0), `vs GAA 2026` = N27 - coalesce(G26, 0))
agy_tbl %>% mutate(`House vs NEP` = coalesce(H27, 0) - coalesce(N27, 0)) %>% rename(`NEP 2026` = N26, `GAA 2026` = G26, `NEP 2027` = N27, `House bill 2027` = H27) %>%
  dt_table(caption = "All agencies, programmed new appropriations (PHP billions). Includes each State University and College and each government corporation receiving budgetary support.",
           page = 20, money_cols = c("NEP 2026","GAA 2026","NEP 2027","House bill 2027","House vs NEP","vs NEP 2026","vs GAA 2026"))

The budget is concentrated. The twelve largest of 368 agencies hold 72% of programmed new appropriations: the offices of the secretary of DepEd, DPWH, DOH, DOTr, DSWD, and DA; the PNP; the Pension and Gratuity Fund; the Army and the Navy; PhilHealth; and the Supreme Court and lower courts. What Congress does to these dozen agencies decides most of what the budget does.

4.5 The biggest programs, activities, and projects

wrap_lab <- function(x, w = 78) str_wrap(x, w)
top_pap <- L %>% filter(!is.na(N27)) %>% slice_max(N27, n = 25) %>%
  mutate(PAP = str_replace(PAP, "^Foreign-Assisted Projects?:", "FAP:"),
         PAP = str_replace(PAP, "^Locally-Funded Projects?:", "LFP:"),
         lab = wrap_lab(paste0(dep, ": ", PAP)))
ggplot(top_pap, aes(N27, reorder(lab, N27))) +
  geom_col(fill = "#54278F", width = 0.72) +
  geom_text(aes(label = comma(N27, accuracy = 0.1)), hjust = -0.15, size = 3) +
  scale_x_continuous(labels = function(x) paste0(peso, comma(x), "B"), expand = expansion(mult = c(0, 0.09))) +
  labs(x = NULL, y = NULL, title = "The 25 largest line items in the FY 2027 NEP",
       subtitle = "Programmed new appropriations, PHP billions",
       caption = "FAP = foreign-assisted project; LFP = locally-funded project. Labels are otherwise as they appear in the NEP.") +
  theme_pbc(11) + theme(panel.grid.major.y = element_blank(), panel.grid.major.x = element_line(color = "grey90"),
                        axis.text.y = element_text(size = 8.3, lineheight = 0.85))

Twenty-five line items out of 2,846 funded lines account for ₱2,367.3B, or 53% of programmed new appropriations. The top of the list is payroll and pensions: school operations, police operations, the Pension and Gratuity Fund, and Army force sustainment. The discretionary weight sits further down: the North-South Commuter Railway (₱123.8B), DPWH’s Basic Infrastructure Program access-roads line (₱105.7B), DOH regional hospitals (₱102.9B), 4Ps (₱99.1B), and the Metro Manila Subway (₱67.4B).

4.6 The biggest increases and cuts

Line items get renamed, merged, and split between budgets, and a naive comparison of labels produces false “new” and “discontinued” programs. Before ranking changes, this briefer groups lines that were restructured between 2026 and 2027: the Pension and Gratuity Fund and the Miscellaneous Personnel Benefits Fund (each collapsed into a single line), the calamity fund (restructured into new sub-lines), DepEd’s private-education subsidies (the Senior High School voucher, ESC, and the joint delivery voucher merged into one “Government Assistance and Subsidies” line), and DPWH’s local access-road lines (SIPAG, BIP, and the separately labeled tourism, ecozone, seaport, and airport access roads, all folded into one BIP line).

fam_of <- function(dep, agy, pap) {
  p <- coalesce(pap, "")
  case_when(
    dep == "Pension and Gratuity Fund" ~ "Pension and Gratuity Fund (all lines)",
    dep == "Miscellaneous Personnel Benefits Fund" ~ "Miscellaneous Personnel Benefits Fund (all lines)",
    dep == "NDRRMF" ~ "NDRRM Fund / calamity fund (all lines)",
    dep == "DepEd" & str_detect(p, "Senior High School Voucher|Educational Service Contracting|Joint Delivery Voucher|^Government Assistance and Subsidies$") ~
      "Private-education subsidies: SHS voucher, ESC, joint delivery voucher (merged in 2027)",
    dep == "DPWH" & str_detect(p, "(SIPAG|Basic Infrastructure Program).*(Access Roads|Interjurisdictional)|Access Roads leading to") ~
      "Local and access roads: BIP, SIPAG, tourism, ecozone, seaport and airport access roads (merged in 2027)",
    dep == "DPWH" & str_detect(p, "(SIPAG|Basic Infrastructure Program).*(Multi-Purpose|Multipurpose)") ~
      "BIP and SIPAG multi-purpose buildings",
    dep == "DPWH" & str_detect(p, "(SIPAG|Basic Infrastructure Program).*Flood") ~ "BIP and SIPAG flood mitigation structures",
    dep == "DA" & str_detect(p, "National Livestock Program|Animal Industry Development") ~
      "Livestock: National Livestock Program lines and the new Animal Industry Development and Competitiveness Program",
    TRUE ~ p)
}
fam <- L %>% filter(tab != "SUCs") %>%
  mutate(family = fam_of(dep, agy, PAP)) %>%
  group_by(dep, agy, family) %>%
  summarise(across(c(N26, G26, N27, H27), ~ if (all(is.na(.x))) NA_real_ else sum(.x, na.rm = TRUE)), .groups = "drop") %>%
  mutate(vs_nep = coalesce(N27, 0) - coalesce(N26, 0), vs_gaa = coalesce(N27, 0) - coalesce(G26, 0),
         family = str_replace(family, "^Foreign-Assisted Projects?:", "FAP:"),
         family = str_replace(family, "^Locally-Funded Projects?:", "LFP:"),
         family = ifelse(str_detect(family, "^Conduct of police patrol operations"), "Conduct of police patrol operations and other related activities [label shortened]", family),
         lab = str_wrap(ifelse(dep %in% c("Pension and Gratuity Fund", "Miscellaneous Personnel Benefits Fund", "NDRRMF"), family, paste0(dep, ": ", family)), 72))
mover_plot <- function(var, title, subtitle) {
  d <- bind_rows(fam %>% slice_max(.data[[var]], n = 14), fam %>% slice_min(.data[[var]], n = 14)) %>%
    mutate(v = .data[[var]])
  ggplot(d, aes(v, reorder(lab, v), fill = v > 0)) +
    geom_col(width = 0.72, show.legend = FALSE) +
    geom_text(aes(label = ifelse(v > 0, paste0("+", comma(v, accuracy = 0.1)), comma(v, accuracy = 0.1)),
                  hjust = ifelse(v > 0, -0.12, 1.12)), size = 2.9) +
    scale_fill_manual(values = c(`TRUE` = up_col, `FALSE` = dn_col)) +
    scale_x_continuous(labels = function(x) paste0(peso, comma(x), "B"), expand = expansion(mult = c(0.12, 0.12))) +
    labs(x = NULL, y = NULL, title = title, subtitle = subtitle,
         caption = "Restructured lines are grouped into families (see text). New lines count from zero so they appear; FY 2027 has no GAA yet.\nThe PNP police-operations label is shortened; its full text is in the reference table.") +
    theme_pbc(11) + theme(panel.grid.major.y = element_blank(), panel.grid.major.x = element_line(color = "grey90"),
                          axis.text.y = element_text(size = 7.9, lineheight = 0.85))
}

4.6.1 Against the executive’s own 2026 proposal

mover_plot("vs_nep", "What the executive changed: NEP 2026 to NEP 2027",
           "Fourteen largest increases and decreases by line item, PHP billions")

Proposal to proposal, the executive’s choices are clear. Money moves out of DPWH flood control (the two main flood lines lose ₱151B between them) and DPWH Support to Operations, and into rail, the PNP, school operations and teacher pay, Financial Assistance to LGUs, election preparations, and a new ₱20B animal industry program. The ASEAN hosting budget (₱17.6B) drops out because the summit year ends. 4Ps loses ₱13.9B.

4.6.2 Against the 2026 enacted budget

mover_plot("vs_gaa", "What changes against the current year: GAA 2026 to NEP 2027",
           "Fourteen largest increases and decreases by line item, PHP billions")

Against the enacted budget the picture flips. The largest increases are the things Congress cut in 2026 and the executive wants back: rail, flood control, bypass roads, DPWH Support to Operations. The largest decreases are the things Congress added and the executive does not want: PhilHealth’s one-time ₱60B court-ordered appropriation, classrooms, multi-purpose buildings, AICS, MAIFIP, school feeding, farm-to-market roads, and textbooks. The 2027 budget debate will largely be a rerun of this disagreement.

fam %>% filter(abs(vs_nep) >= 0.5 | abs(vs_gaa) >= 0.5) %>% arrange(desc(abs(vs_nep))) %>%
  transmute(Department = dep, Agency = agy, `Line item (or family)` = family,
            `NEP 2026` = N26, `GAA 2026` = G26, `NEP 2027` = N27, `House bill 2027` = H27, `vs NEP 2026` = vs_nep, `vs GAA 2026` = vs_gaa) %>%
  dt_table(caption = "All line items changing by ₱0.5B or more on either comparison (PHP billions). Excludes SUC lines. The House bill column is shown for reference; House changes are analysed in Part 1.",
           page = 15, money_cols = c("NEP 2026","GAA 2026","NEP 2027","House bill 2027","vs NEP 2026","vs GAA 2026"), money_digits = 2)

4.7 Infrastructure across the budget

Infrastructure is not only DPWH. Roads, bridges, irrigation, classrooms, health facilities, ports, power lines, and public buildings are funded through at least a dozen departments and government corporations. This section collects them in one place. Lines are assigned to groups by agency and label; the last group is a rule-based sweep of remaining construction, repair, and building lines whose funding is at least half capital outlay.

P  <- function(rx) str_detect(coalesce(L$PAP, ""), regex(rx, ignore_case = TRUE))
A  <- function(rx) str_detect(L$agy, regex(rx, ignore_case = TRUE))
is_proj <- P("Project")
grp <- rep(NA_character_, nrow(L)); itm <- rep(NA_character_, nrow(L))
assign_to <- function(cond, g, i) { hit <- cond & is.na(grp); grp[hit] <<- g; itm[hit] <<- i }

# A. DPWH, by program
dp <- L$dep == "DPWH"
dpwh_prog <- c("1000" = "General Administration and Support", "2000" = "Support to Operations", "3001" = "Local Program",
               "3002" = "Convergence and Special Support Program (BIP, SIPAG, other convergence roads)", "3101" = "Asset Preservation Program",
               "3102" = "Network Development Program", "3103" = "Bridge Program", "3201" = "Flood Management Program")
for (k in names(dpwh_prog)) assign_to(dp & L$prog == k, "DPWH", dpwh_prog[[k]])
assign_to(dp, "DPWH", "Other DPWH lines")

# B. Transport outside DPWH
dotr <- L$dep == "DOTr"
assign_to((dotr & is_proj & P("Railway|Subway|Metro Rail Transit|\\bMRT\\b|Light Rail|\\bLRT\\b|PNR")) | (L$dep == "BSGC" & A("Light Rail Transit|Philippine National Railways")),
          "Transport outside DPWH", "Rail: NSCR, Metro Manila Subway, MRT and LRT projects, LRTA and PNR support")
assign_to(dotr & P("\\bAirports?\\b|CNS/ATM"), "Transport outside DPWH", "Airports and air navigation projects")
assign_to(dotr & is_proj & P("\\bPorts?\\b|Container"), "Transport outside DPWH", "Ports: New Cebu International Container Port and local ports")
assign_to(dotr & P("Davao Public Transport|Bus Rapid Transit|Public Transport Modernization Program|EDSA Busway|Active Transport"),
          "Transport outside DPWH", "Road-based public transport: Davao bus project, Cebu BRT, PUV modernization, busway, active transport")

# C. Agriculture and fisheries
assign_to(L$dep == "BSGC" & A("National Irrigation"), "Agriculture and fisheries", "National Irrigation Administration: all lines")
assign_to(L$dep == "DA" & P("Farm-to-Market"), "Agriculture and fisheries", "DA farm-to-market roads and bridges")
assign_to(L$dep == "BSGC" & A("Fisheries Development Authority"), "Agriculture and fisheries", "PFDA: fish ports")
assign_to(L$dep == "DA" & P("Provision of Agricultural Equipment and Facilities|Fishery On-farm/Postharvest Equipment|Cold Storage"),
          "Agriculture and fisheries", "DA and BFAR equipment, postharvest facilities, and cold storage")
assign_to(L$dep == "DA" & P("Irrigation Network Services|Small Water Irrigation|Solar-Powered Irrigation"), "Agriculture and fisheries", "DA small-scale irrigation")
assign_to(L$dep == "DA" & P("Philippine Rural Development Project"), "Agriculture and fisheries", "Philippine Rural Development Project Scale-Up (World Bank)")

# D. Education
assign_to(L$dep == "DepEd" & P("^Basic Education Facilities"), "Education", "DepEd Basic Education Facilities (classrooms)")
assign_to(L$dep == "DepEd" & P("Safer and Resilient Schools"), "Education", "DepEd Infrastructure for Safer and Resilient Schools (World Bank)")

# E. Health
assign_to(L$dep == "DOH" & P("^Health Facilities Enhancement"), "Health", "DOH Health Facilities Enhancement Program")

# F. Power, water, digital, housing, and other GOCC infrastructure
assign_to(L$dep == "BSGC" & A("National Electrification"), "Power, water, digital, and housing", "National Electrification Administration: all lines")
assign_to(L$dep == "DICT" & P("Digital Infrastructure Project|National Broadband|Data Center|Digital Information Infrastructure"),
          "Power, water, digital, and housing", "DICT digital infrastructure, broadband, and data centers")
assign_to((L$dep == "BSGC" & A("National Housing Authority|Social Housing")) | (L$dep == "DHSUD" & P("Pabahay|4PH")),
          "Power, water, digital, and housing", "Housing: NHA, SHFC, and the 4PH program")
assign_to(L$dep == "ALGU" & P("Flood Control"), "Power, water, digital, and housing", "MMDA Metro Manila flood control")
assign_to(L$dep == "BSGC" & A("Local Water Utilities"), "Power, water, digital, and housing", "Local Water Utilities Administration")
kw <- "construct|rehabilitat|repair|building|\\broads?\\b|bridge|halls? of justice|barracks|\\bstations?\\b|infrastructure|facilities\\b"
assign_to(L$dep == "BSGC" & P(kw), "Power, water, digital, and housing", "Other GOCC infrastructure support (ecozones, BCDA, others)")

# G. Public buildings and facilities elsewhere: label names construction/repair/buildings AND at least half capital outlay
co_share <- pmax(L$C26n / ifelse(L$N26 > 0, L$N26, NA), L$C26g / ifelse(L$G26 > 0, L$G26, NA), L$C27 / ifelse(L$N27 > 0, L$N27, NA), na.rm = TRUE)
sweep <- P(kw) & coalesce(co_share, 0) >= 0.5 & L$tab != "SUCs" & !(L$dep %in% c("NDRRMF", "DOTr", "DA", "DICT", "ALGU"))
assign_to(sweep & L$dep %in% c("JUD", "DOJ"), "Public buildings and facilities elsewhere", "Justice sector: halls of justice, prosecution and corrections facilities")
assign_to(sweep & L$dep %in% c("DILG", "DND"), "Public buildings and facilities elsewhere", "Police, fire, jail, and military facilities")
assign_to(sweep, "Public buildings and facilities elsewhere", "All other agencies")

infra_lines <- L %>% mutate(group = grp, item = itm) %>% filter(!is.na(group))
# SUC capital outlays enter as one aggregate row (expense-class basis)
suc_row <- L %>% filter(tab == "SUCs") %>%
  summarise(group = "Education", item = "State Universities and Colleges: capital outlays (all 100+ institutions)",
            N26 = sum(C26n, na.rm = TRUE), G26 = sum(C26g, na.rm = TRUE), N27 = sum(C27, na.rm = TRUE), H27 = sum(CH27, na.rm = TRUE))
grp_levels <- c("DPWH", "Transport outside DPWH", "Agriculture and fisheries", "Education", "Health",
                "Power, water, digital, and housing", "Public buildings and facilities elsewhere")
infra <- infra_lines %>% group_by(group, item) %>% summarise(across(c(N26, G26, N27, H27), ~ sum(.x, na.rm = TRUE)), .groups = "drop") %>%
  bind_rows(suc_row) %>% filter(pmax(N26, G26, N27) >= 0.05) %>%
  mutate(group = factor(group, levels = grp_levels)) %>% arrange(group, desc(N27))
infra_grp <- infra %>% group_by(group) %>% summarise(across(c(N26, G26, N27, H27), sum), .groups = "drop")
infra_tot <- infra_grp %>% summarise(across(c(N26, G26, N27, H27), sum))
ig <- function(g, col = "N27") infra_grp[[col]][infra_grp$group == g]
ii <- function(rx, col = "N27") sum(infra[[col]][str_detect(infra$item, rx)])
igl <- infra_grp %>% pivot_longer(-group) %>%
  mutate(name = factor(recode(name, N26 = "NEP 2026", G26 = "GAA 2026", N27 = "NEP 2027", H27 = "House bill 2027"), levels = rev(ver_lv)),
         group = factor(group, levels = rev(grp_levels)))
ggplot(igl, aes(value, group, fill = name)) +
  geom_col(position = position_dodge(width = 0.8), width = 0.75) +
  geom_text(aes(label = comma(value, accuracy = 0.1)), position = position_dodge(width = 0.8), hjust = -0.15, size = 3) +
  scale_fill_manual(values = ver_pal, breaks = ver_lv) +
  scale_x_continuous(labels = function(x) paste0(peso, comma(x), "B"), expand = expansion(mult = c(0, 0.1))) +
  labs(x = NULL, y = NULL, title = "Infrastructure lines across the budget, by where they sit",
       subtitle = "Programmed new appropriations, PHP billions",
       caption = "This briefer's grouping of P/A/P lines; narrower than DBM's infrastructure program, which also counts LGU, GOCC, and other infrastructure-related outlays.") +
  theme_pbc() + theme(panel.grid.major.y = element_blank(), panel.grid.major.x = element_line(color = "grey90"))

The inventory comes to ₱1,031B in the NEP, against ₱1,196B in the executive’s previous proposal and ₱896B enacted for 2026. DPWH is 62% of it, so about ₱388B of infrastructure sits outside the department whose projects are now held to a documentation standard. The DBM’s own infrastructure figure, ₱1.467 trillion, is wider: it counts LGU infrastructure funded from the NTA, GOCC investment, and other outlays that are not P/A/P lines.

Three patterns stand out. The increase over 2026 is transport: DPWH recovers ₱113B of what Congress cut and rail more than triples against its enacted level, while nearly every other group is below its enacted level. The social infrastructure that Congress favors moves the other way: classrooms fall from ₱85.4B enacted to ₱30.6B, health facilities from ₱22.3B to ₱14.5B, farm-to-market roads and bridges from ₱33.3B to ₱17.1B, irrigation from ₱63.2B to ₱46.4B, and SUC capital outlays from ₱15.8B to ₱6.4B. And the scattered public buildings (halls of justice, police and fire stations, agency offices) shrink from ₱16.9B to ₱2.8B.

dpl <- infra %>% filter(group == "DPWH") %>% select(item, N26, G26, N27, H27) %>% pivot_longer(-item) %>%
  mutate(name = factor(recode(name, N26 = "NEP 2026", G26 = "GAA 2026", N27 = "NEP 2027", H27 = "House bill 2027"), levels = rev(ver_lv)),
         item = str_wrap(item, 42))
ord_d <- dpl %>% filter(name == "NEP 2027") %>% arrange(value) %>% pull(item)
ggplot(dpl, aes(value, factor(item, levels = ord_d), fill = name)) +
  geom_col(position = position_dodge(width = 0.8), width = 0.75) +
  geom_text(aes(label = comma(value, accuracy = 0.1)), position = position_dodge(width = 0.8), hjust = -0.15, size = 2.9) +
  scale_fill_manual(values = ver_pal, breaks = ver_lv) +
  scale_x_continuous(labels = function(x) paste0(peso, comma(x), "B"), expand = expansion(mult = c(0, 0.1))) +
  labs(x = NULL, y = NULL, title = "DPWH by program: Congress and the executive want different departments",
       subtitle = "Programmed new appropriations, PHP billions") +
  theme_pbc() + theme(panel.grid.major.y = element_blank(), panel.grid.major.x = element_line(color = "grey90"), axis.text.y = element_text(size = 9, lineheight = 0.9))

Inside DPWH the disagreement between the branches is plain. The executive’s DPWH is built around the national network: Network Development at ₱176.6B, bridges, and asset preservation. Congress’s DPWH in 2026 was built around the Convergence program, which it raised from ₱167.8B to ₱240.5B while cutting Network Development nearly in half and flood management to almost nothing. The 2027 proposal returns to the executive’s version, with one concession: the Convergence program stays close to its NEP 2026 size and is now almost entirely the two BIP lump lines discussed in the red flags section.

idx_i <- table(infra$group)
infra %>% mutate(chg_n = N27 - N26, chg_g = N27 - G26, chg_h = H27 - N27) %>%
  transmute(`Line or group` = item, `NEP 2026` = bn(N26), `GAA 2026` = bn(G26), `NEP 2027` = bn(N27), `House bill 2027` = bn(H27),
            `vs NEP 2026` = fmt_chg(chg_n, 1), `vs GAA 2026` = fmt_chg(chg_g, 1), `House vs NEP` = fmt_chg(chg_h, 1)) %>%
  bind_rows(infra_tot %>% transmute(`Line or group` = "All infrastructure lines in this inventory", `NEP 2026` = bn(N26), `GAA 2026` = bn(G26), `NEP 2027` = bn(N27), `House bill 2027` = bn(H27),
                                    `vs NEP 2026` = fmt_chg(N27 - N26, 1), `vs GAA 2026` = fmt_chg(N27 - G26, 1), `House vs NEP` = fmt_chg(H27 - N27, 1))) %>%
  kbl_clean(font = 12, align = c("l", rep("r", 7)), caption = "Infrastructure inventory (PHP billions)") %>%
  pack_rows(index = c(setNames(as.integer(idx_i[idx_i > 0]), names(idx_i[idx_i > 0])), "Total" = 1)) %>%
  column_spec(1, width = "40%") %>% row_spec(nrow(infra) + 1, bold = TRUE) %>% column_spec(8, bold = TRUE)
Infrastructure inventory (PHP billions)
Line or group NEP 2026 GAA 2026 NEP 2027 House bill 2027 vs NEP 2026 vs GAA 2026 House vs NEP
DPWH
Network Development Program 182.5 96.8 176.6 122.0 -5.9 +79.8 -54.6
Convergence and Special Support Program (BIP, SIPAG, other convergence roads) 167.8 240.5 157.3 231.4 -10.5 -83.2 +74.1
Flood Management Program 250.8 4.8 103.5 96.0 -147.4 +98.7 -7.4
Asset Preservation Program 108.3 99.4 76.5 82.6 -31.8 -22.9 +6.1
Support to Operations 82.4 29.6 51.6 49.1 -30.8 +22.0 -2.5
Bridge Program 52.3 34.1 44.4 40.9 -7.9 +10.4 -3.5
General Administration and Support 20.5 16.6 18.1 18.1 -2.4 +1.5 0.00
Local Program 15.4 7.8 14.6 14.1 -0.8 +6.8 -0.6
Transport outside DPWH
Rail: NSCR, Metro Manila Subway, MRT and LRT projects, LRTA and PNR support 123.5 55.6 195.6 160.9 +72.1 +140.0 -34.7
Road-based public transport: Davao bus project, Cebu BRT, PUV modernization, busway, active transport 3.6 3.8 15.5 10.4 +11.9 +11.7 -5.1
Ports: New Cebu International Container Port and local ports 4.3 4.4 9.0 6.0 +4.7 +4.6 -3.0
Airports and air navigation projects 5.9 7.9 5.8 6.5 0.00 -2.0 +0.7
Agriculture and fisheries
National Irrigation Administration: all lines 45.1 63.2 46.4 45.2 +1.3 -16.9 -1.2
DA farm-to-market roads and bridges 16.1 33.3 17.1 20.8 +1.0 -16.1 +3.7
Philippine Rural Development Project Scale-Up (World Bank) 10.0 10.0 8.9 7.4 -1.1 -1.1 -1.5
DA and BFAR equipment, postharvest facilities, and cold storage 4.3 4.8 5.7 5.8 +1.4 +0.9 +0.1
PFDA: fish ports 2.1 4.5 3.8 4.3 +1.7 -0.7 +0.5
DA small-scale irrigation 1.2 1.2 0.6 0.8 -0.5 -0.5 +0.1
Education
DepEd Basic Education Facilities (classrooms) 28.1 85.4 30.6 27.5 +2.5 -54.8 -3.1
State Universities and Colleges: capital outlays (all 100+ institutions) 9.6 15.8 6.4 6.8 -3.2 -9.4 +0.5
DepEd Infrastructure for Safer and Resilient Schools (World Bank) 9.4 9.4 2.2 1.2 -7.2 -7.2 -0.9
Health
DOH Health Facilities Enhancement Program 14.5 22.3 14.5 10.1 0.00 -7.8 -4.5
Power, water, digital, and housing
National Electrification Administration: all lines 6.4 10.1 6.5 6.5 0.00 -3.6 0.00
DICT digital infrastructure, broadband, and data centers 8.4 5.2 5.6 2.2 -2.8 +0.4 -3.4
Other GOCC infrastructure support (ecozones, BCDA, others) 6.3 5.6 4.7 3.9 -1.6 -0.9 -0.8
Housing: NHA, SHFC, and the 4PH program 3.1 4.1 3.6 3.6 +0.5 -0.5 0.00
MMDA Metro Manila flood control 2.6 3.5 3.4 3.8 +0.8 -0.1 +0.4
Public buildings and facilities elsewhere
All other agencies 7.0 8.1 2.6 2.7 -4.4 -5.6 +0.1
Justice sector: halls of justice, prosecution and corrections facilities 2.7 2.7 0.2 0.2 -2.5 -2.5 0.00
Police, fire, jail, and military facilities 1.8 6.1 0.0 0.0 -1.8 -6.1 0.00
Total
All infrastructure lines in this inventory 1,195.7 896.5 1,031.1 990.4 -164.6 +134.6 -40.7

“DA and BFAR equipment, postharvest facilities, and cold storage” is the sum of the Provision of Agricultural Equipment and Facilities (PAEF) lines under each DA commodity program (corn, high-value crops, rice, organic, urban agriculture, halal, livestock), BFAR’s Provision of Fishery On-farm/Postharvest Equipment and Facilities, and the Cold Storage Expansion Project. Excludes the calamity fund’s reconstruction lines, Financial Assistance to LGUs (much of which funds local infrastructure but is not itemized), DOTr’s right-of-way payments, and military equipment. SUC figures are capital outlays by expense class; GOCC lines are budgetary support and are classified as MOOE in the source even when they fund construction.

infra_lines %>% filter(coalesce(N26, 0) + coalesce(G26, 0) + coalesce(N27, 0) > 0) %>%
  transmute(Group = group, Department = dep, Agency = agy, `Program / Activity / Project` = PAP,
            `NEP 2026` = N26, `GAA 2026` = G26, `NEP 2027` = N27, `House bill 2027` = H27, `House vs NEP` = coalesce(H27, 0) - coalesce(N27, 0), `vs NEP 2026` = N27 - N26, `vs GAA 2026` = N27 - G26) %>%
  arrange(desc(`NEP 2027`)) %>%
  dt_table(caption = "Every line in the infrastructure inventory (PHP billions). Filter by group, agency, or keyword to inspect what was classified where.",
           page = 12, money_cols = c("NEP 2026","GAA 2026","NEP 2027","House bill 2027","House vs NEP","vs NEP 2026","vs GAA 2026"), money_digits = 2)

4.8 What does the budget say about the growth strategy?

A budget reveals a growth theory through the lines it chooses to fund at scale. The table groups the line items that most plausibly carry the government’s bet on future growth, as distinct from lines that pay for current services or transfers.

sum_lines <- function(d, label) d %>% filter(tab != "SUCs") %>%
  summarise(PAP = label, across(c(N26, G26, N27, H27), ~ sum(.x, na.rm = TRUE)))
gl <- function(pap, dep = NULL, agy = NULL) { d <- L %>% filter(str_detect(coalesce(PAP, ""), regex(pap, ignore_case = TRUE)))
  if (!is.null(dep)) d <- d %>% filter(.data$dep == !!dep); if (!is.null(agy)) d <- d %>% filter(str_detect(.data$agy, agy)); d }
growth <- bind_rows(
  bind_rows(
    sum_lines(gl("North-South Commuter Railway", "DOTr"), "DOTr: North-South Commuter Railway"),
    sum_lines(gl("Metro Manila Subway", "DOTr"), "DOTr: Metro Manila Subway"),
    sum_lines(L %>% filter(dep == "DPWH", prog == "3102"), "DPWH: Network Development Program (bypass and diversion roads, missing links, road widening)"),
    sum_lines(L %>% filter(dep == "DPWH", prog == "3103"), "DPWH: Bridge Program"),
    sum_lines(gl("\\bAirports?\\b|CNS/ATM", "DOTr"), "DOTr: airport projects and air traffic management"),
    sum_lines(gl("Container Port", "DOTr"), "DOTr: New Cebu International Container Port"),
    sum_lines(gl("Davao Public Transport Modernization", "DOTr"), "DOTr: Davao Public Transport Modernization Project")) %>%
    mutate(pillar = "Transport and connectivity"),
  bind_rows(
    sum_lines(L %>% filter(dep == "BSGC", str_detect(agy, "National Irrigation")), "National Irrigation Administration: all lines"),
    sum_lines(gl("Rice Competitiveness Enhancement", "DA"), "DA: Rice Competitiveness Enhancement Program"),
    sum_lines(gl("Production Support Services \\(PSS\\) on the National Rice Program", "DA"), "DA: National Rice Program production support"),
    sum_lines(gl("Animal Industry Development", "DA"), "DA: Animal Industry Development and Competitiveness Program (new)"),
    sum_lines(gl("Farm-to-Market Roads", "DA"), "DA: farm-to-market roads"),
    sum_lines(gl("Rice for All", "DA"), "DA: Rice for All")) %>% mutate(pillar = "Agriculture and food"),
  bind_rows(
    sum_lines(gl("Universal Access to Quality Tertiary", "OEOs"), "CHED: Universal Access to Quality Tertiary Education"),
    sum_lines(L %>% filter(str_detect(agy, "Technical Education and Skills")), "TESDA: all lines"),
    sum_lines(L %>% filter(dep == "DOST"), "DOST: all agencies (research councils, scholarships, PAGASA, others)")) %>%
    mutate(pillar = "Skills, science, and technology"),
  bind_rows(
    sum_lines(L %>% filter(dep == "DTI"), "DTI: all agencies"),
    sum_lines(gl("promotion of exports and investments", "DTI"), "  of which: export and investment promotion"),
    sum_lines(gl("MSME Development Plan", "DTI"), "  of which: MSME Development Plan"),
    sum_lines(L %>% filter(str_detect(agy, "Public-Private Partnership")), "PPP Center: all lines"),
    sum_lines(gl("Public-Private Partnership Strategic Support Fund", "DPWH"), "DPWH: PPP Strategic Support Fund")) %>%
    mutate(pillar = "Industry, trade, and investment"),
  bind_rows(
    sum_lines(L %>% filter(dep == "DICT"), "DICT: all agencies"),
    sum_lines(gl("Philippine Digital Infrastructure Project", "DICT"), "  of which: Philippine Digital Infrastructure Project"),
    sum_lines(gl("National Broadband", "DICT"), "  of which: National Broadband Program")) %>% mutate(pillar = "Digital"),
  sum_lines(L %>% filter(dep == "DOE"), "DOE: all lines") %>% mutate(pillar = "Energy"),
  sum_lines(L %>% filter(dep == "DOT"), "DOT: all agencies") %>% mutate(pillar = "Tourism"))
pillar_tot <- growth %>% filter(!str_detect(PAP, "^  of which")) %>% group_by(pillar) %>%
  summarise(across(c(N26, G26, N27, H27), sum), .groups = "drop")
pt <- pillar_tot %>% pivot_longer(-pillar) %>%
  mutate(name = factor(recode(name, N26 = "NEP 2026", G26 = "GAA 2026", N27 = "NEP 2027", H27 = "House bill 2027"), levels = rev(ver_lv)))
ord_p <- pillar_tot %>% arrange(N27) %>% pull(pillar)
ggplot(pt, aes(value, factor(pillar, levels = ord_p), fill = name)) +
  geom_col(position = position_dodge(width = 0.8), width = 0.75) +
  geom_text(aes(label = comma(value, accuracy = 0.1)), position = position_dodge(width = 0.8), hjust = -0.15, size = 3) +
  scale_fill_manual(values = ver_pal, breaks = ver_lv) +
  scale_x_continuous(labels = function(x) paste0(peso, comma(x), "B"), expand = expansion(mult = c(0, 0.1))) +
  labs(x = NULL, y = NULL, title = "The growth bet is transport concrete and rice; industry, digital, and energy barely register",
       subtitle = "Growth-related line items grouped by pillar, programmed new appropriations, PHP billions",
       caption = "Pillars are this briefer's grouping of selected line items (see table); they are not DBM categories and do not sum to any official total.") +
  theme_pbc() + theme(panel.grid.major.y = element_blank(), panel.grid.major.x = element_line(color = "grey90"))

gt <- growth %>% mutate(chg = N27 - N26, chg_h = H27 - N27) %>%
  transmute(pillar, `Line item or group` = PAP, `NEP 2026` = bn(N26, 1), `GAA 2026` = bn(G26, 1), `NEP 2027` = bn(N27, 1), `House bill 2027` = bn(H27, 1),
            `Change, NEP to NEP` = fmt_chg(chg, 1), `House vs NEP` = fmt_chg(chg_h, 1))
idx <- table(factor(gt$pillar, levels = unique(gt$pillar)))
gt %>% select(-pillar) %>% kbl_clean(font = 12, align = c("l", rep("r", 6))) %>%
  pack_rows(index = setNames(as.integer(idx), names(idx))) %>% column_spec(1, width = "44%") %>% column_spec(7, bold = TRUE)
Line item or group NEP 2026 GAA 2026 NEP 2027 House bill 2027 Change, NEP to NEP House vs NEP
Transport and connectivity
DOTr: North-South Commuter Railway 76.1 28.8 123.8 108.8 +47.8 -15.0
DOTr: Metro Manila Subway 45.4 20.4 67.4 47.7 +22.1 -19.7
DPWH: Network Development Program (bypass and diversion roads, missing links, road widening) 182.5 96.8 176.6 122.0 -5.9 -54.6
DPWH: Bridge Program 52.3 34.1 44.4 40.9 -7.9 -3.5
DOTr: airport projects and air traffic management 5.9 7.9 5.8 6.5 0.00 +0.7
DOTr: New Cebu International Container Port 3.8 3.8 9.0 6.0 +5.2 -3.0
DOTr: Davao Public Transport Modernization Project 1.7 1.7 15.1 10.0 +13.3 -5.1
Agriculture and food
National Irrigation Administration: all lines 45.1 63.2 46.4 45.2 +1.3 -1.2
DA: Rice Competitiveness Enhancement Program 30.0 30.0 30.0 30.0 0.00 0.00
DA: National Rice Program production support 26.4 26.4 25.6 26.1 -0.8 +0.5
DA: Animal Industry Development and Competitiveness Program (new) 0.0 0.0 20.0 20.0 +20.0 0.00
DA: farm-to-market roads 16.0 33.0 16.0 19.6 0.00 +3.6
DA: Rice for All 10.0 10.0 10.0 10.0 0.00 0.00
Skills, science, and technology
CHED: Universal Access to Quality Tertiary Education 27.4 37.5 27.8 29.9 +0.4 +2.1
TESDA: all lines 20.0 26.1 20.9 22.3 +0.9 +1.4
DOST: all agencies (research councils, scholarships, PAGASA, others) 30.0 31.7 30.5 30.5 +0.5 0.00
Industry, trade, and investment
DTI: all agencies 9.6 9.8 8.8 8.8 -0.8 0.00
of which: export and investment promotion 0.9 1.0 1.0 1.0 +0.1 0.00
of which: MSME Development Plan 0.8 0.8 1.0 1.0 +0.2 0.00
PPP Center: all lines 1.2 1.2 0.6 0.6 -0.6 0.00
DPWH: PPP Strategic Support Fund 4.0 1.0 1.0 1.0 -3.0 0.00
Digital
DICT: all agencies 13.8 13.1 12.5 8.4 -1.3 -4.2
of which: Philippine Digital Infrastructure Project 4.8 3.3 2.2 0.4 -2.7 -1.8
of which: National Broadband Program 1.5 0.7 1.1 0.3 -0.4 -0.9
Energy
DOE: all lines 2.4 3.0 2.0 2.0 -0.3 0.00
Tourism
DOT: all agencies 3.7 4.2 4.0 3.2 +0.3 -0.7

The strategy that emerges is a familiar one: build transport links and raise rice output. Transport and connectivity lines total ₱442B, more than double the ₱193B Congress enacted for the same lines in 2026. Two rail projects and the DPWH network program account for most of it, and a large part is loan-financed. Agriculture follows at ₱148B, anchored by irrigation, the ₱30B rice competitiveness fund, and a new ₱20B animal industry program.

This is also the short-run growth plan. Public construction has been contracting by a third, and the economic managers have said that the recovery they expect in the second half of 2026 depends on DPWH awarding contracts again. Restoring DPWH from ₱529.6B to ₱642.6B and tripling rail are, in effect, the stimulus. Whether it works depends on the execution problem described below, since DOTr and DPWH are the two large departments that pay out the smallest share of what they are allotted.

What the budget does not back is as telling. Goods exports grew 17% in the second quarter on electronics and semiconductors and were the main thing holding growth up, yet export and investment promotion is ₱1.0B and all of DTI is ₱8.8B, down 8.6% from the previous proposal. The Board of Investments’ automotive industry program carries no amount. DICT falls 9% and the World Bank-financed digital infrastructure project is cut by more than half. The Department of Energy gets ₱2.0B in a country where power costs are a standing complaint of manufacturers. The DBCC says it will expedite PPP flagships, while the PPP Center’s budget is halved and DPWH’s PPP support fund drops from ₱4.0B to ₱1.0B. Industry, digital, energy, and tourism together receive ₱29B, against ₱442B for transport.

Two qualifications. Much of Philippine industrial policy runs through tax incentives under CREATE MORE, which are tax expenditures and do not appear in the appropriations at all, so the budget understates the state’s effort there. And human capital is the largest growth investment of all if basic education is counted; the question on that front is quality and learning recovery, and the lines that would signal a push (tertiary education subsidies, TESDA scholarships, DOST’s research agenda) are flat or lower.

4.9 How people-centered is it?

The DBM’s theme invites a direct test: what happens to the lines that put money, food, care, or services directly in people’s hands?

bind_rows(
  pick("^Pantawid Pamilyang", dep = "DSWD"),
  pick("^Social Pension for Indigent", dep = "DSWD"),
  pick("^Protective Services for Individuals", dep = "DSWD"),
  pick("Ayuda sa Kapos ang Kita", dep = "DSWD"),
  pick("^Sustainable Livelihood Program", dep = "DSWD"),
  pick("Walang Gutom", dep = "DSWD"),
  pick("Reducing Food Insecurity and Undernutrition", dep = "DSWD"),
  pick("^Supplementary Feeding", dep = "DSWD"),
  pick("School-Based Feeding Program \\(SBFP\\)$", dep = "DepEd"),
  pick("^Basic Education Facilities", dep = "DepEd"),
  pick("^Textbooks and Other Instructional", dep = "DepEd"),
  pick("^New School Personnel Positions", dep = "DepEd"),
  pick("Universal Access to Quality Tertiary", dep = "OEOs"),
  pick("Medical Assistance to Indigent", dep = "DOH"),
  pick("^Health Facilities Enhancement", dep = "DOH"),
  pick("Operations of DOH Regional Hospitals", dep = "DOH"),
  pick(".", dep = "BSGC", agy = "Philippine Health Insurance", label = "PhilHealth: all budgetary support lines"),
  pick("^Livelihood and Emergency Employment", dep = "DOLE")
) %>% show_lines()
Agency Program / Activity / Project NEP 2026 GAA 2026 NEP 2027 House bill 2027 House vs NEP
DSWD · OSEC Pantawid Pamilyang Pilipino Program (Implementation of Conditional Cash Transfer) 113.00 113.00 99.08 99.08 0.00
DSWD · OSEC Social Pension for Indigent Senior Citizens 49.81 51.86 51.64 51.64 0.00
DSWD · OSEC Protective Services for Individuals and Families in Difficult Circumstances 27.03 63.90 33.28 58.09 +24.81
DSWD · OSEC Locally-Funded Project: Ayuda sa Kapos ang Kita Program (AKAP) 0.00 0.00 0.00 0.00 0.00
DSWD · OSEC Sustainable Livelihood Program 4.50 5.31 5.12 5.99 +0.87
DSWD · OSEC Locally-Funded Project: Walang Gutom 2027: Food STAMP Program 1.89 1.89 1.89 1.89 0.00
DSWD · OSEC Foreign-Assisted Project: Reducing Food Insecurity and Undernutrition with Electronic Vouchers Project ADB Loan No. 4646-PHI 0.00 0.00 3.88 3.88 0.00
DSWD · OSEC Supplementary Feeding Program 6.11 9.56 6.36 6.36 0.00
DepEd · OSEC School-Based Feeding Program (SBFP) 11.78 25.70 11.43 11.43 0.00
DepEd · OSEC Basic Education Facilities 28.06 85.40 30.55 27.45 -3.10
DepEd · OSEC Textbooks and Other Instructional Materials 11.16 19.51 6.47 6.47 0.00
DepEd · OSEC New School Personnel Positions 42.30 42.30 31.74 31.74 0.00
OEOs · Commission on Higher Education Universal Access to Quality Tertiary Education 27.41 37.55 27.79 29.89 +2.10
OEOs · Commission on Higher Education Universal Access to Quality Tertiary Education - Tertiary Education Subsidy 0.00 0.00 0.00 0.00 0.00
OEOs · Commission on Higher Education Universal Access to Quality Tertiary Education - Free Higher Education 0.00 0.00 0.00 0.00 0.00
DOH · OSEC Medical Assistance to Indigent and Financially - Incapacitated Patients (MAIFIP) 24.24 51.65 24.24 48.20 +23.97
DOH · OSEC Health Facilities Enhancement Program 14.54 22.29 14.54 10.09 -4.45
DOH · OSEC Operations of DOH Regional Hospitals and Other Health Facilities 95.26 101.75 102.87 102.92 +0.05
BSGC · Philippine Health Insurance Corporation PhilHealth: all budgetary support lines 53.26 129.78 74.45 74.45 0.00
DOLE · OSEC Livelihood and Emergency Employment 14.60 25.36 16.70 21.45 +4.75

PHP billions. A zero means the line carried no amount in that budget. “Protective Services” is the line that carries AICS; “Livelihood and Emergency Employment” carries TUPAD.

The pattern is consistent. Wage-driven lines rise: school operations, regional hospitals, new teaching positions (though fewer than in 2026). Rules-based transfers are flat or cut: social pension is flat, the food stamp program is flat at ₱1.89B for the fourth year, and 4Ps falls below ₱100B for the first time in years while food inflation erodes the grant. Discretionary assistance is reset to the executive’s previous ask, which means halved against the current year: AICS, MAIFIP, school feeding, classrooms, and textbooks.

There is a defensible logic in the last of these. Lines like AICS and MAIFIP have grown through congressional insertion, reach beneficiaries through politicians’ referrals, and are the core of what PBC calls soft pork (see the red flags section). But the NEP takes the money out without putting it anywhere people can reach it by right. 4Ps, social pension, the food stamp program, PhilHealth benefit expansion, and crop insurance are the rules-based alternatives, and none of them grows. A people-centered budget would have moved the ayuda money into those.

4.10 How responsive is it to the crises of 2026?

The DBCC’s own statement names the shocks: the Middle East conflict and oil prices, elevated inflation, a looming El Niño, slower remittances. This section checks the budget lines that would carry a response to each.

4.10.1 Fuel and transport

bind_rows(
  pick("Fuel Subsidy to Transport Sector", dep = "DOTr"),
  pick("Fuel Assistance to Farmers", dep = "DA"),
  pick("Fuel Assistance to Fisherfolk", dep = "DA"),
  pick("Service Contracting", dep = "DOTr"),
  pick("Public Transport Modernization Program", dep = "DOTr"),
  pick("EDSA Busway", dep = "DOTr"),
  pick("Active Transport", dep = "DOTr"),
  pick("Cebu Bus Rapid Transit", dep = "DOTr"),
  pick("Davao Public Transport Modernization", dep = "DOTr"),
  pick("North-South Commuter Railway", dep = "DOTr"),
  pick("Metro Manila Subway", dep = "DOTr")
) %>% show_lines()
Agency Program / Activity / Project NEP 2026 GAA 2026 NEP 2027 House bill 2027 House vs NEP
DOTr · OSEC Locally-Funded Project: Fuel Subsidy to Transport Sector Affected by Rising Fuel Prices 0.00 0.00 0.00 1.00 +1.00
DA · OSEC Locally-Funded Project: Fuel Assistance to Farmers 0.00 0.00 0.00 0.00 0.00
DA · Bureau of Fisheries and Aquatic Resources Locally-Funded Project: Fuel Assistance to Fisherfolk 0.00 0.00 0.00 0.00 0.00
DOTr · OSEC Locally-Funded Project: Service Contracting of Public Utility Vehicle Program 1.30 0.00 0.00 0.00 0.00
DOTr · OSEC Locally-Funded Project: Service Contracting Program for Public Transport (Intermodal and Multimodal) 0.00 1.00 0.00 0.50 +0.50
DOTr · OSEC Locally-Funded Project: Public Transport Modernization Program (PTMP) 1.23 1.53 0.18 0.18 0.00
DOTr · OSEC Locally-Funded Project: EDSA Busway Project 0.09 0.00 0.00 0.00 0.00
DOTr · OSEC Locally-Funded Project: Active Transport Bike Share System and Safe Pathways Program 0.07 0.11 0.03 0.03 0.00
DOTr · OSEC Foreign-Assisted Project: Cebu Bus Rapid Transit (BRT) Project IBRD Loan No. 8444-PH, CTF Loan No. TF017646-PH and AFD Loan No. CPH 1007 02 R 0.43 0.43 0.18 0.18 0.00
DOTr · OSEC Foreign-Assisted Project: Davao Public Transport Modernization Project (DPTMP) ADB Loan Nos. 4324-PHI, 8450-PHI and 8449-PHI 1.74 1.74 15.08 9.98 -5.10
DOTr · OSEC Foreign-Assisted Project: North-South Commuter Railway (NSCR) System ADB Loan Nos. 3796-PHI, 4188-PHI and 4589-PHI, and JICA Loan Nos. PH-P262, PH-P270, PH-P276 and PH-P277 76.09 28.79 123.84 108.84 -15.00
DOTr · OSEC Foreign-Assisted Project: Metro Manila Subway Project (MMSP) Phase I JICA Loan Nos. PH-P267, PH-P275, PH-P279 and PH-P286 45.37 20.39 67.44 47.74 -19.70

Every dedicated fuel-relief line is at zero. DOTr’s fuel subsidy for the transport sector was ₱2.5B in 2025 and carries no amount in NEP 2026, GAA 2026, or NEP 2027. The DA’s fuel assistance to farmers no longer exists as a line, and BFAR’s fuel assistance to fisherfolk carries no amount. Service Contracting, which pays operators per kilometer and so cushions drivers and commuters at once, had ₱1.3B in NEP 2026 and ₱1.0B in the GAA; it has no line in NEP 2027. The PUV modernization program falls from ₱1.23B to ₱0.18B.

DOTr’s budget grows by ₱103B, and nearly all of it is two rail projects. Rail matters and deserves defending, but it delivers years from now. The one road-based exception is the Davao Public Transport Modernization Project, which rises from ₱1.7B to ₱15.1B. In past years fuel subsidies have also been lodged in unprogrammed appropriations with an oil-price trigger; the DBM describes the 2027 unprogrammed fund as limited mainly to PDIC and foreign-assisted project cover, so there appears to be no standby there either.

4.10.2 El Niño, water, and food

nia <- function(p) pick(p, dep = "BSGC", agy = "National Irrigation")
bind_rows(
  pick(".", dep = "BSGC", agy = "National Irrigation", label = "National Irrigation Administration: all lines"),
  nia("^Repair of National Irrigation Systems"), nia("^Repair of Communal Irrigation Systems"),
  nia("^Restoration of National Irrigation"), nia("^Restoration of Communal Irrigation"),
  nia("^Small Irrigation Project"), nia("^Repair of Pump Irrigation"), nia("^Establishment of Pump Irrigation"),
  nia("^Quick Response Fund"),
  pick("Small Water Irrigation and Impounding", dep = "DA"),
  pick("^Quick Response Fund", dep = "DA", agy = "OSEC"),
  pick(".", dep = "BSGC", agy = "Crop Insurance"),
  pick("^Local palay procurement", dep = "BSGC"),
  pick("Production Support Services \\(PSS\\) on the National Rice Program", dep = "DA"),
  pick("Rice Competitiveness Enhancement", dep = "DA"),
  pick("Rice for All", dep = "DA"),
  pick("Water Supply/ Septage", dep = "DPWH"),
  pick("Level III potable water", dep = "BSGC")
) %>% show_lines()
Agency Program / Activity / Project NEP 2026 GAA 2026 NEP 2027 House bill 2027 House vs NEP
BSGC · National Irrigation Administration National Irrigation Administration: all lines 45.07 63.25 46.36 45.17 -1.18
BSGC · National Irrigation Administration Repair of National Irrigation Systems (NIS) 8.20 11.43 2.02 2.02 0.00
BSGC · National Irrigation Administration Repair of Communal Irrigation Systems (CIS) 2.79 4.21 0.92 0.92 0.00
BSGC · National Irrigation Administration Restoration of National Irrigation Systems 1.18 1.14 1.00 1.00 0.00
BSGC · National Irrigation Administration Restoration of Communal Irrigation Systems 1.14 1.43 0.25 0.25 0.00
BSGC · National Irrigation Administration Small Irrigation Project (SIP), Nationwide 2.10 2.15 0.20 0.20 0.00
BSGC · National Irrigation Administration Repair of Pump Irrigation Systems 0.63 0.67 3.00 3.00 0.00
BSGC · National Irrigation Administration Establishment of Pump Irrigation Project (EPIP) 4.02 6.27 7.02 7.02 0.00
BSGC · National Irrigation Administration Quick Response Fund 0.30 0.30 1.70 1.70 0.00
DA · OSEC Locally-Funded Project: Development of Upland Irrigation Systems and Small Water Irrigation and Impounding Project 0.50 0.50 0.46 0.46 0.00
DA · OSEC Quick Response Fund 1.00 1.00 1.00 1.00 0.00
BSGC · Philippine Crop Insurance Corporation Agricultural insurance for farmers and fisherfolk under the RSBSA 4.50 6.50 4.50 4.50 0.00
BSGC · National Food Authority Local palay procurement 11.18 11.18 11.18 11.18 0.00
DA · OSEC Production Support Services (PSS) on the National Rice Program 26.41 26.41 25.62 26.12 +0.50
DA · OSEC Locally-Funded Project: Rice Competitiveness Enhancement Program 30.00 30.00 30.00 30.00 0.00
DA · OSEC Locally-Funded Project: Rice for All Program 10.00 10.00 10.00 10.00 0.00
DPWH · OSEC Construction/ Rehabilitation of Water Supply/ Septage and Sewerage/ Rain Water Collectors 2.28 1.87 7.30 8.87 +1.57
BSGC · Local Water Utilities Administration Provision of Level III potable water supply and adequate sanitation system 0.03 0.00 0.03 0.13 +0.10

There are real drought signals inside NIA: pump irrigation repair rises from ₱0.63B to ₱3.0B, new pump irrigation from ₱4.0B to ₱7.0B, and NIA’s quick response fund from ₱0.3B to ₱1.7B. DPWH’s water supply line triples to ₱7.3B. But the repair and restoration of existing gravity systems, which is what keeps water moving to the largest service areas, falls sharply: national systems from ₱8.2B to ₱2.0B, communal systems from ₱2.8B to ₱0.9B, and small irrigation projects from ₱2.1B to ₱0.2B.

The risk-transfer and price-support lines do not move at all. Crop insurance premiums are ₱4.5B for the third straight proposal, in the year claims should spike. NFA palay procurement is ₱11.18B, which at higher farmgate prices buys fewer tons. The DA’s quick response fund is ₱1.0B. The Local Water Utilities Administration receives ₱0.03B. A dedicated El Niño response is nowhere visible as a line item; if it exists, it is inside the ₱25.6B rice production support lump, where it cannot be tracked.

One apparent cut is a relabel: the National Livestock Program’s production support (₱2.98B) goes to zero, but a new ₱20B Animal Industry Development and Competitiveness Program appears.

4.10.3 Electricity

bind_rows(
  pick(".", dep = "DOE", label = "Department of Energy: all lines"),
  pick("energy efficiency and conservation", dep = "DOE"),
  pick("^Promotion of renewable energy", dep = "DOE"),
  pick(".", dep = "BSGC", agy = "National Electrification", label = "National Electrification Administration: all lines"),
  pick("Electric Cooperatives Emergency and Resiliency", dep = "BSGC"),
  pick("Missionary Areas", dep = "BSGC"),
  pick(".", dep = "OEOs", agy = "Energy Regulatory", label = "Energy Regulatory Commission: all lines")
) %>% show_lines()
Agency Program / Activity / Project NEP 2026 GAA 2026 NEP 2027 House bill 2027 House vs NEP
DOE · OSEC Department of Energy: all lines 2.37 2.96 2.03 2.03 0.00
DOE · OSEC Supervision, development and implementation of energy efficiency and conservation programs (EECP) and projects 0.05 0.05 0.06 0.06 0.00
DOE · OSEC Promotion of renewable energy (RE) resources and payment of other obligations of the Republic of the Philippines pursuant to sovereign commitments 0.02 0.02 0.04 0.04 0.00
BSGC · National Electrification Administration National Electrification Administration: all lines 6.44 10.13 6.49 6.49 0.00
BSGC · National Electrification Administration Locally-Funded Project: Electric Cooperatives Emergency and Resiliency Fund 0.20 0.20 0.20 0.20 0.00
BSGC · National Power Corporation Provision of adequate, sustainable, reliable and quality supply of electricity to Missionary Areas 1.56 1.87 2.00 2.00 0.00
OEOs · Energy Regulatory Commission Energy Regulatory Commission: all lines 0.88 0.90 0.92 0.99 +0.07

There is little here to cut, and that is the finding. The Department of Energy’s entire budget is ₱2.0B, down 14%. Energy efficiency and conservation gets ₱0.06B and renewable energy promotion ₱0.04B. The NEA is flat at ₱6.5B against ₱10.1B enacted; the Energy Regulatory Commission, which decides every rate case, is flat at ₱0.9B. No on-budget line exists for consumer power relief. The lifeline rate is paid for by other ratepayers, not by the budget.

4.10.4 Disaster funds and general shock absorbers

bind_rows(
  pick(".", dep = "NDRRMF", label = "NDRRM Fund (calamity fund): all lines"),
  pick("disaster risk reduction or mitigation, prevention and preparedness", dep = "NDRRMF"),
  pick(".", dep = "Contingent Fund", label = "Contingent Fund"),
  pick("^Financial Assistance to Local Government", dep = "ALGU"),
  pick("^Growth Equity Fund", dep = "ALGU"),
  pick("^Quick Response Fund", dep = "DSWD"),
  pick("^Disaster Response and Rehabilitation", dep = "DSWD")
) %>% show_lines()
Agency Program / Activity / Project NEP 2026 GAA 2026 NEP 2027 House bill 2027 House vs NEP
NDRRMF · National Disaster Risk Reduction and Management Fund ( Calamity Fund ) NDRRM Fund (calamity fund): all lines 31.00 39.82 45.67 36.17 -9.50
NDRRMF · National Disaster Risk Reduction and Management Fund ( Calamity Fund ) For disaster risk reduction or mitigation, prevention and preparedness activities such as but not limited to training of personnel, procurement of equipment, capital expenditures and other pre-disaster activities including aid, relief, recovery, reconstruction and other work or services in connection with natural or human induced calamities 0.00 0.00 30.00 28.25 -1.75
Contingent Fund · Contingent Fund Contingent Fund 13.00 13.00 13.00 13.00 0.00
ALGU · Local Government Support Fund (formerly Financial Subsidy to LGUs) Financial Assistance to Local Government Units 5.00 37.49 37.49 41.58 +4.09
ALGU · Local Government Support Fund (formerly Financial Subsidy to LGUs) Growth Equity Fund 1.00 11.30 10.30 10.30 0.00
DSWD · OSEC Quick Response Fund 1.25 3.00 1.25 3.00 +1.75
DSWD · OSEC Disaster Response and Rehabilitation Program 1.94 2.19 1.97 1.97 0.00

The calamity fund does rise, from ₱31.0B to ₱45.7B. It does so through a new ₱30B lump for “disaster risk reduction or mitigation, prevention and preparedness,” alongside ₱37.5B in Financial Assistance to LGUs and a ₱13B Contingent Fund. The money that could respond to a crisis is therefore held in discretionary pools released at the executive’s judgment, while the rule-based lines (fuel subsidies with a price trigger, crop insurance, 4Ps) are flat, cut, or empty.

4.10.5 Other shocks to plan for

bind_rows(
  pick(".", dep = "DMW", label = "Department of Migrant Workers: all lines"),
  pick("Worker's Welfare and Government Placement", dep = "DMW"),
  pick("^Welfare Services", dep = "DMW"),
  pick("Overseas Employment Facilitation", dep = "DMW"),
  pick("^Job Search Assistance", dep = "DOLE"),
  L %>% filter(dep == "DPWH", prog == "3201") %>%
    summarise(dep = "DPWH", agy = "OSEC", PAP = "Flood Management Program: all lines",
              across(c(N26, G26, N27, H27), ~ sum(.x, na.rm = TRUE))),
  pick("Drainage along National Roads", dep = "DPWH", label = "Drainage along national roads: primary, secondary, and tertiary"),
  pick("Evacuation Centers", dep = "DPWH", label = "BIP and SIPAG evacuation centers and public health facilities"),
  pick("Retrofitting/ Strengthening of Permanent Bridges", dep = "DPWH"),
  pick("Emergency Housing Assistance", dep = "BSGC"),
  pick("Integrated Disaster Shelter Assistance", dep = "DHSUD"),
  pick("^Epidemiology and Surveillance", dep = "DOH")
) %>% show_lines()
Agency Program / Activity / Project NEP 2026 GAA 2026 NEP 2027 House bill 2027 House vs NEP
DMW · OSEC Department of Migrant Workers: all lines 9.48 11.02 10.68 10.93 +0.25
DMW · OSEC Worker’s Welfare and Government Placement Services 4.00 4.80 4.65 4.80 +0.15
DMW · Overseas Workers Welfare Administration Welfare Services 2.32 3.12 3.29 3.39 +0.10
DMW · OSEC Overseas Employment Facilitation Services 0.10 0.10 0.09 0.09 0.00
DOLE · OSEC Job Search Assistance 0.13 0.13 0.13 0.13 0.00
DPWH · OSEC Flood Management Program: all lines 250.83 4.76 103.45 96.04 -7.41
DPWH · OSEC Drainage along national roads: primary, secondary, and tertiary 11.75 16.89 3.22 4.62 +1.41
DPWH · OSEC BIP and SIPAG evacuation centers and public health facilities 1.93 5.81 0.00 0.00 0.00
DPWH · OSEC Retrofitting/ Strengthening of Permanent Bridges 7.63 4.82 3.01 2.84 -0.16
BSGC · National Housing Authority Locally-Funded Project: Emergency Housing Assistance Program 0.20 0.76 0.00 0.00 0.00
DHSUD · OSEC Integrated Disaster Shelter Assistance Program 0.41 0.00 0.00 0.00 0.00
DOH · OSEC Epidemiology and Surveillance 0.44 0.44 0.48 0.48 0.00

Four more pressures are foreseeable, and the budget is thin on each.

A jobs slump. With investment contracting and unemployment rising, DOLE’s Job Search Assistance is ₱0.13B, TUPAD reverts to ₱16.7B, and no adjustment program for displaced workers exists.

Returning overseas workers. More than two million Filipinos work in the Middle East. The DMW’s budget is ₱10.4B, below the ₱10.8B enacted for 2026; the welfare line that carries the AKSYON Fund slips from ₱4.80B to ₱4.65B; overseas employment facilitation is ₱0.09B. No reintegration line exists in DMW or DOLE, although the President’s 2026 State of the Nation Address promised livelihood funding and job placement for returnees.

A wet year after the dry one. Flood management is ₱103.5B against ₱250.8B in the previous proposal. Drainage along national roads falls from ₱11.75B to ₱3.2B. The evacuation center lines Congress funded at ₱5.8B in 2026 do not appear. NHA’s emergency housing assistance and DHSUD’s disaster shelter assistance are both gone, and bridge retrofitting is down to ₱3.0B from ₱10.4B in the 2025 GAA. PBC is not arguing for restoring DPWH flood control as it was. The problem is that the money left and the function was not moved anywhere else.

The peso and imported costs. Flat peso amounts for fuel, fertilizer, rice, and medicines are real cuts when the peso is at a record low. DOH’s nationally procured commodities line falls from ₱10.2B to ₱9.1B. The large rail loans are yen and dollar exposures.

4.11 Can the government spend it?

util <- bds_long %>% filter(AGENCY == DEPARTMENT, year %in% 2023:2025) %>%
  select(Department = DEPARTMENT, PARTICULAR, year, amt) %>%
  filter(PARTICULAR %in% c("Allotments","Obligations","Disbursements")) %>%
  pivot_wider(names_from = PARTICULAR, values_from = amt) %>%
  mutate(obl = Obligations / Allotments * 100, dis = Disbursements / Allotments * 100)   # both rates on the same base
u25 <- util %>% filter(year == 2025, !Department %in% c("Total Budget"), !is.na(obl), !is.na(dis), Allotments >= 10) %>%
  mutate(dep = coalesce(str_match(Department, "\\(([^)]+)\\)\\s*$")[,2], Department),
         dep = ifelse(str_detect(Department, "^Total National"), "All NGAs", dep)) %>%
  select(dep, Allotments, `Obligations as % of allotments` = obl, `Disbursements as % of allotments` = dis) %>%
  pivot_longer(-c(dep, Allotments))
ord_u <- u25 %>% filter(name == "Disbursements as % of allotments") %>% arrange(value) %>% pull(dep)
ggplot(u25, aes(value, factor(dep, levels = ord_u), color = name)) +
  geom_vline(xintercept = 100, color = "grey80") +
  geom_line(aes(group = dep), color = "grey75", linewidth = 1.2) +
  geom_point(size = 3) +
  scale_color_manual(values = c("Obligations as % of allotments" = "#3182BD", "Disbursements as % of allotments" = "#E6550D"),
                     breaks = c("Obligations as % of allotments", "Disbursements as % of allotments")) +
  scale_x_continuous(labels = function(x) paste0(x, "%"), limits = c(30, 102)) +
  labs(x = NULL, y = NULL, title = "DPWH paid out 36 centavos of every peso it was allotted in 2025",
       subtitle = "FY 2025 budget utilization, departments with allotments of PHP 10B or more",
       caption = "Both rates are read against total allotments, which include continuing appropriations. The gap between the two dots is money obligated but not yet paid.\nNo FY 2026 execution data are available yet.") +
  theme_pbc() + theme(panel.grid.major.y = element_line(color = "grey93"))

Two rates on the same base tell the story. Obligations as a share of allotments show how much of its authority an agency committed; disbursements as a share of allotments show how much it actually paid out. Government-wide, the first fell from 94.2% in 2023 to 91.7% in 2025, and the second from 81.2% to 76.0%. DPWH ended 2025 having obligated 79.5% of its allotments and disbursed 36.3%, leaving ₱278B uncommitted and another ₱585B committed but unpaid. DOTr disbursed 52.7% of its allotments and DA 59.4%. At the other end, the Judiciary paid out 98.5%, DILG 92.0%, DSWD 91.5%, and DepEd 86.1%.

This matters for every recommendation below. A department that cannot pay out is a poor place to put crisis money, and a good place to look for room. Where a response can run through DSWD’s payment systems, it will reach people faster than one that has to pass through a public works pipeline that is still restarting.

util %>% filter(!is.na(obl)) %>%
  transmute(Department, Year = year, Allotments, Obligations, Disbursements,
            `Obligations / allotments (%)` = obl, `Disbursements / allotments (%)` = dis) %>%
  arrange(desc(Year), desc(Allotments)) %>%
  dt_table(caption = "Budget utilization by department, FY 2023 to FY 2025 (PHP billions)", page = 12,
           money_cols = c("Allotments","Obligations","Disbursements"),
           pct_cols = c("Obligations / allotments (%)","Disbursements / allotments (%)"))

5 Red flags to watch

PBC’s working taxonomy distinguishes soft pork (assistance programs whose beneficiaries are identified through politicians), hard pork (small, locally identified infrastructure), and the unprogrammed fund that has been used to pay for both. All three have a track record that the P/A/P data make visible, because the fingerprint of pork is the gap between what the executive proposes and what Congress enacts.

5.1 The red-flag total

ua <- bds_long %>% filter(DEPARTMENT == "Total Budget", PARTICULAR %in% c("NEP New Appropriations","GAA New Appropriations"), year >= 2020) %>%
  mutate(src = ifelse(str_detect(PARTICULAR, "^NEP"), "NEP", "GAA")) %>%
  left_join(pap_tot, by = c("src","year"), suffix = c("_new","_prog")) %>%
  mutate(ua = amt_new - amt_prog,
         src = factor(ifelse(src == "NEP", "NEP (proposed)", "GAA (enacted)"), levels = names(src_pal))) %>% filter(!is.na(ua))
sl <- function(d) d %>% summarise(across(c(N26, G26, N27, H27), ~ sum(.x, na.rm = TRUE)))
Lq <- function(pap, dep, agy = NULL) { d <- L %>% filter(.data$dep == !!dep, str_detect(coalesce(PAP, ""), regex(pap, ignore_case = TRUE)))
  if (!is.null(agy)) d <- d %>% filter(str_detect(.data$agy, agy)); sl(d) }
manual <- function(a, b, c, h = c) tibble::tibble(N26 = a, G26 = b, N27 = c, H27 = h)
score <- bind_rows(
  Lq("^Protective Services for Individuals", "DSWD") %>% mutate(group = "Programs at high risk of political patronage", item = "DSWD Protective Services (AICS)"),
  manual(12.144, 22.444, 14.246, 14.246 + 4.75) %>% mutate(group = "Programs at high risk of political patronage", item = "DOLE TUPAD*"),
  Lq("Medical Assistance to Indigent", "DOH") %>% mutate(group = "Programs at high risk of political patronage", item = "DOH MAIFIP"),
  Lq("Tulong Dunong", "OEOs") %>% mutate(group = "Programs at high risk of political patronage", item = "CHED Tulong Dunong"),
  Lq("Presidential Assistance to Farmers", "DA") %>% mutate(group = "Programs at high risk of political patronage", item = "DA Presidential Assistance to Farmers and Fisherfolk"),
  manual(10.763, 11.816, 10.770, 10.910) %>% mutate(group = "Programs at high risk of political patronage", item = "Confidential and intelligence funds, all agencies*"),
  Lq("^Financial Assistance to Local Government", "ALGU") %>% mutate(group = "Programs at high risk of political patronage", item = "Financial Assistance to LGUs"),
  Lq("Barangay Development Program", "ALGU") %>% mutate(group = "Programs at high risk of political patronage", item = "NTF-ELCAC support to barangays"),
  Lq("^Growth Equity Fund", "ALGU") %>% mutate(group = "Programs at high risk of political patronage", item = "Growth Equity Fund"),
  sl(L %>% filter(dep == "OP")) %>% mutate(group = "Political offices", item = "Office of the President**"),
  sl(L %>% filter(dep == "OVP")) %>% mutate(group = "Political offices", item = "Office of the Vice President"),
  sl(L %>% filter(dep == "CONGRESS")) %>% mutate(group = "Political offices", item = "Congress: Senate, House of Representatives, electoral tribunals, and Commission on Appointments"),
  Lq("Farm-to-Market Roads in", "DA") %>% mutate(group = "Infrastructure at risk of insertions", item = "DA farm-to-market roads"),
  Lq("Provision of Agricultural Equipment and Facilities|Fishery On-farm/Postharvest Equipment|Cold Storage", "DA") %>% mutate(group = "Infrastructure at risk of insertions", item = "DA and BFAR equipment, postharvest facilities, and cold storage"),
  sl(L %>% filter(dep == "BSGC", str_detect(agy, "National Irrigation"))) %>% mutate(group = "Infrastructure at risk of insertions", item = "National Irrigation Administration"),
  Lq("^Health Facilities Enhancement", "DOH") %>% mutate(group = "Infrastructure at risk of insertions", item = "DOH Health Facilities Enhancement Program"),
  Lq("^Basic Education Facilities", "DepEd") %>% mutate(group = "Infrastructure at risk of insertions", item = "DepEd Basic Education Facilities"),
  sl(L %>% filter(dep == "DPWH", prog == "3101")) %>% mutate(group = "Infrastructure at risk of insertions", item = "DPWH Asset Preservation Program"),
  sl(L %>% filter(dep == "DPWH", prog == "3102")) %>% mutate(group = "Infrastructure at risk of insertions", item = "DPWH Network Development Program"),
  sl(L %>% filter(dep == "DPWH", prog == "3103")) %>% mutate(group = "Infrastructure at risk of insertions", item = "DPWH Bridge Program"),
  sl(L %>% filter(dep == "DPWH", prog == "3201")) %>% mutate(group = "Infrastructure at risk of insertions", item = "DPWH Flood Management Program"),
  sl(L %>% filter(dep == "DPWH", prog == "3002")) %>% mutate(group = "Infrastructure at risk of insertions", item = "DPWH Convergence and Special Support Program (BIP, SIPAG, and other convergence roads)"),
  sl(L %>% filter(dep == "DPWH", prog == "3001")) %>% mutate(group = "Infrastructure at risk of insertions", item = "DPWH Local Program"),
  ua %>% mutate(k = ifelse(src == "NEP (proposed)", paste0("N", year - 2000), paste0("G", year - 2000))) %>%
    filter(k %in% c("N26", "G26", "N27")) %>% select(k, ua) %>% pivot_wider(names_from = k, values_from = ua) %>%
    mutate(H27 = N27, group = "Unprogrammed appropriations", item = "Unprogrammed appropriations"))
grp_tot <- score %>% group_by(group) %>% summarise(across(c(N26, G26, N27, H27), ~ sum(.x)), .groups = "drop")
rf_no_ua <- grp_tot %>% filter(group != "Unprogrammed appropriations") %>% summarise(across(c(N26, G26, N27, H27), sum))
rf_all   <- grp_tot %>% summarise(across(c(N26, G26, N27, H27), sum))
st <- bind_rows(score, grp_tot %>% mutate(item = "Subtotal")) %>%
  mutate(group = factor(group, levels = unique(score$group))) %>% arrange(group, item == "Subtotal") %>%
  filter(!(group == "Unprogrammed appropriations" & item == "Subtotal"))
idx <- table(st$group)
bind_rows(st %>% select(item, N26, G26, N27, H27),
          rf_no_ua %>% mutate(item = "Total red flags, excluding unprogrammed"),
          rf_all %>% mutate(item = "Total red flags, including unprogrammed")) %>%
  transmute(` ` = item, `NEP 2026` = bn(N26), `GAA 2026` = bn(G26), `NEP 2027` = bn(N27), `House bill 2027` = bn(H27)) %>%
  kbl_clean(font = 12.5, align = c("l", "r", "r", "r", "r"), caption = "PBC's red-flag tally (PHP billions)") %>%
  pack_rows(index = c(setNames(as.integer(idx), names(idx)), "Totals" = 2)) %>%
  row_spec(which(st$item == "Subtotal"), bold = TRUE) %>% row_spec(nrow(st) + 1:2, bold = TRUE)
PBC’s red-flag tally (PHP billions)
NEP 2026 GAA 2026 NEP 2027 House bill 2027
Programs at high risk of political patronage
DSWD Protective Services (AICS) 27.0 63.9 33.3 58.1
DOLE TUPAD* 12.1 22.4 14.2 19.0
DOH MAIFIP 24.2 51.6 24.2 48.2
CHED Tulong Dunong 0.0 2.7 0.0 1.8
DA Presidential Assistance to Farmers and Fisherfolk 0.0 10.0 0.0 10.0
Confidential and intelligence funds, all agencies* 10.8 11.8 10.8 10.9
Financial Assistance to LGUs 5.0 37.5 37.5 41.6
NTF-ELCAC support to barangays 8.1 8.1 9.7 9.7
Growth Equity Fund 1.0 11.3 10.3 10.3
Subtotal 88.3 219.4 140.1 209.6
Political offices
Office of the President** 27.3 28.0 10.1 10.1
Office of the Vice President 0.9 0.9 0.8 0.8
Congress: Senate, House of Representatives, electoral tribunals, and Commission on Appointments 26.4 38.6 27.0 32.0
Subtotal 54.6 67.5 37.9 42.9
Infrastructure at risk of insertions
DA farm-to-market roads 16.0 33.0 16.0 19.6
DA and BFAR equipment, postharvest facilities, and cold storage 4.3 4.8 5.7 5.8
National Irrigation Administration 45.1 63.2 46.4 45.2
DOH Health Facilities Enhancement Program 14.5 22.3 14.5 10.1
DepEd Basic Education Facilities 28.1 85.4 30.6 27.5
DPWH Asset Preservation Program 108.3 99.4 76.5 82.6
DPWH Network Development Program 182.5 96.8 176.6 122.0
DPWH Bridge Program 52.3 34.1 44.4 40.9
DPWH Flood Management Program 250.8 4.8 103.5 96.0
DPWH Convergence and Special Support Program (BIP, SIPAG, and other convergence roads) 167.8 240.5 157.3 231.4
DPWH Local Program 15.4 7.8 14.6 14.1
Subtotal 885.0 692.1 686.0 695.1
Unprogrammed appropriations
Unprogrammed appropriations 250.0 150.9 112.0 112.0
Totals
Total red flags, excluding unprogrammed 1,027.9 979.0 864.0 947.5
Total red flags, including unprogrammed 1,277.8 1,129.9 976.0 1,059.5

*TUPAD and confidential and intelligence funds are sub-line figures from PBC’s budget tracker; they are not separable in the P/A/P workbook. All other rows are computed from the workbook. The UA row is defined in the unprogrammed appropriations section below. **The Office of the President’s FY 2026 figures include ₱17.55B for hosting the ASEAN summits, a one-time item. Its confidential and intelligence funds are part of its budget and are also counted in the all-agency row above, so the totals overstate by that overlap (historically about ₱4.5B).

(The House committee report’s changes to this basket are set out in Part 1.) PBC tracks a fixed basket of lines through every stage of the budget: programs where beneficiaries are identified through politicians; the budgets of the political offices themselves (the Office of the President, the Office of the Vice President, and Congress); the infrastructure programs where projects are chosen district by district or where insertions have concentrated, in DPWH and in the DA, NIA, DOH, and DepEd; and the unprogrammed fund. The basket is ₱864.0B in the NEP, or ₱976.0B with unprogrammed appropriations. That is 19% of programmed new appropriations. It is below the executive’s previous proposal because flood control is less than half what was proposed a year ago, and below the 2026 GAA because the ayuda add-ons were not carried forward. The test is where it stands after bicam: in 2026 Congress cut the infrastructure part of the basket and more than doubled the patronage part, from ₱88.3B to ₱219.4B.

5.2 Soft pork: the ayuda lines

series <- function(d, label) d %>% summarise(across(matches("^[ng]20\\d\\d$"), ~ if (all(is.na(.x))) NA_real_ else sum(.x, na.rm = TRUE))) %>%
  mutate(line = label) %>% bind_cols(d %>% summarise(n2027 = if (all(is.na(N27))) NA_real_ else sum(N27, na.rm = TRUE), h2027 = sum(H27, na.rm = TRUE)))
Lf <- function(pap, dep, agy = NULL) { d <- L %>% filter(.data$dep == !!dep, str_detect(coalesce(PAP, ""), regex(pap, ignore_case = TRUE)))
  if (!is.null(agy)) d <- d %>% filter(str_detect(.data$agy, agy)); d }
soft <- bind_rows(
  series(Lf("^Protective Services for Individuals", "DSWD"), "DSWD Protective Services (AICS)"),
  series(Lf("Ayuda sa Kapos ang Kita", "DSWD"), "DSWD AKAP"),
  series(Lf("Medical Assistance to Indigent", "DOH"), "DOH MAIFIP"),
  series(Lf("^Livelihood and Emergency Employment", "DOLE"), "DOLE TUPAD and livelihood"),
  series(Lf("^Financial Assistance to Local Government", "ALGU"), "Financial Assistance to LGUs"),
  series(Lf("Tulong Dunong", "OEOs"), "CHED Tulong Dunong")
) %>% rename(n2027x = n2027, h2027x = h2027) %>%
  pivot_longer(matches("^[ng]20\\d\\d$"), names_to = "k", values_to = "v") %>%
  mutate(src = ifelse(substr(k, 1, 1) == "n", "NEP (proposed)", "GAA (enacted)"), year = as.integer(substr(k, 2, 5))) %>%
  bind_rows(., distinct(., line, n2027x) %>% transmute(line, src = "NEP (proposed)", year = 2027L, v = n2027x),
            distinct(., line, h2027x) %>% transmute(line, src = "House bill", year = 2027L, v = h2027x)) %>%
  filter(year >= 2020) %>% select(line, src, year, v) %>%
  group_by(line) %>% filter(year >= min(year[coalesce(v, 0) > 0])) %>% ungroup() %>%
  mutate(src = factor(src, levels = c(names(src_pal), "House bill")))
ggplot(soft %>% filter(!is.na(v)), aes(year, v, color = src)) +
  geom_line(data = soft %>% filter(!is.na(v), src != "House bill"), linewidth = 1) + geom_point(size = 1.8) +
  geom_point(data = soft %>% filter(src == "House bill"), size = 3, shape = 18) +
  facet_wrap(~ line, scales = "free_y", ncol = 3) +
  scale_color_manual(values = c(src_pal, "House bill" = "#1B7837"), breaks = c(names(src_pal), "House bill")) +
  scale_x_continuous(breaks = seq(2020, 2027, 1), labels = function(x) paste0("'", substr(x, 3, 4))) +
  scale_y_continuous(labels = function(x) paste0(comma(x, accuracy = 1), "B"), limits = c(0, NA)) +
  labs(x = NULL, y = "PHP billions", title = "The ayuda cycle: Congress adds, the next NEP resets, Congress adds again",
       subtitle = "Proposed (NEP) and enacted (GAA) amounts, FY 2020 to FY 2027; the diamond is the FY 2027 House committee report.",
       caption = "AKAP has never carried an amount in any NEP; it exists only in enacted budgets. Each series starts in the first year the line was funded.") +
  theme_pbc(11)

AICS, TUPAD, and the Health Facilities Enhancement Program have been raised by Congress in every one of the last seven budgets. MAIFIP has been raised in each of the four years it has existed as a line, by ₱88B in total. AKAP was created by Congress in 2024 with ₱26.7B, renewed at ₱26.2B in 2025, and has never carried an amount in any executive proposal. Financial Assistance to LGUs shows the ratchet most clearly: Congress raised it in five straight budgets to ₱37.5B, and the executive has now adopted Congress’s number as its own baseline.

For 2027 the executive proposed AICS at ₱33.3B, MAIFIP at ₱24.2B, and TUPAD and livelihood at ₱16.7B. The House committee report has already taken them to ₱58.1B, ₱48.2B, and ₱21.5B, and revived Tulong Dunong (₱1.8B) and the ₱10B Presidential Assistance to Farmers and Fisherfolk, both of which had no amount in the NEP. The pattern held, and it held at the first stage, with the Senate and the bicam still to come and an election eighteen months away. AKAP is the one line not yet revived.

5.3 The political offices

pol_series <- function(d, label) map_dfr(2020:2026, function(y) tibble::tibble(office = label, year = y,
    `NEP (proposed)` = sum(d[[paste0("n", y)]], na.rm = TRUE), `GAA (enacted)` = sum(d[[paste0("g", y)]], na.rm = TRUE))) %>%
  bind_rows(tibble::tibble(office = label, year = 2027L, `NEP (proposed)` = sum(d$N27, na.rm = TRUE), `GAA (enacted)` = NA_real_, `House bill` = sum(d$H27, na.rm = TRUE)))
pol <- bind_rows(pol_series(L %>% filter(dep == "CONGRESS"), "Congress"),
                 pol_series(L %>% filter(dep == "OP"), "Office of the President"),
                 pol_series(L %>% filter(dep == "OVP"), "Office of the Vice President"))
cong <- pol %>% filter(office == "Congress")
cong_add <- sum(cong$`GAA (enacted)` - cong$`NEP (proposed)`, na.rm = TRUE)
pol %>% pivot_longer(c(`NEP (proposed)`, `GAA (enacted)`, `House bill`), names_to = "src", values_to = "v") %>% filter(!is.na(v)) %>%
  mutate(src = factor(src, levels = c(names(src_pal), "House bill")),
         office = factor(office, levels = c("Congress", "Office of the President", "Office of the Vice President"))) %>%
  ggplot(aes(factor(year), v, fill = src)) +
  geom_col(position = position_dodge(width = 0.8), width = 0.75) +
  geom_text(aes(label = comma(v, accuracy = 0.1)), position = position_dodge(width = 0.8), vjust = -0.4, size = 2.5) +
  facet_wrap(~ office, scales = "free_y") +
  scale_fill_manual(values = c(src_pal, "House bill" = "#1B7837"), breaks = c(names(src_pal), "House bill")) +
  scale_x_discrete(labels = function(x) paste0("'", substr(x, 3, 4))) +
  scale_y_continuous(labels = function(x) paste0(format(x, drop0trailing = TRUE, trim = TRUE), "B"), expand = expansion(mult = c(0, 0.12))) +
  labs(x = NULL, y = "PHP billions", title = "Congress has raised its own budget above the proposal in every one of the last seven years",
       subtitle = "Proposed (NEP) and enacted (GAA) budgets of the political offices, FY 2020 to FY 2027, with the FY 2027 House committee report",
       caption = "Office of the President in FY 2026 includes PHP 17.55B for hosting the ASEAN summits.") +
  theme_pbc(11)

The three political offices together are proposed at ₱37.9B. They belong on the watchlist for a different reason than the programs above: these are the budgets the people writing the GAA write for themselves, and the ones most exposed to political reward and punishment.

Congress is the clearest case. By convention the executive transmits the legislature’s proposal unchanged, and Congress then adds to it. It has done so in all seven years, by ₱74.2B in total: ₱18.8B in 2025 alone, when a ₱31.3B proposal became ₱50.1B, and ₱12.2B in 2026. The 2027 proposal was ₱27.0B; the committee report makes it ₱32.0B, with the ₱5.0B added to the House of Representatives’ own legislation and general management lines. Last year the House added another ₱10.8B to itself after the amendments subcommittee had finished, so the committee-report figure is not the end of it.

The Office of the President is treated with deference: Congress enacted exactly what was proposed in five of the seven years and added to it in the other two (₱5.4B in 2025, ₱0.7B in 2026), and it has never touched the national security oversight line that is the likely home of its confidential and intelligence funds. Its 2027 budget falls to ₱10.1B only because the ₱17.55B ASEAN hosting item ends; the rest is unchanged. The Office of the Vice President shows the punishment side. Congress cut it from ₱2.4B to ₱1.9B in 2024 and from ₱2.0B to ₱0.7B in 2025, and the executive now proposes ₱0.8B. Whatever one thinks of the office’s spending, a budget that tracks the occupant’s political standing is a red flag in itself.

5.4 Hard pork: local infrastructure

DPWH’s locally identified projects have been relabeled three times in seven years: “Local Infrastructure Program” lines in 2020 and 2021, then the Basic Infrastructure Program (BIP) and Sustainable Infrastructure Projects Alleviating Gaps (SIPAG) from 2022. Grouped into families, their history is continuous.

hp_family <- function(p) case_when(
  str_detect(p, "(SIPAG|Basic Infrastructure Program).*(Access Roads|Interjurisdictional|Coastal Roads)|Local Roads and Bridges") ~ "Local roads and bridges",
  str_detect(p, "(SIPAG|Basic Infrastructure Program).*(Multi-Purpose|Major|Strategic P)|Buildings and Other Structures - Multipurpose / Facilities - (Local|Construction)") ~ "Multi-purpose and public buildings",
  str_detect(p, "(SIPAG|Basic Infrastructure Program).*Flood|Flood Control and Drainage - .*(Local Infrastructure|Construction)") ~ "Local flood control",
  str_detect(p, "(SIPAG|Basic Infrastructure Program).*(Evacuation|Water|Ports)") ~ "Evacuation centers, water supply, local ports",
  TRUE ~ NA_character_)
hp <- L %>% filter(dep == "DPWH") %>% mutate(fam = hp_family(coalesce(PAP, ""))) %>% filter(!is.na(fam))
hp_long <- hp %>% select(fam, matches("^[ng]20\\d\\d$"), N27, H27) %>%
  pivot_longer(-fam, names_to = "k", values_to = "v") %>%
  mutate(src = case_when(k == "H27" ~ "House bill", k == "N27" ~ "NEP (proposed)", substr(k, 1, 1) == "n" ~ "NEP (proposed)", TRUE ~ "GAA (enacted)"),
         year = ifelse(k %in% c("N27", "H27"), 2027L, as.integer(substr(k, 2, 5)))) %>%
  group_by(src, year) %>% summarise(v = sum(v, na.rm = TRUE), .groups = "drop") %>%
  filter(!(src == "GAA (enacted)" & year == 2027)) %>%
  mutate(src = factor(src, levels = c(names(src_pal), "House bill")))   # NEP on the left, GAA on the right
ggplot(hp_long, aes(factor(year), v, fill = src)) +
  geom_col(position = position_dodge(width = 0.8), width = 0.75) +
  geom_text(aes(label = comma(v, accuracy = 1)), position = position_dodge(width = 0.8), vjust = -0.4, size = 3.1) +
  scale_fill_manual(values = c(src_pal, "House bill" = "#1B7837"), breaks = c(names(src_pal), "House bill")) +
  scale_y_continuous(labels = function(x) paste0(peso, comma(x), "B"), expand = expansion(mult = c(0, 0.08))) +
  labs(x = NULL, y = NULL, title = "DPWH local infrastructure: proposed at PHP 60B to 180B, enacted at up to PHP 426B",
       subtitle = "Local Infrastructure Program, BIP, and SIPAG lines combined (roads, buildings, flood control, and other local facilities)",
       caption = "FY 2023 NEP lodged some district-level funds centrally, which overstates that year's apparent add-on. FY 2027 shows the proposal and the House committee report.") +
  theme_pbc()

Congress added about ₱99B to these lines in 2020, ₱108B in 2021, ₱145B in 2022, ₱151B in 2023, ₱224B in 2024, and ₱248B in 2025. In 2026, after the scandal, the net addition fell to ₱82B, with local flood control removed entirely and local roads and multi-purpose buildings still raised by ₱94B.

The House committee report takes the same lines from ₱149B to ₱221B, an increase of ₱73B at the first congressional stage, which is already close to the ₱82B Congress added across the whole of 2026.

Three things about the 2027 proposal deserve attention. First, SIPAG disappears as a label, but its money does not: the BIP access-roads line is ₱105.7B, almost exactly what Congress enacted for BIP and SIPAG access roads together in 2026 (₱105.6B). Second, that single line also absorbs what used to be separately labeled tourism, ecozone, seaport, airport, and interjurisdictional road lines, about ₱86B across all of them in NEP 2026. The purpose categories that let anyone ask “which tourism road?” are gone. Third, flood control is back at ₱103.5B. After the events of 2025, a ₱105.7B undifferentiated local roads line and ₱54B in multi-purpose buildings, with no published selection criteria, is the easiest part of this budget to question.

Other hard-pork lines with the same signature: DA farm-to-market roads (raised in six of seven years; ₱16.0B proposed, ₱33.0B enacted in 2026), NIA irrigation repair and pump irrigation, DepEd classrooms (₱28.1B proposed and ₱85.4B enacted in 2026), DOH health facilities, and capital projects in State Universities and Colleges, which receive ₱7B to ₱33B in net additions a year.

5.5 Unprogrammed appropriations

ggplot(ua, aes(factor(year), ua, fill = src)) +
  geom_col(position = position_dodge(width = 0.8), width = 0.75) +
  geom_text(aes(label = comma(ua, accuracy = 1)), position = position_dodge(width = 0.8), vjust = -0.4, size = 3.1) +
  scale_fill_manual(values = src_pal, breaks = names(src_pal)) +
  scale_y_continuous(labels = function(x) paste0(peso, comma(x), "B"), expand = expansion(mult = c(0, 0.08))) +
  labs(x = NULL, y = NULL, title = "Unprogrammed appropriations: what the executive asks for and what Congress enacts",
       subtitle = "Derived as total new appropriations less the sum of programmed P/A/P lines, PHP billions",
       caption = "FY 2025 enacted figure is net of the President's veto. FY 2027 has a proposal only; the DBM reports it as PHP 111.984B.") +
  theme_pbc()

Unprogrammed appropriations are standby authority, released only if excess revenues or new loans materialize. They matter for two reasons. They are where Congress parks the programs it displaces from the programmed budget to make room for insertions, including foreign-assisted projects the country is already contractually bound to fund. And they were the vehicle for the 2024 sweep of GOCC balances, including PhilHealth’s and PDIC’s.

PBC’s tracker of the NEP’s unprogrammed annex breaks the ₱112.0B down as ₱57.0B to restore the fund balances of the Philippine Deposit Insurance Corporation, ₱42.6B in support for foreign-assisted projects (down from ₱97.3B), ₱8.8B to convert national government advances into subsidy, and ₱3.6B for risk management. More than half of the proposed fund, in other words, is the bill for the 2024 sweep coming due.

Congress raised the executive’s proposed figure by ₱100B in 2022, ₱219B in 2023, ₱450B in 2024, and ₱205B in 2025 (after the veto). Only in 2026 did it go down. The 2027 proposal of ₱112.0B is a real improvement on paper. The test is whether rail and other foreign-assisted projects cut from the programmed budget reappear here in December.

5.6 What Congress tends to bloat, and what pays for it

cong_family <- function(dep, p) case_when(
  dep == "DPWH" & !is.na(hp_family(p)) ~ paste0("DPWH local infrastructure: ", str_to_lower(hp_family(p))),
  TRUE ~ str_replace(str_replace(p, "^Locally-Funded Projects?:\\s*", ""), "^Foreign-Assisted Projects?:\\s*", ""))
cg <- L %>% filter(tab != "SUCs") %>% mutate(family = cong_family(dep, coalesce(PAP, ""))) %>%
  group_by(dep, agy, family) %>%
  summarise(across(matches("^d20\\d\\d$"), ~ if (all(is.na(.x))) NA_real_ else sum(.x, na.rm = TRUE)),
            across(matches("^[ng]20\\d\\d$"), ~ sum(.x, na.rm = TRUE)),
            N27 = if (all(is.na(N27))) NA_real_ else sum(N27, na.rm = TRUE), dH = sum(dH, na.rm = TRUE), .groups = "drop")
dcols <- paste0("d", 2020:2026)
cg$yrs_up   <- rowSums(cg[dcols] >  0.05, na.rm = TRUE)
cg$yrs_down <- rowSums(cg[dcols] < -0.05, na.rm = TRUE)
cg$yrs_seen <- rowSums(sapply(2020:2026, function(y) !is.na(cg[[paste0("d", y)]]) & (cg[[paste0("n", y)]] + cg[[paste0("g", y)]] > 0)), na.rm = TRUE)
cg$cum      <- rowSums(cg[dcols], na.rm = TRUE)
realloc <- tibble(year = 2020:2026,
                  adds = sapply(dcols, function(c) sum(pmax(L[[c]], 0), na.rm = TRUE)),
                  cuts = sapply(dcols, function(c) sum(pmin(L[[c]], 0), na.rm = TRUE)),
                  complete = sapply(dcols, function(c) all(!is.na(L[[c]][L$tab == "NGAs"]))))
realloc <- realloc %>% mutate(adds = ifelse(complete, adds, NA_real_), cuts = ifelse(complete, cuts, NA_real_))
ggplot(realloc %>% select(-complete) %>% pivot_longer(-year) %>% filter(!is.na(value)), aes(factor(year), value, fill = name)) +
  geom_col(width = 0.7, show.legend = FALSE) +
  geom_hline(yintercept = 0, color = "grey40") +
  geom_text(aes(label = comma(abs(value), accuracy = 1), vjust = ifelse(value > 0, -0.4, 1.3)), size = 3.2) +
  scale_fill_manual(values = c(adds = up_col, cuts = dn_col)) +
  scale_y_continuous(labels = function(x) paste0(peso, comma(x), "B"), expand = expansion(mult = c(0.1, 0.1))) +
  labs(x = NULL, y = NULL, title = "Congress now moves more than PHP 650B around inside a fixed total",
       subtitle = "Sum of all line-item increases (green) and decreases (red) between the NEP and the GAA, PHP billions",
       caption = "Line-level differences between proposed and enacted amounts across all P/A/Ps, including SUCs, GOCC support, and special purpose funds.") +
  theme_pbc()

The programmed total barely changes between the NEP and the GAA. What changes is what is inside it. In 2020 Congress added ₱268B to some lines and took the same from others. In 2026 it was ₱661B, about 15% of the programmed budget.

5.6.1 The lines that gain

cg %>% filter(yrs_up >= 4) %>% arrange(desc(cum)) %>% head(30) %>%
  transmute(Agency = paste(dep, agy, sep = " · "), `Line item (or family)` = family,
            `Years raised` = paste0(yrs_up, " of ", yrs_seen),
            `Cumulative add, 2020 to 2026` = bn(cum), `Add in 2026` = bn(d2026), `NEP 2027` = bn(N27), `House add, 2027` = fmt_chg(dH, 1)) %>%
  kbl_clean(font = 12.5, align = c("l","l","r","r","r","r","r"),
            caption = "Line items Congress raised above the executive's proposal in at least four of the last seven budgets (PHP billions), and what the House committee report did to each this year") %>%
  column_spec(2, width = "42%")
Line items Congress raised above the executive’s proposal in at least four of the last seven budgets (PHP billions), and what the House committee report did to each this year
Agency Line item (or family) Years raised Cumulative add, 2020 to 2026 Add in 2026 NEP 2027 House add, 2027
DPWH · OSEC DPWH local infrastructure: local roads and bridges 7 of 7 506.5 40.8 107.1 +29.5
DPWH · OSEC DPWH local infrastructure: multi-purpose and public buildings 7 of 7 379.2 35.1 41.0 +42.7
DPWH · OSEC DPWH local infrastructure: local flood control 5 of 6 142.9 0.0 0.0 0.00
DSWD · OSEC Protective Services for Individuals and Families in Difficult Circumstances 7 of 7 113.1 36.9 33.3 +24.8
DOH · OSEC Medical Assistance to Indigent and Financially - Incapacitated Patients (MAIFIP) 4 of 4 87.7 27.4 24.2 +24.0
ALGU · Local Government Support Fund (formerly Financial Subsidy to LGUs) Financial Assistance to Local Government Units 5 of 6 58.4 32.5 37.5 +4.1
DOLE · OSEC Livelihood and Emergency Employment 7 of 7 52.4 10.8 16.7 +4.7
DepEd · OSEC Basic Education Facilities 4 of 7 50.8 57.3 30.6 -3.1
CONGRESS · House of Representatives General Management and Supervision 7 of 7 45.0 8.7 6.3 +2.2
DPWH · OSEC Preventive Maintenance - Secondary Roads 4 of 7 44.9 -4.5 11.7 +2.8
DPWH · OSEC Rehabilitation/ Reconstruction of Roads with Slips, Slope Collapse, and Landslide - Secondary Roads 5 of 7 43.7 -1.9 4.8 +0.9
DPWH · OSEC Special Road Fund - Motor Vehicle User’s Charge (MVUC) as per R.A. 11239 4 of 6 43.6 -3.5 0.0 0.00
DOH · OSEC Health Facilities Enhancement Program 7 of 7 38.6 7.8 14.5 -4.5
DPWH · OSEC Rehabilitation/ Reconstruction of Roads with Slips, Slope Collapse, and Landslide - Tertiary Roads 6 of 7 30.9 1.0 2.9 +0.6
DPWH · OSEC DPWH local infrastructure: evacuation centers, water supply, local ports 5 of 5 27.3 6.1 0.4 +0.3
DA · OSEC Repair/Rehabilitation and Construction of Farm-to-Market Roads in Designated Key Production Areas 6 of 7 25.0 17.0 16.0 +3.6
DPWH · OSEC Preventive Maintenance - Primary Roads 5 of 7 22.0 -3.7 18.6 -2.4
BSGC · National Irrigation Administration Repair of National Irrigation Systems (NIS) 6 of 7 20.7 3.2 2.0 0.00
DPWH · OSEC Preventive Maintenance - Tertiary Roads 4 of 7 19.7 -2.7 5.7 +1.5
DPWH · OSEC Buildings and Other Structures - Multipurpose / Facilities - National Building Program 4 of 7 18.5 -3.6 13.4 -0.6
CONGRESS · House of Representatives Legislation of Laws and Other Related Activities 7 of 7 18.1 1.8 10.6 +2.8
DOH · OSEC Operations of DOH Regional Hospitals and Other Health Facilities 7 of 7 17.4 6.5 102.9 0.00
DOLE · Technical Education and Skills Development Authority Promotion, Development and Evaluation of Technical Education and Skills Development Scholarship and Student Assistance Programs 4 of 4 17.2 3.7 5.4 +1.0
DILG · Philippine National Police Conduct of police patrol operations and other related confidential activities against dissidents, subversives, lawless elements and organized crime syndicates and campaign against kidnapping, trafficking of women and minors, smuggling, carnapping, gunrunning, illegal fishing and trafficking of illegal drugs 4 of 7 16.6 16.0 202.3 0.00
DOLE · Technical Education and Skills Development Authority Promotion, Development and Implementation of Quality Technical Education and Skills Development Programs 4 of 4 14.0 2.4 14.0 +0.5
DPWH · OSEC Construction/ Rehabilitation of Water Supply/ Septage and Sewerage/ Rain Water Collectors 5 of 7 12.9 -0.4 7.3 +1.6
DOTr · OSEC Service Contracting of Public Utility Vehicle Program 4 of 5 11.3 -1.3 0.0 0.00
OEOs · Commission on Higher Education Tulong Dunong Program 4 of 4 9.6 2.7 0.0 +1.8
DSWD · OSEC Sustainable Livelihood Program 5 of 7 9.1 0.8 5.1 +0.9
DPWH · OSEC Road Widening - Secondary Roads 6 of 7 8.5 5.9 10.4 +0.5

5.6.2 The lines that pay for it

cg %>% filter(yrs_down >= 4) %>% arrange(cum) %>% head(18) %>%
  transmute(Agency = paste(dep, agy, sep = " · "), `Line item (or family)` = family,
            `Years cut` = paste0(yrs_down, " of ", yrs_seen),
            `Cumulative cut, 2020 to 2026` = bn(cum), `Cut in 2026` = bn(d2026), `NEP 2027` = bn(N27), `House change, 2027` = fmt_chg(dH, 1)) %>%
  kbl_clean(font = 12.5, align = c("l","l","r","r","r","r","r"),
            caption = "Line items Congress cut below the executive's proposal in at least four of the last seven budgets (PHP billions), and what the House committee report did to each this year") %>%
  column_spec(2, width = "42%")
Line items Congress cut below the executive’s proposal in at least four of the last seven budgets (PHP billions), and what the House committee report did to each this year
Agency Line item (or family) Years cut Cumulative cut, 2020 to 2026 Cut in 2026 NEP 2027 House change, 2027
Pension and Gratuity Fund · Pension and Gratuity Fund For payment of retirement and terminal leave benefits 7 of 7 -381.2 -32.5 0.0 0.00
DOTr · OSEC North-South Commuter Railway (NSCR) System ADB Loan Nos. 3796-PHI, 4188-PHI and 4589-PHI, and JICA Loan Nos. PH-P262, PH-P270, PH-P276 and PH-P277 7 of 7 -367.4 -47.3 123.8 -15.0
DPWH · OSEC Support to Operations 7 of 7 -352.0 -52.8 51.6 -2.5
DOTr · OSEC Metro Manila Subway Project (MMSP) Phase I JICA Loan Nos. PH-P267, PH-P275, PH-P279 and PH-P286 6 of 7 -194.1 -25.0 67.4 -19.7
DPWH · OSEC Construction of By-Pass and Diversion Roads 7 of 7 -153.7 -75.0 127.3 -55.2
DPWH · OSEC Construction/Rehabilitation of Flood Mitigation Facilities within Major River Basins and Principal Rivers 6 of 7 -126.5 -86.2 40.5 -15.4
Miscellaneous Personnel Benefits Fund · Miscellaneous Personnel Benefits Fund Funding Requirements for Staffing Modifications and Upgrading of Salaries 5 of 6 -110.2 -10.8 0.0 0.00
DSWD · OSEC Pantawid Pamilyang Pilipino Program (Implementation of Conditional Cash Transfer) 5 of 7 -84.5 0.0 99.1 0.00
Pension and Gratuity Fund · Pension and Gratuity Fund For payment of pension 4 of 7 -73.1 0.0 0.0 0.00
DPWH · OSEC Construction of New Bridges 7 of 7 -58.6 -8.9 6.4 +1.0
DPWH · OSEC Public-Private Partnership Strategic Support Fund (including ROW, Subsidy, and Variations) 6 of 7 -56.4 -3.0 1.0 0.00
DPWH · OSEC Construction of Missing Links/ New Roads 7 of 7 -42.7 -9.4 27.5 -2.6
ALGU · Local Government Support Fund (formerly Financial Subsidy to LGUs) Support to the Barangay Development Program of the National Task Force to End Local Communist Armed Conflict (NTF-ELCAC) 4 of 6 -38.5 0.0 9.7 0.00
DOTr · OSEC Payment of Right-of-Way and Value-Added Tax Obligations 4 of 7 -30.5 0.0 2.8 0.00
NDRRMF · National Disaster Risk Reduction and Management Fund ( Calamity Fund ) Repair and Reconstruction of Permanent Structures, including Capital Expenditures for Pre-disaster Operations, Rehabilitation and Other Related Activities 5 of 7 -29.6 -2.2 0.0 0.00
DPWH · OSEC General Administration and Support 6 of 7 -24.8 -3.9 18.1 0.00
DepEd · OSEC Computerization Program 4 of 7 -20.3 -5.8 5.8 -3.2
DPWH · OSEC Widening of Permanent Bridges 6 of 7 -19.8 -4.5 15.3 -1.8

The funding sources are as stable as the beneficiaries. The Pension and Gratuity Fund’s retirement benefits line has been cut in all seven years, by ₱381B in total. The North-South Commuter Railway has been cut in all seven (₱367B) and the Metro Manila Subway in six (₱194B). DPWH’s Support to Operations has been cut in all seven, by ₱352B; the executive proposes ₱50B to ₱90B there each year and Congress strips it to ₱10B to ₱30B, which makes it function as a parking lot for bicam. NEP 2027 has ₱51.6B sitting in it again. 4Ps has been cut in five of seven years, by ₱85B, including ₱50B in 2025.

Two implications. The large rail ask is, in practice, the fund source everyone expects bicam to raid, so a position on rail has to say where trimmed rail money should go, or it will go to local roads. And several of the “payers” are obligations the state cannot avoid (pensions, loan-funded projects), which is how cuts to them end up resurfacing in unprogrammed appropriations.

5.6.3 Where new line items cluster

ins <- map_dfr(2020:2026, function(y) {
  n <- L[[paste0("n", y)]]; g <- L[[paste0("g", y)]]
  L %>% mutate(is_new = coalesce(n, 0) == 0 & coalesce(g, 0) > 0, amt = g, year = y) %>% filter(is_new) %>% select(dep, agy, year, amt)
})
ins %>% group_by(Agency = paste(dep, agy, sep = " · ")) %>%
  summarise(`New lines, 2020 to 2026` = n(), `Amount (PHP B)` = sum(amt), `Years with insertions` = n_distinct(year), .groups = "drop") %>%
  arrange(desc(`New lines, 2020 to 2026`)) %>% head(15) %>%
  mutate(`Amount (PHP B)` = bn(`Amount (PHP B)`)) %>%
  kbl_clean(font = 12.5, align = c("l","r","r","r"),
            caption = "Agencies receiving the most line items that had no amount in the NEP and a positive amount in the GAA")
Agencies receiving the most line items that had no amount in the NEP and a positive amount in the GAA
Agency New lines, 2020 to 2026 Amount (PHP B) Years with insertions
SUCs · University of the Philippines System 271 16.8 7
DOTr · OSEC 230 73.0 7
OEOs · Philippine Sports Commission 86 6.6 7
DILG · Philippine National Police 82 8.4 7
DA · OSEC 78 34.8 7
SUCs · Bukidnon State University 62 0.8 7
SUCs · Mindanao State University 61 18.4 7
DND · Philippine Army ( Land Forces ) 53 2.5 2
OEOs · Commission on Higher Education 47 13.0 7
BSGC · National Housing Authority 44 6.5 7
SUCs · Polytechnic University of the Philippines 42 1.4 7
OEOs · National Commission for Culture and the Arts-Proper 40 1.9 7
OEOs · National Historical Commission of the Philippines 39 0.4 7
SUCs · Mariano Marcos State University 37 2.5 7
SUCs · Bicol University 36 3.7 7

Line-item insertions, as opposed to top-ups of existing lines, cluster in a few places: DOTr’s Office of the Secretary (mostly local ports and airports), the University of the Philippines System and Mindanao State University, the Philippine Sports Commission, the PNP (stations and buildings), the DA, the National Housing Authority, and NIA. These are the agency pages to read first when the House and bicam versions are published.

6 What advocates can push to amend

The test for each item below is the same: it should respond to a need the budget ignores, run through an agency that can spend, and be paid for inside the ceiling. The House stage changes the venue, not the list. Individual amendments on second reading rarely move money; the Senate committee and the bicam do. The asks below are written for those two rooms, and the first group is new.

6.1 First, undo the committee report’s worst trades

und <- function(rx, dep, item) hd(rx, dep) %>% mutate(item = item)
bind_rows(
  und("Nationally-procured Commodities for Family Health", "DOH", "DOH family health, immunization, and nutrition commodities"),
  und("^Health Facilities Enhancement", "DOH", "DOH Health Facilities Enhancement Program"),
  und("^Health Promotion", "DOH", "DOH Health Promotion"),
  und("Disaster Rehabilitation and Reconstruction Assistance", "NDRRMF", "Calamity fund: rehabilitation and reconstruction assistance to LGUs"),
  und("For disaster risk reduction or mitigation", "NDRRMF", "Calamity fund: risk reduction, prevention and preparedness"),
  und("^Basic Education Facilities", "DepEd", "DepEd Basic Education Facilities (classrooms)"),
  und("^Computerization Program", "DepEd", "DepEd Computerization Program"),
  und("Panahon ng Pagkilos", "DSWD", "DSWD Philippine Community Resilience Project (World Bank)"),
  und("Davao Public Transport", "DOTr", "DOTr Davao Public Transport Modernization Project"),
  und("Philippine Digital Infrastructure Project", "DICT", "DICT Philippine Digital Infrastructure Project (World Bank)")
) %>% transmute(`Line cut by the House` = item, `NEP 2027` = bn(N27, 2), `House bill 2027` = bn(H27, 2), `Cut` = fmt_chg(dH)) %>%
  kbl_clean(align = c("l", "r", "r", "r"), caption = "Cuts in the House committee report that PBC asks the Senate to reverse (PHP billions)") %>% column_spec(1, width = "52%")
Cuts in the House committee report that PBC asks the Senate to reverse (PHP billions)
Line cut by the House NEP 2027 House bill 2027 Cut
DOH family health, immunization, and nutrition commodities 9.10 4.23 -4.87
DOH Health Facilities Enhancement Program 14.54 10.09 -4.45
DOH Health Promotion 2.54 0.49 -2.05
Calamity fund: rehabilitation and reconstruction assistance to LGUs 14.67 6.92 -7.75
Calamity fund: risk reduction, prevention and preparedness 30.00 28.25 -1.75
DepEd Basic Education Facilities (classrooms) 30.55 27.45 -3.10
DepEd Computerization Program 5.79 2.63 -3.16
DSWD Philippine Community Resilience Project (World Bank) 17.66 12.12 -5.54
DOTr Davao Public Transport Modernization Project 15.08 9.98 -5.10
DICT Philippine Digital Infrastructure Project (World Bank) 2.16 0.36 -1.80

These ten lines lost about ₱40B between them. Each is a program that reaches people without a politician’s referral, and several are the ones a drought year or a bad typhoon season will call on first. The money to restore them is in the same bill: the ₱72B added to the two BIP lump lines, and the ₱49B added to AICS and MAIFIP.

6.2 Increases and new lines

tibble::tribble(
  ~Ask, ~`NEP 2027`, ~`House bill`, ~`Why, and how`,
  "Restore the DOTr fuel subsidy and the DA and BFAR fuel assistance lines as programmed items with a published oil-price trigger", "0", "₱1.0B (transport only)", "The DBCC assumes Dubai crude at $70 to $90 in 2027; it is near $95 now. A programmed line with a trigger is auditable; a discretionary release is not.",
  "Restore and scale up Service Contracting; protect PUV modernization support, busways, and BRT", "No line; PTMP ₱0.18B", "₱0.5B; PTMP ₱0.18B", "Per-kilometer contracts protect drivers' incomes and commuters' fares at the same time, and deliver inside the fiscal year. Rail does not.",
  "Index 4Ps grants to food inflation for the poorest households, and restore the ₱13.9B cut", "₱99.1B", "₱99.1B (unchanged)", "The country's main rules-based transfer is being cut in nominal terms during a food-price shock. DSWD paid out 91.5% of its allotments in 2025.",
  "Scale up the Walang Gutom food stamp program", "₱1.89B (plus ₱3.9B ADB voucher project)", "Unchanged", "Flat for four years. It is the best-targeted food instrument the government has.",
  "A dedicated, itemized El Niño response line in the DA: drought-tolerant seed, pump fuel, small water impounding, cloud seeding", "Not visible", "Not visible; rice PSS +₱0.5B", "Whatever response exists is inside the ₱25.6B rice production support lump and cannot be tracked.",
  "Raise PCIC crop insurance premiums in line with expected claims; size NFA palay procurement to a stated buffer-stock target in days", "₱4.5B; ₱11.18B", "Unchanged", "Both are flat in pesos in a drought year with higher farmgate prices.",
  "Restore NIA repair and restoration of existing systems to at least 2026 levels", "₱2.9B for national and communal repair (₱11.0B in NEP 2026)", "BARSc announced +₱1.5B; not traceable in bill data", "Keeping existing service areas irrigated is cheaper and faster than new construction.",
  "An on-budget electricity lifeline top-up targeted through DSWD, and a government energy management line (solar and efficiency retrofits for schools and DOH hospitals)", "None", "None", "No budget line addresses power costs. Retrofits lower the state's own electricity bill for years.",
  "A reintegration program for returning overseas workers in DMW or DOLE; restore the DMW welfare line", "No line; ₱4.65B", "No line; ₱4.90B", "More than 9,000 repatriated since March; the SONA promised livelihood and placement support.",
  "Restore evacuation centers, NHA emergency housing, and DHSUD disaster shelter assistance ahead of a possible La Niña", "No lines", "No lines; calamity fund cut ₱9.5B", "Flood control was cut by more than half and nothing replaced its protective function.",
  "Carve a standby crisis-response fund with published triggers out of the ₱30B NDRRMF lump and Financial Assistance to LGUs", "₱30.0B and ₱37.5B, discretionary", "₱28.3B and ₱41.6B", "Rule-based release makes the response predictable and auditable."
) %>% kbl_clean(font = 12.5) %>% column_spec(1, width = "34%") %>% column_spec(2, width = "14%") %>% column_spec(3, width = "14%")
Ask NEP 2027 House bill Why, and how
Restore the DOTr fuel subsidy and the DA and BFAR fuel assistance lines as programmed items with a published oil-price trigger 0 ₱1.0B (transport only) The DBCC assumes Dubai crude at $70 to $90 in 2027; it is near $95 now. A programmed line with a trigger is auditable; a discretionary release is not.
Restore and scale up Service Contracting; protect PUV modernization support, busways, and BRT No line; PTMP ₱0.18B ₱0.5B; PTMP ₱0.18B Per-kilometer contracts protect drivers’ incomes and commuters’ fares at the same time, and deliver inside the fiscal year. Rail does not.
Index 4Ps grants to food inflation for the poorest households, and restore the ₱13.9B cut ₱99.1B ₱99.1B (unchanged) The country’s main rules-based transfer is being cut in nominal terms during a food-price shock. DSWD paid out 91.5% of its allotments in 2025.
Scale up the Walang Gutom food stamp program ₱1.89B (plus ₱3.9B ADB voucher project) Unchanged Flat for four years. It is the best-targeted food instrument the government has.
A dedicated, itemized El Niño response line in the DA: drought-tolerant seed, pump fuel, small water impounding, cloud seeding Not visible Not visible; rice PSS +₱0.5B Whatever response exists is inside the ₱25.6B rice production support lump and cannot be tracked.
Raise PCIC crop insurance premiums in line with expected claims; size NFA palay procurement to a stated buffer-stock target in days ₱4.5B; ₱11.18B Unchanged Both are flat in pesos in a drought year with higher farmgate prices.
Restore NIA repair and restoration of existing systems to at least 2026 levels ₱2.9B for national and communal repair (₱11.0B in NEP 2026) BARSc announced +₱1.5B; not traceable in bill data Keeping existing service areas irrigated is cheaper and faster than new construction.
An on-budget electricity lifeline top-up targeted through DSWD, and a government energy management line (solar and efficiency retrofits for schools and DOH hospitals) None None No budget line addresses power costs. Retrofits lower the state’s own electricity bill for years.
A reintegration program for returning overseas workers in DMW or DOLE; restore the DMW welfare line No line; ₱4.65B No line; ₱4.90B More than 9,000 repatriated since March; the SONA promised livelihood and placement support.
Restore evacuation centers, NHA emergency housing, and DHSUD disaster shelter assistance ahead of a possible La Niña No lines No lines; calamity fund cut ₱9.5B Flood control was cut by more than half and nothing replaced its protective function.
Carve a standby crisis-response fund with published triggers out of the ₱30B NDRRMF lump and Financial Assistance to LGUs ₱30.0B and ₱37.5B, discretionary ₱28.3B and ₱41.6B Rule-based release makes the response predictable and auditable.

6.3 Cuts and resizing

bind_rows(
  pick("^Financial Assistance to Local Government", dep = "ALGU"),
  pick("^Growth Equity Fund", dep = "ALGU"),
  pick("Barangay Development Program", dep = "ALGU"),
  fam %>% filter(str_detect(family, "^Local and access roads")) %>% transmute(dep, agy, PAP = family, N26, G26, N27, H27),
  fam %>% filter(str_detect(family, "^BIP and SIPAG multi-purpose")) %>% transmute(dep, agy, PAP = family, N26, G26, N27, H27),
  pick("Multipurpose / Facilities - National Building Program", dep = "DPWH"),
  L %>% filter(dep == "DPWH", prog == "2000") %>% summarise(dep = "DPWH", agy = "OSEC", PAP = "Support to Operations", across(c(N26, G26, N27, H27), ~ sum(.x, na.rm = TRUE))),
  pick("North-South Commuter Railway", dep = "DOTr"),
  pick("Metro Manila Subway", dep = "DOTr"),
  pick(".", dep = "Revised AFP Modernization Program", label = "Revised AFP Modernization Program"),
  pick("Oversight Management on National Security", dep = "OP")
) %>% show_lines()
Agency Program / Activity / Project NEP 2026 GAA 2026 NEP 2027 House bill 2027 House vs NEP
ALGU · Local Government Support Fund (formerly Financial Subsidy to LGUs) Financial Assistance to Local Government Units 5.00 37.49 37.49 41.58 +4.09
ALGU · Local Government Support Fund (formerly Financial Subsidy to LGUs) Growth Equity Fund 1.00 11.30 10.30 10.30 0.00
ALGU · Local Government Support Fund (formerly Financial Subsidy to LGUs) Support to the Barangay Development Program of the National Task Force to End Local Communist Armed Conflict (NTF-ELCAC) 8.08 8.08 9.74 9.74 0.00
DPWH · OSEC Local and access roads: BIP, SIPAG, tourism, ecozone, seaport and airport access roads (merged in 2027) 86.03 125.77 105.73 134.93 +29.20
DPWH · OSEC BIP and SIPAG multi-purpose buildings 29.69 79.87 40.97 83.71 +42.73
DPWH · OSEC Locally-Funded Projects: Buildings and Other Structures - Multipurpose / Facilities - National Building Program 10.22 6.61 13.43 12.88 -0.56
DPWH · OSEC Support to Operations 82.43 29.60 51.61 49.08 -2.53
DOTr · OSEC Foreign-Assisted Project: North-South Commuter Railway (NSCR) System ADB Loan Nos. 3796-PHI, 4188-PHI and 4589-PHI, and JICA Loan Nos. PH-P262, PH-P270, PH-P276 and PH-P277 76.09 28.79 123.84 108.84 -15.00
DOTr · OSEC Foreign-Assisted Project: Metro Manila Subway Project (MMSP) Phase I JICA Loan Nos. PH-P267, PH-P275, PH-P279 and PH-P286 45.37 20.39 67.44 47.74 -19.70
Revised AFP Modernization Program · Revised AFP Modernization Program Revised AFP Modernization Program 40.00 40.00 50.00 50.00 0.00
OP · The President’s Offices Oversight Management on National Security Concerns 4.98 4.98 4.89 4.89 0.00

The first group is discretionary lumps that should shrink, and the House has made every one of them larger or left it alone. Financial Assistance to LGUs and the Growth Equity Fund were ₱5.0B and ₱1.0B in the executive’s own 2026 proposal; the House took the first to ₱41.6B. Returning both to the 2026 proposal levels frees about ₱46B. The two BIP lump lines are now ₱134.9B and ₱83.7B, ₱72B above the NEP, with no project list; cutting the House increment alone funds every reversal in the table above. The DPWH local roads family is about ₱20B above its NEP 2026 equivalent with less itemization than before; the ask is to cut the increment and restore the purpose categories. Multi-purpose buildings carry ₱41.0B under BIP and ₱13.4B under the National Building Program. DPWH Support to Operations holds ₱27.3B in capital outlay that Congress has never once left intact. The NTF-ELCAC barangay program rises to ₱9.74B; Congress cut it to ₱1.95B in 2025 without visible consequence.

The second group should be resized, not opposed. Rail asks for ₱191.2B when Congress enacted ₱49.2B and DOTr disbursed 52.7% of its allotments in 2025. The constructive ask is a published drawdown schedule and an appropriation that matches it. Because these projects are loan-financed, trimming them lowers borrowing more than it frees cash, so it creates room under the deficit ceiling but is not a peso-for-peso swap with 4Ps. AFP Modernization rises from ₱40B to ₱50B while DND grows ₱29.5B on top; holding it at ₱40B in a year of real cuts to civilian agencies is a defensible position.

Confidential and intelligence funds are an object of expenditure, not a P/A/P, so they do not appear as lines in the workbook. PBC’s tracker puts them at ₱10.77B across all agencies (₱4.37B confidential, ₱6.40B intelligence), unchanged from the previous proposal; Congress raised them to ₱11.82B in 2026. The Office of the President’s ₱4.89B national security oversight line is the likeliest home of the largest one. A few general management lines jump without explanation and merit a question each: the Supreme Court (₱4.5B to ₱10.8B), the Coast Guard (₱6.3B to ₱9.5B), and DOJ (₱1.4B to ₱3.6B).

Taking only the first group and the AFP Modernization increment, the room was about ₱125B in the NEP and is about ₱200B in the House bill. The increases proposed above cost well under half of that.

6.4 Sector by sector

These are PBC’s asks by sector. Each is stated against both baselines, because most of what reads as a cut against the 2026 GAA is the executive declining to carry forward what Congress added.

6.4.1 Infrastructure: make disclosure the condition of release

About ₱686B of the proposal sits in PBC’s infrastructure watchlist: DPWH’s asset preservation, network development, bridge, flood management, convergence, and local programs, plus NIA, farm-to-market roads, DA and BFAR equipment and facilities, classrooms, and DOH health facilities. These are the lines where insertions and ghost projects have concentrated, and most are unverifiable as proposed. The fix already exists in one department. At the House briefing on 26 August 2026, Secretary Vince Dizon said every one of DPWH’s 11,395 proposed projects must carry an approved program of works, validated geotagged site photos, sign-off by district and regional engineers, and endorsement by the regional or local development council. PBC asks Congress to write that standard into the GAA as a special provision for every infrastructure peso, in DOH, DepEd, DA, NIA, and DOTr as much as DPWH: no release without the documents posted on a portal open to the public, media, researchers, and congressional staff. The same rule should apply to any project Congress adds.

6.4.2 Education: fund the inputs the learning crisis needs

DepEd is proposed at ₱916.8B, which is 4.8% above the executive’s previous proposal and 4.6% below the 2026 GAA. CHED (+4.4% and −27.2%) and TESDA (+4.7% and −19.8%) show the same split. What falls against the current year is specific: classrooms from ₱85.4B to ₱30.6B, school feeding from ₱25.7B to ₱11.4B, textbooks from ₱19.5B to ₱6.5B, new teaching positions from ₱42.3B to ₱31.7B, and tertiary education subsidies from ₱37.5B to ₱27.8B. The Constitution directs the state to give education the highest budgetary priority. In Guingona v. Carague (1991) the Supreme Court let debt service exceed the education budget, and the margin is now thin: the education sector is about ₱1,227B and interest payments ₱1,114B, a gap that closed from ₱345B to ₱112B in one year. PBC asks Congress to restore classrooms, textbooks, feeding, and teacher items at least to their 2026 enacted levels with project-level disclosure attached, and to ask DepEd how the proposal squares with the National Education and Workforce Development Plan 2026 to 2035.

6.4.3 Health: move the money into entitlements

Health sector funding is about ₱96B below the 2026 GAA. Nine tenths of that gap is two items: PhilHealth’s one-time ₱60B appropriation ordered by the Supreme Court, and the ₱27.4B Congress added to MAIFIP. Net of the one-off, the PhilHealth subsidy rises 6.7% to ₱74.4B. PBC does not ask for the MAIFIP add-on back; it is guarantee-letter medicine, and it sits on the red-flag list above. The ask is to convert it: put the equivalent into PhilHealth benefit expansion and DOH hospitals’ zero-balance billing, where a patient does not need a politician’s endorsement. Congress should also require PhilHealth to show its reserve drawdown schedule and the benefit improvements it will fund in 2027, and require DOH and PhilHealth to reconcile claims so the same bill cannot be charged to both MAIFIP and PhilHealth. One question for DBM: its “consolidated health sector” figure of ₱1.06 trillion is about three times the health function in the budget’s own classification, and the definition should be published.

6.4.4 Cost of living and social protection: start with 4Ps

PSA’s price index for the poorest 30% of households has been running about two points above headline inflation (8.2% against 6.2% in PBC’s latest reading). Against that, 4Ps is the one large program cut on both baselines, down 12.3% to ₱99.1B. DOE is also down on both (−14.4% and −31.6%). The other agencies often cited as cut (DA, NIA, DSWD, NEA) are above the executive’s previous proposal and below the GAA, because Congress’s additions to irrigation repair, farm-to-market roads, AICS, and rural electrification were not carried forward. PBC asks Congress to restore 4Ps and index its grants to food prices, scale up the food stamp program, raise crop insurance and palay procurement, and fund the fuel and transport relief lines listed above. If the economic managers are right that inflation is temporary, the question stands: how do poor households eat while waiting?

6.4.5 Transport: budget for the commuter now

PBC’s earlier analysis found that from 2010 to 2021 about 99% of the ₱2.8 trillion spent on road infrastructure went to building, widening, and maintaining roads, and about 1% to road-based public transport. The 2027 proposal repeats the pattern. DOTr gets ₱299.5B. Service Contracting has no line, and PUV modernization, the EDSA Busway, Cebu BRT, and active transport together receive about ₱0.4B. The costs of the status quo are large. JICA estimated Metro Manila congestion at ₱3.5B a day in 2017, rising to ₱5.4B a day by 2035 without intervention, and road crashes are among the leading causes of death for Filipinos aged 15 to 29, many of them pedestrians. PBC defends rail, which is cut in every bicam, but rail delivers in years. The ask is a restored Service Contracting line at scale, a fixed minimum share of the transport budget for road-based public transport, walking and cycling infrastructure, terminals, and PUV stops, and published medium-term targets for each.

6.4.6 Green before grey: nature-based flood protection

DPWH’s Flood Management Program is proposed at ₱103.5B. The lines that protect watersheds and coasts (DENR’s forest development and protection, protected areas, watershed and river basin management, and coastal and marine resources, plus NIA’s watershed line) total ₱6.9B, a ratio of about 15 to 1. All of DENR is ₱28.0B. Congress tends to trim the green side: it cut DENR’s forest line from ₱3.5B to ₱2.4B in 2026 while adding ₱94B to local roads and buildings. The flood control program that collapsed in 2025 was almost entirely concrete: dikes, revetments, and river walls, built project by project with little reference to the river basin. PBC asks that no flood control money be restored unless projects follow river-basin master plans, and that a fixed share of the program be earmarked for watershed reforestation, mangroves and wetlands, and floodplain restoration, implemented with DENR and LGUs under the same disclosure rule as DPWH.

6.5 Process asks

  1. Publish the committee report’s amendments line by line, with proponents, before second reading, and the sub-program breakdown by district engineering office behind the ₱54B shift to DEOs. The BARSc announced totals; the bill shows a ₱200B reallocation that the totals did not describe.
  2. Hold the unprogrammed fund at or below the executive’s ₱112.0B, and bar the transfer of foreign-assisted projects from programmed to unprogrammed status.
  3. No self-augmentation. The House raised its own general management line from ₱6.2B to ₱14.9B in the 2026 GAA, and has raised it in all seven years. Both chambers should commit to their NEP levels.
  4. Itemize the lumps. The ₱105.7B access-roads line, the ₱30B NDRRMF preparedness item, and Financial Assistance to LGUs should each come with project lists or allocation formulas before they are voted on.
  5. Publish the bicam changes line by line, in machine-readable form, with the proponent of each amendment.
  6. Tie any restored ayuda to rules. If Congress again tops up AICS, MAIFIP, and TUPAD, the additions should carry special provisions barring politician referrals and requiring beneficiary lists to be published.

7 Questions for the Senate

The House plenary and the BARSc left these unanswered.

  1. What paid for the ₱198B? The committee report cut ₱73B from foreign-assisted projects, ₱10B from pensions, ₱9.5B from the calamity fund, and ₱4.9B from immunization commodities to fund AICS, MAIFIP, and the BIP lump lines. Which of the cut items will reappear in unprogrammed appropriations, and which are simply gone?
  2. Who chose the district projects? 158 district engineering offices gained ₱54B between the NEP and the committee report, with Ilocos Norte 1st DEO going from ₱414M to ₱4.8B. What is the project list, which sub-programs do the increases sit in, and did each project pass the documentation standard Secretary Dizon committed to?
  3. Real cuts in a slowdown. Programmed new appropriations grow 2.1% against inflation of 5 to 6%. With public construction down by a third and household spending slowing, why is the executive tightening the part of the budget that delivers services?
  4. Where is the crisis response? The DBCC names oil, inflation, El Niño, and remittances as the risks. Which line items in the NEP respond to each, and why are the fuel subsidy, Service Contracting, and fuel assistance lines empty?
  5. The ₱105.7B line. Why were SIPAG and the tourism, ecozone, port, and interjurisdictional road lines merged into one Basic Infrastructure Program item, what is the project list, and who identified the projects?
  6. Rail absorptive capacity. What is the 2027 disbursement schedule for the NSCR and the Subway, and how much of the ₱191.2B can be paid out within the year, given that DOTr disbursed 52.7% of its allotments in 2025?
  7. The ayuda reset. The NEP halves AICS, MAIFIP, and school feeding against the current year. If the concern is targeting, why was none of that money moved into 4Ps, the food stamp program, PhilHealth benefits, or crop insurance?
  8. Assumptions. The peso is outside the 60 to 62 band and oil is above the 2027 range. What is the revenue and interest cost of each peso of depreciation and each $10 on oil, and what is the fallback if growth again misses by a full point?

8 A note on the data

  • Coverage. The P/A/P workbook covers programmed new appropriations: national government agencies, DPWH, SUCs, budgetary support to government corporations, and special purpose funds, FY 2020 to FY 2027. Automatic and unprogrammed appropriations are not itemized in it. Amounts are in pesos in the source and shown here in billions.
  • Blanks and zeros. P/A/P amounts are read with one rule. Blank cells become zeros in every expense column, so a line that carries no amount in a given budget reads as zero. Rows that are zero in every expense column of every year are dropped (1451 rows). Document-years that are entirely zero are re-blanked so they read as “no data” (NEP 2018, GAA 2018, NEP 2019, GAA 2019). New and discontinued lines therefore count from or to zero in every change calculation.
  • Two comparisons. Changes are shown against both NEP 2026 (the executive’s previous proposal) and GAA 2026 (the enacted budget). Many apparent cuts are reversals of congressional additions, and many apparent increases are restorations of congressional cuts.
  • Relabeled lines. Several funds and programs were restructured between 2026 and 2027. They are grouped into families before changes are ranked; the families are listed in the section on increases and cuts. The National Livestock Program’s apparent zeroing is offset by a new Animal Industry Development and Competitiveness Program.
  • Automatic and unprogrammed appropriations. Automatic appropriations are itemized in a separate tab of the workbook by agency and fund, without program codes, and read with the same blank-and-zero rule; the tab’s total equals the total program less the sum of P/A/P lines in every year. BARMM’s automatic block grant and its new appropriations under Allocations to LGUs are kept as distinct line items. Unprogrammed appropriations are derived as total new appropriations less the sum of P/A/P lines. Both reconcile to DBM’s published figures for FY 2027 (₱316B increase in mandatory obligations; ₱111.984B unprogrammed).
  • The House committee report (HB 10858, Vols. I-A and I-B, “committee report as amended”, printed 6 October 2026) was encoded on 7 October by parsing the “New Appropriations, by Programs/Activities/Projects” tables and matched to NEP 2027 lines within each agency by name, project type, program context, and amount. Lines in the bill with no NEP counterpart were added as new rows; NEP lines with no bill counterpart carry no House amount. Every agency table reconciles to the bill’s total new appropriations by expense class. Three limits: GAS and STO activities in DPWH were summed to one row each; the bill lists most government corporations only at program or sub-program level, so changes inside NIA, NEA, PhilHealth, the NFA and other GOCCs are captured only where a program maps to a single NEP line; and the bill’s unprogrammed appropriations annex is not encoded. Regional and office breakdowns under each P/A/P are in the DPWH workbook only.
  • DPWH by operating unit comes from the DPWH workbook’s NewAppro_ByOperUnit sheet, which sums every office line under every sub-program in the bill. Office names were harmonized to the dataset’s spellings (Iloilo, Batangas, MIMAROPA Regional Office IV-B, and a few District Engineering Office suffixes). Provinces are inferred from office names and should be read as approximate.
  • Execution data are agency-level, end at FY 2025, and cover national government agencies and SUCs only. Rates are read against total allotments, which include continuing appropriations.
  • FY 2025 enacted figures for national government agencies were restored. The October edition of the workbook had lost its GAA 2025 block in the NGAs tab (two header blocks labelled NEP 2025, the second a duplicate with corrupted DA and DAR values). The block was rebuilt from the September edition of the same workbook in the public repository: 3,264 lines matched on department, agency, program, sub-program and P/A/P label, four more on amount and code after relabelling (DENR land management, three NCMF lines), and the FishCORE project, which the September edition did not carry, has no GAA 2025 value. The restored NGAs total, ₱2,484.4B, reproduces the September figure, and the programmed GAA 2025 total across all tabs is ₱4,221.2B.
  • Known data issues. Four Mindanao State University project lines carry text instead of amounts in their FY 2020 cells; these are read as zero. The Joint Legislative-Executive Councils carry no amounts in any year and drop out. FY 2023 NEP lodged some DPWH district funds centrally, which inflates that year’s apparent congressional additions.
  • Macroeconomic series are pulled at knit time from the public ajamontesa/PH-Econ-Data repository (PSA national accounts and CPI, BTr cash operations and debt, Labor Force Survey).

9 Reference: every line item of ₱100 million or more

L %>% filter(tab != "SUCs", pmax(coalesce(N26, 0), coalesce(G26, 0), coalesce(N27, 0), coalesce(H27, 0)) >= 0.1) %>%
  transmute(Department = dep, Agency = agy, `Program / Activity / Project` = PAP,
            `NEP 2026` = N26, `GAA 2026` = G26, `NEP 2027` = N27, `House bill 2027` = H27, `House vs NEP` = coalesce(H27, 0) - coalesce(N27, 0),
            `vs NEP 2026` = coalesce(N27, 0) - coalesce(N26, 0), `vs GAA 2026` = coalesce(N27, 0) - coalesce(G26, 0)) %>%
  arrange(desc(`House bill 2027`)) %>%
  dt_table(caption = "All non-SUC line items with ₱100M or more in NEP 2026, GAA 2026, NEP 2027, or the House bill (PHP billions). Search by agency or keyword; export with the buttons.",
           page = 15, money_cols = c("NEP 2026","GAA 2026","NEP 2027","House bill 2027","House vs NEP","vs NEP 2026","vs GAA 2026"), money_digits = 2)

Underlying data: DBM National Expenditure Program and General Appropriations Act, FY 2020 to FY 2027, and House Bill 10858 (committee report as amended, 6 October 2026), compiled at P/A/P level by the People’s Budget Coalition; DPWH appropriations by operating unit from the NEP and HB 10858; DBM agency-level appropriations and utilization, FY 2016 to FY 2025; PSA, BSP, and Bureau of the Treasury macroeconomic and fiscal series. DBM and DBCC statements are quoted from their published press releases of July and August 2026.