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[];
}