haqlLabs

haql-qc · Data quality

Your summary adds up. That's the problem.

Totals hide contradictions. A production file can balance perfectly while four wells carry negative water volumes and a shut-in well quietly produces all month. haql-qc is the second pair of eyes that never gets tired — it reads every row, names every contradiction, and hands you a row number instead of a hunch.

Run it yourself: download the standalone binary from the downloads page — no Python needed, nothing leaves your machine. Deterministic: the same file in, the same findings out, every time.

Read the public guide: what it does, what it checks and what it does not do →

one command
# get the binary — Windows .exe, macOS, or Linux (no Python)
# haql-lab.github.io/downloads

# audit a production export
haql-qc -i production.csv \
         --well-column WELL_BORE_CODE \
         --date-column DATEPRD \
         --declare-unit BORE_OIL_VOL=Sm3 \
         --declare-unit BORE_GAS_VOL=Sm3 \
         --declare-unit BORE_WAT_VOL=Sm3 \
         -r audit.json

# result
rows=15634  wells=7  issues=80
  critical=0 high=12 medium=34 info=34

Every run also records the SHA-256 of the exact input, so anyone can re-verify the audit against the same bytes later — and --attest --sign-key seed.key signs the report (Ed25519 over the file hash and a root over every finding) so the audit can be handed over provably unedited.

What it is

A deterministic QC pass over the export you already have.

No database, no login, no pipeline to set up. A CSV in, an audit report out. The rules are permanent numbered IDs, so a finding you saw in March is the same rule with the same name in December.

Goes in

Production CSV — daily or monthly period. Well and date columns identified. Units declared by you, never guessed from a column name.

Comes out

JSON or JSONL audit report: findings by rule and severity, per-well medians used for materiality, and the run-level SHA-256 of the exact input so the run can be re-checked against the same bytes.

On regulators and filings. haql-qc does not generate regulator-specific forms, and it does not know any state's format. It checks the volumes those forms are built from — and it is jurisdiction-agnostic, whether your wells are in Texas, Alberta, or the North Sea.

Why you need it

Scanning fifteen thousand rows is not a review. It's a hope.

Every one of these is a real failure mode. Each one has already cost someone a rejected filing, a partner dispute, or a late night re-keying numbers.

The filing is rejected

A monthly state filing is a legal document built on volumes. A wrong disposition code or a missed stock change gets it rejected — and you resubmit, late.

The partner dispute

A joint-venture partner queries a volume. You pull the export. You cannot establish which figure was right on the day it was received, because the correction was made on a guess and the trail is gone.

The silent pass

Row thirteen thousand looks exactly like a correct row when you are scanning. It is a negative water volume, and the summary total still adds up — because a total does not care about signs.

The month-end scramble

Mismatches surface in the last two days. Someone is re-keying numbers at 9pm, and the person doing it is not the person who will defend the number in April.

Without haql-qc

A month closes. The export looks complete. Nothing in the summary flags a problem, because the summary is a total and the total still adds up.

Four wells carried negative water volumes. The largest was −457.84 Sm³.

With haql-qc

Four rows are named — well, date, line number, observed value, unit. An engineer decides whether the sign convention or the meter failed.

Either way it never reaches a filing, and the report records the SHA-256 of the exact input audited.

What it actually catches

Missing, negative, contradictory, impossible.

The full check list
  • Missing or unparseable identifiers — a row that cannot be attributed to a well
  • Negative production volumes — not realisable; flagged whether produced or injected, because the sign convention differs
  • Cumulative totals that decrease — impossible without a documented reset
  • Shut-in contradictions — zero uptime while still producing at normal rate
  • Date gaps — a gap beyond the well's own cadence, where that cadence is inferred from that well's own history, not assumed globally
  • Plausibility breaches — a daily rate above the fixed per-fluid ceiling (oil 200,000 bbl/d, water 500,000 bbl/d, gas 5,000,000 MCF/d default; overridable), not performance judgements
  • Signed audit — --attest --sign-key seed.key attaches an Ed25519 attestation over the report hash together with a root hash covering every finding, so a single edited finding breaks verification; --bundle out.zip packs report + attestation into a byte-reproducible zip for transmission

Materiality is measured against the well's own median. 0.003 Sm³ is nothing on a well producing 6,000 Sm³/d and an emergency on one producing 5.

high QC010_NEGATIVE_RATE

negative volume in 'BORE_WAT_VOL'

WellNO 15/9-F-12 H
Date2008-04-23
Source row1984 — open the CSV, go to that line
Observed−14.19 Sm3
Suggestionconfirm sign convention before flipping; negative production volume is not physically realisable
15,634rows audited, daily export
80findings: 12 high, 34 medium, 34 info
0plausibility breaches — verified, not skipped
526monthly rows — zero findings

Download sample audit.json — the JSON report shape, with every field a real run produces. Findings referenced above are the page's illustration; numbers in the downloaded file are from a small fixture run. Equinor's Volve field is public data; no Volve data is bundled with or downloaded by the tools.

Pricing

Priced against the hours you already spend.

A reservoir engineer at $88–129/hr eyeballing exports for four hours a month is $350–520/month. haql-qc is under that — before it saves you the first rejected filing.

Salary.com US Reservoir Engineer III–V, July 2026; ERI Petroleum Engineer Canada, Sept 2026.

Sample check

Free

One month of data, on the house. No key, no seat limit, no card. The point is for you to hit one finding you did not know about.

Send me your CSV

Team

$349/month

Annual commitment, up to 10 users, unlimited fields. Roughly one engineer-day of loaded cost — below the threshold where procurement needs a committee.

On-premise

$1,750/month

Annual, per site, unlimited users on that site. On-premise is not a feature — under most operators' data-residency policy it is the premise.

Evaluation: 30 days, no license key needed.

Next

Run it. You'll hit a finding.

Or email a month of data — anonymised if you prefer — and get the full report at no cost. Same rules either way.

kunleaz100@gmail.com