export type RequirementType = | "role_title" | "seniority" | "education_background" | "degree" | "certification" | "hard_skill" | "tool_system" | "methodology" | "manufacturing_domain" | "leadership_responsibility" | "regulatory_requirement" | "language_requirement" | "years_experience" | "industry_context" | "must_have_requirement" | "nice_to_have_requirement"; export type SupportLevel = | "explicit" | "strong_partial" | "weak_partial" | "implied" | "missing" | "unclear"; export type EvidenceType = | "exact_term" | "normalized_alias" | "semantic_equivalent" | "responsibility_evidence" | "quantified_impact" | "tool_usage" | "title_signal" | "domain_context" | "education_signal"; export type MatchState = | "matched" | "partially_matched" | "weakly_supported" | "missing" | "uncertain"; export interface SourceSpan { text: string; start: number; end: number; } export interface DomainDetection { primaryDomain: string; secondaryDomain: string | null; roleFamily: string; seniority: string; confidence: number; signals: string[]; } export interface Requirement { id: string; label: string; normalizedValue: string; type: RequirementType; subtype: string; sourceText: string; sourceSpanStart: number; sourceSpanEnd: number; domain: string; importance: number; requirementStrength: number; senioritySignal: string | null; mustHave: boolean; confidence: number; } export interface Evidence { requirementId: string; supportLevel: SupportLevel; confidence: number; cvSourceText: string; cvSpanStart: number; cvSpanEnd: number; evidenceType: EvidenceType; rationale: string; matchedAlias: string | null; recencySignal: string | null; strengthSignal: string | null; yearsInferred: number | null; quantifiedImpactPresent: boolean; ambiguityFlag: boolean; } export interface RequirementMatch { requirement: Requirement; evidence: Evidence[]; state: MatchState; topEvidence: Evidence | null; confidence: number; rationale: string; } export interface JDQualityWarning { id: string; severity: "info" | "warning" | "high_risk"; title: string; message: string; affectedRequirementIds: string[]; } export interface ScoringBreakdown { roleFitScore: number; domainFitScore: number; hardSkillsFitScore: number; toolsFitScore: number; leadershipFitScore: number; mustHaveCoverage: number; evidenceStrengthScore: number; confidenceScore: number; uncertaintyPenalty: number; finalScore: number; } export interface EvidenceMapRow { requirementId: string; requirement: string; category: string; importance: number; supportLevel: SupportLevel; matchState: MatchState; confidence: number; jdEvidence: string; cvEvidence: string; rationale: string; mustHave: boolean; } export interface CandidateRecommendations { wordingFixes: string[]; proofGaps: string[]; likelyInterviewQuestions: string[]; titleAlignmentSuggestions: string[]; } export interface RecruiterRecommendations { verifyManually: string[]; weakEvidenceZones: string[]; interviewProbes: string[]; possibleFalseNegatives: string[]; } export interface AnalysisMeta { version: string; analysisMode: string; vertical: string; generatedAt: string; inputHash: string; resumeLanguage?: "he" | "en" | "mixed" | "unknown"; resumeLanguageConfidence?: number; } export interface FitAnalysis { domainDetection: DomainDetection; jdRequirementsByType: Record; matchedEvidenceByType: Record; missingRequirementsByType: Record; uncertaintyFlags: string[]; scoringBreakdown: ScoringBreakdown; finalScore: number; confidenceScore: number; jdQualityWarnings: JDQualityWarning[]; candidateRecommendations: CandidateRecommendations; recruiterRecommendations: RecruiterRecommendations; evidenceMap: EvidenceMapRow[]; analysisMeta: AnalysisMeta; profileSummary: string; tailoredBio: string; bulletPointOptimization: { original: string; optimized: string; rationale: string; }[]; matchedKeywords: string[]; missingKeywords: string[]; matchScore: number; atsVisibilityScore: number; jobFitDecision: "High" | "Medium" | "Low"; strengths: string[]; weaknesses: string[]; recommendations: string[]; scoringMode: string; scoreLocked: boolean; candidateViewMode: "free" | "premium_preview"; }