File size: 1,778 Bytes
dbaeeae
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
from enum import Enum

class StageEvent(Enum):
    """
    Stage completion events for the VoucherBot agent workflow.
    Used to trigger UI updates and state changes at major checkpoints.
    """
    SEARCH_COMPLETE = "search_listings_done"
    VIOLATIONS_COMPLETE = "violations_check_done"
    FILTERING_COMPLETE = "filtering_done"
    BBL_LOOKUP_COMPLETE = "bbl_lookup_done"
    FAVORITES_UPDATED = "favorites_updated"

class RiskLevel(Enum):
    """
    Risk level indicators for building safety assessments.
    Used for consistent risk display across the system.
    """
    SAFE = "✅"
    MODERATE = "⚠️"
    HIGH_RISK = "🚨"
    UNKNOWN = "❓"

class VoucherType(Enum):
    """
    Supported housing voucher types for filtering and search.
    """
    SECTION_8 = "Section 8"
    CITYFHEPS = "CityFHEPS"
    HASA = "HASA"
    HPD = "HPD"
    DSS = "DSS"
    FHEPS = "FHEPS"

class Borough(Enum):
    """
    NYC Borough identifiers for consistent borough handling.
    """
    MANHATTAN = "manhattan"
    BROOKLYN = "brooklyn"
    QUEENS = "queens"
    BRONX = "bronx"
    STATEN_ISLAND = "staten_island"

# UI Constants
DEFAULT_MAX_RENT = 4000
DEFAULT_MIN_BEDROOMS = 1
DEFAULT_MAX_BEDROOMS = 4

# API Constants
CRAIGSLIST_BASE_URL = "https://newyork.craigslist.org"
NYC_OPEN_DATA_VIOLATIONS_URL = "https://data.cityofnewyork.us/resource/wvxf-dwi5.json"
NYC_GEOCLIENT_BASE_URL = "https://api.cityofnewyork.us/geoclient/v1"

# Performance Constants
DEFAULT_CACHE_TTL_SECONDS = 300  # 5 minutes
MAX_RETRY_ATTEMPTS = 3
DEFAULT_REQUEST_TIMEOUT = 30

# Violation Risk Thresholds
VIOLATION_RISK_THRESHOLDS = {
    "safe": 0,        # 0 violations = safe
    "moderate": 20,   # 1-20 violations = moderate risk
    "high": float('inf')  # 20+ violations = high risk
}