import type { AccountabilityReceiptBase } from './base.js';
export type StandingBasis = 'data_subject' | 'third_party' | 'regulator' | 'court' | 'internal_audit' | 'insurer' | 'principal';
/**
 * Closed taxonomy for protocol-level routing of contestations. The
 * structured peer of the free-text `grounds` field. Verifiers and
 * downstream-taint primitives read `grounds_class` to decide cascade
 * behavior; humans read `grounds` for context. Both fields coexist.
 */
export type GroundsClass = 'evidence_insufficient' | 'factual_dispute' | 'scope_violation' | 'superseded_by_new_evidence' | 'identity_dispute' | 'unclassified';
export type RequestedRemedy = 'rollback' | 'review' | 'explanation' | 'compensation' | 'erasure' | 'modification';
export type ContestStatus = 'filed' | 'under_review' | 'upheld' | 'rejected' | 'remedied' | 'expired' | 'abandoned';
export interface ContestabilityControllerResponse {
    status: ContestStatus;
    /** ISO 8601 UTC with milliseconds, ending Z. */
    responded_at: string;
    responder_did: string;
    /** Ed25519 hex over canonicalizeJCS(receipt with response_signature emptied). */
    response_signature: string;
    response_detail?: string;
}
export interface ContestabilityContestant {
    /** Optional — pseudonymous filings are allowed. At least one of did
     *  or pseudonym_hash MUST be present. */
    did?: string;
    /** sha256 hex when the contestant prefers a pseudonym. */
    pseudonym_hash?: string;
    standing_basis: StandingBasis;
}
export interface ContestabilityReceipt extends AccountabilityReceiptBase {
    claim_type: 'aps:contestability:v1';
    contestant: ContestabilityContestant;
    /** References the contested ActionReceipt.receipt_id. */
    action_id: string;
    /** Free-text human description. The signed canonical form of this
     *  receipt covers grounds verbatim. */
    grounds: string;
    /** Optional structured taxonomy. When present, downstream-taint and
     *  verifier hooks may route on this value. Absent in legacy receipts;
     *  treat absence as 'unclassified'. */
    grounds_class?: GroundsClass;
    requested_remedy: RequestedRemedy;
    controller_response?: ContestabilityControllerResponse;
}
//# sourceMappingURL=contestability.d.ts.map