BFIN 367

Financial Reporting & Analysis

Follow the numbers. Find the story.

Connecting the financial statements...

Exam Prep

Module 6 & 7 Mastery

Focus your review on Asset Recognition (Mod 6) and Liability Recognition (Mod 7). The 90 questions (45 per module) and interactive exercises will automatically validate your inputs as you engage with them!

Feature Warning: Use the flag icon on any question to log ones you want to revisit. Save your progress by downloading your study report via the bottom button! This feature only works while this webpage is open. Once you close or refresh the page, your flagging will reset.

Showing all topics and question types.
Showing 0 questions
`; if (typeof htmlDocx !== 'undefined') { const converted = htmlDocx.asBlob(htmlContent); const url = URL.createObjectURL(converted); const a = document.createElement('a'); a.href = url; a.download = "Module6_7_Study_Report.docx"; document.body.appendChild(a); a.click(); setTimeout(() => { document.body.removeChild(a); URL.revokeObjectURL(url); }, 100); } else { const blob = new Blob(['\ufeff', htmlContent], { type: 'application/msword' }); const url = URL.createObjectURL(blob); const a = document.createElement('a'); a.href = url; a.download = "Module6_7_Study_Report.doc"; document.body.appendChild(a); a.click(); setTimeout(() => { document.body.removeChild(a); URL.revokeObjectURL(url); }, 100); } } /* --- Interactive Visualizer Logic --- */ window.calculateAmortizationSchedule = function() { const faceInput = document.getElementById('viz-face'); if (!faceInput) return; // Prevent errors if not rendered const faceValue = parseFloat(faceInput.value) || 0; const statedRate = parseFloat(document.getElementById('viz-stated').value) || 0; const marketRate = parseFloat(document.getElementById('viz-market').value) || 0; const periods = parseInt(document.getElementById('viz-periods').value) || 0; const statedDec = statedRate / 100; const marketDec = marketRate / 100; const payment = faceValue * statedDec; let pvPrincipal = faceValue / Math.pow(1 + marketDec, periods); let pvInterest = payment * ((1 - Math.pow(1 + marketDec, -periods)) / marketDec); let issuePrice = pvPrincipal + pvInterest; // Update Issue Price Summary document.getElementById('viz-issue-price').innerText = '$' + issuePrice.toLocaleString(undefined, {minimumFractionDigits: 2, maximumFractionDigits: 2}); // Generate Table let scheduleHTML = ''; let currentCV = issuePrice; for (let i = 1; i <= periods; i++) { let intExp = currentCV * marketDec; let amort = payment - intExp; currentCV = currentCV - amort; // Subtracting because payment > intExp for premium, or adding if discount (negative amort) scheduleHTML += ` ${i} $${payment.toLocaleString(undefined, {minimumFractionDigits: 2, maximumFractionDigits: 2})} $${intExp.toLocaleString(undefined, {minimumFractionDigits: 2, maximumFractionDigits: 2})} $${Math.abs(amort).toLocaleString(undefined, {minimumFractionDigits: 2, maximumFractionDigits: 2})} $${currentCV.toLocaleString(undefined, {minimumFractionDigits: 2, maximumFractionDigits: 2})} `; } document.getElementById('viz-schedule-body').innerHTML = scheduleHTML; }; /* --- Calculator Logic --- */ let calcInput = ""; function toggleCalculator() { const calc = document.getElementById('calculator-container'); calc.classList.toggle('hidden'); if(!calc.classList.contains('hidden') && !calc.style.left) { calc.style.bottom = '2rem'; calc.style.right = '2rem'; calc.style.left = 'auto'; calc.style.top = 'auto'; } } function updateDisplay() { const display = document.getElementById('calc-display'); display.innerText = calcInput === "" ? "0" : calcInput; display.scrollLeft = display.scrollWidth; } function appendNum(num) { calcInput += num; updateDisplay(); } function appendOp(op) { const lastChar = calcInput.slice(-1); if (['+', '-', '*', '/'].includes(lastChar)) calcInput = calcInput.slice(0, -1) + op; else if (calcInput !== "") calcInput += op; updateDisplay(); } function backspace() { calcInput = calcInput.slice(0, -1); updateDisplay(); } function clearCalc() { calcInput = ""; updateDisplay(); } function calculate() { try { if (calcInput === "") return; const result = eval(calcInput); if (!isFinite(result) || isNaN(result)) calcInput = "Error"; else calcInput = String(Math.round(result * 1000000) / 1000000); } catch (e) { calcInput = "Error"; } updateDisplay(); } const calcContainer = document.getElementById('calculator-container'); const dragHandle = document.getElementById('calc-drag-handle'); let isDragging = false; let dragStartX, dragStartY, initialLeft, initialTop; dragHandle.addEventListener("mousedown", dragStart); document.addEventListener("mouseup", dragEnd); document.addEventListener("mousemove", drag); dragHandle.addEventListener("touchstart", dragStart, {passive: false}); document.addEventListener("touchend", dragEnd); document.addEventListener("touchmove", drag, {passive: false}); function dragStart(e) { if (!e.target.closest('#calc-drag-handle') || e.target.tagName === 'BUTTON' || e.target.closest('button')) return; isDragging = true; const rect = calcContainer.getBoundingClientRect(); initialLeft = rect.left; initialTop = rect.top; if (e.type === "touchstart") { dragStartX = e.touches[0].clientX; dragStartY = e.touches[0].clientY; } else { dragStartX = e.clientX; dragStartY = e.clientY; } calcContainer.style.bottom = 'auto'; calcContainer.style.right = 'auto'; calcContainer.style.left = initialLeft + 'px'; calcContainer.style.top = initialTop + 'px'; calcContainer.style.transform = 'none'; } function dragEnd(e) { isDragging = false; } function drag(e) { if (!isDragging) return; e.preventDefault(); let currentX, currentY; if (e.type === "touchmove") { currentX = e.touches[0].clientX; currentY = e.touches[0].clientY; } else { currentX = e.clientX; currentY = e.clientY; } const dx = currentX - dragStartX; const dy = currentY - dragStartY; calcContainer.style.left = (initialLeft + dx) + 'px'; calcContainer.style.top = (initialTop + dy) + 'px'; } document.addEventListener('keydown', (e) => { const calcContainer = document.getElementById('calculator-container'); if (!calcContainer.classList.contains('hidden')) { const isInputActive = document.activeElement && (document.activeElement.tagName === 'INPUT' || document.activeElement.tagName === 'TEXTAREA' || document.activeElement.tagName === 'SELECT'); if (isInputActive) return; if (e.key === 'Enter') { e.preventDefault(); calculate(); } else if (e.key === 'Backspace') { e.preventDefault(); backspace(); } else if (e.key === 'Escape') { e.preventDefault(); toggleCalculator(); } else if (e.key === 'c' || e.key === 'C') { e.preventDefault(); clearCalc(); } else if (['0','1','2','3','4','5','6','7','8','9','.'].includes(e.key)) { e.preventDefault(); appendNum(e.key); } else if (['+','-','*','/'].includes(e.key)) { e.preventDefault(); appendOp(e.key); } } }); document.addEventListener('DOMContentLoaded', () => { document.getElementById('count-all').innerText = questions.length; document.getElementById('count-mcq').innerText = questions.filter(q => q.module === 'Multiple Choice').length; document.getElementById('count-exercises').innerText = questions.filter(q => q.module === 'Exercises').length; renderQuestions(); });