Open to Opportunities

George Gamal|

General Accountant · Revenue Accountant · Alexandria
Specialized in: Real Estate Investment Accountant |

Experienced in financial reporting, revenue accounting, inventory control, and daily journal entries across real estate and commercial sectors.

Download CV
📊IFRS Standards
💼Financial Statements & P&L
📑VAT & Tax Compliance
⚡ERP & Advanced Excel
جورج جمال | George Gamal - جورج جمال حلمي محاسب عام ومحاسب إيرادات بالإسكندرية
General Accountant
📈
2+ Years Experience
🏢
4+ Corporate Firms
📜
10+ Certified Programs
Scroll
🏛️ETA E-Invoicing: 100% Validated
📈IFRS 15 Revenue Recognition
⚖️Double-Entry: Zero Variance
📊Egyptian VAT (14%) & WHT Compliance
💼Financial Statements & P&L Reporting
🏢Real Estate Cost & Installment Accounting
⚡Advanced Excel Models & Odoo ERP
🛡️Form 41 & Form 10 Tax Filing
🏛️ETA E-Invoicing: 100% Validated
📈IFRS 15 Revenue Recognition
⚖️Double-Entry: Zero Variance
📊Egyptian VAT (14%) & WHT Compliance
💼Financial Statements & P&L Reporting
🏢Real Estate Cost & Installment Accounting
⚡Advanced Excel Models & Odoo ERP
🛡️Form 41 & Form 10 Tax Filing
01 — About

About Me

George Gamal Helmy (جورج جمال حلمي) is an accounting professional graduated from the University of Sadat City (English Section) with practical experience in general accounting, financial reporting, revenue recognition, inventory control, and daily journal entries across real estate and commercial companies.

"Detail-oriented with a strong commitment to accuracy, compliance, and continuous professional development."

With experience spanning real estate investment, commercial retail, and accounting offices, I bring a comprehensive view of financial operations and a dedication to delivering reliable, accurate results.

2024Graduated
2Years Exp.
4+Companies
10+Certificates
02 — Education

Education

🎓
Bachelor's Degree in Commerce (English Section)
University of Sadat City (USC)
Major: Accounting  ·  Grade: Good  ·  2024
03 — Experience

Work History

May 2025 – Present
Revenue Accountant
Robel Real Estate Investment — Alexandria

Managing revenue recognition, journal entries, and financial reporting for real estate transactions.

Real Estate ERP Advanced Excel ETA E-Invoicing IFRS 15 Standard
  • Recognized monthly revenue for unit installments under IFRS 15 guidelines.
  • Audited customer payment schedules and reconciled receivables aging reports.
  • Generated monthly P&L and project development expenditure reports.
Jan 2025 – Oct 2025
Inventory Accountant (Part-Time)
Abu Harbi Mall — Alexandria

Maintained inventory records, reconciled stock levels, and ensured accurate cost tracking.

Retail POS / ERP Stock Valuation FIFO Costing
  • Reconciled POS daily retail sales against physical warehouse movements.
  • Conducted cycle counts and resolved stock variance discrepancy reports.
  • Audited supplier purchasing invoices and recorded Cost of Goods Sold (COGS).
Nov 2024 – Mar 2025
General Accountant
Al Noor Company — Alexandria

Handled daily journal entries, accounts payable/receivable, and financial statement preparation.

Odoo ERP Bank Reconciliation VAT Form 10
  • Executed full cycle AP/AR vouchers and month-end Trial Balance closures.
  • Compiled monthly multi-account bank reconciliation statements with zero variance.
  • Supported preparation of balance sheets and corporate tax submissions.
Sep 2024 – Nov 2024
Sales (Indoor)
Vezeeta Company — Alexandria

Indoor sales representative managing client interactions and processing transactions.

2021 – Aug 2024
Teacher for Students with Disabilities
Fairhaven School — Alexandria

Developed tailored learning programs and provided academic support for students with diverse needs.

Jul 2023 – Sep 2023
Accountant (Intern)
Saeed Fayez Accounting Office

Assisted with bookkeeping, financial records, and client account management.

Commercial Books Audit Files Tax Preparation
  • Audited daily journals and supported documentation for commercial client files.
  • Organized tax declaration workpapers and annual closing spreadsheets.
04 — Certifications

Certifications & Training

📜 Courses & Certificates
Diploma in Financial Accountant RTC
Resala Training Center
Jul – Sep 2024
Youth Employment Preparation
Reyada Association for Development
Aug 2024
Computer Essentials (ICDL)
Edraak
Jul 2024
Principles of Social Media Management
Yanfaa
May 2024
Employability Skills Track
UCCD Sadat & AUC
Oct 2023
Excel Formulas Essential Training
Unihance
Aug 2022
Digital Marketing (Challenger & Professional)
Udacity — Egypt FWD
Feb – Jul 2021
Entrepreneurship & Marketing
For9a.com & HP Life
2021
Entrepreneurship Training (Youth2030 – AUS)
EYouth & AUS
2023
🎓 Internships & Training
Marketing Professional Course
AUC — American University in Cairo
May 2024
Credential ID: 007436
PharmaOverseas Summer Training
PharmaOverseas
Jul 2024
Sales, Change Management, AI, Marketing & Invoicing.
EBSM & Bank Misr Training
Egyptian Banking System Model
Oct 2023
Branch operations, Bank Services & Financial Inclusion.
Soft Skills & Work Environment
Emirates NBD & Eyouth
Oct 2023
Communication, time management & workplace adaptability.
InnovEgypt Program
InnovEgypt
Sep 2023
45-hour training & startup project development.
Sadat City Authority Training
Sadat City Authority
Jul – Aug 2023
Administrative & financial tasks within the city authority.
Global Entrepreneurship Week (GEW)
AUC — American University in Cairo
Jul 2023
Summer Training Program
EG Bank & Eyouth
Aug 2022
Entrepreneurship Summer Program
CIB Bank
Jul 2022
Financial Inclusion Internship
Bank Misr
Jul 2022
05 — Skills

Financial & Technical Matrix

📑 IFRS Standards

Financial Reporting & P&L

Proficiency 96%
  • Balance Sheet & Income Statement generation
  • Cash Flow statements (Direct & Indirect)
  • Month-end and year-end financial closings
🏛️ ETA Portal

ETA E-Invoicing & VAT Tax

Proficiency 98%
  • Egyptian Tax Authority (ETA) e-invoice portal
  • Monthly VAT filing (Form 10) & compliance
  • Withholding Tax (WHT Form 41) deductions
⚡ Advanced Modeling

Advanced Excel & Modeling

Proficiency 95%
  • Complex Formulas (XLOOKUP, INDEX/MATCH)
  • Dynamic Pivot Tables, Charts & Dashboards
  • Financial audit models & reconciliation sheets
📦 Cost Accounting

Inventory & Cost Control

Proficiency 94%
  • Stock ledger valuation (FIFO / Weighted Average)
  • Periodic physical counts & inventory adjustments
  • Cost of Goods Sold (COGS) variance tracking
🏢 Real Estate

Real Estate Investment

Proficiency 93%
  • Revenue recognition for installment contracts
  • Customer payment schedules & aging analysis
  • Project cost allocation and development tracking
⚖️ Daily Accounting

Daily Ledger & Bank Rec

Proficiency 99%
  • Automated double-entry daily journal vouchers
  • Monthly multi-currency bank reconciliation
  • General Ledger audit & Trial Balance integrity
💻 ERP Software

ERP & Financial Systems

Proficiency 92%
  • Chart of Accounts (COA) setup & structure
  • Odoo ERP accounting & invoicing workflow
  • AP/AR sub-ledger reconciliation
🤝 Executive

Internal Audit & Leadership

Proficiency 95%
  • Internal controls & document audit verification
  • Cross-functional team coordination & reporting
  • Strategic problem solving and process optimization
06 - Calculate Yourself | Interactive Sandbox

Calculate Yourself: Real-Time Tax & Accounting Engine

Live Financial Engine

Instant Tax & Net Voucher Calculator

Test instant Egyptian VAT (14%) and withholding tax (1%) calculations across transactions.

Transaction Amount (EGP): 100,000 EGP
Base Invoice 100,000 EGP
Output VAT (14%) +14,000 EGP
Withholding (1%) -1,000 EGP
Net Receivable 113,000 EGP
06 — Objective

Career Objective

To develop a strong career as a General Accountant, contributing accurate financial reporting, reliable accounting records, and analytical support to enhance organizational performance and grow within a dynamic, professional environment.

07 — Volunteering

Volunteer Work

Sep 2025 – Present
Team Leader — Social Media
"The Effect Remains" Foundation — Alexandria

Category Leader in Social Media, responsible for designing all graphics and coordinating the department.

Sep 2024 – Aug 2025
Volunteer — Graphic Design & Marketing
Life Makers Foundation — Alexandria

Volunteer in the Social Media Department, specializing in graphic design and marketing content.

May 2023 – May 2024
Graphic Design Volunteer
TBH

Volunteer contributor in graphic design projects.

08 — Contact

Get In Touch

Open to full-time accounting roles, freelance projects, and collaboration. Feel free to reach out.

⬇ Download CV (PDF)
Download CV
, 'Σ', 'ROI', 'IFRS', 'TAX', 'P&L', 'ERP', 'Excel', '%', 'VAT']; window.addEventListener('mousemove', function(e) { mX = e.clientX; mY = e.clientY; }); function init() { cvs.width = window.innerWidth; cvs.height = window.innerHeight; nodes = []; var isMobile = window.innerWidth < 768; NUM = isMobile ? 22 : 55; REACH = isMobile ? 95 : 140; var activeTags = isMobile ? ['EGP', '$', 'P&L', 'ROI', '%'] : financeTags; for (var i = 0; i < NUM; i++) { nodes.push({ x: Math.random() * cvs.width, y: Math.random() * cvs.height, vx: (Math.random() - .5) * (isMobile ? 0.35 : 0.65), vy: (Math.random() - .5) * (isMobile ? 0.35 : 0.65), r: 1.4 + Math.random() * (isMobile ? 1.0 : 1.5), lbl: Math.random() > (isMobile ? 0.8 : 0.7) ? activeTags[Math.floor(Math.random() * activeTags.length)] : null, ph: Math.random() * 6.28 }); } } function draw() { ctx.clearRect(0, 0, cvs.width, cvs.height); clock++; var col = getComputedStyle(document.documentElement).getPropertyValue('--a').trim() || '#2563EB'; for (var i = 0; i < NUM; i++) { var n = nodes[i]; // Interactive mouse repulsion var dxm = n.x - mX, dym = n.y - mY, dm2 = dxm * dxm + dym * dym; if (dm2 < 24000) { var dm = Math.sqrt(dm2); if (dm > 0) { n.x += dxm / dm * 0.7; n.y += dym / dm * 0.7; } } n.x += n.vx; n.y += n.vy; if (n.x < 0 || n.x > cvs.width) n.vx *= -1; if (n.y < 0 || n.y > cvs.height) n.vy *= -1; for (var j = i + 1; j < NUM; j++) { var n2 = nodes[j], dx = n.x - n2.x, dy = n.y - n2.y, d2 = dx * dx + dy * dy; if (d2 < REACH * REACH) { var alpha = (1 - Math.sqrt(d2) / REACH) * 0.35; ctx.globalAlpha = alpha; ctx.strokeStyle = col; ctx.lineWidth = 0.75; ctx.beginPath(); ctx.moveTo(n.x, n.y); ctx.lineTo(n2.x, n2.y); ctx.stroke(); if ((clock + i * 7 + j * 3) % 110 < 4) { var t = ((clock + i * 7 + j * 3) % 110) / 4; var px = n.x + (n2.x - n.x) * t, py = n.y + (n2.y - n.y) * t; ctx.globalAlpha = 0.85; ctx.fillStyle = col; ctx.shadowBlur = 8; ctx.shadowColor = col; ctx.beginPath(); ctx.arc(px, py, 2.2, 0, 6.28); ctx.fill(); ctx.shadowBlur = 0; } } } var pulse = 0.5 + 0.5 * Math.sin(clock * 0.04 + n.ph); ctx.globalAlpha = 0.4 + 0.3 * pulse; ctx.fillStyle = col; ctx.beginPath(); ctx.arc(n.x, n.y, n.r * (1 + 0.25 * pulse), 0, 6.28); ctx.fill(); if (n.lbl) { ctx.globalAlpha = 0.35 + 0.25 * pulse; ctx.fillStyle = col; ctx.font = '600 11px Inter, sans-serif'; ctx.fillText(n.lbl, n.x + 6, n.y - 3); } } /* ════ Interactive Laser Arcs from Cursor to Nodes ════ */ for (var k = 0; k < NUM; k++) { var nk = nodes[k]; var dkx = nk.x - mX, dky = nk.y - mY; var distK = Math.sqrt(dkx * dkx + dky * dky); if (distK < 155) { ctx.beginPath(); ctx.moveTo(mX, mY); ctx.lineTo(nk.x, nk.y); ctx.strokeStyle = col; ctx.globalAlpha = (1 - distK / 155) * 0.45; ctx.lineWidth = 1.1; ctx.stroke(); } } /* ════ Glowing Financial Growth Trendline Wave ════ */ ctx.save(); ctx.beginPath(); var waveY = cvs.height * 0.76; for (var wx = 0; wx <= cvs.width; wx += 22) { var wy = waveY + Math.sin(wx * 0.003 + clock * 0.018) * 30 + Math.cos(wx * 0.007 + clock * 0.012) * 16; if (wx === 0) ctx.moveTo(wx, wy); else ctx.lineTo(wx, wy); } ctx.strokeStyle = col; ctx.globalAlpha = 0.14; ctx.lineWidth = 1.6; ctx.stroke(); ctx.lineTo(cvs.width, cvs.height); ctx.lineTo(0, cvs.height); ctx.closePath(); var waveGrad = ctx.createLinearGradient(0, waveY - 40, 0, cvs.height); waveGrad.addColorStop(0, col); waveGrad.addColorStop(1, 'transparent'); ctx.fillStyle = waveGrad; ctx.globalAlpha = 0.035; ctx.fill(); ctx.restore(); ctx.globalAlpha = 1; requestAnimationFrame(draw); } window.addEventListener('resize', init); init(); draw(); })(); /* ✨ ANIMATED STAT COUNTERS (COUNT-UP) ✨ */ (function initCountUp() { var counters = document.querySelectorAll('[data-count]'); if (!counters.length) return; var counted = new Set(); var countObserver = new IntersectionObserver(function(entries) { entries.forEach(function(entry) { if (entry.isIntersecting && !counted.has(entry.target)) { counted.add(entry.target); var el = entry.target; var target = parseInt(el.getAttribute('data-count'), 10); var suffix = el.getAttribute('data-suffix') || ''; var startTime = null; var duration = 1200; function animate(currentTime) { if (!startTime) startTime = currentTime; var progress = Math.min((currentTime - startTime) / duration, 1); var ease = progress === 1 ? 1 : 1 - Math.pow(2, -10 * progress); var current = Math.floor(ease * target); el.textContent = current + suffix; if (progress < 1) { requestAnimationFrame(animate); } else { el.textContent = target + suffix; } } requestAnimationFrame(animate); } }); }, { threshold: 0.25 }); counters.forEach(function(c) { countObserver.observe(c); }); })(); /* ✨ CERTIFICATE LIGHTBOX MODAL ✨ */ window.openCertModal = function(e, src, title) { if(e) e.preventDefault(); var modal = document.getElementById('certModal'); var content = document.getElementById('certModalContent'); var titleEl = document.getElementById('certModalTitle'); var linkEl = document.getElementById('certModalLink'); if(!modal || !content) return; titleEl.textContent = title || (isAr ? 'معاينة الشهادة' : 'Certificate Preview'); linkEl.href = src; if(src.toLowerCase().endsWith('.pdf')) { content.innerHTML = ''; } else { content.innerHTML = '' + (title || 'Certificate') + ''; } modal.classList.add('active'); document.body.style.overflow = 'hidden'; }; window.closeCertModal = function(e) { if(e && e.target && e.target.closest('.cert-modal-box') && !e.target.classList.contains('cert-modal-close')) { return; } var modal = document.getElementById('certModal'); if(modal) modal.classList.remove('active'); document.body.style.overflow = ''; }; document.addEventListener('keydown', function(e) { if(e.key === 'Escape') closeCertModal(); }); /* ✨ MOBILE QUICK ACTION BAR SCROLL TRIGGER ✨ */ var mobBar = document.getElementById('mobileQuickBar'); window.addEventListener('scroll', function() { if(!mobBar) return; if(window.scrollY > 160) { mobBar.classList.add('visible'); } else { mobBar.classList.remove('visible'); } }, { passive: true }); /* ✨ DYNAMIC TYPEWRITER & ROLE CYCLER ✨ */ (function() { var rolesEn = [ "Real Estate Investment Accountant", "Inventory & Cost Control Analyst", "Cost Accountant", "Expense & Accounts Payable Accountant", "Revenue Recognition & IFRS Specialist", "General & Financial Reporting Accountant", "VAT, Tax & ETA E-Invoicing Specialist" ]; var rolesAr = [ "محاسب استثمار عقاري", "محاسب تكاليف وتحليل مخزون", "محاسب تكاليف", "محاسب مصاريف ومدفوعات", "محاسب إيرادات ومعايير IFRS", "محاسب عام وقوائم مالية", "أخصائي ضرائب وفاتورة إلكترونية" ]; var textEl = document.getElementById('roleRotator'); if(!textEl) return; var currentIdx = 0; var charIdx = 0; var isDeleting = false; var timeoutId = null; function getList() { return (typeof isAr !== 'undefined' && isAr) ? rolesAr : rolesEn; } window.updateTypewriterLang = function(ar) { if(timeoutId) clearTimeout(timeoutId); currentIdx = 0; charIdx = 0; isDeleting = false; type(); }; function type() { var list = getList(); var currentText = list[currentIdx % list.length]; if (isDeleting) { textEl.textContent = currentText.substring(0, charIdx - 1); charIdx--; } else { textEl.textContent = currentText.substring(0, charIdx + 1); charIdx++; } var speed = isDeleting ? 25 : 55; if (!isDeleting && charIdx === currentText.length) { speed = 2200; // Pause when complete isDeleting = true; } else if (isDeleting && charIdx === 0) { isDeleting = false; currentIdx++; speed = 400; // Pause before typing next } timeoutId = setTimeout(type, speed); } type(); })(); /* ════ ULTRA NAME TYPEWRITER & BILINGUAL GLOW ════ */ (function initNameTypewriter() { var nameEl = document.getElementById('nameTypewriter'); if (!nameEl) return; var names = [ { first: "George", accent: "Gamal", last: "" }, { first: "George", accent: "Gamal", last: "Helmy" }, { first: "جورج", accent: "جمال", last: "" }, { first: "جورج", accent: "جمال", last: "حلمي" } ]; var currentIdx = (typeof isAr !== 'undefined' && isAr) ? 2 : 0; var stage = 0; // 0: first, 1: accent, 2: last var charIdx = 0; var isDeleting = false; var timeoutId = null; function render(fText, aText, lText) { var html = fText; if (aText) { html += ' ' + aText + ''; } if (lText) { html += ' ' + lText; } nameEl.innerHTML = html; } window.triggerNameTypewriterReset = function(ar) { if (timeoutId) clearTimeout(timeoutId); currentIdx = ar ? 2 : 0; stage = 0; charIdx = 0; isDeleting = false; render('', '', ''); type(); }; function type() { var n = names[currentIdx % names.length]; var fTarget = n.first; var aTarget = n.accent; var lTarget = n.last; if (!isDeleting) { if (stage === 0) { charIdx++; render(fTarget.substring(0, charIdx), '', ''); if (charIdx >= fTarget.length) { stage = 1; charIdx = 0; } } else if (stage === 1) { charIdx++; render(fTarget, aTarget.substring(0, charIdx), ''); if (charIdx >= aTarget.length) { stage = 2; charIdx = 0; } } else if (stage === 2) { charIdx++; render(fTarget, aTarget, lTarget.substring(0, charIdx)); if (charIdx >= lTarget.length) { nameEl.classList.add('name-glow-pulse'); setTimeout(function() { nameEl.classList.remove('name-glow-pulse'); }, 1400); isDeleting = true; timeoutId = setTimeout(type, 3800); return; } } var speed = 65 + Math.random() * 25; timeoutId = setTimeout(type, speed); } else { if (stage === 2) { if (charIdx > 0) { charIdx--; render(fTarget, aTarget, lTarget.substring(0, charIdx)); } else { stage = 1; charIdx = aTarget.length; } } else if (stage === 1) { if (charIdx > 0) { charIdx--; render(fTarget, aTarget.substring(0, charIdx), ''); } else { stage = 0; charIdx = fTarget.length; } } else if (stage === 0) { if (charIdx > 0) { charIdx--; render(fTarget.substring(0, charIdx), '', ''); } else { isDeleting = false; if (typeof isAr !== 'undefined' && isAr) { currentIdx = (currentIdx === 2) ? 3 : 2; } else { currentIdx = (currentIdx === 0) ? 1 : 0; } stage = 0; charIdx = 0; timeoutId = setTimeout(type, 450); return; } } timeoutId = setTimeout(type, 30); } } render('', '', ''); timeoutId = setTimeout(type, 300); })(); /* ════ FINANCIAL CLICK SPARK BURST ════ */ (function initClickSparks() { var glyphs = ['\u2726', '\u2605', '+', '\u25B2', '\u2022', '\u25C6']; var colors = ['#0284c7', '#38bdf8', '#10b981', '#f59e0b', '#a855f7']; document.addEventListener('pointerdown', function(e) { var burst = document.createElement('div'); burst.className = 'click-spark-burst'; burst.style.left = e.clientX + 'px'; burst.style.top = e.clientY + 'px'; var count = 8; for (var i = 0; i < count; i++) { var s = document.createElement('span'); s.className = 'click-spark'; s.textContent = glyphs[Math.floor(Math.random() * glyphs.length)]; var angle = (i / count) * 2 * Math.PI + (Math.random() - 0.5) * 0.4; var dist = 35 + Math.random() * 45; var tx = Math.cos(angle) * dist + 'px'; var ty = Math.sin(angle) * dist + 'px'; s.style.setProperty('--tx', tx); s.style.setProperty('--ty', ty); s.style.setProperty('--color', colors[Math.floor(Math.random() * colors.length)]); burst.appendChild(s); } document.body.appendChild(burst); setTimeout(function() { if (burst && burst.parentNode) burst.parentNode.removeChild(burst); }, 800); }); })(); /* ✨ 3D PERSPECTIVE TILT & HERO SPOTLIGHT ✨ */ (function() { var hero = document.getElementById('hero'); var spotlight = document.getElementById('heroSpotlight'); var photoWrap = document.getElementById('hPhotoWrap'); var frame = document.getElementById('hFrame'); var glare = document.getElementById('hGlare'); if (!hero) return; var isFine = window.matchMedia('(pointer: fine)').matches; // Spotlight tracking on PC if (spotlight && isFine) { hero.addEventListener('mousemove', function(e) { var rect = hero.getBoundingClientRect(); var x = ((e.clientX - rect.left) / rect.width) * 100; var y = ((e.clientY - rect.top) / rect.height) * 100; spotlight.style.setProperty('--spot-x', x.toFixed(1) + '%'); spotlight.style.setProperty('--spot-y', y.toFixed(1) + '%'); }, { passive: true }); } // Photo Card is rock-solid & stable (No erratic 3D tilting or wobbling) })(); /* ✨ MAGNETIC BUTTONS PHYSICS ✨ */ (function() { if (!window.matchMedia('(pointer: fine)').matches) return; var btns = document.querySelectorAll('.h-btns .btn'); btns.forEach(function(btn) { btn.addEventListener('mousemove', function(e) { var rect = btn.getBoundingClientRect(); var relX = e.clientX - (rect.left + rect.width / 2); var relY = e.clientY - (rect.top + rect.height / 2); var pullX = relX * 0.32; var pullY = relY * 0.32; btn.style.transition = 'transform 0.1s ease-out, box-shadow 0.25s ease'; btn.style.transform = 'translate3d(' + pullX.toFixed(1) + 'px, ' + pullY.toFixed(1) + 'px, 0) scale(1.04)'; }); btn.addEventListener('mouseleave', function() { btn.style.transition = 'transform 0.6s cubic-bezier(0.175, 0.885, 0.32, 1.275), box-shadow 0.3s ease'; btn.style.transform = 'translate3d(0, 0, 0) scale(1)'; }); }); })(); /* ✨ INTERACTIVE CARD SPOTLIGHTS ✨ */ (function() { if (!window.matchMedia('(pointer: fine)').matches) return; var cards = document.querySelectorAll('.tl-item, .cert-item, .sk-card-rich'); cards.forEach(function(card) { card.addEventListener('mousemove', function(e) { var rect = card.getBoundingClientRect(); var x = e.clientX - rect.left; var y = e.clientY - rect.top; card.style.setProperty('--card-mx', x + 'px'); card.style.setProperty('--card-my', y + 'px'); }, { passive: true }); }); })(); /* ✨ SMART SKILLS MATRIX FILTERING ✨ */ window.filterSkills = function(cat, btn) { var buttons = document.querySelectorAll('.sk-filter-btn'); buttons.forEach(function(b) { b.classList.remove('active'); }); if(btn) btn.classList.add('active'); var cards = document.querySelectorAll('.sk-card-rich'); cards.forEach(function(card) { if(cat === 'all' || card.getAttribute('data-cat') === cat) { card.classList.remove('hidden'); } else { card.classList.add('hidden'); } }); }; /* =================================================== EXECUTIVE CFO DASHBOARD & CORPORATE BI ENGINE =================================================== */ (function() { var cfoState = { tab: 'cfo', sector: 'realestate', period: 'annual', revenue: 36000000, cogsPct: 0.58, sgaPct: 0.12, taxRate: 0.225 }; window.switchFinSuiteTab = function(tabName) { cfoState.tab = tabName; var btnCfo = document.getElementById('tabBtnCfo'); var btnTax = document.getElementById('tabBtnTax'); var panelCfo = document.getElementById('cfoDashboardPanel'); var panelTax = document.getElementById('taxEnginePanel'); if(tabName === 'cfo') { if(btnCfo) btnCfo.classList.add('active'); if(btnTax) btnTax.classList.remove('active'); if(panelCfo) panelCfo.classList.add('active'); if(panelTax) panelTax.classList.remove('active'); renderCfoSvgChart(); } else { if(btnTax) btnTax.classList.add('active'); if(btnCfo) btnCfo.classList.remove('active'); if(panelTax) panelTax.classList.add('active'); if(panelCfo) panelCfo.classList.remove('active'); if(window.runSimCalc) window.runSimCalc(); } }; window.setCfoSector = function(sector) { cfoState.sector = sector; var pillRe = document.getElementById('secPillRealEstate'); var pillRet = document.getElementById('secPillRetail'); if(sector === 'realestate') { if(pillRe) pillRe.classList.add('active'); if(pillRet) pillRet.classList.remove('active'); // Real estate development standard margins cfoState.cogsPct = 0.58; cfoState.sgaPct = 0.12; } else { if(pillRet) pillRet.classList.add('active'); if(pillRe) pillRe.classList.remove('active'); // Commercial trade higher turnover tighter margin cfoState.cogsPct = 0.68; cfoState.sgaPct = 0.16; } var sliderCogs = document.getElementById('cfoRangeCogs'); var sliderSga = document.getElementById('cfoRangeSga'); if(sliderCogs) sliderCogs.value = Math.round(cfoState.cogsPct * 100); if(sliderSga) sliderSga.value = Math.round(cfoState.sgaPct * 100); updateCfoSimulation(); }; window.setCfoPeriod = function(period) { cfoState.period = period; var pillAnn = document.getElementById('perPillAnnual'); var pillQtr = document.getElementById('perPillQuarter'); if(period === 'annual') { if(pillAnn) pillAnn.classList.add('active'); if(pillQtr) pillQtr.classList.remove('active'); } else { if(pillQtr) pillQtr.classList.add('active'); if(pillAnn) pillAnn.classList.remove('active'); } renderCfoSvgChart(); }; window.setCfoRevValue = function(val) { var slider = document.getElementById('cfoRangeRev'); if(slider) { slider.value = val; updateCfoSimulation(); } }; window.resetCfoSimulation = function() { cfoState.revenue = 36000000; cfoState.sector = 'realestate'; cfoState.cogsPct = 0.58; cfoState.sgaPct = 0.12; var sliderRev = document.getElementById('cfoRangeRev'); var sliderCogs = document.getElementById('cfoRangeCogs'); var sliderSga = document.getElementById('cfoRangeSga'); if(sliderRev) sliderRev.value = 36000000; if(sliderCogs) sliderCogs.value = 58; if(sliderSga) sliderSga.value = 12; var pillRe = document.getElementById('secPillRealEstate'); var pillRet = document.getElementById('secPillRetail'); if(pillRe) pillRe.classList.add('active'); if(pillRet) pillRet.classList.remove('active'); updateCfoSimulation(); }; window.updateCfoSimulation = function() { var sliderRev = document.getElementById('cfoRangeRev'); var sliderCogs = document.getElementById('cfoRangeCogs'); var sliderSga = document.getElementById('cfoRangeSga'); if(sliderRev) cfoState.revenue = parseFloat(sliderRev.value) || 36000000; if(sliderCogs) cfoState.cogsPct = (parseFloat(sliderCogs.value) || 58) / 100; if(sliderSga) cfoState.sgaPct = (parseFloat(sliderSga.value) || 12) / 100; // Financial calculations var rev = cfoState.revenue; var cogs = rev * cfoState.cogsPct; var gross = rev - cogs; var grossMarginPct = (gross / rev) * 100; var sga = rev * cfoState.sgaPct; var ebitda = gross - sga; var ebitdaMarginPct = (ebitda / rev) * 100; // Corporate tax (Egyptian Tax Law No. 91 of 2005: 22.5%) var tax = ebitda > 0 ? ebitda * cfoState.taxRate : 0; var taxPctOfRev = (tax / rev) * 100; var netProfit = ebitda - tax; var netMarginPct = (netProfit / rev) * 100; function fmt(n) { return Math.round(n).toLocaleString() + ' EGP'; } // Update Slider Labels var valSliderRev = document.getElementById('valSliderRev'); var valSliderCogs = document.getElementById('valSliderCogs'); var valSliderSga = document.getElementById('valSliderSga'); if(valSliderRev) valSliderRev.textContent = fmt(rev); if(valSliderCogs) valSliderCogs.textContent = Math.round(cfoState.cogsPct * 100) + '%'; if(valSliderSga) valSliderSga.textContent = Math.round(cfoState.sgaPct * 100) + '%'; // Update KPI Metric Cards var elRev = document.getElementById('cfoKpiRev'); var elCogs = document.getElementById('cfoKpiCogs'); var elGross = document.getElementById('cfoKpiGross'); var elEbitda = document.getElementById('cfoKpiEbitda'); var elNet = document.getElementById('cfoKpiNet'); if(elRev) elRev.textContent = fmt(rev); if(elCogs) elCogs.textContent = fmt(cogs); if(elGross) elGross.textContent = fmt(gross); if(elEbitda) elEbitda.textContent = fmt(ebitda); if(elNet) elNet.textContent = fmt(netProfit); var cogsBadge = document.getElementById('cfoCogsPctBadge'); var marginBadge = document.getElementById('cfoMarginBadge'); var taxSub = document.getElementById('cfoTaxSub'); var netBadge = document.getElementById('cfoNetPctBadge'); if(cogsBadge) cogsBadge.textContent = (cfoState.cogsPct * 100).toFixed(1) + '%'; if(marginBadge) marginBadge.textContent = grossMarginPct.toFixed(1) + '%'; if(taxSub) { var isAr = document.documentElement.lang === 'ar' || document.body.classList.contains('lang-ar'); taxSub.textContent = (isAr ? 'ضريبة الشركات: ' : 'Corp Tax: ') + fmt(tax); } if(netBadge) { netBadge.textContent = netMarginPct.toFixed(1) + '%'; if(netMarginPct >= 15) { netBadge.className = 'cfo-trend-badge cfo-trend-up'; } else if(netMarginPct >= 5) { netBadge.className = 'cfo-trend-badge'; netBadge.style.background = 'rgba(245, 158, 11, 0.15)'; netBadge.style.color = '#F59E0B'; } else { netBadge.className = 'cfo-trend-badge cfo-trend-down'; } } // Update Allocation Progress Bar var barCogs = document.getElementById('barCogs'); var barSga = document.getElementById('barSga'); var barTax = document.getElementById('barTax'); var barNet = document.getElementById('barNet'); var allocSummary = document.getElementById('cfoAllocSummary'); var cogsW = Math.max(0, cfoState.cogsPct * 100); var sgaW = Math.max(0, cfoState.sgaPct * 100); var taxW = Math.max(0, taxPctOfRev); var netW = Math.max(0, netMarginPct); if(barCogs) barCogs.style.width = cogsW + '%'; if(barSga) barSga.style.width = sgaW + '%'; if(barTax) barTax.style.width = taxW + '%'; if(barNet) barNet.style.width = netW + '%'; if(allocSummary) { allocSummary.textContent = cogsW.toFixed(1) + '% COGS | ' + sgaW.toFixed(1) + '% SG&A | ' + taxW.toFixed(1) + '% Tax | ' + netW.toFixed(1) + '% Net'; } // Update Health Status var healthBox = document.getElementById('cfoHealthBadge'); var healthIcon = document.getElementById('cfoHealthIcon'); var healthText = document.getElementById('cfoHealthText'); var isAr = document.documentElement.lang === 'ar' || document.body.classList.contains('lang-ar'); if(healthBox && healthIcon && healthText) { if(netMarginPct >= 20) { healthBox.style.background = 'rgba(16, 185, 129, 0.08)'; healthBox.style.borderColor = 'rgba(16, 185, 129, 0.3)'; healthBox.style.color = '#10B981'; healthIcon.textContent = '🚀'; healthText.textContent = isAr ? 'أداء تشغيلي استثنائي وهوامش ربح وتدفقات نقدية ممتازة' : 'Exceptional Operating Efficiency & Healthy Solvency Margin'; } else if(netMarginPct >= 10) { healthBox.style.background = 'rgba(56, 189, 248, 0.08)'; healthBox.style.borderColor = 'rgba(56, 189, 248, 0.3)'; healthBox.style.color = '#38BDF8'; healthIcon.textContent = '⚖️'; healthText.textContent = isAr ? 'هوامش تجارية متوازنة مع سيولة تشغيلية مستقرة وكافية' : 'Balanced Commercial Margins with Safe Working Capital Liquidity'; } else { healthBox.style.background = 'rgba(239, 68, 68, 0.08)'; healthBox.style.borderColor = 'rgba(239, 68, 68, 0.3)'; healthBox.style.color = '#EF4444'; healthIcon.textContent = '⚠️'; healthText.textContent = isAr ? 'هوامش ضيقة: يُوصى بهندسة القيمة وترشيد تكاليف التنفيذ والتشغيل' : 'Compressed Margin: Value Engineering & Cost Rationalization Recommended'; } } renderCfoSvgChart(); }; window.renderCfoSvgChart = function() { var container = document.getElementById('cfoSvgChartBox'); if(!container) return; var rev = cfoState.revenue; var cogs = rev * cfoState.cogsPct; var sga = rev * cfoState.sgaPct; var ebitda = rev - cogs - sga; var tax = ebitda > 0 ? ebitda * cfoState.taxRate : 0; var net = ebitda - tax; var isAnnual = cfoState.period === 'annual'; var isAr = document.documentElement.lang === 'ar' || document.body.classList.contains('lang-ar'); // Data points var periods = []; if(isAnnual) { // 3 Years Comparison (2024 Actual, 2025 Actual, 2026 Target/Simulated) periods = [ { label: 'FY2024', rev: rev * 0.72, cogs: cogs * 0.74, sga: sga * 0.75, net: net * 0.68 }, { label: 'FY2025', rev: rev * 0.86, cogs: cogs * 0.88, sga: sga * 0.86, net: net * 0.82 }, { label: 'FY2026 (Sim)', rev: rev, cogs: cogs, sga: sga, net: net } ]; } else { // 4 Quarters breakdown periods = [ { label: isAr ? 'الربع 1' : 'Q1', rev: rev * 0.22, cogs: cogs * 0.22, sga: sga * 0.24, net: net * 0.20 }, { label: isAr ? 'الربع 2' : 'Q2', rev: rev * 0.25, cogs: cogs * 0.25, sga: sga * 0.25, net: net * 0.25 }, { label: isAr ? 'الربع 3' : 'Q3', rev: rev * 0.26, cogs: cogs * 0.26, sga: sga * 0.25, net: net * 0.27 }, { label: isAr ? 'الربع 4' : 'Q4', rev: rev * 0.27, cogs: cogs * 0.27, sga: sga * 0.26, net: net * 0.28 } ]; } var maxVal = 0; periods.forEach(function(p) { if(p.rev > maxVal) maxVal = p.rev; }); maxVal = maxVal * 1.15; // padding top var width = 500; var height = 230; var padding = { top: 25, right: 25, bottom: 35, left: 55 }; var chartW = width - padding.left - padding.right; var chartH = height - padding.top - padding.bottom; function scaleY(val) { return padding.top + chartH - (val / maxVal) * chartH; } function fmtM(n) { return (n / 1000000).toFixed(1) + 'M'; } var svgHtml = ''; // Gradients & Filters svgHtml += '' + '' + '' + '' + '' + ''; // Horizontal Grid Lines & Y-axis labels var gridSteps = 4; for(var i = 0; i <= gridSteps; i++) { var yVal = (maxVal / gridSteps) * i; var yPos = scaleY(yVal); svgHtml += ''; svgHtml += '' + fmtM(yVal) + ''; } // Bars var numGroups = periods.length; var groupW = chartW / numGroups; var barW = Math.min(22, (groupW - 20) / 4); var netPoints = []; periods.forEach(function(p, gIdx) { var groupCenter = padding.left + (gIdx * groupW) + (groupW / 2); var startX = groupCenter - ((barW * 4 + 6) / 2); // Bar 1: Rev var hRev = chartH - (scaleY(p.rev) - padding.top); var yRev = scaleY(p.rev); svgHtml += '' + (isAr ? 'الإيرادات: ' : 'Revenue: ') + Math.round(p.rev).toLocaleString() + ' EGP'; // Bar 2: COGS var hCogs = chartH - (scaleY(p.cogs) - padding.top); var yCogs = scaleY(p.cogs); svgHtml += '' + (isAr ? 'التكاليف المباشرة: ' : 'COGS: ') + Math.round(p.cogs).toLocaleString() + ' EGP'; // Bar 3: SG&A var hSga = chartH - (scaleY(p.sga) - padding.top); var ySga = scaleY(p.sga); svgHtml += '' + (isAr ? 'مصروفات عمومية: ' : 'SG&A: ') + Math.round(p.sga).toLocaleString() + ' EGP'; // Bar 4: Net var hNet = chartH - (scaleY(p.net) - padding.top); var yNet = scaleY(p.net); svgHtml += '' + (isAr ? 'صافي الربح: ' : 'Net Profit: ') + Math.round(p.net).toLocaleString() + ' EGP'; // Trend Line point var netPointX = startX + (barW + 2) * 3 + (barW / 2); netPoints.push({ x: netPointX, y: yNet, val: p.net }); // Group Label on X axis svgHtml += '' + p.label + ''; }); // Net Profit Connecting Polyline & Glowing Dots if(netPoints.length > 1) { var pointsAttr = netPoints.map(function(pt) { return pt.x + ',' + pt.y; }).join(' '); svgHtml += ''; netPoints.forEach(function(pt) { svgHtml += ''; }); } svgHtml += ''; container.innerHTML = svgHtml; }; window.exportCfoExecutiveSummary = function() { var rev = cfoState.revenue; var cogs = rev * cfoState.cogsPct; var gross = rev - cogs; var grossMargin = ((gross / rev) * 100).toFixed(1); var sga = rev * cfoState.sgaPct; var ebitda = gross - sga; var tax = ebitda > 0 ? ebitda * cfoState.taxRate : 0; var net = ebitda - tax; var netMargin = ((net / rev) * 100).toFixed(1); var now = new Date(); var dateStr = now.toLocaleDateString('en-GB') + ' ' + now.toLocaleTimeString('en-GB', { hour: '2-digit', minute: '2-digit' }); function fmt(n) { return Math.round(n).toLocaleString() + ' EGP'; } var sectorName = cfoState.sector === 'realestate' ? 'Real Estate Development (Robel Model)' : 'Commercial Trade & Distribution'; var printContent = 'Executive Boardroom P&L Memo - George Gamal' + '' + '
' + '
' + '

BOARDROOM FINANCIAL EXECUTIVE BRIEFING

' + '

Corporate Performance & P&L Sensitivity Model | Sector: ' + sectorName + '

' + '
' + '
' + '

GEORGE GAMAL

' + '

General Accountant & Financial Analyst

' + '
' + '
' + '
' + '
Simulation Date:' + dateStr + '
' + '
Corporate Tax Framework:Law 91/2005 (22.5%)
' + '
IFRS Standards:IFRS 15 (Revenue) / IAS 1
' + '
' + '' + '' + '' + '' + '' + '' + '' + '' + '' + '' + '
Financial Statement Line ItemRatio / Model BaseConsolidated Amount (EGP)
Gross Recognized Revenue100.0% of Volume' + fmt(rev) + '
Less: Cost of Goods Sold / Contracting Direct Costs (COGS)' + (cfoState.cogsPct * 100).toFixed(1) + '% Direct Cost- ' + fmt(cogs) + '
Gross Operating Profit' + grossMargin + '% Gross Margin' + fmt(gross) + '
Less: Selling, General & Administrative Expenses (SG&A)' + (cfoState.sgaPct * 100).toFixed(1) + '% Overhead- ' + fmt(sga) + '
Operating Profit Before Tax (EBITDA)Operating Margin' + fmt(ebitda) + '
Less: Egyptian Corporate Income Tax Provision22.5% Tax Rate- ' + fmt(tax) + '
NET PROFIT AFTER TAX (PAT)' + netMargin + '% Net Margin' + fmt(net) + '
' + '
' + '
Prepared and audited via George Gamal Financial BI Suite.
All balances comply with Egyptian Tax Authority & IFRS rules.
' + '
VERIFIED FINANCIAL AUDIT
' + '
' + ''; var printWin = window.open('', '_blank'); if(printWin) { printWin.document.open(); printWin.document.write(printContent); printWin.document.close(); setTimeout(function() { printWin.print(); }, 400); } }; // Initialize once DOM is ready if(document.readyState === 'loading') { document.addEventListener('DOMContentLoaded', function() { updateCfoSimulation(); }); } else { updateCfoSimulation(); } })(); /* =================================================== QUICK CALC WIDGET & MODAL CONTROLLER =================================================== */ (function() { var qcType = 'sales'; window.setQcType = function(type) { qcType = type; var btnSales = document.getElementById('qcTypeSales'); var btnPurch = document.getElementById('qcTypePurch'); var vatLbl = document.getElementById('qcVatLbl'); var netLbl = document.getElementById('qcNetLbl'); var isAr = document.documentElement.lang === 'ar' || document.body.classList.contains('lang-ar'); if(type === 'sales') { if(btnSales) btnSales.classList.add('active'); if(btnPurch) btnPurch.classList.remove('active'); if(vatLbl) vatLbl.textContent = isAr ? 'ضريبة مخرجات (14%)' : 'Output VAT (14%)'; if(netLbl) netLbl.textContent = isAr ? 'الصافي المستحق (مدين)' : 'Net Receivable'; } else { if(btnPurch) btnPurch.classList.add('active'); if(btnSales) btnSales.classList.remove('active'); if(vatLbl) vatLbl.textContent = isAr ? 'ضريبة مدخلات (14%)' : 'Input VAT (14%)'; if(netLbl) netLbl.textContent = isAr ? 'الصافي للدفع (دائن)' : 'Net Payable'; } // Sync with modal if open if(window.setSimType) window.setSimType(type); runQcCalc(); }; window.setQcAmount = function(amt) { var input = document.getElementById('qcInputAmount'); if(input) { input.value = amt; runQcCalc(); } }; window.runQcCalc = function() { var input = document.getElementById('qcInputAmount'); if(!input) return; var base = parseFloat(input.value) || 0; var vatRate = 0.14; var whtRate = 0.01; var vat = base * vatRate; var wht = base * whtRate; var net = qcType === 'sales' ? (base + vat - wht) : (base + vat - wht); function fmt(n) { return Math.round(n).toLocaleString() + ' EGP'; } var disp = document.getElementById('qcDisplayVal'); var valBase = document.getElementById('qcValBase'); var valVat = document.getElementById('qcValVat'); var valWht = document.getElementById('qcValWht'); var valNet = document.getElementById('qcValNet'); if(disp) disp.textContent = fmt(base); if(valBase) valBase.textContent = fmt(base); if(valVat) valVat.textContent = '+' + fmt(vat); if(valWht) valWht.textContent = '-' + fmt(wht); if(valNet) valNet.textContent = fmt(net); // Sync with the main simulator amount input inside the modal var simAmtInput = document.getElementById('simAmount'); if(simAmtInput && simAmtInput.value != base) { simAmtInput.value = base; if(window.runSimCalc) window.runSimCalc(); } }; /* Modal System */ window.openFinModal = function(tabName) { var modal = document.getElementById('finSuiteModal'); if(!modal) return; modal.classList.add('active'); document.body.style.overflow = 'hidden'; // Switch to requested tab if(typeof window.switchFinSuiteTab === 'function') { window.switchFinSuiteTab(tabName || 'cfo'); } // Trigger chart layout after modal is displayed setTimeout(function() { if(typeof window.renderCfoSvgChart === 'function') { window.renderCfoSvgChart(); } }, 100); }; window.closeFinModal = function() { var modal = document.getElementById('finSuiteModal'); if(!modal) return; modal.classList.remove('active'); document.body.style.overflow = ''; }; window.handleFinModalBackdrop = function(e) { if(e && e.target && e.target.id === 'finSuiteModal') { window.closeFinModal(); } }; // Close on Escape key document.addEventListener('keydown', function(e) { if(e.key === 'Escape' || e.key === 'Esc') { window.closeFinModal(); } }); // Init quick calc on load if(document.readyState === 'loading') { document.addEventListener('DOMContentLoaded', runQcCalc); } else { runQcCalc(); } })(); /* ✨ EGYPTIAN TAX & AUTOMATED JOURNAL SIMULATOR ✨ */ var simType = 'sales'; window.setSimType = function(type) { simType = type; var btnSales = document.getElementById('simTypeSales'); var btnPurch = document.getElementById('simTypePurch'); if(btnSales && btnPurch) { if(type === 'sales') { btnSales.classList.add('active'); btnPurch.classList.remove('active'); } else { btnPurch.classList.add('active'); btnSales.classList.remove('active'); } } runSimCalc(); }; window.setSimAmount = function(val) { var input = document.getElementById('simAmount'); if(input) { input.value = val; runSimCalc(); } }; window.runSimCalc = function() { var amountInput = document.getElementById('simAmount'); var vatSelect = document.getElementById('simVatRate'); var whtSelect = document.getElementById('simWhtRate'); if(!amountInput || !vatSelect || !whtSelect) return; var base = parseFloat(amountInput.value) || 0; var vatRate = parseFloat(vatSelect.value) || 0; var whtRate = parseFloat(whtSelect.value) || 0; var vatAmount = base * vatRate; var whtAmount = base * whtRate; var netTotal = base + vatAmount - whtAmount; function fmt(n) { return Math.round(n).toLocaleString() + ' EGP'; } var subtotalEl = document.getElementById('kpiSubtotal'); var vatEl = document.getElementById('kpiVat'); var whtEl = document.getElementById('kpiWht'); var netEl = document.getElementById('kpiNet'); var vatLbl = document.getElementById('kpiVatLbl'); var netLbl = document.getElementById('kpiNetLbl'); var refEl = document.getElementById('simLedgerRef'); if(subtotalEl) subtotalEl.textContent = fmt(base); if(vatEl) vatEl.textContent = '+' + fmt(vatAmount); if(whtEl) whtEl.textContent = '-' + fmt(whtAmount); if(netEl) netEl.textContent = fmt(netTotal); if(vatLbl) vatLbl.textContent = simType === 'sales' ? (isAr ? 'ضريبة القيمة المضافة مخرجات (14%)' : 'Output VAT (14%)') : (isAr ? 'ضريبة القيمة المضافة مدخلات (14%)' : 'Input VAT (14%)'); if(netLbl) netLbl.textContent = simType === 'sales' ? (isAr ? 'صافي المقبوضات النقدية' : 'Net Cash Receivable') : (isAr ? 'صافي المدفوعات النقدية' : 'Net Cash Payable'); if(refEl) refEl.textContent = simType === 'sales' ? (isAr ? 'سند قيد مبيعات: JV-SALES-2026 · معيار IFRS 15' : 'Sales Journal: JV-SALES-2026 · Standard IFRS 15') : (isAr ? 'سند قيد مشتريات: JV-PURCH-2026 · معيار IAS 2' : 'Purchase Journal: JV-PURCH-2026 · Standard IAS 2'); var tbody = document.getElementById('simTableBody'); var totalBalEl = document.getElementById('simTotalBalance'); if(!tbody) return; var rowsHtml = ''; var totalDebit = 0; if(simType === 'sales') { var debitNet = netTotal; var debitWht = whtAmount; var creditRev = base; var creditVat = vatAmount; totalDebit = debitNet + debitWht; rowsHtml += '1110' + (isAr ? 'العملاء / الصندوق والبنوك (Accounts Receivable / Cash)' : 'Accounts Receivable / Cash') + '' + fmt(debitNet) + '—'; if(whtAmount > 0) { rowsHtml += '1240' + (isAr ? 'ضريبة أ.ت.ص محتجزة لدى الغير (WHT Receivable - نموذج 41)' : 'WHT Receivable (Egyptian Tax Law)') + '' + fmt(debitWht) + '—'; } rowsHtml += '4100' + (isAr ? 'إيرادات المبيعات (Gross Sales Revenue - IFRS 15)' : 'Gross Sales Revenue (IFRS 15)') + '—' + fmt(creditRev) + ''; if(vatAmount > 0) { rowsHtml += '2210' + (isAr ? 'مصلحة الضرائب - ضريبة القيمة المضافة (Output VAT 14%)' : 'Output VAT Payable (ETA Portal)') + '—' + fmt(creditVat) + ''; } } else { totalDebit = base + vatAmount; rowsHtml += '5100' + (isAr ? 'حساب المشتريات / المصروفات العمومية (Purchases & Operating Expenses)' : 'Purchases & Operating Expenses (IAS 2)') + '' + fmt(base) + '—'; if(vatAmount > 0) { rowsHtml += '1220' + (isAr ? 'ضريبة القيمة المضافة مدخلات قابلة للخصم (Input VAT Recoverable)' : 'Input VAT Recoverable (ETA Portal)') + '' + fmt(vatAmount) + '—'; } rowsHtml += '2110' + (isAr ? 'الموردين / الصندوق والبنوك (Accounts Payable / Cash)' : 'Accounts Payable / Cash') + '—' + fmt(netTotal) + ''; if(whtAmount > 0) { rowsHtml += '2240' + (isAr ? 'ضريبة الخصم والإضافة مستحقة للتوريد (WHT Payable - نموذج 41)' : 'WHT Payable to Tax Authority (Form 41)') + '—' + fmt(whtAmount) + ''; } } tbody.innerHTML = rowsHtml; if(totalBalEl) totalBalEl.textContent = fmt(totalDebit); }; window.printJournalVoucher = function() { var title = (typeof isAr !== 'undefined' && isAr) ? "\u0633\u0646\u062F \u0642\u064A\u062F \u0645\u062D\u0627\u0633\u0628\u064A \u0645\u0639\u062A\u0645\u062F" : "Certified Accounting Journal Voucher"; var tableEl = document.getElementById('journalTableBody'); if (!tableEl) return; var rows = tableEl.querySelectorAll('tr'); var w = window.open('', '_blank', 'width=850,height=650'); if (!w) return; var isArabic = (typeof isAr !== 'undefined' && isAr); var d = w.document; d.open(); d.write('' + title + ''); d.write('