moonbit-deid

    A MoonBit toolkit for detecting, replacing, and auditing PHI in Chinese and English clinical text.

    de-identification
    phi
    medical
    privacy
    nlp
    Download zip
    Author
    Version
    0.1.0
    License
    Apache-2.0
    Last updated
    26 days ago
    Downloads
    20

    Dependencies

    #moonbit-deid

    moonbit-deid is a deterministic, library-first toolkit for detecting and redacting personally identifiable information (PII/PHI) in Chinese and English clinical text. A redaction returns the transformed text together with findings, replacement offsets, and an audit report, so downstream systems can review what changed instead of treating masking as a black box.

    #Core capabilities

    • Chinese and English rules for names, identifiers, phones, email addresses, dates, medical records, insurance records, addresses, organizations, and context-labelled fields.
    • Regex-backed detection with confidence thresholds, disabled-rule handling, contextual rules, and deterministic overlap resolution.
    • Token, preserve-length, partial-mask, and stable-hash replacement modes.
    • Reusable policies with allowlisted ranges, denied rules, locale hints, and review-only operation.
    • Offset mappings between original and redacted text, audit exports, risk summaries, quality metrics, and integrity contracts.
    • Batch and streaming pipelines, structured field helpers, Unicode-safe boundaries, and an adapter for external NER entities.
    • Synthetic evaluation fixtures and a deterministic CLI benchmark.

    #Quick start

    ///|
    test {
    let result = redact("电话13800138000")
    inspect(result.text, content="电话[PHONE]")
    inspect(result.offsets.length() > 0, content="true")
    }

    Run the CLI with the latest local MoonBit toolchain:

    moon run --target wasm-gc cmd/main -- "姓名:张三 电话13800138000" --audit moon run --target wasm-gc cmd/main -- --mode=preserve "Phone 415-555-1234" moon run --target wasm-gc cmd/main -- --mode=partial "Email: zhang@example.com" moon run --target wasm-gc cmd/main -- --mode=hash "电话13800138000"

    #CLI

    moon run cmd/main -- [options] [text]

    Supported options are --audit, --mode=preserve, --mode=partial, --mode=hash, --benchmark[=N], and --help. The benchmark uses fixed clinical fixtures and the same library pipeline as normal redaction.

    #Architecture

    1. rules.mbt, clinical_rules.mbt, and scanner.mbt define detectors and produce normalized findings.
    2. redaction_policy.mbt and pipeline_orchestration.mbt apply policy, confidence, locale, allowlist, and overlap decisions.
    3. deid.mbt, offset_mapping.mbt, and audit_exports.mbt apply replacements and preserve reviewable provenance.
    4. batch_pipeline.mbt, streaming_pipeline.mbt, structured_fields.mbt, ner_adapters.mbt, and evaluation.mbt provide integration surfaces for applications and test fixtures.

    The public convenience API is in public_api.mbt; lower-level functions stay available for applications that need explicit rules or policies.

    #Benchmarks

    Reproduce the local measurement with:

    moon run cmd/main -- --benchmark=100

    On 2026-08-19, three local runs processed 3 cases, 500 documents, 63,500 input characters, and 3,600 findings each. Elapsed times were 652 ms, 623 ms, and 649 ms. Full command output and methodology are recorded in BENCHMARKS.md; elapsed time is host-dependent.

    The repository currently contains 9,355 lines of production .mbt source, counted locally while excluding test files and generated build output. CI keeps a transparent lower-bound check of 8,000 production lines.

    #Tests and development

    The test suite covers ordinary cases and boundary behavior for malformed identifiers, checksums, empty input, Unicode code-unit boundaries, overlapping spans, protected ranges, structured fields, streaming chunks, external entities, mappings, batches, and evaluation denominators.

    moon fmt --check moon info moon check --target all --deny-warn moon test --target all --deny-warn moon run --target wasm-gc cmd/main -- --benchmark=10

    Generated interfaces are kept in pkg.generated.mbti and cmd/main/pkg.generated.mbti. Do not edit them manually; regenerate them with moon info.

    #CI

    .github/workflows/test.yml checks the current stable MoonBit toolchain on Ubuntu, macOS, and Windows. It verifies formatting, generated interfaces, strict type checking, tests, source scale, and the CLI benchmark smoke path. Publishing is deliberately a separate manual workflow so a normal pull request cannot publish a package accidentally.

    #Scope and license

    The package provides deterministic engineering primitives, not a claim of regulatory compliance. Production deployments should review rule coverage, thresholds, audit retention, and institution-specific policy.

    This project is licensed under the Apache License 2.0.

    DeidError

    pub(all) suberror DeidError {
    DeidError(String)
    }

    impl Show for DeidError

    AnalyticsComparison

    pub(all) struct AnalyticsComparison {
    left_id : String
    right_id : String
    finding_delta : Int
    risk_delta : Int
    length_delta : Int
    ratio_delta : Float
    } derive(
    Debug
    )

    AuditReport

    pub(all) struct AuditReport {
    input_length : Int
    output_length : Int
    finding_count : Int
    applied_count : Int
    counts : Map[String, Int]
    findings : Array[Finding]
    offsets : Array[OffsetMap]
    } derive(
    Debug
    )

    AuditTotals

    pub(all) struct AuditTotals {
    documents : Int
    findings : Int
    applied : Int
    protected_count : Int
    by_kind : Map[String, Int]
    by_risk : Map[String, Int]
    } derive(
    Debug
    )

    BatchConfig

    pub(all) struct BatchConfig {
    config : RedactionConfig
    stop_on_error : Bool
    retain_empty : Bool
    max_documents : Int
    } derive(Eq,
    Debug
    )

    BatchConfig::default

    fn BatchConfig::default() -> BatchConfig

    BatchDiagnostic

    pub(all) struct BatchDiagnostic {
    id : String
    ok : Bool
    message : String
    finding_count : Int
    } derive(Eq,
    Debug
    )

    BatchItem

    pub(all) struct BatchItem {
    id : String
    text : String
    } derive(Eq,
    Debug
    )

    BatchOutcome

    pub(all) struct BatchOutcome {
    results : Array[BatchResult]
    diagnostics : Array[BatchDiagnostic]
    totals : AuditTotals
    } derive(
    Debug
    )

    BatchResult

    pub(all) struct BatchResult {
    id : String
    result : DeidResult
    } derive(
    Debug
    )

    BatchSummary

    pub(all) struct BatchSummary {
    document_count : Int
    finding_count : Int
    counts : Map[String, Int]
    } derive(
    Debug
    )

    BenchmarkCase

    pub(all) struct BenchmarkCase {
    name : String
    description : String
    documents : Array[String]
    expected_findings : Int
    } derive(Eq,
    Debug
    )

    BenchmarkResult

    pub(all) struct BenchmarkResult {
    name : String
    documents : Int
    repetitions : Int
    input_characters : Int
    findings : Int
    output_characters : Int
    } derive(Eq,
    Debug
    )

    ChunkPolicy

    pub(all) struct ChunkPolicy {
    context_window : Int
    separator : String
    config : RedactionConfig
    } derive(Eq,
    Debug
    )

    ChunkPolicy::default

    fn ChunkPolicy::default() -> ChunkPolicy

    ChunkResult

    pub(all) struct ChunkResult {
    chunk_id : String
    original_length : Int
    redacted_length : Int
    result : DeidResult
    } derive(
    Debug
    )

    ConfidenceBand

    pub enum ConfidenceBand {
    Low
    Medium
    High
    Certain
    } derive(Compare, Eq,
    Debug
    )

    DeidOptions

    pub(all) struct DeidOptions {
    mode : ReplacementMode
    min_confidence : Int
    include_disabled_rules : Bool
    } derive(Eq,
    Debug
    )

    DeidOptions::default

    fn DeidOptions::default() -> DeidOptions

    DeidResult

    pub(all) struct DeidResult {
    text : String
    findings : Array[Finding]
    offsets : Array[OffsetMap]
    audit : AuditReport
    } derive(
    Debug
    )

    Diagnostic

    pub(all) struct Diagnostic {
    code : String
    severity : DiagnosticSeverity
    message : String
    start : Int
    end : Int
    } derive(Eq,
    Debug
    )

    DiagnosticSeverity

    pub(all) enum DiagnosticSeverity {
    Info
    Warning
    Error
    } derive(Eq,
    Debug
    )

    DocumentAnalytics

    pub(all) struct DocumentAnalytics {
    id : String
    input_length : Int
    output_length : Int
    finding_count : Int
    risk_score : Int
    redaction_ratio : Float
    average_confidence : Float
    kinds : Map[String, Int]
    } derive(
    Debug
    )

    DocumentSection

    pub(all) struct DocumentSection {
    title : String
    kind : SectionKind
    start : Int
    end : Int
    text : String
    } derive(Eq,
    Debug
    )

    EntityBatch

    pub(all) struct EntityBatch {
    source : String
    entities : Array[EntityInput]
    invalid_count : Int
    } derive(Eq,
    Debug
    )

    EntityInput

    pub(all) struct EntityInput {
    label : String
    kind : PhiKind
    start : Int
    end : Int
    confidence : Int
    source : String
    } derive(Eq,
    Debug
    )

    EvaluationCase

    pub(all) struct EvaluationCase {
    id : String
    text : String
    expected : Array[Span]
    } derive(Eq,
    Debug
    )

    EvaluationResult

    pub(all) struct EvaluationResult {
    cases : Int
    expected : Int
    predicted : Int
    true_positive : Int
    false_positive : Int
    false_negative : Int
    } derive(Eq,
    Debug
    )

    EvaluationResult::f1

    fn EvaluationResult::f1(self : EvaluationResult) -> Float

    EvaluationResult::precision

    fn EvaluationResult::precision(self : EvaluationResult) -> Float

    EvaluationResult::recall

    fn EvaluationResult::recall(self : EvaluationResult) -> Float

    ExternalEntity

    pub(all) struct ExternalEntity {
    kind : PhiKind
    label : String
    start : Int
    end : Int
    confidence : Int
    source : String
    } derive(Eq,
    Debug
    )

    FieldValue

    pub(all) struct FieldValue {
    key : String
    value : String
    start : Int
    end : Int
    separator : String
    } derive(Eq,
    Debug
    )

    Finding

    pub(all) struct Finding {
    id : String
    kind : PhiKind
    label : String
    start : Int
    end : Int
    text : String
    replacement : String
    rule_id : String
    confidence : Int
    } derive(Eq,
    Debug
    )

    IdentifierKind

    pub enum IdentifierKind {
    PhoneIdentifier
    EmailIdentifier
    GovernmentIdentifier
    AccountIdentifier
    DeviceIdentifier
    LocationIdentifier
    UnknownIdentifier
    } derive(Eq,
    Debug
    )

    LineColumn

    pub(all) struct LineColumn {
    line : Int
    column : Int
    } derive(Eq,
    Debug
    )

    LocaleHint

    pub(all) enum LocaleHint {
    Chinese
    English
    Mixed
    Neutral
    } derive(Eq,
    Debug
    )

    Locale hints used when selecting a rule pack. A hint never changes the input text; it only narrows the deterministic detector set.
    impl Show for LocaleHint

    MappingIndex

    pub(all) struct MappingIndex {
    original_length : Int
    redacted_length : Int
    segments : Array[MappingSegment]
    } derive(
    Debug
    )

    MappingIndex::changed_original_spans

    fn MappingIndex::changed_original_spans(self : MappingIndex) -> Array[Span]

    MappingIndex::changed_redacted_spans

    fn MappingIndex::changed_redacted_spans(self : MappingIndex) -> Array[Span]

    MappingIndex::describe

    fn MappingIndex::describe(self : MappingIndex) -> String

    MappingIndex::is_monotonic

    fn MappingIndex::is_monotonic(self : MappingIndex) -> Bool

    MappingIndex::original_line_column

    fn MappingIndex::original_line_column(self : MappingIndex, original : String, position : Int) -> LineColumn

    MappingIndex::original_range_to_redacted

    fn MappingIndex::original_range_to_redacted(self : MappingIndex, span : Span) -> Span

    MappingIndex::original_to_redacted

    fn MappingIndex::original_to_redacted(self : MappingIndex, position : Int) -> Int

    MappingIndex::redacted_line_column

    fn MappingIndex::redacted_line_column(self : MappingIndex, redacted : String, position : Int) -> LineColumn

    MappingIndex::redacted_range_to_original

    fn MappingIndex::redacted_range_to_original(self : MappingIndex, span : Span) -> Span

    MappingIndex::redacted_to_original

    fn MappingIndex::redacted_to_original(self : MappingIndex, position : Int) -> Int

    MappingIndex::segment_for_original

    fn MappingIndex::segment_for_original(self : MappingIndex, position : Int) -> MappingSegment?

    MappingIndex::segment_for_redacted

    fn MappingIndex::segment_for_redacted(self : MappingIndex, position : Int) -> MappingSegment?

    MappingSegment

    pub(all) struct MappingSegment {
    original : Span
    redacted : Span
    finding_id : String
    kind : PhiKind
    } derive(Eq,
    Debug
    )

    MatchQuality

    pub(all) struct MatchQuality {
    finding_id : String
    lexical : Int
    contextual : Int
    structural : Int
    checksum : Int
    total : Int
    band : ConfidenceBand
    } derive(Eq,
    Debug
    )

    OffsetMap

    pub(all) struct OffsetMap {
    original_start : Int
    original_end : Int
    replacement_start : Int
    replacement_end : Int
    finding_id : String
    } derive(Eq,
    Debug
    )

    PhiKind

    pub(all) enum PhiKind {
    PersonName
    IdNumber
    Phone
    Date
    Email
    Address
    MedicalRecord
    Insurance
    Organization
    Custom(String)
    } derive(Eq,
    Debug
    )

    PHI categories recognized by the built-in rules and extension points.
    impl Show for PhiKind

    PipelineConfig

    pub(all) struct PipelineConfig {
    policy : RedactionPolicy
    rules : Array[Rule]
    normalize_input : Bool
    include_keyword_diagnostics : Bool
    keep_review_findings : Bool
    } derive(Eq,
    Debug
    )

    PipelineConfig::default

    PipelineResult

    pub(all) struct PipelineResult {
    original : String
    normalized : String
    findings : Array[Finding]
    result : DeidResult
    statistics : ScanStatistics
    diagnostics : Array[Diagnostic]
    trace : Array[PipelineTrace]
    } derive(
    Debug
    )

    PipelineResult::audit

    PipelineResult::text

    fn PipelineResult::text(self : PipelineResult) -> String

    PipelineStage

    pub enum PipelineStage {
    Normalize
    Detect
    Resolve
    Apply
    Audit
    Complete
    } derive(Eq,
    Debug
    )

    PipelineTrace

    pub(all) struct PipelineTrace {
    stage : PipelineStage
    message : String
    } derive(Eq,
    Debug
    )

    PlaceholderRegistry

    pub(all) struct PlaceholderRegistry {
    values : Map[String, String]
    } derive(Eq,
    Debug
    )

    PlaceholderRegistry::contains

    fn PlaceholderRegistry::contains(self : PlaceholderRegistry, kind : PhiKind) -> Bool

    PlaceholderRegistry::default

    PlaceholderRegistry::get

    fn PlaceholderRegistry::get(self : PlaceholderRegistry, kind : PhiKind) -> String

    PlaceholderRegistry::set

    fn PlaceholderRegistry::set(self : PlaceholderRegistry, kind : PhiKind, value : String) -> Unit

    PolicyAction

    pub enum PolicyAction {
    Redact
    ReviewOnly
    Keep
    } derive(Eq,
    Debug
    )

    PolicyDecision

    pub(all) struct PolicyDecision {
    finding_id : String
    action : PolicyAction
    reason : String
    } derive(Eq,
    Debug
    )

    PrivacyClass

    pub enum PrivacyClass {
    DirectIdentifier
    QuasiIdentifier
    ContactIdentifier
    AccountIdentifier
    ContextualIdentifier
    NonIdentifier
    } derive(Compare, Eq,
    Debug
    )

    PrivacySummary

    pub(all) struct PrivacySummary {
    direct : Int
    quasi : Int
    contact : Int
    account : Int
    contextual : Int
    non_identifier : Int
    } derive(Eq,
    Debug
    )

    ProcessingManifest

    pub(all) struct ProcessingManifest {
    document_id : String
    input_checksum : String
    output_checksum : String
    rule_pack_checksum : String
    policy_name : String
    finding_count : Int
    applied_count : Int
    generated_at : String
    } derive(Eq,
    Debug
    )

    Profile

    pub(all) enum Profile {
    ChineseClinical
    EnglishClinical
    HighPrecision
    AllBuiltins
    } derive(Eq,
    Debug
    )

    ProtectedRange

    pub(all) struct ProtectedRange {
    start : Int
    end : Int
    reason : String
    } derive(Eq,
    Debug
    )

    A range that is explicitly protected from automatic replacement.

    ProtectedRange::as_span

    fn ProtectedRange::as_span(self : ProtectedRange) -> Span

    PseudonymRegistry

    pub(all) struct PseudonymRegistry {
    salt : String
    values : Map[String, String]
    } derive(Eq,
    Debug
    )

    PseudonymRegistry::checksum

    fn PseudonymRegistry::checksum(self : PseudonymRegistry) -> String

    PseudonymRegistry::new

    fn PseudonymRegistry::new(salt : String) -> PseudonymRegistry

    PseudonymRegistry::size

    fn PseudonymRegistry::size(self : PseudonymRegistry) -> Int

    PseudonymRegistry::token

    fn PseudonymRegistry::token(self : PseudonymRegistry, value : String, kind : PhiKind) -> String

    RedactionConfig

    pub(all) struct RedactionConfig {
    policy : RedactionPolicy
    salt : String
    token_prefix : String
    keep_first : Int
    keep_last : Int
    keep_whitespace : Bool
    } derive(Eq,
    Debug
    )

    RedactionConfig::default

    RedactionContract

    pub(all) struct RedactionContract {
    valid_findings : Bool
    monotonic_offsets : Bool
    newline_preserved : Bool
    output_changed : Bool
    audit_consistent : Bool
    passes : Bool
    } derive(Eq,
    Debug
    )

    RedactionPolicy

    pub(all) struct RedactionPolicy {
    name : String
    locale : LocaleHint
    action : PolicyAction
    mode : ReplacementMode
    min_confidence : Int
    protected_ranges : Array[ProtectedRange]
    allowed_kinds : Array[PhiKind]
    denied_rule_ids : Array[String]
    context_window : Int
    } derive(Eq,
    Debug
    )

    A reusable selection and masking policy for one application.

    RedactionPolicy::default

    RedactionPolicy::review

    RedactionPolicy::strict

    ReplacementMode

    pub(all) enum ReplacementMode {
    Token
    PreserveLength
    Partial
    StableHash
    } derive(Eq,
    Debug
    )

    Replacement policy used when applying findings to text.

    RetentionPolicy

    pub(all) struct RetentionPolicy {
    keep_original : Bool
    keep_audit : Bool
    keep_offsets : Bool
    redact_logs : Bool
    } derive(Eq,
    Debug
    )

    RetentionPolicy::minimal

    RetentionPolicy::safe_default

    fn RetentionPolicy::safe_default() -> RetentionPolicy

    RiskLevel

    pub(all) enum RiskLevel {
    Low
    Medium
    High
    Critical
    } derive(Compare, Eq,
    Debug
    )

    impl Show for RiskLevel

    Rule

    pub(all) struct Rule {
    id : String
    label : String
    kind : PhiKind
    pattern : String
    placeholder : String
    confidence : Int
    enabled : Bool
    contextual : Bool
    } derive(Eq,
    Debug
    )

    A rule is deliberately data-shaped so downstream users can load or generate domain rules without changing the scanning pipeline.

    RuleIssue

    pub(all) struct RuleIssue {
    rule_id : String
    message : String
    } derive(Eq,
    Debug
    )

    RuleLifecycle

    pub enum RuleLifecycle {
    Stable
    Experimental
    Deprecated
    } derive(Eq,
    Debug
    )

    RulePack

    pub(all) struct RulePack {
    name : String
    version : String
    locale : LocaleHint
    description : String
    rules : Array[Rule]
    lifecycle : RuleLifecycle
    } derive(Eq,
    Debug
    )

    RulePatch

    pub(all) struct RulePatch {
    id : String
    enabled : Bool?
    confidence : Int?
    placeholder : String?
    label : String?
    } derive(Eq,
    Debug
    )

    RuleSpec

    pub(all) struct RuleSpec {
    id : String
    label : String
    kind : PhiKind
    pattern : String
    placeholder : String
    confidence : Int
    contextual : Bool
    } derive(Eq,
    Debug
    )

    ScanStatistics

    pub(all) struct ScanStatistics {
    input_length : Int
    rule_count : Int
    candidate_count : Int
    accepted_count : Int
    rejected_count : Int
    character_count : Int
    line_count : Int
    high_risk_count : Int
    critical_count : Int
    } derive(Eq,
    Debug
    )

    SectionKind

    pub enum SectionKind {
    Demographics
    Contact
    Diagnosis
    Medication
    Laboratory
    Narrative
    Unknown
    } derive(Eq,
    Debug
    )

    SectionSummary

    pub(all) struct SectionSummary {
    title : String
    kind : SectionKind
    finding_count : Int
    risk : RiskLevel
    } derive(Eq,
    Debug
    )

    Span

    pub(all) struct Span {
    start : Int
    end : Int
    } derive(Eq,
    Debug
    )

    A bounded half-open interval in the original document.

    Span::clamp

    fn Span::clamp(self : Span, text_length : Int) -> Span

    Span::contains

    fn Span::contains(self : Span, position : Int) -> Bool

    Span::contains_span

    fn Span::contains_span(self : Span, other : Span) -> Bool

    Span::intersection

    fn Span::intersection(self : Span, other : Span) -> Span?

    Span::is_empty

    fn Span::is_empty(self : Span) -> Bool

    Span::is_valid

    fn Span::is_valid(self : Span, text_length : Int) -> Bool

    Span::length

    fn Span::length(self : Span) -> Int

    Span::overlaps

    fn Span::overlaps(self : Span, other : Span) -> Bool

    Span::shift

    fn Span::shift(self : Span, amount : Int) -> Span

    Span::touches

    fn Span::touches(self : Span, other : Span) -> Bool

    SpanRelation

    pub enum SpanRelation {
    Disjoint
    Touching
    LeftOverlap
    RightOverlap
    Contains
    ContainedBy
    Equal
    } derive(Eq,
    Debug
    )

    StreamingRedactor

    pub(all) struct StreamingRedactor {
    config : RedactionConfig
    context_window : Int
    carry : String
    closed : Bool
    } derive(
    Debug
    )

    StreamingRedactor::finish

    fn StreamingRedactor::finish(self : StreamingRedactor) -> String raise DeidError

    StreamingRedactor::new

    fn StreamingRedactor::new(config : RedactionConfig, context_window : Int) -> StreamingRedactor

    StreamingRedactor::push

    fn StreamingRedactor::push(self : StreamingRedactor, chunk : String) -> String raise DeidError

    TextDifference

    pub(all) struct TextDifference {
    start : Int
    end : Int
    original : String
    replacement : String
    } derive(Eq,
    Debug
    )

    TextToken

    pub(all) struct TextToken {
    kind : String
    text : String
    start : Int
    end : Int
    } derive(Eq,
    Debug
    )

    TextWindow

    pub(all) struct TextWindow {
    start : Int
    end : Int
    text : String
    } derive(Eq,
    Debug
    )

    account_findings

    fn account_findings(findings : Array[Finding]) -> Array[Finding]

    action_name

    fn action_name(action : PolicyAction) -> String

    add_protected_range

    fn add_protected_range(policy : RedactionPolicy, start : Int, end : Int, reason : String) -> RedactionPolicy

    address_components

    fn address_components(value : String) -> Array[String]

    all_ascii_digits

    fn all_ascii_digits(text : String) -> Bool

    all_ascii_hex

    fn all_ascii_hex(text : String) -> Bool

    all_high_confidence

    fn all_high_confidence(findings : Array[Finding], threshold : Int) -> Bool

    allow_only_kinds

    fn allow_only_kinds(policy : RedactionPolicy, kinds : Array[PhiKind]) -> RedactionPolicy

    analytics_average_confidence

    fn analytics_average_confidence(items : Array[DocumentAnalytics]) -> Float

    analytics_average_ratio

    fn analytics_average_ratio(items : Array[DocumentAnalytics]) -> Float

    analytics_kind_totals

    fn analytics_kind_totals(items : Array[DocumentAnalytics]) -> Map[String, Int]

    analytics_markdown

    fn analytics_markdown(items : Array[DocumentAnalytics]) -> String

    analytics_max_risk

    fn analytics_max_risk(items : Array[DocumentAnalytics]) -> DocumentAnalytics?

    analytics_min_risk

    fn analytics_min_risk(items : Array[DocumentAnalytics]) -> DocumentAnalytics?

    analytics_risk_total

    fn analytics_risk_total(items : Array[DocumentAnalytics]) -> Int

    analytics_summary

    fn analytics_summary(items : Array[DocumentAnalytics]) -> String

    analytics_threshold

    fn analytics_threshold(items : Array[DocumentAnalytics], risk : Int) -> Array[DocumentAnalytics]

    analytics_to_csv

    fn analytics_to_csv(items : Array[DocumentAnalytics]) -> String

    analytics_to_json

    fn analytics_to_json(items : Array[DocumentAnalytics]) -> String

    analytics_with_findings

    fn analytics_with_findings(items : Array[DocumentAnalytics]) -> Array[DocumentAnalytics]

    analytics_without_findings

    fn analytics_without_findings(items : Array[DocumentAnalytics]) -> Array[DocumentAnalytics]

    analyze_document

    fn analyze_document(id : String, input : String, result : DeidResult) -> DocumentAnalytics

    analyze_documents

    fn analyze_documents(items : Array[BatchItem], config : RedactionConfig) -> Array[DocumentAnalytics] raise DeidError

    api_surface_summary

    fn api_surface_summary() -> String

    apply_confidence_floor

    fn apply_confidence_floor(findings : Array[Finding], floor : Int) -> Array[Finding]

    apply_findings_with_mode

    fn apply_findings_with_mode(input : String, findings : Array[Finding], mode : ReplacementMode) -> (String, Array[OffsetMap])

    apply_rule_patch

    fn apply_rule_patch(item : Rule, patch : RulePatch) -> Rule

    apply_rule_patches

    fn apply_rule_patches(rules : Array[Rule], patches : Array[RulePatch]) -> Array[Rule]

    ascii_digit_value

    fn ascii_digit_value(c : Char) -> Int

    Convert an ASCII decimal character to a digit. Callers validate the input first; the fallback keeps validation functions total.

    ascii_lower

    fn ascii_lower(text : String) -> String

    ascii_upper

    fn ascii_upper(text : String) -> String

    audit_csv

    fn audit_csv(report : AuditReport) -> String

    audit_default

    fn audit_default(input : String) -> String raise DeidError

    audit_finding_ids

    fn audit_finding_ids(report : AuditReport) -> Array[String]

    audit_for_external_review

    fn audit_for_external_review(input : String, result : DeidResult) -> String

    audit_has_critical

    fn audit_has_critical(report : AuditReport) -> Bool

    audit_has_kind

    fn audit_has_kind(report : AuditReport, kind : PhiKind) -> Bool

    audit_has_rule

    fn audit_has_rule(report : AuditReport, rule_id : String) -> Bool

    audit_is_empty

    fn audit_is_empty(report : AuditReport) -> Bool

    audit_kind_count

    fn audit_kind_count(report : AuditReport, kind : PhiKind) -> Int

    audit_markdown

    fn audit_markdown(report : AuditReport) -> String

    audit_markdown_table

    fn audit_markdown_table(report : AuditReport) -> String

    audit_offset_coverage

    fn audit_offset_coverage(report : AuditReport) -> Int

    audit_plain_text

    fn audit_plain_text(report : AuditReport) -> String

    audit_replacement_delta

    fn audit_replacement_delta(report : AuditReport) -> Int

    audit_report_with_context

    fn audit_report_with_context(input : String, report : AuditReport, radius : Int) -> String

    audit_risk_count

    fn audit_risk_count(report : AuditReport, level : RiskLevel) -> Int

    audit_risk_level

    fn audit_risk_level(report : AuditReport) -> RiskLevel

    audit_rule_ids

    fn audit_rule_ids(report : AuditReport) -> Array[String]

    audit_summary

    fn audit_summary(report : AuditReport) -> String

    audit_summary_json

    fn audit_summary_json(report : AuditReport) -> String

    audit_summary_lines

    fn audit_summary_lines(report : AuditReport) -> Array[String]

    audit_to_json

    fn audit_to_json(report : AuditReport) -> String

    average_confidence

    fn average_confidence(findings : Array[Finding]) -> Float

    average_finding_length

    fn average_finding_length(findings : Array[Finding]) -> Float

    batch_audit_json

    fn batch_audit_json(outcome : BatchOutcome) -> String

    batch_consistency_issues

    fn batch_consistency_issues(outcome : BatchOutcome) -> Array[String]

    batch_contains_critical

    fn batch_contains_critical(outcome : BatchOutcome) -> Bool

    batch_diagnostics_csv

    fn batch_diagnostics_csv(outcome : BatchOutcome) -> String

    batch_failed_diagnostics

    fn batch_failed_diagnostics(outcome : BatchOutcome) -> Array[BatchDiagnostic]

    batch_findings

    fn batch_findings(results : Array[BatchResult]) -> Array[Finding]

    batch_ids

    fn batch_ids(results : Array[BatchResult]) -> Array[String]

    batch_kind_counts

    fn batch_kind_counts(results : Array[BatchResult]) -> Map[String, Int]

    batch_partition

    fn batch_partition(items : Array[BatchItem], size : Int) -> Array[Array[BatchItem]]

    batch_risk_counts

    fn batch_risk_counts(results : Array[BatchResult]) -> Map[String, Int]

    batch_success_ratio

    fn batch_success_ratio(outcome : BatchOutcome) -> Float

    batch_total_applied

    fn batch_total_applied(results : Array[BatchResult]) -> Int

    batch_total_findings

    fn batch_total_findings(results : Array[BatchResult]) -> Int

    batch_totals

    fn batch_totals(results : Array[BatchResult]) -> AuditTotals

    benchmark_case_by_name

    fn benchmark_case_by_name(name : String) -> BenchmarkCase?

    benchmark_case_names

    fn benchmark_case_names() -> Array[String]

    benchmark_case_summary

    fn benchmark_case_summary(item : BenchmarkCase) -> String

    benchmark_cases

    fn benchmark_cases() -> Array[BenchmarkCase]

    benchmark_catalog_summary

    fn benchmark_catalog_summary() -> String

    benchmark_catalog_valid

    fn benchmark_catalog_valid() -> Bool

    benchmark_findings_delta

    fn benchmark_findings_delta(item : BenchmarkCase, result : BenchmarkResult) -> Int

    benchmark_fixture

    fn benchmark_fixture() -> Array[String]

    benchmark_once

    fn benchmark_once(name : String, documents : Array[String], repetitions : Int, config : RedactionConfig) -> BenchmarkResult raise DeidError

    benchmark_results_json

    fn benchmark_results_json(results : Array[BenchmarkResult]) -> String

    benchmark_results_text

    fn benchmark_results_text(results : Array[BenchmarkResult]) -> String

    benchmark_summary

    fn benchmark_summary(result : BenchmarkResult) -> String

    benchmark_to_json

    fn benchmark_to_json(result : BenchmarkResult) -> String

    boundary_after

    fn boundary_after(text : String, position : Int) -> Bool

    boundary_before

    fn boundary_before(text : String, position : Int) -> Bool

    build_mapping_index

    fn build_mapping_index(input_length : Int, output_length : Int, findings : Array[Finding], offsets : Array[OffsetMap]) -> MappingIndex

    builtin_rules

    fn builtin_rules() -> Array[Rule]

    Built-in rules cover common PHI in Chinese and English clinical notes. They intentionally favor precision over exhaustive recall.

    capabilities

    fn capabilities() -> Map[String, Bool]

    capability_lines

    fn capability_lines() -> Array[String]

    carry_for_boundary

    fn carry_for_boundary(text : String, width : Int) -> String

    char_at_or

    fn char_at_or(text : String, position : Int, fallback : Char) -> Char

    char_count

    fn char_count(text : String) -> Int

    char_histogram

    fn char_histogram(text : String) -> Map[String, Int]

    char_index_to_code_unit

    fn char_index_to_code_unit(text : String, index : Int) -> Int

    char_span_to_code_units

    fn char_span_to_code_units(text : String, span : Span) -> Span

    chars_to_string

    fn chars_to_string(chars : Array[Char]) -> String

    Build a string from a character array without relying on a particular backend's string representation.

    checksum_mod11

    fn checksum_mod11(values : Array[Int], weights : Array[Int]) -> Int?

    checksum_score

    fn checksum_score(finding : Finding) -> Int

    chinese_rule_pack

    fn chinese_rule_pack() -> RulePack

    chunk_policy_summary

    fn chunk_policy_summary(policy : ChunkPolicy) -> String

    chunk_results_findings

    fn chunk_results_findings(results : Array[ChunkResult]) -> Array[Finding]

    chunk_results_text

    fn chunk_results_text(results : Array[ChunkResult], separator : String) -> String

    cjk_tokens

    fn cjk_tokens(text : String) -> Array[TextToken]

    classify_section

    fn classify_section(title : String) -> SectionKind

    code_unit_count

    fn code_unit_count(text : String) -> Int

    code_unit_offsets

    fn code_unit_offsets(text : String) -> Array[Int]

    code_unit_span_to_chars

    fn code_unit_span_to_chars(text : String, span : Span) -> Span

    code_unit_to_char_index

    fn code_unit_to_char_index(text : String, offset : Int) -> Int

    collapse_spaces

    fn collapse_spaces(text : String) -> String

    compare_analytics

    fn compare_analytics(left : DocumentAnalytics, right : DocumentAnalytics) -> AnalyticsComparison

    compare_results

    fn compare_results(left : DeidResult, right : DeidResult) -> Map[String, Bool]

    compliance_boundary_notice

    fn compliance_boundary_notice() -> String

    compose_rules

    fn compose_rules(base : Array[Rule], additions : Array[Rule]) -> Array[Rule]

    comprehensive_rules

    fn comprehensive_rules() -> Array[Rule]

    confidence_band

    fn confidence_band(value : Int) -> ConfidenceBand

    confidence_band_name

    fn confidence_band_name(band : ConfidenceBand) -> String

    confidence_histogram

    fn confidence_histogram(findings : Array[Finding]) -> Map[String, Int]

    config_with_policy

    fn config_with_policy(policy : RedactionPolicy) -> RedactionConfig

    config_with_salt

    fn config_with_salt(salt : String) -> RedactionConfig

    contact_findings

    fn contact_findings(findings : Array[Finding]) -> Array[Finding]

    contains_ascii_letter

    fn contains_ascii_letter(text : String) -> Bool

    contains_cjk

    fn contains_cjk(text : String) -> Bool

    contains_direct_identifier

    fn contains_direct_identifier(findings : Array[Finding]) -> Bool

    contextual_rule

    fn contextual_rule(id : String, label : String, kind : PhiKind, pattern : String, placeholder : String, confidence : Int) -> Rule

    contextual_score

    fn contextual_score(input : String, finding : Finding, radius : Int) -> Int

    contract_to_json

    fn contract_to_json(contract : RedactionContract) -> String

    contract_to_text

    fn contract_to_text(contract : RedactionContract) -> String

    count_char

    fn count_char(text : String, target : Char) -> Int

    count_substring

    fn count_substring(text : String, needle : String) -> Int

    counts_as_sorted_lines

    fn counts_as_sorted_lines(counts : Map[String, Int]) -> Array[String]

    cumulative_offset_delta

    fn cumulative_offset_delta(offsets : Array[OffsetMap]) -> Array[Int]

    custom_rule

    fn custom_rule(id : String, label : String, kind : PhiKind, pattern : String, placeholder : String, confidence : Int) -> Rule

    data_inventory

    fn data_inventory(input : String, result : DeidResult) -> Map[String, Int]

    data_inventory_text

    fn data_inventory_text(input : String, result : DeidResult) -> String

    date_digits

    fn date_digits(value : String) -> String

    date_is_future

    fn date_is_future(value : String, current_year : Int) -> Bool

    days_in_month

    fn days_in_month(year : Int, month : Int) -> Int

    decimal_value

    fn decimal_value(value : String) -> Int

    deduplicate_batch

    fn deduplicate_batch(items : Array[BatchItem]) -> Array[BatchItem]

    deduplicate_rules

    fn deduplicate_rules(rules : Array[Rule]) -> Array[Rule]

    default_placeholders

    fn default_placeholders() -> PlaceholderRegistry

    default_rule_pack

    fn default_rule_pack() -> RulePack

    deny_rules

    fn deny_rules(policy : RedactionPolicy, rule_ids : Array[String]) -> RedactionPolicy

    diagnose_findings

    fn diagnose_findings(input : String, findings : Array[Finding]) -> Array[Diagnostic]

    diagnose_policy

    fn diagnose_policy(policy : RedactionPolicy, input_length : Int) -> Array[Diagnostic]

    diagnose_rule

    fn diagnose_rule(rule : Rule) -> Array[Diagnostic]

    diagnose_rules

    fn diagnose_rules(rules : Array[Rule]) -> Array[Diagnostic]

    diagnostic_count_by_severity

    fn diagnostic_count_by_severity(items : Array[Diagnostic]) -> Map[String, Int]

    diagnostics_have_errors

    fn diagnostics_have_errors(items : Array[Diagnostic]) -> Bool

    diagnostics_summary

    fn diagnostics_summary(items : Array[Diagnostic]) -> String

    diagnostics_to_json

    fn diagnostics_to_json(items : Array[Diagnostic]) -> String

    diagnostics_to_text

    fn diagnostics_to_text(items : Array[Diagnostic]) -> String

    differences_to_json

    fn differences_to_json(differences : Array[TextDifference]) -> String

    differences_to_markdown

    fn differences_to_markdown(differences : Array[TextDifference]) -> String

    direct_findings

    fn direct_findings(findings : Array[Finding]) -> Array[Finding]

    disable_rules_by_kind

    fn disable_rules_by_kind(rules : Array[Rule], kind : PhiKind) -> Array[Rule]

    disabled_rule_ids

    fn disabled_rule_ids(rules : Array[Rule]) -> Array[String]

    display_width

    fn display_width(text : String) -> Int

    document_diagnostics

    fn document_diagnostics(input : String, policy : RedactionPolicy, rules : Array[Rule]) -> Array[Diagnostic] raise DeidError

    email_domain

    fn email_domain(value : String) -> String

    email_local_part

    fn email_local_part(value : String) -> String

    empty_result

    fn empty_result(input : String) -> DeidResult

    enable_rules_above

    fn enable_rules_above(rules : Array[Rule], confidence : Int) -> Array[Rule]

    enabled_rules

    fn enabled_rules(rules : Array[Rule]) -> Array[Rule]

    ends_with_word

    fn ends_with_word(text : String, suffix : String) -> Bool

    english_rule_pack

    fn english_rule_pack() -> RulePack

    entities_for_kind

    fn entities_for_kind(batch : EntityBatch, kind : PhiKind) -> Array[EntityInput]

    entities_for_source

    fn entities_for_source(batch : EntityBatch, source : String) -> Array[EntityInput]

    entity_batch

    fn entity_batch(source : String, entities : Array[EntityInput]) -> EntityBatch

    entity_batch_from_tsv

    fn entity_batch_from_tsv(text : String, source : String) -> EntityBatch

    entity_batch_is_clean

    fn entity_batch_is_clean(input : String, batch : EntityBatch) -> Bool

    entity_batch_overlap_count

    fn entity_batch_overlap_count(batch : EntityBatch) -> Int

    entity_batch_summary

    fn entity_batch_summary(batch : EntityBatch) -> String

    entity_batch_to_external

    fn entity_batch_to_external(batch : EntityBatch) -> Array[ExternalEntity]

    entity_batch_to_tsv

    fn entity_batch_to_tsv(batch : EntityBatch) -> String

    entity_confidence_average

    fn entity_confidence_average(batch : EntityBatch) -> Float

    entity_input

    fn entity_input(label~ : String, kind~ : PhiKind, start~ : Int, end~ : Int, confidence~ : Int, source~ : String) -> EntityInput

    entity_kind_counts

    fn entity_kind_counts(batch : EntityBatch) -> Map[String, Int]

    entity_source_counts

    fn entity_source_counts(batch : EntityBatch) -> Map[String, Int]

    entity_spans

    fn entity_spans(batch : EntityBatch) -> Array[Span]

    evaluate_cases

    fn evaluate_cases(cases : Array[EvaluationCase], rules? : Array[Rule]) -> EvaluationResult raise DeidError

    evaluate_one_case

    fn evaluate_one_case(case : EvaluationCase, predicted : Array[Finding]) -> EvaluationResult

    evaluate_synthetic_cases

    fn evaluate_synthetic_cases() -> EvaluationResult raise DeidError

    evaluation_summary

    fn evaluation_summary(result : EvaluationResult) -> String

    evaluation_to_json

    fn evaluation_to_json(result : EvaluationResult) -> String

    exact_span_match

    fn exact_span_match(left : Span, right : Span) -> Bool

    explain_risk

    fn explain_risk(kind : PhiKind) -> String

    explain_text

    fn explain_text(input : String, config : RedactionConfig) -> String raise DeidError

    extended_rules

    fn extended_rules() -> Array[Rule]

    Additional deterministic rules for outpatient notes, laboratory records, insurance forms, and mixed Chinese-English exports.

    external_entities_csv

    fn external_entities_csv(entities : Array[ExternalEntity]) -> String

    external_entity

    fn external_entity(item : EntityInput) -> ExternalEntity

    f1_score

    fn f1_score(result : EvaluationResult) -> Float

    field_keys

    fn field_keys(fields : Array[FieldValue]) -> Array[String]

    field_map

    fn field_map(fields : Array[FieldValue]) -> Map[String, String]

    field_name_counts

    fn field_name_counts(fields : Array[FieldValue]) -> Map[String, Int]

    field_report

    fn field_report(text : String) -> String

    field_values

    fn field_values(fields : Array[FieldValue], key : String) -> Array[String]

    field_values_length

    fn field_values_length(fields : Array[FieldValue]) -> Int

    fields_containing_phi

    fn fields_containing_phi(fields : Array[FieldValue], config : RedactionConfig) -> Array[String] raise DeidError

    fields_named

    fn fields_named(fields : Array[FieldValue], key : String) -> Array[FieldValue]

    filter_findings_by_confidence

    fn filter_findings_by_confidence(findings : Array[Finding], threshold : Int) -> Array[Finding]

    filter_findings_by_kind

    fn filter_findings_by_kind(findings : Array[Finding], kinds : Array[PhiKind]) -> Array[Finding]

    filter_protected_findings

    fn filter_protected_findings(findings : Array[Finding], protected_ranges : Array[ProtectedRange]) -> Array[Finding]

    finding_context

    fn finding_context(input : String, finding : Finding, radius : Int) -> TextWindow

    finding_density

    fn finding_density(findings : Array[Finding], input_length : Int) -> Float

    finding_ids

    fn finding_ids(findings : Array[Finding]) -> Array[String]

    finding_intersects_any

    fn finding_intersects_any(finding : Finding, spans : Array[Span]) -> Bool

    finding_is_valid

    fn finding_is_valid(finding : Finding, input_length : Int) -> Bool

    finding_kind_counts

    fn finding_kind_counts(findings : Array[Finding]) -> Map[String, Int]

    finding_length

    fn finding_length(finding : Finding) -> Int

    finding_replacements

    fn finding_replacements(findings : Array[Finding]) -> Array[String]

    finding_risk_counts

    fn finding_risk_counts(findings : Array[Finding]) -> Map[String, Int]

    finding_rule_counts

    fn finding_rule_counts(findings : Array[Finding]) -> Map[String, Int]

    finding_score

    fn finding_score(finding : Finding) -> Int

    finding_span

    fn finding_span(finding : Finding) -> Span

    finding_texts

    fn finding_texts(findings : Array[Finding]) -> Array[String]

    finding_to_json

    fn finding_to_json(finding : Finding) -> String

    findings_csv

    fn findings_csv(findings : Array[Finding]) -> String

    findings_for_kind

    fn findings_for_kind(findings : Array[Finding], kind : PhiKind) -> Array[Finding]

    findings_for_rule

    fn findings_for_rule(findings : Array[Finding], rule_id : String) -> Array[Finding]

    findings_in_span

    fn findings_in_span(findings : Array[Finding], window : Span) -> Array[Finding]

    findings_overlapping_span

    fn findings_overlapping_span(findings : Array[Finding], window : Span) -> Array[Finding]

    findings_to_spans

    fn findings_to_spans(findings : Array[Finding]) -> Array[Span]

    findings_with_mode

    fn findings_with_mode(findings : Array[Finding], mode : ReplacementMode) -> Array[Finding]

    findings_with_placeholders

    fn findings_with_placeholders(findings : Array[Finding], registry : PlaceholderRegistry) -> Array[Finding]

    first_char

    fn first_char(text : String) -> Char?

    first_field

    fn first_field(fields : Array[FieldValue], key : String) -> FieldValue?

    first_finding

    fn first_finding(findings : Array[Finding]) -> Finding?

    has_sensitive_keyword

    fn has_sensitive_keyword(text : String) -> Bool

    high_precision_rule_pack

    fn high_precision_rule_pack() -> RulePack

    high_risk_findings

    fn high_risk_findings(findings : Array[Finding]) -> Array[Finding]

    highest_risk

    fn highest_risk(findings : Array[Finding]) -> RiskLevel

    identifier_class

    fn identifier_class(value : String) -> String

    identifier_entropy_hint

    fn identifier_entropy_hint(value : String) -> Int

    identifier_is_reversible

    fn identifier_is_reversible(value : String, kind : IdentifierKind) -> Bool

    identifier_kind_name

    fn identifier_kind_name(kind : IdentifierKind) -> String

    identifier_kind_values

    fn identifier_kind_values() -> Array[IdentifierKind]

    identifier_quality

    fn identifier_quality(value : String) -> Int

    inverse_position_through_offsets

    fn inverse_position_through_offsets(offsets : Array[OffsetMap], position : Int) -> Int

    is_ascii_alphanumeric_char

    fn is_ascii_alphanumeric_char(c : Char) -> Bool

    is_ascii_char

    fn is_ascii_char(c : Char) -> Bool

    is_ascii_digit_char

    fn is_ascii_digit_char(c : Char) -> Bool

    is_ascii_letter_char

    fn is_ascii_letter_char(c : Char) -> Bool

    is_ascii_punctuation_char

    fn is_ascii_punctuation_char(c : Char) -> Bool

    is_blank_char

    fn is_blank_char(c : Char) -> Bool

    is_cjk_char

    fn is_cjk_char(c : Char) -> Bool

    is_hex_char

    fn is_hex_char(c : Char) -> Bool

    is_leap_year

    fn is_leap_year(year : Int) -> Bool

    is_surrogate_code_unit

    fn is_surrogate_code_unit(unit : UInt16) -> Bool

    is_word_boundary

    fn is_word_boundary(text : String, start : Int, end : Int) -> Bool

    is_word_char

    fn is_word_char(c : Char) -> Bool

    json_escape

    fn json_escape(text : String) -> String

    json_span

    fn json_span(span : Span) -> String

    keep_ascii_letters_and_digits

    fn keep_ascii_letters_and_digits(text : String) -> String

    keep_digits

    fn keep_digits(text : String) -> String

    keyword_findings

    fn keyword_findings(text : String) -> Array[Finding]

    kind_coverage

    fn kind_coverage(findings : Array[Finding], expected : Array[PhiKind]) -> Float

    labeled_value_findings

    fn labeled_value_findings(text : String) -> Array[Finding] raise DeidError

    last_char

    fn last_char(text : String) -> Char?

    last_finding

    fn last_finding(findings : Array[Finding]) -> Finding?

    length_histogram

    fn length_histogram(findings : Array[Finding]) -> Map[String, Int]

    lexical_score

    fn lexical_score(finding : Finding) -> Int

    line_column

    fn line_column(text : String, offset : Int) -> LineColumn

    line_count

    fn line_count(text : String) -> Int

    line_findings

    fn line_findings(text : String) -> Map[Int, Array[Finding]] raise DeidError

    literal_findings

    fn literal_findings(text : String, needles : Array[String], kind : PhiKind, label : String, rule_id : String, confidence : Int) -> Array[Finding]

    literal_occurrences

    fn literal_occurrences(text : String, needles : Array[String]) -> Array[Span]

    locale_name

    fn locale_name(locale : LocaleHint) -> String

    long_synthetic_note

    fn long_synthetic_note(repetitions : Int) -> String

    longest_common_prefix

    fn longest_common_prefix(left : String, right : String) -> String

    longest_token

    fn longest_token(tokens : Array[TextToken]) -> TextToken?

    make_manifest

    fn make_manifest(document_id : String, input : String, result : DeidResult, pack : RulePack, generated_at : String) -> ProcessingManifest

    manifest_checksum

    fn manifest_checksum(manifest : ProcessingManifest) -> String

    manifest_csv

    fn manifest_csv(manifests : Array[ProcessingManifest]) -> String

    manifest_is_consistent

    fn manifest_is_consistent(manifest : ProcessingManifest, result : DeidResult) -> Bool

    manifest_to_json

    fn manifest_to_json(manifest : ProcessingManifest) -> String

    map_position_through_offsets

    fn map_position_through_offsets(offsets : Array[OffsetMap], position : Int) -> Int

    map_to_json

    fn map_to_json(values : Map[String, Int]) -> String

    mapping_from_result

    fn mapping_from_result(result : DeidResult) -> MappingIndex

    mapping_segment

    fn mapping_segment(finding : Finding, offset : OffsetMap) -> MappingSegment

    mask_identifier

    fn mask_identifier(value : String, kind : IdentifierKind) -> String

    mask_value

    fn mask_value(value : String, mode : ReplacementMode) -> String

    match_qualities

    fn match_qualities(input : String, findings : Array[Finding], radius : Int) -> Array[MatchQuality]

    match_quality

    fn match_quality(input : String, finding : Finding, radius : Int) -> MatchQuality

    match_quality_report

    fn match_quality_report(input : String, findings : Array[Finding], radius : Int) -> String

    maximum_confidence

    fn maximum_confidence(findings : Array[Finding]) -> Int

    merge_adjacent_tokens

    fn merge_adjacent_tokens(tokens : Array[TextToken]) -> Array[TextToken]

    merge_audit_totals

    fn merge_audit_totals(left : AuditTotals, right : AuditTotals) -> AuditTotals

    merge_batch_outcomes

    fn merge_batch_outcomes(left : BatchOutcome, right : BatchOutcome) -> BatchOutcome

    merge_entity_batch

    fn merge_entity_batch(input : String, findings : Array[Finding], batch : EntityBatch, mode : ReplacementMode) -> Array[Finding]

    merge_external_entities

    fn merge_external_entities(input : String, findings : Array[Finding], entities : Array[ExternalEntity], mode? : ReplacementMode) -> Array[Finding]

    merge_rule_packs

    fn merge_rule_packs(left : RulePack, right : RulePack) -> RulePack

    merge_spans

    fn merge_spans(spans : Array[Span]) -> Array[Span]

    minimum_confidence

    fn minimum_confidence(findings : Array[Finding]) -> Int

    mode_name

    fn mode_name(mode : ReplacementMode) -> String

    modes_preview

    fn modes_preview(input : String) -> Map[String, String] raise DeidError

    name_initials

    fn name_initials(value : String) -> String

    nearest_finding

    fn nearest_finding(findings : Array[Finding], position : Int) -> Finding?

    nearest_safe_boundary

    fn nearest_safe_boundary(text : String, offset : Int) -> Int

    neighboring_tokens

    fn neighboring_tokens(tokens : Array[TextToken], index : Int, radius : Int) -> Array[TextToken]

    ner_merge_and_redact

    fn ner_merge_and_redact(input : String, batch : EntityBatch, mode : ReplacementMode) -> DeidResult

    non_space_tokens

    fn non_space_tokens(tokens : Array[TextToken]) -> Array[TextToken]

    normalize_address

    fn normalize_address(value : String) -> String

    normalize_date

    fn normalize_date(value : String) -> String?

    normalize_email

    fn normalize_email(value : String) -> String

    normalize_entity_batch

    fn normalize_entity_batch(input : String, batch : EntityBatch) -> EntityBatch

    normalize_for_matching

    fn normalize_for_matching(text : String) -> String

    normalize_identifier

    fn normalize_identifier(value : String, kind : IdentifierKind) -> String

    normalize_newlines

    fn normalize_newlines(text : String) -> String

    normalize_phone

    fn normalize_phone(value : String) -> String

    normalize_punctuation

    fn normalize_punctuation(text : String) -> String

    normalize_rule_confidence

    fn normalize_rule_confidence(item : Rule) -> Rule

    normalize_rules

    fn normalize_rules(rules : Array[Rule]) -> Array[Rule]

    normalize_with_offset_notice

    fn normalize_with_offset_notice(text : String) -> (String, Bool)

    normalized_identifier

    fn normalized_identifier(value : String) -> String

    number_tokens

    fn number_tokens(text : String) -> Array[TextToken]

    numeric_prefix

    fn numeric_prefix(text : String) -> String

    numeric_suffix

    fn numeric_suffix(text : String) -> String

    offset_delta

    fn offset_delta(offset : OffsetMap) -> Int

    offset_to_json

    fn offset_to_json(offset : OffsetMap) -> String

    offsets_are_monotonic

    fn offsets_are_monotonic(offsets : Array[OffsetMap]) -> Bool

    output_change_ratio

    fn output_change_ratio(result : DeidResult) -> Float

    output_contains_original_identifier

    fn output_contains_original_identifier(result : DeidResult) -> Bool

    output_contract_issues

    fn output_contract_issues(input : String, result : DeidResult) -> Array[String]

    output_contract_passes

    fn output_contract_passes(input : String, result : DeidResult) -> Bool

    output_is_redacted

    fn output_is_redacted(result : DeidResult) -> Bool

    overlap_pairs

    fn overlap_pairs(findings : Array[Finding]) -> Array[(String, String)]

    overlap_span_match

    fn overlap_span_match(left : Span, right : Span) -> Bool

    pack_checksum

    fn pack_checksum(pack : RulePack) -> String

    pack_disable_rule

    fn pack_disable_rule(pack : RulePack, id : String) -> RulePack

    pack_disabled_rules

    fn pack_disabled_rules(pack : RulePack) -> Array[Rule]

    pack_enable_rule

    fn pack_enable_rule(pack : RulePack, id : String) -> RulePack

    pack_enabled_rules

    fn pack_enabled_rules(pack : RulePack) -> Array[Rule]

    pack_filter_confidence

    fn pack_filter_confidence(pack : RulePack, minimum : Int) -> RulePack

    pack_filter_kind

    fn pack_filter_kind(pack : RulePack, kind : PhiKind) -> RulePack

    pack_has_rule

    fn pack_has_rule(pack : RulePack, id : String) -> Bool

    pack_is_valid

    fn pack_is_valid(pack : RulePack) -> Bool

    pack_replace_rule

    fn pack_replace_rule(pack : RulePack, replacement : Rule) -> RulePack

    pack_round_trip_text

    fn pack_round_trip_text(pack : RulePack) -> Bool

    pack_rule

    fn pack_rule(pack : RulePack, id : String) -> Rule?

    pack_rule_ids

    fn pack_rule_ids(pack : RulePack) -> Array[String]

    pack_summary

    fn pack_summary(pack : RulePack) -> String

    pack_to_text

    fn pack_to_text(pack : RulePack) -> String

    pack_validate

    fn pack_validate(pack : RulePack) -> Array[RuleIssue]

    pack_with_lifecycle

    fn pack_with_lifecycle(pack : RulePack, lifecycle : RuleLifecycle) -> RulePack

    package_capability_report

    fn package_capability_report() -> String

    package_name

    fn package_name() -> String

    packs_have_disjoint_ids

    fn packs_have_disjoint_ids(left : RulePack, right : RulePack) -> Bool

    pad_left

    fn pad_left(text : String, width : Int, fill : Char) -> String

    pad_right

    fn pad_right(text : String, width : Int, fill : Char) -> String

    parse_compact_date

    fn parse_compact_date(value : String) -> (Int, Int, Int)?

    parse_delimited_row

    fn parse_delimited_row(text : String, delimiter : Char) -> Array[FieldValue]

    parse_field_line

    fn parse_field_line(line : String, offset : Int) -> FieldValue?

    parse_fields

    fn parse_fields(text : String) -> Array[FieldValue]

    partial_options

    fn partial_options(min_confidence? : Int) -> DeidOptions

    phi_kind_name

    fn phi_kind_name(kind : PhiKind) -> String

    phone_region_hint

    fn phone_region_hint(value : String) -> String

    pipeline_findings

    fn pipeline_findings(result : PipelineResult) -> Array[Finding]

    pipeline_for_profile

    fn pipeline_for_profile(input : String, profile : Profile, mode : ReplacementMode) -> PipelineResult raise DeidError

    pipeline_has_errors

    fn pipeline_has_errors(result : PipelineResult) -> Bool

    pipeline_is_safe

    fn pipeline_is_safe(result : PipelineResult) -> Bool

    pipeline_replay

    fn pipeline_replay(input : String, result : PipelineResult) -> Bool raise DeidError

    pipeline_stage_name

    fn pipeline_stage_name(stage : PipelineStage) -> String

    pipeline_summary

    fn pipeline_summary(result : PipelineResult) -> String

    pipeline_to_json

    fn pipeline_to_json(result : PipelineResult) -> String

    pipeline_trace_checksum

    fn pipeline_trace_checksum(result : PipelineResult) -> String

    pipeline_trace_text

    fn pipeline_trace_text(trace : Array[PipelineTrace]) -> String

    pipeline_with_policy

    fn pipeline_with_policy(input : String, policy : RedactionPolicy) -> PipelineResult raise DeidError

    policy_allows_kind

    fn policy_allows_kind(policy : RedactionPolicy, kind : PhiKind) -> Bool

    policy_blocks_rule

    fn policy_blocks_rule(policy : RedactionPolicy, rule_id : String) -> Bool

    policy_decisions

    fn policy_decisions(findings : Array[Finding], policy : RedactionPolicy) -> Array[PolicyDecision]

    policy_decisions_to_csv

    fn policy_decisions_to_csv(decisions : Array[PolicyDecision]) -> String

    policy_filter_findings

    fn policy_filter_findings(findings : Array[Finding], policy : RedactionPolicy) -> Array[Finding]

    policy_protects

    fn policy_protects(policy : RedactionPolicy, finding : Finding) -> Bool

    policy_summary

    fn policy_summary(policy : RedactionPolicy) -> String

    precision

    fn precision(result : EvaluationResult) -> Float

    preserve_length_options

    fn preserve_length_options(min_confidence? : Int) -> DeidOptions

    preview_redaction

    fn preview_redaction(input : String, config : RedactionConfig) -> Array[Finding] raise DeidError

    preview_text

    fn preview_text(input : String, config : RedactionConfig) -> String raise DeidError

    privacy_class

    fn privacy_class(kind : PhiKind) -> PrivacyClass

    privacy_class_counts

    fn privacy_class_counts(findings : Array[Finding]) -> Map[String, Int]

    privacy_class_name

    fn privacy_class_name(class : PrivacyClass) -> String

    privacy_summary

    fn privacy_summary(findings : Array[Finding]) -> PrivacySummary

    privacy_summary_to_map

    fn privacy_summary_to_map(summary : PrivacySummary) -> Map[String, Int]

    probable_address

    fn probable_address(value : String) -> Bool

    probable_chinese_name

    fn probable_chinese_name(value : String) -> Bool

    probable_english_name

    fn probable_english_name(value : String) -> Bool

    profile_redaction

    fn profile_redaction(input : String, profile : Profile, mode : ReplacementMode) -> DeidResult raise DeidError

    profile_rules

    fn profile_rules(profile : Profile) -> Array[Rule]

    protected_range

    fn protected_range(start~ : Int, end~ : Int, reason~ : String) -> ProtectedRange

    pseudonym_for

    fn pseudonym_for(value : String, kind : IdentifierKind, salt : String) -> String

    pseudonym_map

    fn pseudonym_map(values : Array[String], kind : IdentifierKind, salt : String) -> Map[String, String]

    punctuation_tokens

    fn punctuation_tokens(text : String) -> Array[TextToken]

    quality_adjust_confidence

    fn quality_adjust_confidence(input : String, finding : Finding, radius : Int) -> Finding

    quality_adjust_findings

    fn quality_adjust_findings(input : String, findings : Array[Finding], radius : Int) -> Array[Finding]

    quality_average

    fn quality_average(qualities : Array[MatchQuality]) -> Float

    quality_by_finding

    fn quality_by_finding(qualities : Array[MatchQuality]) -> Map[String, Int]

    quality_by_kind

    fn quality_by_kind(input : String, findings : Array[Finding], radius : Int) -> Map[String, Float]

    quality_consistency_issues

    fn quality_consistency_issues(input : String, findings : Array[Finding]) -> Array[String]

    quality_filter_findings

    fn quality_filter_findings(input : String, findings : Array[Finding], threshold : Int, radius : Int) -> Array[Finding]

    quality_is_consistent

    fn quality_is_consistent(input : String, finding : Finding) -> Bool

    quality_minimum

    fn quality_minimum(qualities : Array[MatchQuality]) -> Int

    quality_report

    fn quality_report(input : String, result : DeidResult) -> String

    quasi_findings

    fn quasi_findings(findings : Array[Finding]) -> Array[Finding]

    quote_for_log

    fn quote_for_log(text : String) -> String

    recall

    fn recall(result : EvaluationResult) -> Float

    redact

    fn redact(input : String, rules? : Array[Rule], options? : DeidOptions) -> DeidResult raise DeidError

    redact_and_audit_csv

    fn redact_and_audit_csv(input : String, config : RedactionConfig) -> String raise DeidError

    redact_and_audit_json

    fn redact_and_audit_json(input : String, config : RedactionConfig) -> String raise DeidError

    redact_and_audit_markdown

    fn redact_and_audit_markdown(input : String, config : RedactionConfig) -> String raise DeidError

    redact_batch

    fn redact_batch(items : Array[BatchItem], rules? : Array[Rule], options? : DeidOptions) -> Array[BatchResult] raise DeidError

    redact_batch_with_config

    fn redact_batch_with_config(items : Array[BatchItem], batch_config : BatchConfig, rules? : Array[Rule]) -> BatchOutcome raise DeidError

    redact_chinese_note

    fn redact_chinese_note(input : String) -> DeidResult raise DeidError

    redact_chunk_results

    fn redact_chunk_results(items : Array[BatchItem], config : RedactionConfig) -> Array[ChunkResult] raise DeidError

    redact_chunks

    fn redact_chunks(chunks : Array[String], policy : ChunkPolicy) -> String raise DeidError

    redact_clinical_note

    fn redact_clinical_note(input : String) -> DeidResult raise DeidError

    redact_csv_row

    fn redact_csv_row(input : String, config : RedactionConfig) -> String raise DeidError

    redact_default

    fn redact_default(input : String) -> DeidResult raise DeidError

    redact_delimited_row

    fn redact_delimited_row(text : String, delimiter : Char, config : RedactionConfig) -> String raise DeidError

    redact_document_sections

    fn redact_document_sections(input : String, config : RedactionConfig) -> String raise DeidError

    redact_english_note

    fn redact_english_note(input : String) -> DeidResult raise DeidError

    redact_except_kinds

    fn redact_except_kinds(input : String, excluded : Array[PhiKind], mode : ReplacementMode) -> DeidResult raise DeidError

    redact_field_values

    fn redact_field_values(fields : Array[FieldValue], config : RedactionConfig) -> Array[FieldValue] raise DeidError

    redact_fields

    fn redact_fields(text : String, config : RedactionConfig) -> String raise DeidError

    redact_high_precision

    fn redact_high_precision(input : String) -> DeidResult raise DeidError

    redact_in_fixed_chunks

    fn redact_in_fixed_chunks(input : String, width : Int, config : RedactionConfig) -> String raise DeidError

    redact_in_lines

    fn redact_in_lines(input : String, config : RedactionConfig) -> String raise DeidError

    redact_key_value_document

    fn redact_key_value_document(input : String, config : RedactionConfig) -> String raise DeidError

    redact_lines

    fn redact_lines(text : String, config : RedactionConfig) -> Array[String] raise DeidError

    redact_lines_joined

    fn redact_lines_joined(text : String, config : RedactionConfig, separator : String) -> String raise DeidError

    redact_named_fields

    fn redact_named_fields(text : String, names : Array[String], config : RedactionConfig) -> String raise DeidError

    redact_only_kinds

    fn redact_only_kinds(input : String, kinds : Array[PhiKind], mode : ReplacementMode) -> DeidResult raise DeidError

    redact_prefix

    fn redact_prefix(input : String, length : Int, config : RedactionConfig) -> DeidResult raise DeidError

    redact_range

    fn redact_range(input : String, range : Span, config : RedactionConfig) -> DeidResult raise DeidError

    redact_sections

    fn redact_sections(text : String, config : RedactionConfig) -> String raise DeidError

    redact_strict_clinical_note

    fn redact_strict_clinical_note(input : String) -> DeidResult raise DeidError

    redact_suffix

    fn redact_suffix(input : String, length : Int, config : RedactionConfig) -> DeidResult raise DeidError

    redact_texts

    fn redact_texts(texts : Array[String], config : RedactionConfig) -> Array[String] raise DeidError

    redact_token_candidates

    fn redact_token_candidates(text : String, kind : PhiKind, config : RedactionConfig) -> String

    redact_tsv_row

    fn redact_tsv_row(input : String, config : RedactionConfig) -> String raise DeidError

    redact_unicode_safe

    fn redact_unicode_safe(input : String, config : RedactionConfig) -> DeidResult raise DeidError

    redact_until_stable

    fn redact_until_stable(input : String, config : RedactionConfig, maximum_rounds : Int) -> DeidResult raise DeidError

    redact_windowed

    fn redact_windowed(input : String, radius : Int, config : RedactionConfig) -> DeidResult raise DeidError

    redact_with_allowlist

    fn redact_with_allowlist(input : String, protected_spans : Array[Span], config : RedactionConfig) -> DeidResult raise DeidError

    redact_with_config

    fn redact_with_config(input : String, config : RedactionConfig, rules? : Array[Rule]) -> DeidResult raise DeidError

    redact_with_deny_rules

    fn redact_with_deny_rules(input : String, denied_rule_ids : Array[String], config : RedactionConfig) -> DeidResult raise DeidError

    redact_with_kind_prefixes

    fn redact_with_kind_prefixes(input : String, prefix : String) -> DeidResult raise DeidError

    redact_with_manifest

    fn redact_with_manifest(document_id : String, input : String, config : RedactionConfig, generated_at : String) -> (DeidResult, ProcessingManifest) raise DeidError

    redact_with_placeholders

    fn redact_with_placeholders(input : String, registry : PlaceholderRegistry) -> DeidResult raise DeidError

    redact_with_policy

    fn redact_with_policy(input : String, policy : RedactionPolicy, rules? : Array[Rule]) -> DeidResult raise DeidError

    redact_with_profile

    fn redact_with_profile(input : String, profile : Profile, mode : ReplacementMode) -> DeidResult raise DeidError

    redact_with_protected_fields

    fn redact_with_protected_fields(input : String, protected_fields : Array[String], config : RedactionConfig) -> String raise DeidError

    redact_with_pseudonyms

    fn redact_with_pseudonyms(input : String, salt : String) -> DeidResult raise DeidError

    redact_with_salt

    fn redact_with_salt(input : String, salt : String, rules? : Array[Rule]) -> DeidResult raise DeidError

    redactable_char_count

    fn redactable_char_count(text : String) -> Int

    redacted_text

    fn redacted_text(input : String) -> String raise DeidError

    redaction_candidates_from_tokens

    fn redaction_candidates_from_tokens(text : String, tokens : Array[TextToken], rule_id : String, kind : PhiKind, confidence : Int) -> Array[Finding]

    redaction_changed_text

    fn redaction_changed_text(input : String, result : DeidResult) -> String

    redaction_findings

    fn redaction_findings(input : String) -> Array[Finding] raise DeidError

    redaction_is_idempotent

    fn redaction_is_idempotent(input : String, config : RedactionConfig) -> Bool raise DeidError

    redaction_offsets

    fn redaction_offsets(input : String) -> Array[OffsetMap] raise DeidError

    redaction_preserves_newlines

    fn redaction_preserves_newlines(input : String, result : DeidResult) -> Bool

    redaction_preserves_separators

    fn redaction_preserves_separators(input : String, result : DeidResult, separators : String) -> Bool

    redaction_ratio

    fn redaction_ratio(result : DeidResult) -> Float

    redaction_summary

    fn redaction_summary(input : String, result : DeidResult) -> String

    registry_placeholders

    fn registry_placeholders(registry : PlaceholderRegistry, kinds : Array[PhiKind]) -> Map[String, String]

    relabel_findings

    fn relabel_findings(findings : Array[Finding], label_prefix : String) -> Array[Finding]

    remove_rules_by_id

    fn remove_rules_by_id(rules : Array[Rule], ids : Array[String]) -> Array[Rule]

    remove_zero_width_chars

    fn remove_zero_width_chars(text : String) -> String

    render_delimited_row

    fn render_delimited_row(fields : Array[FieldValue], delimiter : String) -> String

    render_fields

    fn render_fields(fields : Array[FieldValue], newline : String) -> String

    repeated_char

    fn repeated_char(c : Char, count : Int) -> String

    replace_rule_by_id

    fn replace_rule_by_id(rules : Array[Rule], replacement : Rule) -> Array[Rule]

    replace_token

    fn replace_token(tokens : Array[TextToken], index : Int, value : String) -> Array[TextToken]

    replacement_boundary_is_safe

    fn replacement_boundary_is_safe(text : String, offset : Int) -> Bool

    replacement_dictionary

    fn replacement_dictionary(findings : Array[Finding]) -> Map[String, String]

    replacement_dictionary_checksum

    fn replacement_dictionary_checksum(findings : Array[Finding]) -> String

    replacement_for_finding

    fn replacement_for_finding(finding : Finding, mode : ReplacementMode) -> String

    replacement_preview

    fn replacement_preview(finding : Finding, mode : ReplacementMode) -> String

    report_checksum

    fn report_checksum(report : AuditReport) -> String

    report_is_deterministic

    fn report_is_deterministic(left : AuditReport, right : AuditReport) -> Bool

    result_change_count

    fn result_change_count(result : DeidResult) -> Int

    result_contract

    fn result_contract(input : String, result : DeidResult) -> RedactionContract

    result_contract_report

    fn result_contract_report(input : String, result : DeidResult) -> String

    result_delta

    fn result_delta(result : DeidResult) -> Int

    result_differences

    fn result_differences(input : String, result : DeidResult) -> Array[TextDifference]

    result_findings_between

    fn result_findings_between(result : DeidResult, start : Int, end : Int) -> Array[Finding]

    result_for_mode

    fn result_for_mode(input : String, mode : ReplacementMode) -> DeidResult raise DeidError

    result_has_kind

    fn result_has_kind(result : DeidResult, kind : PhiKind) -> Bool

    result_has_replacement

    fn result_has_replacement(result : DeidResult, replacement : String) -> Bool

    result_has_stable_mapping

    fn result_has_stable_mapping(result : DeidResult) -> Bool

    result_integrity_score

    fn result_integrity_score(input : String, result : DeidResult) -> Float

    result_is_safe

    fn result_is_safe(input : String) -> Bool raise DeidError

    result_mapping_description

    fn result_mapping_description(result : DeidResult) -> String

    result_matches_text

    fn result_matches_text(result : DeidResult, expected : String) -> Bool

    result_original_coverage

    fn result_original_coverage(result : DeidResult) -> Int

    result_output_coverage

    fn result_output_coverage(result : DeidResult) -> Int

    result_replacement_kinds

    fn result_replacement_kinds(result : DeidResult) -> Array[String]

    result_replay_checksum

    fn result_replay_checksum(result : DeidResult) -> String

    result_text_window

    fn result_text_window(result : DeidResult, center : Int, radius : Int) -> TextWindow

    result_to_json

    fn result_to_json(result : DeidResult) -> String

    retention_summary

    fn retention_summary(policy : RetentionPolicy) -> String

    review_clinical_note

    fn review_clinical_note(input : String) -> DeidResult raise DeidError

    risk_level

    fn risk_level(finding : Finding) -> RiskLevel

    risk_score

    fn risk_score(findings : Array[Finding]) -> Int

    risk_score_per_character

    fn risk_score_per_character(findings : Array[Finding], input_length : Int) -> Float

    risk_summary

    fn risk_summary(findings : Array[Finding]) -> Map[String, Int]

    rule_confidence_histogram

    fn rule_confidence_histogram(rules : Array[Rule]) -> Map[String, Int]

    rule_count_by_kind

    fn rule_count_by_kind(rules : Array[Rule]) -> Map[String, Int]

    rule_counts_report

    fn rule_counts_report() -> String

    rule_diff

    fn rule_diff(left : Array[Rule], right : Array[Rule]) -> Array[String]

    rule_from_spec

    fn rule_from_spec(spec : RuleSpec) -> Rule

    rule_ids

    fn rule_ids(rules : Array[Rule]) -> Array[String]

    rule_ids_with_prefix

    fn rule_ids_with_prefix(rules : Array[Rule], prefix : String) -> Array[String]

    rule_lifecycle_name

    fn rule_lifecycle_name(lifecycle : RuleLifecycle) -> String

    rule_lifecycle_values

    fn rule_lifecycle_values() -> Array[RuleLifecycle]

    rule_pack

    fn rule_pack(name~ : String, version~ : String, locale~ : LocaleHint, description~ : String, rules~ : Array[Rule]) -> RulePack

    rule_pack_with_patches

    fn rule_pack_with_patches(pack : RulePack, patches : Array[RulePatch]) -> RulePack

    rule_patch

    fn rule_patch(id~ : String, enabled? : Bool, confidence? : Int, placeholder? : String, label? : String) -> RulePatch

    rule_recommendation

    fn rule_recommendation(rule : Rule) -> String

    rule_recommendations

    fn rule_recommendations(rules : Array[Rule]) -> Map[String, String]

    rule_spec

    fn rule_spec(id~ : String, label~ : String, kind~ : PhiKind, pattern~ : String, placeholder~ : String, confidence~ : Int, contextual? : Bool) -> RuleSpec

    rule_spec_from_rule

    fn rule_spec_from_rule(item : Rule) -> RuleSpec

    rule_surface_report

    fn rule_surface_report(rules : Array[Rule]) -> String

    rules_above_confidence

    fn rules_above_confidence(rules : Array[Rule], threshold : Int) -> Array[Rule]

    rules_checksum

    fn rules_checksum(rules : Array[Rule]) -> String

    rules_for_kind

    fn rules_for_kind(rules : Array[Rule], kind : PhiKind) -> Array[Rule]

    rules_for_locale

    fn rules_for_locale(rules : Array[Rule], locale : LocaleHint) -> Array[Rule]

    rules_to_tsv

    fn rules_to_tsv(rules : Array[Rule]) -> String

    run_all_benchmarks

    fn run_all_benchmarks(repetitions : Int, config : RedactionConfig) -> Array[BenchmarkResult] raise DeidError

    run_benchmark_case

    fn run_benchmark_case(item : BenchmarkCase, repetitions : Int, config : RedactionConfig) -> BenchmarkResult raise DeidError

    run_pipeline

    fn run_pipeline(input : String, config : PipelineConfig) -> PipelineResult raise DeidError

    safe_audit_export

    fn safe_audit_export(report : AuditReport, retention : RetentionPolicy) -> String

    safe_char_slice

    fn safe_char_slice(text : String, start : Int, end : Int) -> String

    safe_code_unit_boundaries

    fn safe_code_unit_boundaries(text : String) -> Array[Int]

    safe_default_contract

    fn safe_default_contract(input : String) -> Bool raise DeidError

    safe_export_contract

    fn safe_export_contract(input : String, result : DeidResult) -> Array[String]

    safe_finding_export

    fn safe_finding_export(findings : Array[Finding], retention : RetentionPolicy) -> String

    safe_normalized_input

    fn safe_normalized_input(text : String) -> String

    safe_slice_by_code_units

    fn safe_slice_by_code_units(text : String, start : Int, end : Int) -> String

    safe_text_export

    fn safe_text_export(result : DeidResult, retention : RetentionPolicy) -> String

    sanitize_input

    fn sanitize_input(text : String) -> String

    sanitize_log_batch

    fn sanitize_log_batch(messages : Array[String], config : RedactionConfig) -> Array[String] raise DeidError

    sanitize_log_message

    fn sanitize_log_message(message : String, config : RedactionConfig) -> String raise DeidError

    scan

    fn scan(input : String, rules? : Array[Rule], options? : DeidOptions) -> Array[Finding] raise DeidError

    scan_clinical_note

    fn scan_clinical_note(input : String) -> Array[Finding] raise DeidError

    scan_default

    fn scan_default(input : String) -> Array[Finding] raise DeidError

    scan_high_precision

    fn scan_high_precision(input : String) -> Array[Finding] raise DeidError

    scan_statistics

    fn scan_statistics(input : String, rules : Array[Rule], findings : Array[Finding]) -> ScanStatistics

    scan_statistics_for

    fn scan_statistics_for(input : String, rules? : Array[Rule]) -> ScanStatistics raise DeidError

    scan_texts

    fn scan_texts(texts : Array[String], rules : Array[Rule]) -> Array[Array[Finding]] raise DeidError

    scan_with_profile

    fn scan_with_profile(input : String, profile : Profile) -> Array[Finding] raise DeidError

    schema_description

    fn schema_description() -> String

    section_findings

    fn section_findings(_text : String, section : DocumentSection) -> Array[Finding] raise DeidError

    section_kind_name

    fn section_kind_name(kind : SectionKind) -> String

    section_risk

    fn section_risk(text : String, section : DocumentSection) -> RiskLevel raise DeidError

    section_summaries

    fn section_summaries(_text : String, sections : Array[DocumentSection]) -> Array[SectionSummary] raise DeidError

    section_summary_markdown

    fn section_summary_markdown(summaries : Array[SectionSummary]) -> String

    sectionize

    fn sectionize(text : String) -> Array[DocumentSection]

    sections_of_kind

    fn sections_of_kind(sections : Array[DocumentSection], kind : SectionKind) -> Array[DocumentSection]

    select_pack

    fn select_pack(profile : Profile) -> RulePack

    sensitive_line_count

    fn sensitive_line_count(text : String) -> Int raise DeidError

    severity_name

    fn severity_name(severity : DiagnosticSeverity) -> String

    shift_findings

    fn shift_findings(findings : Array[Finding], amount : Int) -> Array[Finding]

    sort_findings

    fn sort_findings(findings : Array[Finding]) -> Array[Finding]

    sort_findings_by_priority

    fn sort_findings_by_priority(findings : Array[Finding]) -> Array[Finding]

    source_policy_notice

    fn source_policy_notice() -> String

    span

    fn span(start~ : Int, end~ : Int) -> Span

    span_relation

    fn span_relation(left : Span, right : Span) -> SpanRelation

    span_summary

    fn span_summary(spans : Array[Span]) -> String

    split_findings_by_risk

    fn split_findings_by_risk(findings : Array[Finding]) -> (Array[Finding], Array[Finding], Array[Finding])

    split_fixed_chunks

    fn split_fixed_chunks(text : String, width : Int) -> Array[String]

    split_lines_with_offsets

    fn split_lines_with_offsets(text : String) -> Array[TextWindow]

    split_on_blank_lines

    fn split_on_blank_lines(text : String) -> Array[String]

    stable_hash_options

    fn stable_hash_options(min_confidence? : Int) -> DeidOptions

    stable_result_checksum

    fn stable_result_checksum(result : DeidResult) -> String

    starts_with_word

    fn starts_with_word(text : String, prefix : String) -> Bool

    stream_has_sensitive_boundary

    fn stream_has_sensitive_boundary(text : String, rules : Array[Rule]) -> Bool raise DeidError

    string_has_non_bmp

    fn string_has_non_bmp(text : String) -> Bool

    structural_score

    fn structural_score(finding : Finding) -> Int

    subtract_span

    fn subtract_span(source : Span, blocked : Array[Span]) -> Array[Span]

    subtract_spans

    fn subtract_spans(sources : Array[Span], blocked : Array[Span]) -> Array[Span]

    summarize_batch

    fn summarize_batch(results : Array[BatchResult]) -> BatchSummary

    summarize_texts

    fn summarize_texts(texts : Array[String], config : RedactionConfig) -> Array[String] raise DeidError

    supported_exports

    fn supported_exports() -> Array[String]

    supported_modes

    fn supported_modes() -> Array[String]

    supported_profiles

    fn supported_profiles() -> Array[String]

    supported_targets

    fn supported_targets() -> Array[String]

    synthetic_evaluation_cases

    fn synthetic_evaluation_cases() -> Array[EvaluationCase]

    text_window

    fn text_window(text : String, center : Int, radius : Int) -> TextWindow

    token_after

    fn token_after(tokens : Array[TextToken], position : Int) -> TextToken?

    token_before

    fn token_before(tokens : Array[TextToken], position : Int) -> TextToken?

    token_char_counts

    fn token_char_counts(tokens : Array[TextToken]) -> Map[String, Int]

    token_context

    fn token_context(text : String, token : TextToken, radius : Int) -> TextWindow

    token_count

    fn token_count(text : String) -> Int

    token_kind_at

    fn token_kind_at(tokens : Array[TextToken], position : Int) -> String?

    token_kind_counts

    fn token_kind_counts(tokens : Array[TextToken]) -> Map[String, Int]

    token_lengths

    fn token_lengths(tokens : Array[TextToken]) -> Array[Int]

    token_options

    fn token_options(min_confidence? : Int) -> DeidOptions

    token_positions

    fn token_positions(tokens : Array[TextToken]) -> Array[LineColumn]

    token_reconstruct

    fn token_reconstruct(tokens : Array[TextToken]) -> String

    token_spans

    fn token_spans(tokens : Array[TextToken]) -> Array[Span]

    token_texts

    fn token_texts(tokens : Array[TextToken]) -> Array[String]

    tokenization_is_lossless

    fn tokenization_is_lossless(text : String) -> Bool

    tokenization_report

    fn tokenization_report(text : String) -> String

    tokenize

    fn tokenize(text : String) -> Array[TextToken]

    tokens_in_span

    fn tokens_in_span(tokens : Array[TextToken], span : Span) -> Array[TextToken]

    tokens_of_kind

    fn tokens_of_kind(tokens : Array[TextToken], kind : String) -> Array[TextToken]

    total_finding_length

    fn total_finding_length(findings : Array[Finding]) -> Int

    trim_ascii_space

    fn trim_ascii_space(text : String) -> String

    unchanged_text

    fn unchanged_text(input : String, result : DeidResult) -> String

    unicode_profile

    fn unicode_profile(text : String) -> Map[String, Int]

    unicode_profile_text

    fn unicode_profile_text(text : String) -> String

    unique_findings

    fn unique_findings(findings : Array[Finding]) -> Array[Finding]

    unique_kind_count

    fn unique_kind_count(findings : Array[Finding]) -> Int

    unique_rule_count

    fn unique_rule_count(findings : Array[Finding]) -> Int

    valid_accession

    fn valid_accession(value : String) -> Bool

    valid_bank_card

    fn valid_bank_card(value : String) -> Bool

    valid_calendar_date

    fn valid_calendar_date(year : Int, month : Int, day : Int) -> Bool

    valid_chinese_id

    fn valid_chinese_id(value : String) -> Bool

    valid_email_address

    fn valid_email_address(value : String) -> Bool

    valid_entity_input

    fn valid_entity_input(input : String, item : EntityInput) -> Bool

    valid_hex_color

    fn valid_hex_color(value : String) -> Bool

    valid_iban_prefix

    fn valid_iban_prefix(value : String) -> Bool

    valid_imei

    fn valid_imei(value : String) -> Bool

    valid_ipv4

    fn valid_ipv4(value : String) -> Bool

    valid_lab_code

    fn valid_lab_code(value : String) -> Bool

    valid_luhn

    fn valid_luhn(value : String) -> Bool

    valid_mac_address

    fn valid_mac_address(value : String) -> Bool

    valid_month

    fn valid_month(month : Int) -> Bool

    valid_passport_number

    fn valid_passport_number(value : String) -> Bool

    valid_phone_number

    fn valid_phone_number(value : String) -> Bool

    valid_postal_code

    fn valid_postal_code(value : String, locale : LocaleHint) -> Bool

    valid_uuid

    fn valid_uuid(value : String) -> Bool

    validate_finding_order

    fn validate_finding_order(findings : Array[Finding]) -> Bool

    validate_finding_text

    fn validate_finding_text(input : String, finding : Finding) -> Bool

    validate_findings

    fn validate_findings(input : String, findings : Array[Finding]) -> Array[String]

    validate_rule

    fn validate_rule(rule : Rule) -> Array[RuleIssue]

    validate_rules

    fn validate_rules(rules : Array[Rule]) -> Array[RuleIssue]

    version

    fn version() -> String

    whitespace_spans

    fn whitespace_spans(text : String) -> Array[Span]

    with_policy_confidence

    fn with_policy_confidence(policy : RedactionPolicy, min_confidence : Int) -> RedactionPolicy

    with_policy_locale

    fn with_policy_locale(policy : RedactionPolicy, locale : LocaleHint) -> RedactionPolicy

    with_policy_mode

    fn with_policy_mode(policy : RedactionPolicy, mode : ReplacementMode) -> RedactionPolicy

    word_tokens

    fn word_tokens(text : String) -> Array[TextToken]

    workload_summary

    fn workload_summary(documents : Array[String]) -> String