import type { PerCapitaSupplyParseResult } from './perCapitaSupplyImport.parse';
/** Default Total-KLD demand factor range for portal EMF Reading mode. */
export declare const DEFAULT_PER_DAY_DEMAND_MIN = 64.71;
export declare const DEFAULT_PER_DAY_DEMAND_MAX = 73;
/** @deprecated Alias for DEFAULT_PER_DAY_DEMAND_MIN — kept for callers/tests. */
export declare const PORTAL_EMF_DAILY_DEMAND_FACTOR = 64.71;
/** Per Day EMF step = demandFactor × population / 1000 (e.g. 64.71 × 4630 / 1000 = 299.6073). */
export declare function computePerDayEmfIncrement(perDayDemandFactor: number, population: number): number;
export declare function resolvePerDayDemandBounds(perDayDemandMin?: number | null, perDayDemandMax?: number | null): {
    min: number;
    max: number;
};
/**
 * Uniform random demand factor in [min, max] inclusive, rounded to 2 decimal places.
 * `rng` must return a number in [0, 1) (defaults to Math.random).
 */
export declare function randomPortalDemandFactor(min: number, max: number, rng?: () => number): number;
/**
 * Linear interpolate within [min, max] by day index (legacy helper).
 */
export declare function targetLpcdForDayIndex(dayIndex: number, dayCount: number, minFactor: number, maxFactor: number): number;
export type BuildPortalPerCapitaSupplyParams = {
    /** User-entered EMF Reading — used as the first report-row EMF only. */
    oldEmfReading: number;
    fromIso: string;
    toIso: string;
    timezone: string;
    population: number;
    /** Optional — falls back to 64.71 when unset. */
    perDayDemandMin?: number | null;
    /** Optional — falls back to 73 when unset. */
    perDayDemandMax?: number | null;
    /** Optional RNG in [0, 1) for deterministic tests; defaults to Math.random. */
    rng?: () => number;
};
/**
 * Portal EMF Reading mode only (Excel upload path is separate and untouched):
 *   - Entered EMF Reading = first report row EMF
 *   - Each day: value = random in [min, max] (default 64.71–73.00), step = (Population × value) / 1000
 *   - EMF yesterday = entered − day1Step; later days: prev + thatDayStep
 * Report columns:
 *   Total KLD = EMF today − EMF yesterday
 *   Consumer = Total × 0.85
 *   LPCD = (Consumer × 1000) / population
 */
export declare function buildPortalPerCapitaSupplyParseResult(params: BuildPortalPerCapitaSupplyParams): PerCapitaSupplyParseResult;
/** Persist entered first-row EMF on the first invoice day (legacy helper). */
export declare function buildSchemeEmfPersistFromPortalEntry(oldEmfReading: number, fromIso: string, timezone: string): {
    lastEmfReading: number;
    lastEmfReadingAt: string;
} | null;
/** Last report-row EMF + date — stored so the next invoice OLD EMF Reading prefills this value. */
export declare function extractLastEmfFromPerCapitaParse(parsed: PerCapitaSupplyParseResult | null | undefined): {
    lastEmfReading: number;
    lastEmfReadingAt: string;
} | null;
/** Debug/test helper: lpcd for a single day delta. */
export declare function lpcdForEmfDelta(currentEmf: number, previousEmf: number, population: number): number;
//# sourceMappingURL=portalPerCapitaEmf.d.ts.map