Job Description
${titleText}\n
\n
\n`); // Reference to the newly injected grid where we will move the tokens let grid = columnOne.querySelector('.job-grid'); // 3. TOKEN GATHERING // SAP dynamically wraps tokens in different ways (.inner, .joblayouttoken, etc.). // We find all labels first, then traverse up the DOM to capture the full container for each. let labels = Array.from(columnOne.querySelectorAll('.joblayouttoken-label')); let allTokens = labels.map(label => label.closest('.inner') || label.closest('.joblayouttoken') || label.parentElement.parentElement); allTokens = [...new Set(allTokens)]; // Remove duplicates to prevent processing the same element twice // Variables to store extracted data for our business rules let jobLocationValue = ""; let countryRegionValue = ""; let regionValue = ""; let jobLevelValue = ""; let employeeGroupValue = ""; // 4. PHASE 1: DATA EXTRACTION (SILENT) // Loop through all tokens just to read their values. We do not move or alter them yet. allTokens.forEach(el => { if(!el) return; let labelEl = el.querySelector('.joblayouttoken-label'); if (!labelEl) return; let labelText = labelEl.innerText; // Use our helper function to normalize the label name regardless of the user's language let propId = generatePropertyId(labelText); let valueEl = el.querySelector('.rtltextaligneligible'); let valueText = valueEl ? valueEl.textContent.trim() : ""; // Populate the business rule variables based on the identified property ID if (propId === "JobLocation") jobLocationValue = valueText; else if (propId === "CountryRegion") countryRegionValue = valueText; else if (propId === "Region") regionValue = valueText; else if (propId === "JobLevel") jobLevelValue = valueText.toUpperCase().trim(); else if (propId === "EmployeeGroup") employeeGroupValue = valueText.toLowerCase(); }); // 5. DATA FALLBACK: JOB DESCRIPTION PARSING // If SAP failed to generate specific tokens, attempt to regex them directly out of the raw description text. let descDiv = document.querySelector('.job-description') || columnOne.querySelector('[itemprop="description"]'); if (descDiv) { let descText = descDiv.innerText || ""; if (!employeeGroupValue) { let eg = descText.match(/Employee Group:s*([^ ]+)/i); if (eg) employeeGroupValue = eg[1].toLowerCase().trim(); } if (!countryRegionValue) { let cr = descText.match(/Country:s*([^ ]+)/i); if (cr) countryRegionValue = cr[1].toLowerCase().trim(); } if (!regionValue) { let rg = descText.match(/Region:s*([^ ]+)/i); if (rg) regionValue = rg[1].toLowerCase().trim(); } if (!jobLevelValue) { let jl = descText.match(/Job Level:s*([^ ]+)/i); // Ensure we don't accidentally grab "Job Experience Level" if (jl && !jl[0].toLowerCase().includes("experience")) { jobLevelValue = jl[1].toUpperCase().trim(); } } } // 6. BUSINESS RULES EVALUATION (SALARY VISIBILITY) // Rule A: Is it a salaried position? let isSalaryPaid = employeeGroupValue.includes('salary'); // Rule B: Is the Job Level eligible? (Hide if PL09 or higher, or if ZZ) let isJobLevelSalaryEligible = true; let plMatch = jobLevelValue.match(/PL(d+)/); if (jobLevelValue.includes("ZZ")) { isJobLevelSalaryEligible = false; } else if (plMatch && parseInt(plMatch[1], 10) >= 9) { isJobLevelSalaryEligible = false; } // Combine city/state and country to check geographic eligibility let fullLocationLower = (jobLocationValue + " " + countryRegionValue).toLowerCase(); let isUSJob = fullLocationLower.includes("usa") || fullLocationLower.includes("united states") || /us/.test(fullLocationLower); // Define specifically allowed locations for salary transparency compliance let allowedUSStates = ["massachusetts", "illinois", "colorado", "minnesota", "new york", "oregon", "ohio", "california", "washington", "nevada", "maryland", "new jersey"]; let allowedUSAbbr = ["ma", "il", "co", "mn", "ny", "or", "oh", "ca", "wa", "nv", "md", "nj", "wdc", "dc"]; let allowedGlobalCountries = ["canada"]; let isSalaryLocationValid = false; // Rule C: Is the location mandated to show salary? if (isUSJob) { isSalaryLocationValid = allowedUSStates.some(state => fullLocationLower.includes(state)) || allowedUSAbbr.some(abbr => new RegExp(`\b${abbr}\b`).test(fullLocationLower)); } else { isSalaryLocationValid = allowedGlobalCountries.some(country => fullLocationLower.includes(country)); } // Final Boolean: All three rules must pass to display the salary range token let showSalaryRange = isSalaryLocationValid && isJobLevelSalaryEligible && isSalaryPaid; // 7. PHASE 2: UI MANIPULATION & DOM INJECTION // Loop through all tokens again. This time, we apply styles, icons, and move them into the new grid. allTokens.forEach(el => { try { // Skip processing if this container accidentally holds the main job description if (!el || el.querySelector('[itemprop="description"]')) return; let labelEl = el.querySelector('.joblayouttoken-label'); if (!labelEl) return; let labelText = labelEl.innerText; let customPropertyid = generatePropertyId(labelText); // Hide utility tokens that were only needed for backend business logic calculations if (["EmployeeGroup", "CountryRegion", "Region", "JobLevel"].includes(customPropertyid)) { el.style.display = 'none'; return; } // Hide the salary token if it failed the business rule check if (customPropertyid === "SalaryRange" && !showSalaryRange) { el.style.display = 'none'; return; } // TEXT OVERRIDES: Force specific terminology on the frontend if (customPropertyid === "SalaryRange" && labelText.toLowerCase().includes("recruitment salary range")) { labelEl.innerText = labelText.replace(/Recruitment Salary Range/ig, "Annual Salary Range"); } // Cleanup messy abbreviations from SAP if (labelText.includes("(Short)")) { labelEl.innerText = labelText.replace(/(Short)/g, "(s)"); } // BRUTE FORCE STYLING: Override SAP's native CSS for the Labels labelEl.style.setProperty('font-weight', 'bold', 'important'); labelEl.style.setProperty('font-size', '14px', 'important'); labelEl.style.setProperty('color', '#303030', 'important'); labelEl.style.setProperty('font-family', 'Verdana, Geneva, sans-serif', 'important'); // BRUTE FORCE STYLING: Override SAP's native CSS for the Values let valueEl = el.querySelector('.rtltextaligneligible'); if (valueEl) { valueEl.style.setProperty('font-weight', 'normal', 'important'); valueEl.style.setProperty('font-size', '15px', 'important'); valueEl.style.setProperty('color', '#303030', 'important'); valueEl.style.setProperty('font-family', 'Verdana, Geneva, sans-serif', 'important'); } // ICON MAPPING: Assign specific Glyphicons or custom image URLs based on the token type let icon = ''; let iconUrl = ''; switch (customPropertyid) { case 'JobLocation': icon = 'glyphicon-map-marker'; break; case 'BusinessUnit': icon = 'glyphicon-briefcase'; break; case 'JobCategory': icon = 'glyphicon-dashboard'; break; case 'EmploymentType': icon = 'glyphicon-star-empty'; break; case 'ReqID': icon = 'glyphicon-calendar'; break; case 'WorkLocationType': icon = 'glyphicon-paste'; break; case 'JobExperienceLevel': iconUrl = 'https://rmkcdn.successfactors.com/ef55fddb/b4cf3492-3cb2-4e29-a914-3.png'; break; case 'SalaryRange': iconUrl = 'https://rmkcdn.successfactors.com/ef55fddb/3bd06ab1-e5dc-4e72-abcb-3.png'; break; case 'TAPartner': iconUrl = 'https://rmkcdn.successfactors.com/ef55fddb/66a66419-f8c9-4f0e-b94a-6.png'; break; } // Generate the HTML for the icon (either a span for a font-icon or an img tag) let iconHtml = ''; if (icon) { iconHtml = ``; } else if (iconUrl) { iconHtml = ``; } // SAFE DOM MANIPULATION // Wrap the existing token and the new icon inside a flexible flexbox row container. // We use DOM traversal (previousElementSibling) to avoid using dynamic ID queries which can fail if SAP injects weird characters. let containerToWrap = labelEl.parentElement; if(containerToWrap) { containerToWrap.insertAdjacentHTML('beforebegin', `\n
\n${iconHtml}`); let wrapper = containerToWrap.previousElementSibling; if(wrapper) { wrapper.appendChild(containerToWrap); // Clean up residual text nodes (like line breaks) to prevent unwanted spacing in the layout let nextNode = wrapper.nextSibling; if(nextNode && nextNode.nodeType === 3) nextNode.remove(); } } // Finally, move the fully formatted token element into our custom green grid grid.appendChild(el); } catch (err) { // If a specific token is malformed by SAP, log the error but allow the loop to continue formatting the rest of the tokens console.error("Erro ao processar o token:", err); } }); // 8. FINAL CLEANUP // Remove the raw text strings from the bottom of the job description that were used as data fallbacks if (descDiv) { let descHtml = descDiv.innerHTML; descHtml = descHtml.replace(/Employee Group:[sS]*?(?=\n
\n arr.some(keyword => normalized.includes(keyword)); if (contains(["employee group"])) return "EmployeeGroup"; if (contains(["country", "land", "país", "pays", "paese", "kraj", "krajina"])) return "CountryRegion"; if (contains(["region", "región", "région", "регион", "地区"])) return "Region"; if (contains(["posting job location", "job location", "joblokation", "jobsted", "arbeitsort", "ubicación", "site de l'emploi", "lokalizacja", "местоположение", "miesto", "职位地点", "sede di lavoro"])) return "JobLocation"; if (contains(["salary range", "annual recruitment salary", "løninterval", "gehaltsspanne", "przedział wynagrodzenia", "fourchette", "rango salarial", "mzdové rozpätie", "lønramme", "диапазон зарплаты"])) return "SalaryRange"; if (contains(["job experience level", "erfaringsniveau", "erfahrungsniveau", "poziom doświadczenia", "expérience professionnelle", "experiência"])) return "JobExperienceLevel"; if (contains(["posting job level", "job level", "jobniveau", "joblevel", "nivel del puesto", "niveau du poste", "poziom stanowiska", "уровень должности", "úroveň pozície"])) return "JobLevel"; if (contains(["employment type", "ansættelse", "beschäftigungsart", "tipo de emprego", "type d'emploi", "rodzaj zatrudnienia", "тип занятости", "typ pracovného pomeru", "员工类型", "tipologia di impiego", "tipo de empleo"])) return "EmploymentType"; if (contains(["work location type", "arbejdsstedstype", "arbeitsmodell", "tipo de ubicacion", "emplacement de travail", "miejsca pracy", "формат работы", "výkonu práce", "工作地点类型", "modalità di lavoro"])) return "WorkLocationType"; if (contains(["job category", "jobkategori", "stellenkategorie", "categoría", "catégorie", "kategoria", "категория должности", "kategória", "职位类别", "area professionale"])) return "JobCategory"; if (contains(["business unit", "segment", "segmento", "firmaenhed", "unternehmenseinheit", "jednostka biznesowa", "сегмент", "业务板块"])) return "BusinessUnit"; if (contains(["req id", "rek-id", "kennung", "id de solicitud", "identifiant de la demande", "identyfikator", "идентификатор", "id pracovní pozície", "需求 id", "identifikačné", "id posizione", "requisition id", "stellen-id"])) return "ReqID"; if (contains(["ta partner", "partenaire ta"])) return "TAPartner"; // Fallback: If no match, strip spaces and punctuation to create a camelCase-style ID return jobLayoutTokenLabel.replace(/[s:()][]/g,'');} \n
\n
\nAnnual Salary Range: \n
\n
Job Description\n
\n
\nThe candidate in this role will maintain and repair machine tools used in manufacturing production and testing. They are responsible for conducting repairs, preventive maintenance (PM), modifications, installations, and rearrangements of both building and production equipment and systems. This is a 2nd Shift position, Monday through Friday, from 3:00 p.m. to 11:00 p.m., offering a pay range of $29.50 to $33.00 per hour, depending on experience. Additionally, there is a $1,500 sign-on bonus, with $750 awarded after 3 months and another $750 after 6 months.\n
\n
\nEmployees are eligible for benefits on the first day of employment which include medical, dental, vision, 401(k), tuition reimbursement, annual bonus program, paid parental leave for birthing and non-birthing parents, a great working environment including 100% climate-controlled facility and much more! Danfoss offers 3 weeks paid PTO accrued over each bi-weekly paycheck plus 13 paid holidays including annual paid shutdown week between Christmas and New Year's. We pride ourselves on growing our human potential and encouraging career growth within our facilities. \n
\n
Job Responsibilities\n
\n
\nRepair of machines used in production including chuck repair, replacing hydraulic oil hoses and leaks, replacing lube blocks, valves, belts, cylinders, seals. Also aligns turrets, spindles, and tailstock. Repairs chip conveyors and tanks and resolves bearing issues. Electrical repair includes replacing switches, solenoids, cooling fans, fuses relays and contactors. \n
\n
\nPerforms preventative maintenance on all machines. Finds root cause fixes using 8-D and 4-step problems solving analysis. \n
\n
Background and Skills\n
\n
\n
- \n
- High School Diploma
- One (1) year certificate from college or technical school
- Three (3) to six (6) months experience
- Equivalent experience and education will be considered
\n
\n
\n
\n
\n
\n
LANGUAGE SKILLS:\n
\n
\nAbility to read and interpret documents such as safety rules, operating and maintenance instructions, and procedure manuals. Ability to write routine reports and correspondence. Ability to speak effectively before groups of customers or employees of organization.\n
\n
MATHEMATICAL SKILLS:\n
\n
\nAbility to work with mathematical concepts such as probability and statistical inference, and fundamentals of plane and solid geometry and trigonometry. Ability to apply concepts such as fractions, percentages, ratios, and proportions to practical situations.\n
\n
REASONING ABILITY:\n
\n
\nAbility to solve practical problems and deal with a variety of concrete variables in situations where only limited standardization exists. Ability to interpret a variety of instructions furnished in written, oral, diagram, or schedule form.\n
\n
Employee Benefits\n
\n
\n
- \n
- Three (3) weeks of Paid Time Off annually for newly hired employees
- 13 paid holidays, including floating holidays annually
- Annual Bonus Program
- 401(k) Savings Plan with company match and safe harbor contributions
- Medical, Dental, and Vision Insurance eligibility upon date of hire
- Company paid Basic Life Insurance & AD&D, Short-Term Disability Insurance, and Long-Term Disability Insurance (with enhanced buy up option)
- Optional Life Insurance & AD&D (including Spouse/Child Optional) coverage
- Healthcare Flexible Spending Account, Dependent Care Flexible Spending and a Health Savings Account (including company contribution) if enrolled in applicable Danfoss Medical P
\n
\n
\n
\n
\n
\n
\n