File size: 1,682 Bytes
851ce09
 
fa6caa6
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
851ce09
 
 
fa6caa6
 
 
 
 
 
 
 
 
 
 
851ce09
 
 
 
 
 
 
 
 
 
 
 
 
 
fa6caa6
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
from dataclasses import asdict, dataclass, field
from typing import Any, Dict, List


@dataclass
class ResumeProfile:
    skills: List[str] = field(default_factory=list)
    languages: List[str] = field(default_factory=list)
    frameworks: List[str] = field(default_factory=list)
    tools: List[str] = field(default_factory=list)
    target_titles: List[str] = field(default_factory=list)
    locations: List[str] = field(default_factory=list)
    experience_level: str = "entry"


@dataclass
class CompanyRecord:
    company: str
    careers_url: str = ""
    source: str = "default"
    meta: Dict[str, str] = field(default_factory=dict)
    ats_type: str = ""
    ats_identifier: str = ""
    priority: int = 0


@dataclass
class JobPosting:
    company: str
    title: str
    location: str
    url: str
    department: str = ""
    description: str = ""
    ats: str = "unknown"
    source_ats: str = "unknown"
    resolved_url: str = ""
    employment_type: str = ""
    posted_date: str = ""
    is_remote: bool = False
    is_entry_level: bool = False
    failure_reason: str = ""
    raw_payload: Dict[str, Any] = field(default_factory=dict)

    def to_dict(self) -> Dict[str, Any]:
        payload = asdict(self)
        payload["job_url"] = payload.pop("url")
        payload["source_ats"] = payload.get("source_ats") or payload.get("ats", "unknown")
        return payload


@dataclass
class JobMatch:
    company: str
    title: str
    location: str
    url: str
    score: float
    explanation: str
    ats: str


@dataclass
class CompanyRanking:
    company: str
    company_score: float
    match_count: int
    best_role: str
    ats: str
    explanation: str