Skip to main content
All Insights

Engineering

What a FEOC Compliance System Actually Has to Track

Most FEOC spreadsheets fail for a structural reason: the rules describe a graph, a ledger, and a timeline, and a spreadsheet is none of those. Here is the data model we build instead, and why each piece exists.

Every clean energy developer we talk to about the Prohibited Foreign Entity rules has the same artifact: a workbook. One tab per project, one row per supplier, a column for country of origin, a column for “FEOC status,” and a percentage at the bottom that somebody recalculates before each closing. It worked for the original IRA Section 30D test, which was a binary pass or fail on a short list of battery components. It does not work for the regime that replaced it.

The One Big Beautiful Bill Act, signed July 4, 2025, moved the test from “is this supplier on a list” to a quantitative ratio computed across every tier of a supply chain, evaluated against a threshold that changes every year, for a credit that can be clawed back for a decade. That is not a spreadsheet problem. It is four data structures, and the rest of this piece walks through them in the order a system has to build them.

1. An ownership graph, because entity status is inherited

The rules classify entities in two tiers. A Specified Foreign Entity (SFE) is one of the statutorily named companies, an entity on the government lists (OFAC SDN, BIS Entity List, UFLPA Entity List, DoD NS-CMIC), or anything more than 50% owned by a covered-nation government. A Foreign-Influenced Entity (FIE) is triggered by control: a single SFE holding 25% or more of the stock, SFEs holding 40% in aggregate, 15% of the debt, the right to appoint a covered officer, or effective control through licensing and payment arrangements.

Notice what every one of those tests has in common: none of them is a property of the supplier. They are properties of the supplier’s owners, and of their owners’ owners. A Malaysian module factory can be clean on paper and fail because a holding company two levels up crossed 25%.

So the first structure is a directed graph. Nodes are legal entities. Edges are ownership, debt, board rights, and control arrangements, each carrying a percentage and an effective date. Status is not stored on the node; it is computed by traversal. Above 50% ownership the rules attribute fully, below 50% they attribute proportionally, so the traversal multiplies down the chain and sums across parallel paths. A change to one edge, a share sale for instance, has to invalidate the computed status of every entity downstream.

If you model this as a flat table with a “parent company” column, you can represent one level. The rules do not stop at one level.

2. A per-component cost ledger, because the ratio is about money, not parts

The Material Assistance Cost Ratio (MACR) is the share of a facility’s or component’s direct costs that is not attributable to prohibited foreign entities. The word that matters is “cost.” The test does not ask how many components came from a PFE. It asks what fraction of the dollars did.

That means the second structure is a ledger with one line per manufactured product and per component inside it, each line carrying a direct cost, a supplier (which resolves to a node in the graph above), and the certification supporting the sourcing claim. For a utility-scale project this is thousands of lines across inverters, modules, trackers, transformers, and the cells, wafers, and polysilicon inside the modules.

Three things make this harder than a bill of materials:

  • The threshold moves. Qualified facilities step from 40% in 2026 to 60% by 2030. Energy storage runs stricter, from 55% to 75%. Solar components claiming the 45X credit run from 50% to 85%. The ledger has to know the placed-in-service year and the credit type to know which line it is being measured against.
  • The test is binary. A ratio one point under the threshold disallows the whole credit, not a proportional share. There is no partial credit for being close, so the ledger needs headroom reporting, not just a final number.
  • Safe harbors substitute for actual cost. IRS Notice 2026-15 lets taxpayers use default cost percentages for identified components instead of collecting every supplier’s actual cost. A defensible ledger records, per line, whether the figure is actual or safe-harbor, which table version it came from, and why the fallback was used.

The same ledger, with a different filter, produces the domestic content percentage for the bonus credit. Domestic content asks what share of cost is US-sourced; FEOC asks what share is not PFE-sourced. Both are per-component direct-cost questions, so teams that build them separately end up reconciling two spreadsheets that disagree. We cover that overlap on the domestic content page.

3. A versioned rule engine, because the answer depends on the date

A compliance position is not a number. It is a number plus the rules that were in force when it was computed. The thresholds ramp annually. The government lists update without notice. The safe harbor tables have already been revised across three IRS notices and will be revised again. And the 30D regime, though terminated on September 30, 2025, retains audit exposure for prior-year claims, so a system may have to reproduce a calculation under rules that no longer apply.

The third structure is therefore a rule engine where every rule has a version and an effective window, and every calculation records which versions it used. When Treasury issues the next notice, the change is a new rule version with a start date, not an edit to a formula cell. Old positions stay reproducible. New positions pick up the new rule automatically for facilities that fall inside its window.

This is also what makes list screening tractable. The engine ingests the OFAC, BIS, UFLPA, and DoD lists on a schedule, diffs them, and re-runs the graph traversal only for entities the diff touched. Supplier certifications that contradict a list entry are flagged rather than silently accepted, which matters because the due-diligence standard is “know or have reason to know,” and a public list is the definition of reason to know.

4. An audit trail, because the window is six to ten years

The statute of limitations for a disallowed credit is six years. Section 48E projects carry a ten-year recapture window. Whoever is defending the position in year eight will not be the person who assembled it, and may not work for the same company.

The fourth structure is an append-only record of every input and every computed output: which certification was on file, signed by whom, on what date; which list version was screened; which rule version applied; which safe harbor table was used and for which lines. Nothing is overwritten. A recomputation creates a new record that references the old one.

In practice this is the piece that convinces tax counsel and tax equity investors, because it turns “we believe we are compliant” into “here is the certification, the list snapshot, and the calculation, as of the date of the claim.”

What this looks like when it is built

Put together, the system is unremarkable from the outside: a supplier onboarding flow that collects certifications, a project view that shows the MACR with headroom against the applicable threshold, an alert when a list update or ownership change moves a project toward the line, and an export that hands counsel the full evidence package.

Underneath, it is a graph database or a relational schema with recursive queries for ownership, a cost ledger keyed to the product taxonomy the safe harbor tables use, a rules table with effective dates, and an event log. None of it is exotic. All of it is structurally impossible in a workbook, which is why the workbook is where compliance positions go to become audit findings.

We build this as part of our FEOC compliance software work, usually alongside supply chain traceability, because the provenance data and the compliance data are the same data viewed from two directions. If your current position lives in a spreadsheet and your next closing is inside the 2027 threshold step, that is the conversation to have now rather than in the diligence room.

This article describes software design and summarizes publicly available regulatory guidance as of September 2026. It is not legal or tax advice. FEOC/PFE rules are actively evolving; verify thresholds, dates, and determinations against current Treasury and IRS guidance and qualified tax counsel.

Written by the AltaScale Labs engineering team. Follow us on LinkedIn for new pieces.

Working on this problem? Let's compare notes.

Talk to an Engineer