{"id":1005,"date":"2025-09-18T03:04:34","date_gmt":"2025-09-18T03:04:34","guid":{"rendered":"https:\/\/wiseexcellence.co.za\/Tertiary\/?p=1005"},"modified":"2026-01-31T05:18:48","modified_gmt":"2026-01-31T05:18:48","slug":"limiting-factor","status":"publish","type":"post","link":"https:\/\/wiseexcellence.co.za\/Tertiary\/limiting-factor\/","title":{"rendered":"Limiting Factor Analysis"},"content":{"rendered":"\n\n\n{&#8220;title&#8221;:&#8221;&#8221;,&#8221;content&#8221;:&#8221;<!DOCTYPE html>\\r\\n<html lang=\\\"en\\\">\\r\\n<head>\\r\\n    <meta charset=\\\"UTF-8\\\">\\r\\n    <meta name=\\\"viewport\\\" content=\\\"width=device-width, initial-scale=1.0\\\">\\r\\n    <title>Management Accounting Study Guide: Variance Analysis<\/title>  \\r\\n       <script src=\\\"https:\/\/cdn.tailwindcss.com\\\"><\/script><link href=\\\"https:\/\/fonts.googleapis.com\/css2?family=Inter:wght@400;500;600;700&#038;display=swap\\\"\/>\\r\\n    <style>\\r\\n        body {\\r\\n            font-family: 'Inter', sans-serif;\\r\\n            background-color: #f1f5f9; \/* slate-100 *\/\\r\\n            touch-action: pan-y;\\r\\n        }\\r\\n        .guide-container {\\r\\n            min-height: 480px;\\r\\n        }\\r\\n        .content-card {\\r\\n            opacity: 0;\\r\\n            transform: translateX(20px);\\r\\n            transition: opacity 0.4s ease-out, transform 0.4s ease-out;\\r\\n            will-change: opacity, transform;\\r\\n        }\\r\\n        .content-card.active {\\r\\n            opacity: 1;\\r\\n            transform: translateX(0);\\r\\n        }\\r\\n        .progress-bar-inner {\\r\\n            transition: width 0.3s ease-in-out;\\r\\n        }\\r\\n        .topic-button, .quiz-action-button {\\r\\n            transition: all 0.2s ease-in-out;\\r\\n        }\\r\\n        .topic-button:hover, .quiz-action-button:hover {\\r\\n            transform: translateY(-2px);\\r\\n            box-shadow: 0 4px 20px rgba(16, 185, 129, 0.2);\\r\\n        }\\r\\n        ::selection {\\r\\n            background: #059669; \/* emerald-600 *\/\\r\\n            color: #ffffff;\\r\\n        }\\r\\n    <\/style>\\r\\n<\/head>\\r\\n<body class=\\\"bg-slate-100 text-slate-800 flex items-center justify-center min-h-screen p-4\\\">\\r\\n\\r\\n    <div class=\\\"w-full max-w-4xl mx-auto\\\">\\r\\n        <main id=\\\"app-container\\\" class=\\\"bg-white rounded-xl shadow-lg shadow-emerald-500\/10 p-6 md:p-8 relative\\\">\\r\\n            <div class=\\\"absolute top-4 right-6 text-xs text-slate-400 font-semibold\\\">created by Wise Excellence<\/div>\\r\\n            \\r\\n            <!-- Main Menu View -->\\r\\n            <div id=\\\"main-menu\\\">\\r\\n                <h2 class=\\\"text-2xl font-semibold mb-6 text-center text-emerald-700\\\">Select a Topic to Begin<\/h2>\\r\\n                <div id=\\\"topic-grid\\\" class=\\\"grid grid-cols-1 md:grid-cols-2 gap-5\\\">\\r\\n                    <!-- Topic buttons will be inserted here by JavaScript -->\\r\\n                <\/div>\\r\\n            <\/div>\\r\\n\\r\\n            <!-- Study Guide View -->\\r\\n            <div id=\\\"study-guide\\\" class=\\\"hidden\\\">\\r\\n                <button id=\\\"back-to-menu\\\" class=\\\"mb-4 text-sm font-medium text-emerald-600 hover:text-emerald-500\\\">&larr; Back to Topics<\/button>\\r\\n                \\r\\n                <div id=\\\"guide-content-wrapper\\\" class=\\\"guide-container relative flex items-center justify-center\\\">\\r\\n                    <!-- Content will be dynamically inserted here -->\\r\\n                <\/div>\\r\\n\\r\\n                <!-- Navigation and Progress -->\\r\\n                <div class=\\\"mt-6\\\">\\r\\n                    <div class=\\\"flex justify-between items-center mb-2\\\">\\r\\n                        <span id=\\\"progress-text\\\" class=\\\"text-sm text-slate-500\\\"><\/span>\\r\\n                        <span id=\\\"topic-title\\\" class=\\\"text-sm font-semibold text-slate-600\\\"><\/span>\\r\\n                    <\/div>\\r\\n                    <div class=\\\"w-full bg-slate-200 rounded-full h-2.5\\\">\\r\\n                        <div id=\\\"progress-bar\\\" class=\\\"bg-emerald-500 h-2.5 rounded-full progress-bar-inner\\\"><\/div>\\r\\n                    <\/div>\\r\\n                    <div id=\\\"navigation-buttons\\\" class=\\\"flex justify-between items-center mt-4\\\">\\r\\n                        <!-- Navigation buttons will be injected here -->\\r\\n                    <\/div>\\r\\n                <\/div>\\r\\n            <\/div>\\r\\n        <\/main>\\r\\n        <footer class=\\\"text-center mt-6\\\">\\r\\n                    <\/footer>\\r\\n    <\/div>\\r\\n    \\r\\n    <!-- Quiz Modal -->\\r\\n    <div id=\\\"quiz-modal\\\" class=\\\"fixed inset-0 bg-black bg-opacity-60 hidden items-center justify-center p-4 backdrop-blur-sm\\\">\\r\\n        <div id=\\\"quiz-content\\\" class=\\\"bg-white border border-emerald-500\/20 rounded-lg shadow-2xl p-6 w-full max-w-2xl max-h-[90vh] overflow-y-auto\\\">\\r\\n             <!-- Quiz content will be injected here -->\\r\\n        <\/div>\\r\\n    <\/div>\\r\\n\\r\\n\\r\\n    <script>\\r\\n        document.addEventListener('DOMContentLoaded', () => {\\r\\n            const studyData = [\\r\\n                {\\r\\n                    topic: \\\"Calculating The Break-Even Point\\\",\\r\\n                    content: [\\r\\n                        { title: \\\"Multi-Product Break-Even\\\", text: \\\"When a business sells multiple products, you can't just use a single product's numbers. You need to calculate a 'Weighted Average Contribution Margin' (WACM) that considers how much each product contributes to profit and its share of total sales (sales mix).\\\" },\\r\\n                        { title: \\\"Step 1: Find the Contribution Margin\\\", text: \\\"First, find the contribution margin for EACH product. This is the amount each unit sold contributes to covering fixed costs. The formula is: <br><br><b>Selling Price per Unit - Variable Cost per Unit<\/b>.\\\" },\\r\\n                        { title: \\\"Step 2: Calculate WACM\\\", text: \\\"Next, calculate the Weighted Average Contribution Margin (WACM). This blends each product's contribution based on its sales mix percentage. <br><br><b>WACM = (Product A CM x Sales Mix %) + (Product B CM x Sales Mix %) + ...<\/b>\\\" },\\r\\n                        { title: \\\"Step 3: Calculate Break-Even Units\\\", text: \\\"Now you can find the TOTAL number of units the business needs to sell to break even. The formula is: <br><br><b>Break-Even Units = Total Fixed Costs \/ WACM<\/b>. Remember to always round this number UP to the next whole unit.\\\" },\\r\\n                        { title: \\\"Step 4: Allocate Units to Products\\\", text: \\\"Once you have the total break-even units, allocate them back to each product based on their sales mix percentage. For example: <br><br><b>Product A Units = Total Break-Even Units x Product A Sales Mix %<\/b>\\\" },\\r\\n                        { title: \\\"Step 5: Calculate Break-Even Revenue\\\", text: \\\"Finally, to find the total sales revenue needed to break even, multiply the allocated units for each product by their respective selling prices and add them all together. <br><br><b>Revenue = (Product A Units x Price A) + (Product B Units x Price B) + ...<\/b>\\\" },\\r\\n                        { title: \\\"What About a Target Profit?\\\", text: \\\"If the business wants to achieve a certain profit (not just break even), the calculation is almost the same. Simply add the target profit to the fixed costs in the numerator: <br><br><b>Units for Target Profit = (Fixed Costs + Target Profit) \/ WACM<\/b>\\\" }\\r\\n                    ],\\r\\n                    quiz: [\\r\\n                        { question: \\\"What does WACM stand for?\\\", options: [\\\"Weighted Actual Cost Margin\\\", \\\"Weighted Average Contribution Margin\\\", \\\"Whole Average Cost Model\\\", \\\"Weighted Asset Contribution Model\\\"], answer: \\\"Weighted Average Contribution Margin\\\" },\\r\\n                        { question: \\\"How is the Contribution Margin per unit calculated?\\\", options: [\\\"Selling Price + Variable Cost\\\", \\\"Selling Price - Fixed Cost\\\", \\\"Selling Price - Variable Cost\\\", \\\"Total Sales \/ Total Units\\\"], answer: \\\"Selling Price - Variable Cost\\\" },\\r\\n                        { question: \\\"To find the total break-even point in units for a multi-product business, you divide Total Fixed Costs by...\\\", options: [\\\"Total Sales\\\", \\\"The highest Contribution Margin\\\", \\\"The sales mix percentage\\\", \\\"The WACM\\\"], answer: \\\"The WACM\\\" },\\r\\n                        { question: \\\"If a business has a target profit of R50,000, what do you do with this amount in the break-even formula?\\\", options: [\\\"Subtract it from the WACM\\\", \\\"Add it to the Total Fixed Costs\\\", \\\"Multiply it by the sales mix\\\", \\\"Ignore it\\\"], answer: \\\"Add it to the Total Fixed Costs\\\" },\\r\\n                        { question: \\\"A business sells two products. Product A has a CM of R10 and a 60% sales mix. Product B has a CM of R20 and a 40% sales mix. What is the WACM?\\\", options: [\\\"R14\\\", \\\"R15\\\", \\\"R16\\\", \\\"R12\\\"], answer: \\\"R14\\\" }\\r\\n                    ]\\r\\n                }\\r\\n            ];\\r\\n\\r\\n            const mainMenu = document.getElementById('main-menu');\\r\\n            const studyGuide = document.getElementById('study-guide');\\r\\n            const topicGrid = document.getElementById('topic-grid');\\r\\n            const guideContainer = document.getElementById('guide-content-wrapper');\\r\\n            const progressBar = document.getElementById('progress-bar');\\r\\n            const progressText = document.getElementById('progress-text');\\r\\n            const topicTitleEl = document.getElementById('topic-title');\\r\\n            const backToMenuBtn = document.getElementById('back-to-menu');\\r\\n            const quizModal = document.getElementById('quiz-modal');\\r\\n            const quizContent = document.getElementById('quiz-content');\\r\\n            const navigationButtons = document.getElementById('navigation-buttons');\\r\\n\\r\\n            let currentTopicIndex = 0;\\r\\n            let currentSectionIndex = 0;\\r\\n\\r\\n            function initializeMenu() {\\r\\n                topicGrid.innerHTML = '';\\r\\n                studyData.forEach((topicData, index) => {\\r\\n                    const button = document.createElement('button');\\r\\n                    button.className = `topic-button bg-white p-6 rounded-lg shadow-md text-left border border-emerald-500\/20 hover:bg-slate-50 ${studyData.length === 1 ? 'md:col-span-2' : ''}`;\\r\\n                    button.innerHTML = `\\r\\n                        <h3 class=\\\"text-xl font-semibold text-emerald-600\\\">${topicData.topic}<\/h3>\\r\\n                        <p class=\\\"text-slate-500 mt-1 text-sm\\\">${topicData.content.length} sections<\/p>\\r\\n                    `;\\r\\n                    button.onclick = () => startTopic(index);\\r\\n                    topicGrid.appendChild(button);\\r\\n                });\\r\\n            }\\r\\n\\r\\n            function startTopic(topicIndex) {\\r\\n                currentTopicIndex = topicIndex;\\r\\n                currentSectionIndex = 0;\\r\\n                mainMenu.classList.add('hidden');\\r\\n                studyGuide.classList.remove('hidden');\\r\\n                renderSection();\\r\\n            }\\r\\n\\r\\n            function backToMenu() {\\r\\n                mainMenu.classList.remove('hidden');\\r\\n                studyGuide.classList.add('hidden');\\r\\n            }\\r\\n\\r\\n            function renderSection() {\\r\\n                const section = studyData[currentTopicIndex].content[currentSectionIndex];\\r\\n                guideContainer.innerHTML = `\\r\\n                    <div class=\\\"content-card text-center p-4 w-full\\\">\\r\\n                        <h2 class=\\\"text-2xl font-bold mb-4 text-emerald-600\\\">${section.title}<\/h2>\\r\\n                        <div class=\\\"text-slate-700 leading-relaxed min-h-[250px] text-left\\\">${section.text}<\/div>\\r\\n                    <\/div>\\r\\n                `;\\r\\n                \\r\\n                setTimeout(() => {\\r\\n                    guideContainer.querySelector('.content-card')?.classList.add('active');\\r\\n                }, 50);\\r\\n\\r\\n                updateNavigation();\\r\\n            }\\r\\n            \\r\\n            function handleQuiz() {\\r\\n                quizModal.style.display = 'flex';\\r\\n                const quizData = studyData[currentTopicIndex].quiz;\\r\\n                if (quizData && quizData.length > 0) {\\r\\n                    renderQuiz(quizData);\\r\\n                } else {\\r\\n                     quizContent.innerHTML = `<p class=\\\"text-yellow-500 text-center\\\">No quiz available for this topic.<\/p> <button onclick=\\\"document.getElementById('quiz-modal').style.display='none'\\\" class=\\\"mt-4 bg-slate-200 py-2 px-4 rounded\\\">Close<\/button>`;\\r\\n                }\\r\\n            }\\r\\n\\r\\n            function renderQuiz(quizData) {\\r\\n                let quizHTML = `<h2 class=\\\"text-2xl font-bold mb-6 text-center text-emerald-600\\\">Quiz on ${studyData[currentTopicIndex].topic}<\/h2>`;\\r\\n                quizData.forEach((q, index) => {\\r\\n                    quizHTML += `<div class=\\\"mb-6\\\" data-answer=\\\"${q.answer.replace(\/\\\"\/g, '&quot;')}\\\">\\r\\n                        <p class=\\\"font-semibold mb-3 text-slate-800\\\">${index + 1}. ${q.question}<\/p>\\r\\n                        <div class=\\\"space-y-2 text-slate-700\\\">`;\\r\\n                    q.options.forEach(opt => {\\r\\n                        quizHTML += `<label class=\\\"flex items-center p-3 rounded-lg border border-slate-200 cursor-pointer hover:bg-slate-100 has-[:checked]:bg-emerald-100 has-[:checked]:border-emerald-400\\\">\\r\\n                            <input type=\\\"radio\\\" name=\\\"q${index}\\\" value=\\\"${opt.replace(\/\\\"\/g, '&quot;')}\\\" class=\\\"mr-3 w-4 h-4 text-emerald-600 bg-slate-100 border-slate-300 focus:ring-emerald-500 focus:ring-2\\\">\\r\\n                            <span>${opt}<\/span>\\r\\n                        <\/label>`;\\r\\n                    });\\r\\n                    quizHTML += `<\/div><p class=\\\"result-text mt-2 text-sm font-medium hidden\\\"><\/p><\/div>`;\\r\\n                });\\r\\n                quizHTML += `<div class=\\\"flex justify-between items-center mt-6\\\">\\r\\n                    <button id=\\\"close-quiz-btn\\\" class=\\\"bg-slate-500 hover:bg-slate-600 text-white font-bold py-2 px-4 rounded-lg\\\">Close<\/button>\\r\\n                    <button id=\\\"submit-quiz-btn\\\" class=\\\"bg-emerald-600 hover:bg-emerald-700 text-white font-bold py-2 px-4 rounded-lg\\\">Check Answers<\/button>\\r\\n                <\/div>`;\\r\\n                quizContent.innerHTML = quizHTML;\\r\\n                document.getElementById('submit-quiz-btn').addEventListener('click', () => {\\r\\n                    quizData.forEach((q, index) => {\\r\\n                        const container = quizContent.querySelectorAll('div[data-answer]')[index];\\r\\n                        const selected = container.querySelector(`input[name=\\\"q${index}\\\"]:checked`);\\r\\n                        const resultText = container.querySelector('.result-text');\\r\\n                        resultText.classList.remove('hidden');\\r\\n                        if (selected) {\\r\\n                            if (selected.value === q.answer) {\\r\\n                                resultText.textContent = 'Correct!';\\r\\n                                resultText.className = 'result-text mt-2 text-sm font-medium text-green-600';\\r\\n                            } else {\\r\\n                                resultText.textContent = `Incorrect. The correct answer is: ${q.answer}`;\\r\\n                                resultText.className = 'result-text mt-2 text-sm font-medium text-red-600';\\r\\n                            }\\r\\n                        } else {\\r\\n                            resultText.textContent = 'No answer selected.';\\r\\n                            resultText.className = 'result-text mt-2 text-sm font-medium text-yellow-600';\\r\\n                        }\\r\\n                    });\\r\\n                    document.getElementById('submit-quiz-btn').disabled = true;\\r\\n                });\\r\\n                document.getElementById('close-quiz-btn').addEventListener('click', () => quizModal.style.display = 'none');\\r\\n            }\\r\\n\\r\\n            function updateNavigation() {\\r\\n                navigationButtons.innerHTML = '';\\r\\n                const topic = studyData[currentTopicIndex];\\r\\n                const totalSections = topic.content.length;\\r\\n                const progressPercentage = ((currentSectionIndex + 1) \/ totalSections) * 100;\\r\\n                progressBar.style.width = `${progressPercentage}%`;\\r\\n                progressText.textContent = `Section ${currentSectionIndex + 1} of ${totalSections}`;\\r\\n                topicTitleEl.textContent = topic.topic;\\r\\n\\r\\n                const prevButton = document.createElement('button');\\r\\n                prevButton.id = 'prev-btn';\\r\\n                prevButton.className = 'bg-slate-200 hover:bg-slate-300 text-slate-700 font-bold py-2 px-6 rounded-lg transition-colors disabled:opacity-50 disabled:cursor-not-allowed';\\r\\n                prevButton.textContent = 'Previous';\\r\\n                prevButton.onclick = navigatePrev;\\r\\n                prevButton.disabled = currentSectionIndex === 0;\\r\\n                \\r\\n                const nextButton = document.createElement('button');\\r\\n                nextButton.id = 'next-btn';\\r\\n                \\r\\n                if (currentSectionIndex === totalSections - 1) {\\r\\n                    nextButton.className = 'quiz-action-button bg-green-600 hover:bg-green-700 text-white font-bold py-2 px-6 rounded-lg transition-colors';\\r\\n                    nextButton.textContent = 'Finish Topic';\\r\\n                    nextButton.onclick = backToMenu;\\r\\n                    const quizButton = document.createElement('button');\\r\\n                    quizButton.id = 'quiz-btn';\\r\\n                    quizButton.className = 'quiz-action-button bg-emerald-600 hover:bg-emerald-700 text-white font-bold py-2 px-6 rounded-lg';\\r\\n                    quizButton.textContent = '\u270d\ufe0f Take Quiz';\\r\\n                    quizButton.onclick = handleQuiz;\\r\\n                    navigationButtons.appendChild(prevButton);\\r\\n                    navigationButtons.appendChild(quizButton);\\r\\n                    navigationButtons.appendChild(nextButton);\\r\\n                } else {\\r\\n                    nextButton.className = 'bg-emerald-600 hover:bg-emerald-700 text-white font-bold py-2 px-6 rounded-lg transition-colors';\\r\\n                    nextButton.textContent = 'Next';\\r\\n                    nextButton.onclick = navigateNext;\\r\\n                    navigationButtons.appendChild(prevButton);\\r\\n                    navigationButtons.appendChild(nextButton);\\r\\n                }\\r\\n            }\\r\\n            \\r\\n            function navigateNext() {\\r\\n                if (currentSectionIndex < studyData[currentTopicIndex].content.length - 1) {\\r\\n                    currentSectionIndex++;\\r\\n                    renderSection();\\r\\n                }\\r\\n            }\\r\\n\\r\\n            function navigatePrev() {\\r\\n                if (currentSectionIndex > 0) {\\r\\n                    currentSectionIndex--;\\r\\n                    renderSection();\\r\\n                }\\r\\n            }\\r\\n\\r\\n            let touchstartX = 0;\\r\\n            guideContainer.addEventListener('touchstart', e => { touchstartX = e.changedTouches[0].screenX; }, { passive: true });\\r\\n            guideContainer.addEventListener('touchend', e => {\\r\\n                let touchendX = e.changedTouches[0].screenX;\\r\\n                if (touchendX < touchstartX - 50) { \/\/ Swipe Left\\r\\n                    const nextBtn = document.getElementById('next-btn') || document.querySelector('.quiz-action-button[onclick=\\\"backToMenu()\\\"]');\\r\\n                    if(nextBtn) nextBtn.click();\\r\\n                }\\r\\n                if (touchendX > touchstartX + 50) { \/\/ Swipe Right\\r\\n                    document.getElementById('prev-btn')?.click();\\r\\n                }\\r\\n            }, { passive: true });\\r\\n            \\r\\n            backToMenuBtn.addEventListener('click', backToMenu);\\r\\n            document.addEventListener('keydown', (e) => {\\r\\n                if(studyGuide.classList.contains('hidden') || quizModal.style.display === 'flex') return;\\r\\n                if (e.key === 'ArrowRight') {\\r\\n                     const nextBtn = document.getElementById('next-btn') || document.querySelector('.quiz-action-button[onclick=\\\"backToMenu()\\\"]');\\r\\n                    if(nextBtn) nextBtn.click();\\r\\n                }\\r\\n                if (e.key === 'ArrowLeft') document.getElementById('prev-btn')?.click();\\r\\n            });\\r\\n\\r\\n            \/\/ If there's only one topic, start it automatically\\r\\n            if (studyData.length === 1) {\\r\\n                startTopic(0);\\r\\n            } else {\\r\\n                initializeMenu();\\r\\n            }\\r\\n        });\\r\\n    <\/script>\\r\\n<\/body>\\r\\n<\/html>&#8220;}\n\n\n\n\n\n\n\n","protected":false},"excerpt":{"rendered":"","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"pagelayer_contact_templates":[],"_pagelayer_content":"","footnotes":""},"categories":[41],"tags":[],"class_list":["post-1005","post","type-post","status-publish","format-standard","hentry","category-cost-accounting"],"_links":{"self":[{"href":"https:\/\/wiseexcellence.co.za\/Tertiary\/wp-json\/wp\/v2\/posts\/1005","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wiseexcellence.co.za\/Tertiary\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/wiseexcellence.co.za\/Tertiary\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/wiseexcellence.co.za\/Tertiary\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/wiseexcellence.co.za\/Tertiary\/wp-json\/wp\/v2\/comments?post=1005"}],"version-history":[{"count":14,"href":"https:\/\/wiseexcellence.co.za\/Tertiary\/wp-json\/wp\/v2\/posts\/1005\/revisions"}],"predecessor-version":[{"id":1193,"href":"https:\/\/wiseexcellence.co.za\/Tertiary\/wp-json\/wp\/v2\/posts\/1005\/revisions\/1193"}],"wp:attachment":[{"href":"https:\/\/wiseexcellence.co.za\/Tertiary\/wp-json\/wp\/v2\/media?parent=1005"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/wiseexcellence.co.za\/Tertiary\/wp-json\/wp\/v2\/categories?post=1005"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/wiseexcellence.co.za\/Tertiary\/wp-json\/wp\/v2\/tags?post=1005"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}