/**
 * Resolve variable references (e.g. `@tenant_start_date`, `@Beginning_Of_Tax_Year`)
 * against the active form data and session-level constants.
 *
 * Variable syntax: `@<name>`. Resolution order:
 *   1. Session vars (by key name) — tax-year boundaries, client name, etc.
 *   2. Form-field values — looked up by `question_field_id` in `FbFormData.data[]`.
 *
 * Empty-string and whitespace-only values are treated as null so a chain like
 *   ['@tenant_start_date', '@Beginning_Of_Tax_Year']
 * falls through to the fallback when the user has not yet entered a tenant date.
 */
import type { VariableChain } from '../types/validation.js';
import type { FbFormData } from '../types/shared_data.js';
/** Session-level constants (tax year boundaries, client name, etc.). */
export type SessionVars = Record<string, string | null | undefined>;
export interface ResolveContext {
    form_data: FbFormData | null;
    session: SessionVars;
}
/** Resolve a single variable reference. Returns the value or null if unresolved/empty. */
export declare function resolve_variable(ref: string, ctx: ResolveContext): string | null;
/** Walk the chain. Return the first non-empty resolved value, or null if none resolve. */
export declare function resolve_variable_chain(chain: VariableChain, ctx: ResolveContext): string | null;
//# sourceMappingURL=resolve_variable.d.ts.map