/**
 * JEPX スポット約定 公開 CSV（Shift_JIS）のパーサ。pl-aggregator server/ingest.mjs parseJepxCsv から移植し、
 * 東京固定 → 9 エリア対応に拡張。
 *
 * バリデーション（移植元の仕様を維持）:
 * - ヘッダ名で列を特定。必須列が無ければ throw（形式変更検知）
 * - 空セル = 欠測（null。0 ではない）。約定総量は null のまま行を残す
 * - エリアプライスが欠測または 0 円以下の行は捨てる（skipped に数える）
 * - 時刻コードは 1..48 の整数のみ
 * - 日付は YYYY/MM/DD のみ（合計行などを除外）
 */
declare const JEPX_AREAS: readonly ["hokkaido", "tohoku", "tokyo", "chubu", "hokuriku", "kansai", "chugoku", "shikoku", "kyushu"];
type JepxArea = (typeof JEPX_AREAS)[number];
declare const JEPX_AREA_LABELS: Record<JepxArea, string>;
/** CSV のエリアプライス列名 */
declare const areaColumnName: (area: JepxArea) => string;
interface JepxRow {
    /** YYYY/MM/DD（CSV 原文のまま） */
    date: string;
    /** 時刻コード 1..48 */
    slot: number;
    /** システムプライス [円/kWh] */
    system: number;
    /** 約定総量 [kWh]。欠測は null */
    vol: number | null;
    /** 9 エリアのエリアプライス [円/kWh]（全エリア存在・正値が保証される） */
    prices: Record<JepxArea, number>;
}
interface ParseJepxResult {
    rows: JepxRow[];
    skipped: number;
}
interface ParseJepxOptions {
    /** YYYY-MM-DD。これより前の日付の行は落とす（skipped には数えない） */
    cutoffDate?: string | null;
}
declare function parseJepxCsv(text: string, { cutoffDate }?: ParseJepxOptions): ParseJepxResult;
/** 静的 JSON の形: { [area]: { [date(YYYY-MM-DD)]: number[48] } } */
type AreaSeries = Record<JepxArea, Record<string, number[]>>;
interface ToAreaSeriesResult {
    series: AreaSeries;
    /** 48 コマ揃わず series から除外した日付（YYYY-MM-DD 昇順） */
    incompleteDates: string[];
}
/**
 * パース済みの行からエリア別・日付別の 48 コマ価格配列を組み立てる。
 * 同一 date+slot の重複は後勝ち（INSERT OR REPLACE 相当）。48 コマ揃わない日付は除外して報告する。
 */
declare function toAreaSeries(rows: readonly JepxRow[]): ToAreaSeriesResult;
interface ValidateAreaSeriesOptions {
    /** 最低限含まれるべき日数（既定 1） */
    minDays?: number;
    /** 価格の上限 [円/kWh]（既定 999） */
    maxPriceYen?: number;
}
/**
 * 静的 JSON の検証（取込末尾で必ず呼ぶ）。不合格なら throw。
 * - 全エリアが同じ日付集合を持つ
 * - 各日付は 48 コマ・全て有限値・0 < 価格 <= maxPriceYen
 * - 日付が連続している（欠落日なし）
 */
declare function assertValidAreaSeries(series: AreaSeries, { minDays, maxPriceYen }?: ValidateAreaSeriesOptions): void;

export { type AreaSeries, JEPX_AREAS, JEPX_AREA_LABELS, type JepxArea, type JepxRow, type ParseJepxOptions, type ParseJepxResult, type ToAreaSeriesResult, type ValidateAreaSeriesOptions, areaColumnName, assertValidAreaSeries, parseJepxCsv, toAreaSeries };
