import type { ReadGed } from "../import/ReadGed";
import { Person } from "../commons/Person";
export type ConsistencySeverity = "error" | "warn";
export type ModelConsistencyIssueCode = "person_missing_indi" | "act_unknown_indi" | "note_unknown_indi" | "marr_missing_spouse_indi" | "duplicate_indi_in_dataset" | "add_person_already_registered" | "add_person_indi_conflict" | "remove_person_not_found" | "link_child_indi_missing" | "link_child_not_bound_to_readged" | "link_child_family_has_no_spouses" | "unlink_child_indi_missing" | "unlink_child_not_bound_to_readged" | "marriage_spouses_same_person" | "marriage_spouses_same_indi" | "marriage_spouse_indi_missing" | "marriage_spouse_not_in_readged" | "famc_family_without_spouses" | "fams_family_without_spouses" | "fams_duplicate_family_id" | "famc_ancestor_cycle";
export type ModelConsistencyIssue = {
    code: ModelConsistencyIssueCode;
    severity: ConsistencySeverity;
    message: string;
    detail?: unknown;
};
export type ValidatePersonContext = {
    knownIndis?: ReadonlySet<number>;
    checkMarrParticipants?: boolean;
};
export type ValidateReadGedOptions = ValidatePersonContext & {
    checkDuplicateIndis?: boolean;
    /** `FAMC` pointant vers une famille sans entrée dans `partnersMap` ou liste vide. */
    checkFamcWithoutSpouses?: boolean;
    /** Chaque `FAMS` sans conjoints dans `partnersMap` (souvent import incomplet). */
    checkFamsWithoutSpouses?: boolean;
    /** Même identifiant de famille plusieurs fois dans `FAMS` d’une même personne. */
    checkDuplicateFamsEntries?: boolean;
    /** Cycle dans la remontée `FAMC` → parents (données impossibles biologiquement). */
    checkAncestorCycles?: boolean;
};
export type AssertConsistencyOptions = {
    failOn?: ConsistencySeverity;
};
/** Contrôles de base sur une personne (INDI, références d’actes). */
export declare function validatePerson(person: Person, context?: ValidatePersonContext): ModelConsistencyIssue[];
/** Agrège {@link validatePerson} pour toutes les personnes du graphe, plus les contrôles optionnels sur FAM. */
export declare function validateReadGed(readGed: ReadGed, options?: ValidateReadGedOptions): ModelConsistencyIssue[];
/** Lève une erreur si {@link validatePerson} retourne des problèmes selon `failOn` (défaut : seulement `error`). */
export declare function assertPersonConsistent(person: Person, context?: ValidatePersonContext & AssertConsistencyOptions): void;
/** Lève une erreur si {@link validateReadGed} retourne des problèmes selon `failOn` (défaut : seulement `error`). */
export declare function assertReadGedConsistent(readGed: ReadGed, options?: ValidateReadGedOptions & AssertConsistencyOptions): void;
