# All files types.ts

0% Statements 0/0
0% Branches 0/0
0% Functions 0/0
0% Lines 0/0

Press n or j to go to the next uncovered block, b, p or k for the previous block.

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115

     export interface PropertyRecord {
      id: string;
      ownerName: string;
      address: Address;
      deedDate?: string;
      taxId?: string;
      propertyType: PropertyType;
      metadata?: Record<string, unknown>;
    }

    export interface Address {
      streetNumber: string;
      streetName: string;
      streetType?: string;
      unit?: string;
      city: string;
      state: string;
      zip: string;
      latitude?: number;
      longitude?: number;
    }

    export type PropertyType = 'residential' | 'commercial' | 'land' | 'multi-family';

    export interface PropertySnapshot {
      id: string;
      propertyId: string;
      capturedAt: string;
      ownerName: string;
      address: Address;
      deedDate?: string;
      taxId?: string;
      propertyType: PropertyType;
      taxAmount?: number;
      lienCount?: number;
    }

    export interface MatchResult {
      nameScore: number;
      addressScore: number;
      overallConfidence: number;
      isMatch: boolean;
      details: MatchDetails;
    }

    export interface MatchDetails {
      nameNormalized: string[];
      addressNormalized: string[];
      levenshteinDistance: number;
      geocodingDistance?: number;
      fields: {
        firstName: FieldMatch;
        lastName: FieldMatch;
        middleName: FieldMatch;
        streetNumber: FieldMatch;
        streetName: FieldMatch;
        streetType: FieldMatch;
        unit: FieldMatch;
        city: FieldMatch;
        state: FieldMatch;
        zip: FieldMatch;
      };
    }

    export interface FieldMatch {
      valueA: string;
      valueB: string;
      normalizedA: string;
      normalizedB: string;
      score: number;
    }

    export interface ChangeDetectionResult {
      propertyId: string;
      changeType: ChangeType;
      severity: Severity;
      confidence: number;
      changes: PropertyChange[];
      previousSnapshot: PropertySnapshot;
      currentSnapshot: PropertySnapshot;
      detectedAt: string;
    }

    export type ChangeType = 'tax_change' | 'deed_change' | 'ownership_transfer' | 'lien_filing' | 'metadata_change';

    export type Severity = 'minor' | 'moderate' | 'major';

    export interface PropertyChange {
      field: string;
      oldValue: unknown;
      newValue: unknown;
      changeType: ChangeType;
    }

    export interface MatchingConfig {
      nameThreshold: number;
      addressThreshold: number;
      overallThreshold: number;
      geocodingRadiusMeters: number;
    }

    export interface DetectionConfig {
      ownershipNameThreshold: number;
      deedDateSensitivity: number;
      taxAmountChangePercent: number;
      severityOverrides?: Record<ChangeType, Severity>;
    }

    export interface NormalizedTokens {
      firstName: string;
      lastName: string;
      middleName: string;
      initials: string[];
    }