Skip to content
Dark MatterDark Matter
EnergyRegulatory corpus

Regulatory corpus

Per-jurisdiction reference data — authorities, statutes, tax-stability regimes, indigenous-consultation regimes, resource-adequacy programs, and open interpretive questions — pinned by version so Verdicts remain reproducible at any point in time.

Why a corpus

Compute-ready energy assets cross legal regimes that change faster than annual cadence. Argentina's RIGI was extended to onshore upstream in February 2026; the federal indigenous-emergency program (Ley 26.160) was operatively terminated in December 2024 by DNU 1083/2024; the BCRA cepo was lifted for individuals in April 2025; the BIS AI Diffusion Rule was rescinded in May 2025. A schema that hard-codes today's rules becomes legally inadmissible the moment any of those positions move.

DMTR Energy resolves this by versioning the regulatory state directly. Every Verdict, ComputeSlot, CapacityContract, and ParticipantVPU may pin a regulatory_corpus_id of the form <COUNTRY>@<YYYY-MM-DD>.<N>. The corpus is read-only data — authorities, statutes, tax regimes, indigenous-consultation regimes, resource-adequacy programs, and any open interpretive questions still pending counsel sign-off. Behavior lives in the rights-engine checks that consume it.

Layout

LayerLives inOwns
Corpus typespackages/energy/src/regulatory/types.tsRegulatoryCorpus, RegulatoryAuthority, StatutoryReference, CorpusAssumption
Per-jurisdiction snapshotspackages/energy/src/regulatory/<country>.tsOne immutable constant per country / version
Registrypackages/energy/src/regulatory/index.tsCORPUS_REGISTRY, lookupCorpus(country, version?)

Adding a new jurisdiction means writing one constant and registering it in the index. Amending an existing jurisdiction means issuing a new constant (COUNTRYNAME_CORPUS_<YYYY_MM>) — never mutating an existing one. Older snapshots are preserved indefinitely so historical Verdicts remain reproducible.

What a corpus snapshot contains

{
  country: "AR",
  corpus_version: "2026-05-06.1",
  effective_from: "2026-05-06",
  effective_until: "...",            // when superseded
  supersedes: "AR@2026-04-01.1",     // chain back

  authorities: [
    { code, name, level, domain[], statutory_basis[], url, notes }, ...
  ],

  tax_stability_regimes: [
    { code, statutory_basis, scope[], min_investment_usd, stability_years }, ...
  ],

  indigenous_consultation: {
    applicable_treaties[], applicable_federal_law[],
    applicable_provincial_law[], recognized_communities_partial[]
  },

  resource_adequacy_programs: [
    { code, statutory_basis, status, eligibility_summary }, ...
  ],

  open_assumptions: [
    { id, question, current_position, conservative_default,
      implication_if_disconfirmed, counsel_routed_to[] }, ...
  ],

  notes: [...]
}

Each StatutoryReference carries citation text, a published_at date, and an optional URL — counsel can audit any field down to the Boletín Oficial / Federal Register / equivalent gazette.

How the rights engine uses it

Rights-engine checks consume corpus data in two ways:

  1. Reading authoritative facts — e.g., checkRigiEligibility reads the RIGI sector floors from tax_stability_regimes rather than hardcoding USD 200M.
  2. Surfacing open questions — open_assumptions are interpretive judgments the schema cannot resolve without outside counsel. The rights engine returns conditional or counsel_review for any check that depends on an unresolved assumption, with regulatory_assumption_id pointing back to the specific question.

This is the schema-level expression of the credibility-recalibration discipline: a Verdict that says "allowed" never means more than the corpus and the open assumptions support.

Pinned snapshots in the registry

KeyStatusNotes
AR@2026-05-06.1ActiveProduction-ready for Pampa JV reference asset
BR@stub, CL@stub, PY@stub, UY@stub, US@stubStubsAuthority skeleton + tax-stability anchors only — populate before project structuring

Programmatic use

import { lookupCorpus, ARGENTINA_CORPUS_2026_05 } from "@dmtr/energy/regulatory";

const corpus = lookupCorpus("AR", "2026-05-06.1");

// What's the RIGI onshore-upstream floor?
const onshore = ARGENTINA_CORPUS_2026_05.tax_stability_regimes.find(
  (r) => r.code === "AR_RIGI_ONSHORE_UPSTREAM_OIL_GAS",
);
console.log(onshore?.min_investment_usd);  // → 600_000_000

// What open questions does the corpus flag?
ARGENTINA_CORPUS_2026_05.open_assumptions.forEach((a) => {
  console.log(a.id, "→", a.current_position);
});
Edit this page on GitHub

Last reviewed: May 6, 2026

Was this page helpful?