${titleText}
`); // 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*([^\n\r]+)/i); if (eg) employeeGroupValue = eg[1].toLowerCase().trim(); } if (!countryRegionValue) { let cr = descText.match(/Country:\s*([^\n\r]+)/i); if (cr) countryRegionValue = cr[1].toLowerCase().trim(); } if (!regionValue) { let rg = descText.match(/Region:\s*([^\n\r]+)/i); if (rg) regionValue = rg[1].toLowerCase().trim(); } if (!jobLevelValue) { let jl = descText.match(/Job Level:\s*([^\n\r]+)/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") || /\bus\b/.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', `
${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:[\s\S]*?(?=
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,'');}
The Impact You'll Make
Join the Turbocor Finance team and gain hands-on experience in manufacturing finance while supporting key business decisions. As a Finance Intern, you'll apply cost accounting concepts in a real-world environment and contribute to activities that help drive financial accuracy, operational efficiency, and informed decision-making.
You'll work closely with Finance, Supply Chain, and Operations, gaining exposure to factory controlling, inventory management, capital investments, and financial analysis. This is an opportunity to build practical experience while learning from experienced finance professionals in a collaborative team environment.
As part of a team that supports financial planning, forecasting, budgeting, compliance, and business performance analysis, you'll develop valuable skills and insights that can help launch your career in finance.
What You'll Be Doing
What We're Looking For
What You'll Get from Us
Ready to Make a Difference?
If this role excites you, we'd love to hear from you! Apply now to start the conversation and learn more about where your career can go with us.
Our Commitment to Transparency
Salary ranges listed reflect only primary location and currency. For local salary ranges and specific benefits in your preferred hiring location, please ask your Talent Acquisition representative for more information.
The actual salary offer will carefully consider a wide range of factors, including your skills, qualifications, experience, and location. Any benefits listed do not promise or guarantee any particular benefit or specific action. They may depend on country or contract specifics and are subject to change at any time without prior notice.
Want to know more? Please visit our FAQ Page.
All qualified applicants will receive consideration for employment without regard to race, color, religion, sex, sexual orientation, gender identity, national origin, age, disability, veteran status, or other protected category.
Employee Group: Intern/Apprentice
Country: United States
Region: NAM
Information at a Glance
`); // 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*([^\n\r]+)/i); if (eg) employeeGroupValue = eg[1].toLowerCase().trim(); } if (!countryRegionValue) { let cr = descText.match(/Country:\s*([^\n\r]+)/i); if (cr) countryRegionValue = cr[1].toLowerCase().trim(); } if (!regionValue) { let rg = descText.match(/Region:\s*([^\n\r]+)/i); if (rg) regionValue = rg[1].toLowerCase().trim(); } if (!jobLevelValue) { let jl = descText.match(/Job Level:\s*([^\n\r]+)/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") || /\bus\b/.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', `
${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:[\s\S]*?(?=
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,'');}
The Impact You'll Make
Join the Turbocor Finance team and gain hands-on experience in manufacturing finance while supporting key business decisions. As a Finance Intern, you'll apply cost accounting concepts in a real-world environment and contribute to activities that help drive financial accuracy, operational efficiency, and informed decision-making.
You'll work closely with Finance, Supply Chain, and Operations, gaining exposure to factory controlling, inventory management, capital investments, and financial analysis. This is an opportunity to build practical experience while learning from experienced finance professionals in a collaborative team environment.
As part of a team that supports financial planning, forecasting, budgeting, compliance, and business performance analysis, you'll develop valuable skills and insights that can help launch your career in finance.
What You'll Be Doing
- Support asset capitalization activities and help maintain accurate investment order records throughout the asset lifecycle.
- Partner with Supply Chain and Operations to assist with inventory control processes, blocked stock follow-up, and cycle count activities.
- Help analyze purchase price and production variances, contributing to factory controlling and cost management initiatives.
- Compile, update, and review financial data to support ongoing analysis and reporting for the Factory Controller and Senior Business Analyst.
- Maintain accurate records, follow through on assigned actions, and apply cost accounting principles to support operational and financial objectives.
What We're Looking For
- Currently pursuing a postgraduate degree in Finance.
- Strong interest in cost accounting, manufacturing finance, and supply chain operations.
- Demonstrated curiosity, initiative, and willingness to learn in a business environment.
- Ability to collaborate effectively with cross-functional teams across Finance, Supply Chain, and Operations.
- Available to work 20 hours per week on-site in Tallahassee, Florida.
- Legally authorized to work in the United States; visa sponsorship is not available for this position.
What You'll Get from Us
- We promote from within and support your learning with mentoring, training, and access to global opportunities.
- You'll have flexibility, autonomy, and support to do your best work while maintaining a healthy work-life balance. Your well-being matters to us.
- We strive to create an inclusive work environment where people of all backgrounds are respected, and valued for who they are.
- You'll receive benefits like annual bonus, paid vacation, pension plans, personal insurance, and more. These vary by country and contract, but they're worth asking about-we think they're pretty great.
Ready to Make a Difference?
If this role excites you, we'd love to hear from you! Apply now to start the conversation and learn more about where your career can go with us.
Our Commitment to Transparency
Salary ranges listed reflect only primary location and currency. For local salary ranges and specific benefits in your preferred hiring location, please ask your Talent Acquisition representative for more information.
The actual salary offer will carefully consider a wide range of factors, including your skills, qualifications, experience, and location. Any benefits listed do not promise or guarantee any particular benefit or specific action. They may depend on country or contract specifics and are subject to change at any time without prior notice.
Want to know more? Please visit our FAQ Page.
All qualified applicants will receive consideration for employment without regard to race, color, religion, sex, sexual orientation, gender identity, national origin, age, disability, veteran status, or other protected category.
Employee Group: Intern/Apprentice
Country: United States
Region: NAM
Information at a Glance
