168 lines
8.6 KiB
JavaScript
168 lines
8.6 KiB
JavaScript
/* HR Candidate Matcher — Data Layer */
|
||
/* global window */
|
||
(function () {
|
||
'use strict';
|
||
|
||
var APP = window.HRMatcher = window.HRMatcher || {};
|
||
|
||
APP.STATUS = {
|
||
CONFIRMED: 'confirmed',
|
||
NOT_FOUND: 'not_found',
|
||
UNCLEAR: 'unclear'
|
||
};
|
||
|
||
APP.CRITERION_TYPE = {
|
||
REQUIRED: 'required',
|
||
DESIRED: 'desired'
|
||
};
|
||
|
||
var idCounter = Date.now();
|
||
APP.generateId = function () {
|
||
return 'id_' + (idCounter++) + '_' + Math.random().toString(36).slice(2, 8);
|
||
};
|
||
|
||
APP.createVacancy = function (title, rawText, criteria) {
|
||
return {
|
||
id: APP.generateId(),
|
||
title: title || '',
|
||
rawText: rawText || '',
|
||
criteria: criteria || []
|
||
};
|
||
};
|
||
|
||
APP.createCriterion = function (label, required, weight, synonyms) {
|
||
return {
|
||
id: APP.generateId(),
|
||
label: label || '',
|
||
required: required !== false,
|
||
weight: Math.max(1, Math.min(5, weight || 3)),
|
||
synonyms: synonyms || []
|
||
};
|
||
};
|
||
|
||
APP.createMatchResult = function (criterionId, status, evidence, note) {
|
||
return {
|
||
criterionId: criterionId,
|
||
status: status || APP.STATUS.NOT_FOUND,
|
||
evidence: evidence || [],
|
||
note: note || ''
|
||
};
|
||
};
|
||
|
||
APP.createEvidence = function (fragment, position) {
|
||
return {
|
||
fragment: fragment || '',
|
||
position: position || 0
|
||
};
|
||
};
|
||
|
||
APP.createAppState = function () {
|
||
return {
|
||
currentScreen: 'welcome',
|
||
vacancy: null,
|
||
resumeText: '',
|
||
matchResults: [],
|
||
isDemo: false,
|
||
hasUnsavedChanges: false
|
||
};
|
||
};
|
||
|
||
APP.DEMO_VACANCY_TEXT = 'Таргетолог (Digital Marketing Specialist)\n\n' +
|
||
'Компания: ТОО «DigitalKZ»\n' +
|
||
'Локация: Алматы, Казахстан\n' +
|
||
'Зарплата: от 350 000 ₸ до 500 000 ₸\n\n' +
|
||
'Обязанности:\n' +
|
||
'— Настройка и оптимизация рекламных кампаний в Facebook Ads, Google Ads, TikTok Ads\n' +
|
||
'— Анализ эффективности кампаний, подготовка отчётов\n' +
|
||
'— A/B тестирование креативов и посадочных страниц\n' +
|
||
'— Работа с аналитическими инструментами: Google Analytics, Яндекс.Метрика\n' +
|
||
'— Управление бюджетом рекламных кампаний\n' +
|
||
'— Ведение отчётности в Excel / Google Sheets\n\n' +
|
||
'Требования:\n' +
|
||
'— Опыт работы таргетологом от 2 лет\n' +
|
||
'— Знание Facebook Ads Manager и Google Ads\n' +
|
||
'— Умение работать с Google Analytics и Яндекс.Метрикой\n' +
|
||
'— Опыт A/B тестирования\n' +
|
||
'— Знание Excel / Google Sheets на уровне продвинутого пользователя\n' +
|
||
'— Английский язык — Intermediate и выше\n' +
|
||
'— Понимание основ SEO будет плюсом\n' +
|
||
'— Опыт работы с TikTok Ads — желательно\n\n' +
|
||
'Условия:\n' +
|
||
'— Полный рабочий день, офис в центре Алматы\n' +
|
||
'— Оформление по ТК РК\n' +
|
||
'— ДМС после испытательного срока';
|
||
|
||
APP.DEMO_RESUME_TEXT = 'Кандидат на позицию Таргетолог\n\n' +
|
||
'Опыт работы:\n' +
|
||
'Таргетолог, ТОО «МедиаГрупп» — 2 года 6 месяцев (2023 – настоящее время)\n' +
|
||
'— Настройка и ведение рекламных кампаний в Facebook Ads и Google Ads\n' +
|
||
'— Ежемесячный бюджет: от 500 000 ₸ до 2 000 000 ₸\n' +
|
||
'— A/B тестирование креативов: повышение CTR на 35%\n' +
|
||
'— Подготовка еженедельных отчётов в Google Sheets\n' +
|
||
'— Работа с Google Analytics для анализа воронки\n\n' +
|
||
'Младший таргетолог, ИП «РекламаПлюс» — 1 год (2022 – 2023)\n' +
|
||
'— Настройка рекламы в Instagram и VK Ads\n' +
|
||
'— Ведение отчётности в Excel\n\n' +
|
||
'Навыки:\n' +
|
||
'— Facebook Ads Manager — продвинутый\n' +
|
||
'— Google Ads — продвинутый\n' +
|
||
'— Google Analytics — уверенный\n' +
|
||
'— Яндекс.Метрика — базовый\n' +
|
||
'— Excel / Google Sheets — продвинутый (сводные таблицы, VLOOKUP)\n' +
|
||
'— A/B тестирование — опыт 2 года\n' +
|
||
'— TikTok Ads — нет опыта, но готов освоить\n' +
|
||
'— SEO — знаком с основами\n\n' +
|
||
'Образование:\n' +
|
||
'— КазНУ им. аль-Фараби, Маркетинг, бакалавр (2018 – 2022)\n\n' +
|
||
'Языки:\n' +
|
||
'— Казахский — родной\n' +
|
||
'— Русский — свободный\n' +
|
||
'— Английский — Intermediate (B1)';
|
||
|
||
APP.SKILL_DICTIONARY = {
|
||
'facebook ads': { label: 'Facebook Ads', synonyms: ['facebook ads manager', 'fb ads', 'meta ads', 'реклама в facebook'] },
|
||
'google ads': { label: 'Google Ads', synonyms: ['google adwords', 'adwords', 'реклама в google'] },
|
||
'tiktok ads': { label: 'TikTok Ads', synonyms: ['tiktok advertising', 'реклама в tiktok'] },
|
||
'google analytics': { label: 'Google Analytics', synonyms: ['ga4', 'ga', 'аналитика google'] },
|
||
'яндекс.метрика': { label: 'Яндекс.Метрика', synonyms: ['метрика', 'yandex metrika', 'яндекс метрика'] },
|
||
'excel': { label: 'Excel', synonyms: ['google sheets', 'google таблицы', 'эксель', '电子表格'] },
|
||
'a/b тестирование': { label: 'A/B тестирование', synonyms: ['ab тестирование', 'a/b тесты', 'ab тесты', 'a/b testing'] },
|
||
'seo': { label: 'SEO', synonyms: ['поисковая оптимизация', 'search engine optimization'] },
|
||
'sql': { label: 'SQL', synonyms: ['mysql', 'postgresql', 'запросы к базе данных'] },
|
||
'python': { label: 'Python', synonyms: ['питон'] },
|
||
'javascript': { label: 'JavaScript', synonyms: ['js'] },
|
||
'react': { label: 'React', synonyms: ['reactjs', 'react.js'] },
|
||
'figma': { label: 'Figma', synonyms: ['фигма'] },
|
||
'photoshop': { label: 'Photoshop', synonyms: ['фотошоп', 'ps'] },
|
||
'css': { label: 'CSS', synonyms: ['css3'] },
|
||
'html': { label: 'HTML', synonyms: ['html5'] },
|
||
'project management': { label: 'Управление проектами', synonyms: ['project manager', 'pm', 'управление проектом'] },
|
||
'agile': { label: 'Agile', synonyms: ['scrum', 'канбан', 'kanban'] },
|
||
'power bi': { label: 'Power BI', synonyms: ['powerbi'] },
|
||
'tableau': { label: 'Tableau', synonyms: ['табло'] }
|
||
};
|
||
|
||
APP.INTERVIEW_TEMPLATES = {
|
||
skill: [
|
||
'Расскажите, как вы применяли «{skill}» в рабочих проектах?',
|
||
'Какие сложности возникали при работе с «{skill}» и как вы их решали?',
|
||
'На каком уровне вы оцениваете своё владение «{skill}»? Приведите пример.'
|
||
],
|
||
experience: [
|
||
'Опишите конкретный проект, где требовался опыт в «{skill}».',
|
||
'Как вы отслеживаете результаты своей работы в области «{skill}»?',
|
||
'Что бы вы изменили в подходе к «{skill}», зная то, что знаете сейчас?'
|
||
],
|
||
tool: [
|
||
'Какие инструменты / платформы вы использовали для «{skill}»?',
|
||
'Как вы оцениваете свою скорость работы с «{skill}»? Приведите пример.',
|
||
'Есть ли альтернативные инструменты, которые вы рассматривали для «{skill}»?'
|
||
],
|
||
development: [
|
||
'Какие шаги вы предпринимаете для развития навыка «{skill}»?',
|
||
'Есть ли ресурсы (курсы, книги), которые вы используете для изучения «{skill}»?',
|
||
'Какой результат вы ожидаете достичь в «{skill}» через полгода?'
|
||
]
|
||
};
|
||
})();
|