import React from "react"; import { FileText, Award, AlertTriangle, CheckCircle2 } from "lucide-react"; export interface InterviewReport { id: number; interview_session_id: number; technical_skills_score: number; experience_relevance_score: number; communication_score: number; problem_solving_score: number; cultural_fit_score: number; overall_score: number; recommendation: "strongly_recommend" | "recommend" | "consider" | "reject"; strengths: Record; weaknesses: Record; red_flags: Record; next_steps: string | null; interviewer_notes: string | null; pdf_report_url: string | null; } interface VacancyReportsProps { reports: InterviewReport[]; } const recommendationLabels: Record< InterviewReport["recommendation"], string > = { strongly_recommend: "сильно рекомендую", recommend: "рекомендую", consider: "рассмотреть", reject: "не рекомендую", }; const recommendationColors: Record< InterviewReport["recommendation"], string > = { strongly_recommend: "text-green-700 bg-green-100", recommend: "text-blue-700 bg-blue-100", consider: "text-yellow-700 bg-yellow-100", reject: "text-red-700 bg-red-100", }; const scoringLabels: Record = { technical_skills_score: "Технические навыки", experience_relevance_score: "Релевантность опыта", communication_score: "Коммуникация", problem_solving_score: "Решение задач", cultural_fit_score: "Культурная совместимость", overall_score: "Общая оценка", }; const renderJsonAsList = (data: Record) => { return (
    {Object.entries(data).map(([key, value]) => (
  • {key}: {String(value)}
  • ))}
); }; export default function VacancyReports({ reports }: VacancyReportsProps) { return (

Отчёты по собеседованиям

{reports.length === 0 ? (

Пока нет отчётов по этой вакансии.

) : (
{reports.map((report) => (

Отчёт #{report.id}

{recommendationLabels[report.recommendation]}
{Object.entries(scoringLabels).map(([key, label]) => { const score = report[key as keyof InterviewReport] as number; return (

{label}: {score}/100

); })}
{report.strengths && Object.keys(report.strengths).length > 0 && (

Сильные стороны

{renderJsonAsList(report.strengths)}
)} {report.weaknesses && Object.keys(report.weaknesses).length > 0 && (

Слабые стороны

{renderJsonAsList(report.weaknesses)}
)} {report.red_flags && Object.keys(report.red_flags).length > 0 && (

🚩 Red flags

{renderJsonAsList(report.red_flags)}
)} {report.interviewer_notes && (

Заметки интервьюера

{report.interviewer_notes}

)}
{report.pdf_report_url && ( )}
))}
)}
); }