autocontext-oil-gas-core 0.26.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (92) hide show
  1. package/BOUNDARIES.md +19 -0
  2. package/LICENSE +55 -0
  3. package/README.md +86 -0
  4. package/dist/accounting.d.ts +322 -0
  5. package/dist/accounting.d.ts.map +1 -0
  6. package/dist/accounting.js +411 -0
  7. package/dist/accounting.js.map +1 -0
  8. package/dist/afe.d.ts +156 -0
  9. package/dist/afe.d.ts.map +1 -0
  10. package/dist/afe.js +166 -0
  11. package/dist/afe.js.map +1 -0
  12. package/dist/cli.d.ts +3 -0
  13. package/dist/cli.d.ts.map +1 -0
  14. package/dist/cli.js +793 -0
  15. package/dist/cli.js.map +1 -0
  16. package/dist/connectors.d.ts +44 -0
  17. package/dist/connectors.d.ts.map +1 -0
  18. package/dist/connectors.js +143 -0
  19. package/dist/connectors.js.map +1 -0
  20. package/dist/decline-curve.d.ts +51 -0
  21. package/dist/decline-curve.d.ts.map +1 -0
  22. package/dist/decline-curve.js +145 -0
  23. package/dist/decline-curve.js.map +1 -0
  24. package/dist/economics.d.ts +85 -0
  25. package/dist/economics.d.ts.map +1 -0
  26. package/dist/economics.js +217 -0
  27. package/dist/economics.js.map +1 -0
  28. package/dist/executive-monthly-ops.d.ts +63 -0
  29. package/dist/executive-monthly-ops.d.ts.map +1 -0
  30. package/dist/executive-monthly-ops.js +128 -0
  31. package/dist/executive-monthly-ops.js.map +1 -0
  32. package/dist/index.d.ts +21 -0
  33. package/dist/index.d.ts.map +1 -0
  34. package/dist/index.js +21 -0
  35. package/dist/index.js.map +1 -0
  36. package/dist/ingestion.d.ts +74 -0
  37. package/dist/ingestion.d.ts.map +1 -0
  38. package/dist/ingestion.js +183 -0
  39. package/dist/ingestion.js.map +1 -0
  40. package/dist/interventions.d.ts +1117 -0
  41. package/dist/interventions.d.ts.map +1 -0
  42. package/dist/interventions.js +2316 -0
  43. package/dist/interventions.js.map +1 -0
  44. package/dist/io.d.ts +4 -0
  45. package/dist/io.d.ts.map +1 -0
  46. package/dist/io.js +14 -0
  47. package/dist/io.js.map +1 -0
  48. package/dist/monthly-operating-review.d.ts +80 -0
  49. package/dist/monthly-operating-review.d.ts.map +1 -0
  50. package/dist/monthly-operating-review.js +243 -0
  51. package/dist/monthly-operating-review.js.map +1 -0
  52. package/dist/netback.d.ts +75 -0
  53. package/dist/netback.d.ts.map +1 -0
  54. package/dist/netback.js +146 -0
  55. package/dist/netback.js.map +1 -0
  56. package/dist/production-quality.d.ts +40 -0
  57. package/dist/production-quality.d.ts.map +1 -0
  58. package/dist/production-quality.js +179 -0
  59. package/dist/production-quality.js.map +1 -0
  60. package/dist/production.d.ts +9 -0
  61. package/dist/production.d.ts.map +1 -0
  62. package/dist/production.js +111 -0
  63. package/dist/production.js.map +1 -0
  64. package/dist/report.d.ts +36 -0
  65. package/dist/report.d.ts.map +1 -0
  66. package/dist/report.js +352 -0
  67. package/dist/report.js.map +1 -0
  68. package/dist/revenue.d.ts +355 -0
  69. package/dist/revenue.d.ts.map +1 -0
  70. package/dist/revenue.js +378 -0
  71. package/dist/revenue.js.map +1 -0
  72. package/dist/schemas.d.ts +626 -0
  73. package/dist/schemas.d.ts.map +1 -0
  74. package/dist/schemas.js +111 -0
  75. package/dist/schemas.js.map +1 -0
  76. package/dist/source-fit.d.ts +81 -0
  77. package/dist/source-fit.d.ts.map +1 -0
  78. package/dist/source-fit.js +259 -0
  79. package/dist/source-fit.js.map +1 -0
  80. package/dist/source-pack.d.ts +30 -0
  81. package/dist/source-pack.d.ts.map +1 -0
  82. package/dist/source-pack.js +180 -0
  83. package/dist/source-pack.js.map +1 -0
  84. package/dist/watchlist.d.ts +66 -0
  85. package/dist/watchlist.d.ts.map +1 -0
  86. package/dist/watchlist.js +141 -0
  87. package/dist/watchlist.js.map +1 -0
  88. package/dist/workflow.d.ts +239 -0
  89. package/dist/workflow.d.ts.map +1 -0
  90. package/dist/workflow.js +571 -0
  91. package/dist/workflow.js.map +1 -0
  92. package/package.json +68 -0
@@ -0,0 +1,411 @@
1
+ import { mkdir, readFile } from "node:fs/promises";
2
+ import { dirname, extname, join, resolve } from "node:path";
3
+ import { z } from "zod";
4
+ import { csvNumeric, csvPick, normalizeCsvHeader, parseCsvRows, loadProductionDatasetFromFile } from "./ingestion.js";
5
+ import { readJsonFile, writeJson, writeText } from "./io.js";
6
+ import { normalizeProductionDataset } from "./production.js";
7
+ import { renderLeaseOperatingStatementReviewMarkdown } from "./report.js";
8
+ import { NormalizedProductionDatasetSchema } from "./schemas.js";
9
+ const COST_CATEGORIES = ["loe", "water_handling", "workover", "transportation", "taxes", "g_and_a", "capex", "other"];
10
+ const LeaseOperatingStatementLineSchema = z.object({
11
+ wellId: z.string().min(1),
12
+ month: z.string().regex(/^\d{4}-\d{2}$/),
13
+ accountCode: z.string().min(1),
14
+ accountName: z.string().optional(),
15
+ category: z.enum(["loe", "water_handling", "workover", "transportation", "taxes", "g_and_a", "capex", "other"]).default("loe"),
16
+ amountUsd: z.number(),
17
+ vendorName: z.string().optional(),
18
+ invoiceId: z.string().optional(),
19
+ afeId: z.string().optional(),
20
+ sourceId: z.string().optional(),
21
+ notes: z.string().optional(),
22
+ });
23
+ const LeaseOperatingStatementSchema = z.object({
24
+ schemaVersion: z.literal("oil-gas-lease-operating-statement/v1"),
25
+ generatedAt: z.string().optional(),
26
+ lines: z.array(LeaseOperatingStatementLineSchema),
27
+ });
28
+ const LeaseOperatingBudgetLineSchema = z.object({
29
+ wellId: z.string().min(1),
30
+ month: z.string().regex(/^\d{4}-\d{2}$/),
31
+ budgetUsd: z.number(),
32
+ category: z.enum(["loe", "water_handling", "workover", "transportation", "taxes", "g_and_a", "capex", "other"]).optional(),
33
+ accountCode: z.string().optional(),
34
+ sourceId: z.string().optional(),
35
+ notes: z.string().optional(),
36
+ });
37
+ const LeaseOperatingBudgetSchema = z.object({
38
+ schemaVersion: z.literal("oil-gas-lease-operating-budget/v1"),
39
+ generatedAt: z.string().optional(),
40
+ lines: z.array(LeaseOperatingBudgetLineSchema),
41
+ });
42
+ function round(value, digits = 2) {
43
+ return Number(value.toFixed(digits));
44
+ }
45
+ export function parseLeaseOperatingStatement(input) {
46
+ if (Array.isArray(input))
47
+ return LeaseOperatingStatementSchema.parse({ schemaVersion: "oil-gas-lease-operating-statement/v1", lines: input });
48
+ if (input && typeof input === "object" && "costLines" in input && !("lines" in input)) {
49
+ return LeaseOperatingStatementSchema.parse({ ...input, lines: input.costLines });
50
+ }
51
+ return LeaseOperatingStatementSchema.parse(input);
52
+ }
53
+ export function parseLeaseOperatingBudget(input) {
54
+ if (Array.isArray(input))
55
+ return LeaseOperatingBudgetSchema.parse({ schemaVersion: "oil-gas-lease-operating-budget/v1", lines: input });
56
+ if (input && typeof input === "object" && "budgetLines" in input && !("lines" in input)) {
57
+ return LeaseOperatingBudgetSchema.parse({ ...input, lines: input.budgetLines });
58
+ }
59
+ return LeaseOperatingBudgetSchema.parse(input);
60
+ }
61
+ function csvRow(value) {
62
+ return Object.fromEntries(Object.entries(value).map(([key, entry]) => [normalizeCsvHeader(key), entry === undefined || entry === null ? "" : String(entry)]));
63
+ }
64
+ function mappedNames(selector, aliases) {
65
+ if (!selector)
66
+ return aliases;
67
+ return typeof selector === "string" ? [selector] : selector;
68
+ }
69
+ function mappedPick(row, mapping, field, aliases) {
70
+ return csvPick(row, ...mappedNames(mapping?.[field], aliases));
71
+ }
72
+ function mappedNumeric(row, mapping, field, aliases) {
73
+ return csvNumeric(row, ...mappedNames(mapping?.[field], aliases));
74
+ }
75
+ function normalizeCostCategory(value, fallback) {
76
+ const normalized = normalizeCsvHeader(value ?? fallback);
77
+ if (normalized === "water" || normalized === "water_hauling" || normalized === "water_disposal")
78
+ return "water_handling";
79
+ if (normalized === "g_a" || normalized === "ga" || normalized === "overhead")
80
+ return "g_and_a";
81
+ return COST_CATEGORIES.includes(normalized) ? normalized : fallback;
82
+ }
83
+ function categoryFromMap(categoryMap, candidates) {
84
+ if (!categoryMap)
85
+ return undefined;
86
+ const normalizedMap = new Map(Object.entries(categoryMap).map(([key, category]) => [normalizeCsvHeader(key), category]));
87
+ for (const candidate of candidates) {
88
+ const mapped = normalizedMap.get(normalizeCsvHeader(candidate ?? ""));
89
+ if (mapped && COST_CATEGORIES.includes(mapped))
90
+ return mapped;
91
+ if (mapped)
92
+ throw new Error(`Invalid lease operating category map value: ${mapped}`);
93
+ }
94
+ return undefined;
95
+ }
96
+ export function parseLeaseOperatingCategoryMap(value) {
97
+ if (!value || typeof value !== "object" || Array.isArray(value))
98
+ throw new Error("Category map must be a JSON object.");
99
+ return Object.fromEntries(Object.entries(value).map(([key, category]) => {
100
+ if (typeof category !== "string" || !COST_CATEGORIES.includes(category))
101
+ throw new Error(`Invalid lease operating category map value for ${key}: ${String(category)}`);
102
+ return [key, category];
103
+ }));
104
+ }
105
+ export function applyLeaseOperatingStatementCategoryMap(statement, categoryMap) {
106
+ if (!categoryMap)
107
+ return statement;
108
+ return { ...statement, lines: statement.lines.map((line) => ({ ...line, category: categoryFromMap(categoryMap, [line.accountCode, line.accountName, line.category]) ?? line.category })) };
109
+ }
110
+ export function applyLeaseOperatingBudgetCategoryMap(budget, categoryMap) {
111
+ if (!categoryMap)
112
+ return budget;
113
+ return { ...budget, lines: budget.lines.map((line) => ({ ...line, category: categoryFromMap(categoryMap, [line.accountCode, line.category]) ?? line.category })) };
114
+ }
115
+ export function mapLeaseOperatingStatementLine(rowValue, options = {}) {
116
+ const row = csvRow(rowValue);
117
+ const mapping = options.fieldMapping;
118
+ const accountCode = mappedPick(row, mapping, "accountCode", ["account_code", "account", "gl_account", "gl_code", "cost_code"]);
119
+ const accountName = mappedPick(row, mapping, "accountName", ["account_name", "account_description", "description"]);
120
+ const categoryText = mappedPick(row, mapping, "category", ["category", "cost_category", "account_category", "cost_type"]);
121
+ return LeaseOperatingStatementLineSchema.parse({
122
+ ...options.defaults,
123
+ wellId: mappedPick(row, mapping, "wellId", ["well_id", "wellid", "api_number", "api", "asset_id", "property_id", "property", "lease", "well"]),
124
+ month: mappedPick(row, mapping, "month", ["month", "accounting_month", "accounting_period", "period", "production_month", "date"]),
125
+ accountCode,
126
+ accountName,
127
+ category: categoryFromMap(options.categoryMap, [accountCode, accountName, categoryText]) ?? normalizeCostCategory(categoryText, options.defaults?.category ?? "loe"),
128
+ amountUsd: mappedNumeric(row, mapping, "amountUsd", ["amount_usd", "amount", "gross_amount", "net_amount", "cost", "debit"]),
129
+ vendorName: mappedPick(row, mapping, "vendorName", ["vendor_name", "vendor", "supplier"]),
130
+ invoiceId: mappedPick(row, mapping, "invoiceId", ["invoice_id", "invoice", "voucher"]),
131
+ afeId: mappedPick(row, mapping, "afeId", ["afe_id", "afe"]),
132
+ sourceId: mappedPick(row, mapping, "sourceId", ["source_id", "source"]) ?? options.defaults?.sourceId,
133
+ notes: mappedPick(row, mapping, "notes", ["notes", "memo", "comment"]) ?? options.defaults?.notes,
134
+ });
135
+ }
136
+ export function parseLeaseOperatingStatementCsv(csv, options = {}) {
137
+ return LeaseOperatingStatementSchema.parse({
138
+ schemaVersion: "oil-gas-lease-operating-statement/v1",
139
+ generatedAt: options.generatedAt,
140
+ lines: parseCsvRows(csv).map((row) => mapLeaseOperatingStatementLine(row, options)),
141
+ });
142
+ }
143
+ export async function loadLeaseOperatingStatementFromFile(path, options = {}) {
144
+ if (extname(path).toLowerCase() === ".csv")
145
+ return parseLeaseOperatingStatementCsv(await readFile(path, "utf8"), options);
146
+ return applyLeaseOperatingStatementCategoryMap(parseLeaseOperatingStatement(await readJsonFile(path)), options.categoryMap);
147
+ }
148
+ export function mapLeaseOperatingBudgetLine(rowValue, options = {}) {
149
+ const row = csvRow(rowValue);
150
+ const mapping = options.fieldMapping;
151
+ const accountCode = mappedPick(row, mapping, "accountCode", ["account_code", "account", "gl_account", "gl_code", "cost_code"]);
152
+ const categoryText = mappedPick(row, mapping, "category", ["category", "cost_category", "account_category", "cost_type"]);
153
+ return LeaseOperatingBudgetLineSchema.parse({
154
+ ...options.defaults,
155
+ wellId: mappedPick(row, mapping, "wellId", ["well_id", "wellid", "api_number", "api", "asset_id", "property_id", "property", "lease", "well"]),
156
+ month: mappedPick(row, mapping, "month", ["month", "accounting_month", "accounting_period", "period", "production_month", "date"]),
157
+ budgetUsd: mappedNumeric(row, mapping, "budgetUsd", ["budget_usd", "budget", "amount_usd", "amount"]),
158
+ category: categoryFromMap(options.categoryMap, [accountCode, categoryText]) ?? normalizeCostCategory(categoryText, options.defaults?.category ?? "loe"),
159
+ accountCode,
160
+ sourceId: mappedPick(row, mapping, "sourceId", ["source_id", "source"]) ?? options.defaults?.sourceId,
161
+ notes: mappedPick(row, mapping, "notes", ["notes", "memo", "comment"]) ?? options.defaults?.notes,
162
+ });
163
+ }
164
+ export function parseLeaseOperatingBudgetCsv(csv, options = {}) {
165
+ return LeaseOperatingBudgetSchema.parse({
166
+ schemaVersion: "oil-gas-lease-operating-budget/v1",
167
+ generatedAt: options.generatedAt,
168
+ lines: parseCsvRows(csv).map((row) => mapLeaseOperatingBudgetLine(row, options)),
169
+ });
170
+ }
171
+ export async function loadLeaseOperatingBudgetFromFile(path, options = {}) {
172
+ if (extname(path).toLowerCase() === ".csv")
173
+ return parseLeaseOperatingBudgetCsv(await readFile(path, "utf8"), options);
174
+ return applyLeaseOperatingBudgetCategoryMap(parseLeaseOperatingBudget(await readJsonFile(path)), options.categoryMap);
175
+ }
176
+ async function loadNormalizedProductionForAccounting(input) {
177
+ if (input.normalizedProduction !== undefined)
178
+ return NormalizedProductionDatasetSchema.parse(input.normalizedProduction);
179
+ if (input.normalizedProductionPath)
180
+ return NormalizedProductionDatasetSchema.parse(await readJsonFile(input.normalizedProductionPath));
181
+ if (input.productionDataset !== undefined) {
182
+ const maybeNormalized = NormalizedProductionDatasetSchema.safeParse(input.productionDataset);
183
+ return maybeNormalized.success ? maybeNormalized.data : normalizeProductionDataset(input.productionDataset, { generatedAt: input.generatedAt });
184
+ }
185
+ if (input.productionPath) {
186
+ const value = await readJsonFile(input.productionPath).catch(() => undefined);
187
+ const maybeNormalized = NormalizedProductionDatasetSchema.safeParse(value);
188
+ if (maybeNormalized.success)
189
+ return maybeNormalized.data;
190
+ return normalizeProductionDataset(await loadProductionDatasetFromFile(input.productionPath), { generatedAt: input.generatedAt });
191
+ }
192
+ throw new Error("Lease operating statement review requires productionDataset, productionPath, normalizedProduction, or normalizedProductionPath.");
193
+ }
194
+ function key(wellId, month) {
195
+ return `${wellId}::${month}`;
196
+ }
197
+ function productionMonthMap(dataset) {
198
+ const map = new Map();
199
+ for (const well of dataset.wells) {
200
+ for (const month of well.monthly)
201
+ map.set(key(well.wellId, month.month), month);
202
+ }
203
+ return map;
204
+ }
205
+ function emptyCategoryCosts() {
206
+ return {
207
+ loe: 0,
208
+ water_handling: 0,
209
+ workover: 0,
210
+ transportation: 0,
211
+ taxes: 0,
212
+ g_and_a: 0,
213
+ capex: 0,
214
+ other: 0,
215
+ };
216
+ }
217
+ function resolvedThresholds(input) {
218
+ return {
219
+ costPerBoeWarnUsd: input.costPerBoeWarnUsd ?? 18,
220
+ costPerBoeFailUsd: input.costPerBoeFailUsd ?? 35,
221
+ loePerBoeWarnUsd: input.loePerBoeWarnUsd ?? 14,
222
+ loePerBoeFailUsd: input.loePerBoeFailUsd ?? 28,
223
+ waterHandlingPerWaterBblWarnUsd: input.waterHandlingPerWaterBblWarnUsd ?? 6,
224
+ budgetVarianceWarnUsd: input.budgetVarianceWarnUsd ?? 25_000,
225
+ budgetVarianceWarnFraction: input.budgetVarianceWarnFraction ?? 0.2,
226
+ };
227
+ }
228
+ function reviewItem(severity, code, message, fields = {}) {
229
+ return { severity, code, message, ...fields };
230
+ }
231
+ function statusFromReviewItems(items) {
232
+ if (items.some((item) => item.severity === "error"))
233
+ return "fail";
234
+ if (items.some((item) => item.severity === "warning"))
235
+ return "warn";
236
+ return "pass";
237
+ }
238
+ function accountingArtifacts(runDir) {
239
+ return {
240
+ normalizedProductionJson: join(runDir, "data", "normalized-production.json"),
241
+ reviewJson: join(runDir, "lease-operating-statement-review.json"),
242
+ reviewMarkdown: join(runDir, "lease-operating-statement-review.md"),
243
+ reviewQueueJson: join(runDir, "review-queue.json"),
244
+ };
245
+ }
246
+ export async function runLeaseOperatingStatementReview(input) {
247
+ const runDir = resolve(input.runDir);
248
+ const artifacts = accountingArtifacts(runDir);
249
+ const normalizedProduction = await loadNormalizedProductionForAccounting(input);
250
+ const statement = input.statement !== undefined
251
+ ? applyLeaseOperatingStatementCategoryMap(parseLeaseOperatingStatement(input.statement), input.categoryMap)
252
+ : input.statementPath ? await loadLeaseOperatingStatementFromFile(input.statementPath, { categoryMap: input.categoryMap }) : undefined;
253
+ if (statement === undefined)
254
+ throw new Error("Lease operating statement review requires statement or statementPath.");
255
+ const budget = input.budget !== undefined
256
+ ? applyLeaseOperatingBudgetCategoryMap(parseLeaseOperatingBudget(input.budget), input.categoryMap)
257
+ : input.budgetPath ? await loadLeaseOperatingBudgetFromFile(input.budgetPath, { categoryMap: input.categoryMap }) : undefined;
258
+ const thresholds = resolvedThresholds(input);
259
+ const productionByMonth = productionMonthMap(normalizedProduction);
260
+ const costsByMonth = new Map();
261
+ const budgetByMonth = new Map();
262
+ for (const line of statement.lines) {
263
+ const entryKey = key(line.wellId, line.month);
264
+ costsByMonth.set(entryKey, [...(costsByMonth.get(entryKey) ?? []), line]);
265
+ }
266
+ for (const line of budget?.lines ?? []) {
267
+ const entryKey = key(line.wellId, line.month);
268
+ budgetByMonth.set(entryKey, round((budgetByMonth.get(entryKey) ?? 0) + line.budgetUsd, 2));
269
+ }
270
+ const reviewQueue = [];
271
+ const monthly = [...costsByMonth.entries()].map(([entryKey, lines]) => {
272
+ const [wellId, month] = entryKey.split("::");
273
+ const production = productionByMonth.get(entryKey);
274
+ const categoryCostsUsd = emptyCategoryCosts();
275
+ for (const line of lines)
276
+ categoryCostsUsd[line.category] = round(categoryCostsUsd[line.category] + line.amountUsd, 2);
277
+ const costUsd = round(lines.reduce((sum, line) => sum + line.amountUsd, 0), 2);
278
+ const loeUsd = round(categoryCostsUsd.loe + categoryCostsUsd.water_handling + categoryCostsUsd.workover + categoryCostsUsd.transportation + categoryCostsUsd.taxes + categoryCostsUsd.g_and_a + categoryCostsUsd.other, 2);
279
+ const capexUsd = round(categoryCostsUsd.capex, 2);
280
+ const budgetUsd = budgetByMonth.get(entryKey);
281
+ const varianceUsd = budgetUsd === undefined ? undefined : round(costUsd - budgetUsd, 2);
282
+ const varianceFraction = budgetUsd === undefined || budgetUsd === 0 ? undefined : round(varianceUsd / Math.abs(budgetUsd), 6);
283
+ const costPerBoeUsd = production && production.boe > 0 ? round(costUsd / production.boe, 2) : undefined;
284
+ const loePerBoeUsd = production && production.boe > 0 ? round(loeUsd / production.boe, 2) : undefined;
285
+ const waterHandlingCostPerWaterBblUsd = production && production.waterBbl > 0 ? round(categoryCostsUsd.water_handling / production.waterBbl, 2) : undefined;
286
+ const flags = [];
287
+ const localReviewItems = [];
288
+ if (!production) {
289
+ flags.push("Cost line has no matching production month.");
290
+ for (const line of lines) {
291
+ localReviewItems.push(reviewItem("warning", "missing_production_for_cost_line", `Cost line ${line.accountCode} for ${wellId} ${month} has no matching production month.`, {
292
+ wellId,
293
+ month,
294
+ accountCode: line.accountCode,
295
+ amountUsd: line.amountUsd,
296
+ }));
297
+ }
298
+ }
299
+ if (costPerBoeUsd !== undefined && costPerBoeUsd >= thresholds.costPerBoeWarnUsd) {
300
+ const severity = costPerBoeUsd >= thresholds.costPerBoeFailUsd ? "error" : "warning";
301
+ flags.push(`Cost per BOE ${costPerBoeUsd} exceeds ${severity === "error" ? "fail" : "review"} threshold.`);
302
+ localReviewItems.push(reviewItem(severity, "high_cost_per_boe", `${wellId} ${month} cost per BOE is ${costPerBoeUsd}.`, {
303
+ wellId,
304
+ month,
305
+ amountUsd: costUsd,
306
+ costPerBoeUsd,
307
+ }));
308
+ }
309
+ if (loePerBoeUsd !== undefined && loePerBoeUsd >= thresholds.loePerBoeWarnUsd) {
310
+ const severity = loePerBoeUsd >= thresholds.loePerBoeFailUsd ? "error" : "warning";
311
+ flags.push(`LOE per BOE ${loePerBoeUsd} exceeds ${severity === "error" ? "fail" : "review"} threshold.`);
312
+ localReviewItems.push(reviewItem(severity, "high_loe_per_boe", `${wellId} ${month} LOE per BOE is ${loePerBoeUsd}.`, {
313
+ wellId,
314
+ month,
315
+ amountUsd: loeUsd,
316
+ costPerBoeUsd: loePerBoeUsd,
317
+ }));
318
+ }
319
+ if (waterHandlingCostPerWaterBblUsd !== undefined && waterHandlingCostPerWaterBblUsd >= thresholds.waterHandlingPerWaterBblWarnUsd) {
320
+ flags.push(`Water-handling cost per water bbl ${waterHandlingCostPerWaterBblUsd} exceeds review threshold.`);
321
+ localReviewItems.push(reviewItem("warning", "high_water_handling_cost", `${wellId} ${month} water-handling cost per water bbl is ${waterHandlingCostPerWaterBblUsd}.`, {
322
+ wellId,
323
+ month,
324
+ amountUsd: categoryCostsUsd.water_handling,
325
+ }));
326
+ }
327
+ if (varianceUsd !== undefined && Math.abs(varianceUsd) >= thresholds.budgetVarianceWarnUsd && (varianceFraction === undefined || Math.abs(varianceFraction) >= thresholds.budgetVarianceWarnFraction)) {
328
+ flags.push(`Budget variance ${varianceUsd} exceeds review threshold.`);
329
+ localReviewItems.push(reviewItem("warning", "budget_variance", `${wellId} ${month} cost variance is ${varianceUsd} versus budget ${budgetUsd}.`, {
330
+ wellId,
331
+ month,
332
+ amountUsd: costUsd,
333
+ varianceUsd,
334
+ varianceFraction,
335
+ }));
336
+ }
337
+ reviewQueue.push(...localReviewItems);
338
+ return {
339
+ wellId,
340
+ month,
341
+ boe: production?.boe ?? 0,
342
+ oilBbl: production?.oilBbl ?? 0,
343
+ gasMcf: production?.gasMcf ?? 0,
344
+ waterBbl: production?.waterBbl ?? 0,
345
+ costUsd,
346
+ loeUsd,
347
+ capexUsd,
348
+ categoryCostsUsd,
349
+ lineCount: lines.length,
350
+ costPerBoeUsd,
351
+ loePerBoeUsd,
352
+ waterHandlingCostPerWaterBblUsd,
353
+ budgetUsd,
354
+ varianceUsd,
355
+ varianceFraction,
356
+ status: statusFromReviewItems(localReviewItems),
357
+ flags,
358
+ };
359
+ }).sort((a, b) => a.wellId.localeCompare(b.wellId) || a.month.localeCompare(b.month));
360
+ const totalCostUsd = round(statement.lines.reduce((sum, line) => sum + line.amountUsd, 0), 2);
361
+ const totalLoeUsd = round(monthly.reduce((sum, entry) => sum + entry.loeUsd, 0), 2);
362
+ const totalCapexUsd = round(monthly.reduce((sum, entry) => sum + entry.capexUsd, 0), 2);
363
+ const totalBoe = round(monthly.reduce((sum, entry) => sum + entry.boe, 0), 2);
364
+ const topCost = [...monthly].sort((a, b) => b.costUsd - a.costUsd)[0];
365
+ const categorySummary = COST_CATEGORIES.map((category) => {
366
+ const amountUsd = round(statement.lines.filter((line) => line.category === category).reduce((sum, line) => sum + line.amountUsd, 0), 2);
367
+ return {
368
+ category,
369
+ lineCount: statement.lines.filter((line) => line.category === category).length,
370
+ amountUsd,
371
+ percentOfTotalCost: totalCostUsd === 0 ? 0 : round(amountUsd / Math.abs(totalCostUsd), 6),
372
+ };
373
+ }).filter((entry) => entry.lineCount > 0 || entry.amountUsd !== 0);
374
+ const result = {
375
+ schema: "autocontext-oil-gas-core/lease-operating-statement-review/v1",
376
+ runDir,
377
+ generatedAt: input.generatedAt ?? new Date().toISOString(),
378
+ status: statusFromReviewItems(reviewQueue),
379
+ summary: {
380
+ wellCount: new Set(monthly.map((entry) => entry.wellId)).size,
381
+ monthCount: new Set(monthly.map((entry) => entry.month)).size,
382
+ costLineCount: statement.lines.length,
383
+ totalCostUsd,
384
+ totalLoeUsd,
385
+ totalCapexUsd,
386
+ totalBoe,
387
+ averageCostPerBoeUsd: totalBoe > 0 ? round(totalCostUsd / totalBoe, 2) : undefined,
388
+ highCostPerBoeWellMonthCount: monthly.filter((entry) => entry.flags.some((flag) => flag.includes("Cost per BOE"))).length,
389
+ budgetVarianceCount: reviewQueue.filter((item) => item.code === "budget_variance").length,
390
+ missingProductionCostLineCount: reviewQueue.filter((item) => item.code === "missing_production_for_cost_line").length,
391
+ reviewQueueItemCount: reviewQueue.length,
392
+ topCostWellId: topCost?.wellId,
393
+ topCostMonth: topCost?.month,
394
+ },
395
+ thresholds,
396
+ normalizedProduction,
397
+ statement,
398
+ budget,
399
+ monthly,
400
+ categorySummary,
401
+ reviewQueue,
402
+ artifacts,
403
+ };
404
+ await mkdir(dirname(artifacts.normalizedProductionJson), { recursive: true });
405
+ await writeJson(artifacts.normalizedProductionJson, normalizedProduction);
406
+ await writeJson(artifacts.reviewJson, result);
407
+ await writeText(artifacts.reviewMarkdown, renderLeaseOperatingStatementReviewMarkdown(result));
408
+ await writeJson(artifacts.reviewQueueJson, reviewQueue);
409
+ return result;
410
+ }
411
+ //# sourceMappingURL=accounting.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"accounting.js","sourceRoot":"","sources":["../src/accounting.ts"],"names":[],"mappings":"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"}
package/dist/afe.d.ts ADDED
@@ -0,0 +1,156 @@
1
+ import { z } from "zod";
2
+ import { type LeaseOperatingCategoryMap, type LeaseOperatingCostCategory } from "./accounting.js";
3
+ declare const AfeBudgetLineSchema: z.ZodObject<{
4
+ afeId: z.ZodString;
5
+ budgetUsd: z.ZodNumber;
6
+ wellId: z.ZodOptional<z.ZodString>;
7
+ category: z.ZodOptional<z.ZodString>;
8
+ accountCode: z.ZodOptional<z.ZodString>;
9
+ notes: z.ZodOptional<z.ZodString>;
10
+ }, "strip", z.ZodTypeAny, {
11
+ budgetUsd: number;
12
+ afeId: string;
13
+ wellId?: string | undefined;
14
+ notes?: string | undefined;
15
+ accountCode?: string | undefined;
16
+ category?: string | undefined;
17
+ }, {
18
+ budgetUsd: number;
19
+ afeId: string;
20
+ wellId?: string | undefined;
21
+ notes?: string | undefined;
22
+ accountCode?: string | undefined;
23
+ category?: string | undefined;
24
+ }>;
25
+ declare const AfeBudgetSchema: z.ZodObject<{
26
+ schemaVersion: z.ZodLiteral<"oil-gas-afe-budget/v1">;
27
+ generatedAt: z.ZodOptional<z.ZodString>;
28
+ lines: z.ZodArray<z.ZodObject<{
29
+ afeId: z.ZodString;
30
+ budgetUsd: z.ZodNumber;
31
+ wellId: z.ZodOptional<z.ZodString>;
32
+ category: z.ZodOptional<z.ZodString>;
33
+ accountCode: z.ZodOptional<z.ZodString>;
34
+ notes: z.ZodOptional<z.ZodString>;
35
+ }, "strip", z.ZodTypeAny, {
36
+ budgetUsd: number;
37
+ afeId: string;
38
+ wellId?: string | undefined;
39
+ notes?: string | undefined;
40
+ accountCode?: string | undefined;
41
+ category?: string | undefined;
42
+ }, {
43
+ budgetUsd: number;
44
+ afeId: string;
45
+ wellId?: string | undefined;
46
+ notes?: string | undefined;
47
+ accountCode?: string | undefined;
48
+ category?: string | undefined;
49
+ }>, "many">;
50
+ }, "strip", z.ZodTypeAny, {
51
+ schemaVersion: "oil-gas-afe-budget/v1";
52
+ lines: {
53
+ budgetUsd: number;
54
+ afeId: string;
55
+ wellId?: string | undefined;
56
+ notes?: string | undefined;
57
+ accountCode?: string | undefined;
58
+ category?: string | undefined;
59
+ }[];
60
+ generatedAt?: string | undefined;
61
+ }, {
62
+ schemaVersion: "oil-gas-afe-budget/v1";
63
+ lines: {
64
+ budgetUsd: number;
65
+ afeId: string;
66
+ wellId?: string | undefined;
67
+ notes?: string | undefined;
68
+ accountCode?: string | undefined;
69
+ category?: string | undefined;
70
+ }[];
71
+ generatedAt?: string | undefined;
72
+ }>;
73
+ export type AfeBudgetLine = z.infer<typeof AfeBudgetLineSchema>;
74
+ export type AfeBudget = z.infer<typeof AfeBudgetSchema>;
75
+ export interface AfeSpendReviewInput {
76
+ runDir: string;
77
+ statement?: unknown;
78
+ statementPath?: string;
79
+ budget?: unknown;
80
+ budgetPath?: string;
81
+ categoryMap?: LeaseOperatingCategoryMap;
82
+ generatedAt?: string;
83
+ varianceWarnUsd?: number;
84
+ varianceWarnFraction?: number;
85
+ }
86
+ export interface AfeSpendReviewQueueItem {
87
+ severity: "info" | "warning";
88
+ code: "afe_over_budget" | "afe_under_budget" | "afe_spend_without_budget" | "budgeted_afe_no_spend" | "spend_missing_afe";
89
+ message: string;
90
+ afeId?: string;
91
+ actualSpendUsd?: number;
92
+ budgetUsd?: number;
93
+ varianceUsd?: number;
94
+ varianceFraction?: number;
95
+ lineCount?: number;
96
+ }
97
+ export interface AfeSpendReviewItem {
98
+ afeId: string;
99
+ wellIds: string[];
100
+ months: string[];
101
+ actualSpendUsd: number;
102
+ budgetUsd?: number;
103
+ varianceUsd?: number;
104
+ varianceFraction?: number;
105
+ lineCount: number;
106
+ vendorSummary: {
107
+ vendorName: string;
108
+ amountUsd: number;
109
+ lineCount: number;
110
+ }[];
111
+ categorySummary: {
112
+ category: LeaseOperatingCostCategory | string;
113
+ amountUsd: number;
114
+ lineCount: number;
115
+ }[];
116
+ status: "pass" | "warn";
117
+ flags: string[];
118
+ }
119
+ export interface AfeSpendReviewResult {
120
+ schema: "autocontext-oil-gas-core/afe-spend-review/v1";
121
+ runDir: string;
122
+ generatedAt: string;
123
+ status: "pass" | "warn";
124
+ summary: {
125
+ afeCount: number;
126
+ budgetedAfeCount: number;
127
+ afeWithSpendCount: number;
128
+ statementLineCount: number;
129
+ spendLineCount: number;
130
+ spendMissingAfeLineCount: number;
131
+ spendMissingAfeUsd: number;
132
+ totalActualSpendUsd: number;
133
+ totalBudgetUsd: number;
134
+ totalVarianceUsd: number;
135
+ overBudgetAfeCount: number;
136
+ underBudgetAfeCount: number;
137
+ budgetedNoSpendAfeCount: number;
138
+ spendWithoutBudgetAfeCount: number;
139
+ reviewQueueItemCount: number;
140
+ };
141
+ thresholds: {
142
+ varianceWarnUsd: number;
143
+ varianceWarnFraction: number;
144
+ };
145
+ afes: AfeSpendReviewItem[];
146
+ reviewQueue: AfeSpendReviewQueueItem[];
147
+ artifacts: {
148
+ reviewJson: string;
149
+ reviewMarkdown: string;
150
+ reviewQueueJson: string;
151
+ };
152
+ }
153
+ export declare function renderAfeSpendReviewMarkdown(result: AfeSpendReviewResult): string;
154
+ export declare function runAfeSpendReview(input: AfeSpendReviewInput): Promise<AfeSpendReviewResult>;
155
+ export {};
156
+ //# sourceMappingURL=afe.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"afe.d.ts","sourceRoot":"","sources":["../src/afe.ts"],"names":[],"mappings":"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"}