import type { BooleanSettingName } from '../context/SettingsContext/types';
import type { TopLevelDataSchema } from '../context/StateContext/types';
import type { ExperimentName, FeatureName } from '../context/ToggleContext/types';
import type { AccountFormatRequirements } from '../datasets/generators/getAccountFormatForCountry';
import type { Scenario } from '../core/models/api/get-scenarios';
import type { ExistingLegalEntity } from '../core/models/api/legal-entity';
import type { TaskType } from '../stores/globalStore/taskTypes';
import type { AccountHolderOption } from './accountHolder';
import type { CountryCode } from './datasets/country-code';
import type { EntityProblems } from './errors/entity-problems';
export interface FormRulesParams<TLDS extends TopLevelDataSchema> {
    matchingScenario?: Scenario[];
    data: TLDS;
    country: CountryCode;
    taskType: TaskType;
    isFeatureEnabled?: (feature: FeatureName) => boolean;
    isSettingEnabled?: (setting: BooleanSettingName) => boolean;
    isExperimentEnabled?: (experiment: ExperimentName) => boolean;
    requiredFields?: Partial<AccountFormatRequirements>;
    rootLegalEntity?: ExistingLegalEntity;
    accountHolder?: AccountHolderOption;
    tinMatched?: boolean;
    problems?: EntityProblems;
}
type FieldRule = () => 'REQUIRED' | 'OPTIONAL' | undefined;
export type FormRules<RuleName extends string> = Record<RuleName, FieldRule>;
/**
 * Identity function that guarantees strictly typed rules with the provided rule names
 */
export declare const createFormRules: <SpecificRules extends FormRules<string>>(rules: SpecificRules) => SpecificRules;
export {};
