US-UK International Taxes

Why Choose Our UK Property Tax Compliance Specialists

Property Tax Focus

We specialise exclusively in UK property tax for landlords and property companies.

qualified_expertise

Qualified & Experienced

Work is delivered by qualified UK accountants with deep property tax experience.

uk_based_professional

UK Based Professionals

Our specialists are based in the UK and speak perfect English, ensuring clear and effective communication.

email_answer_img

Answering Your Questions

We only hire qualified advisors from ACCA and ATT. You’ll always speak with experienced, certified staff.

limited_company__img

Limited Company

A fee that does not go up and down unexpectedly. We charge the same fee no matter how much you book tax calls with us

self_ass_img

Self-Assessments

A fee that does not go up and down unexpectedly. We charge the same fee no matter how much you book tax calls with us

Providing Property Tax Compliance Services for UK Landlords & Property Companies

Our focus is on accurate property tax compliance. We ensure rental income and disposals are reported in accordance with UK tax legislation.
Ensure ownership structures are treated correctly for UK property tax reporting, without implying investment advice.

Property Tax Only – No ISA/Investment Services

  • Buy-to-Let tax compliance
  • Property company accounts & CT
  • SDLT & property transactions
  • Capital Gains Tax on property
  • Rental income reporting
  • HMRC enquiries & correspondence

Buy-to-Let & Property Company Tax Structuring

Ensuring the correct tax treatment for your property ownership structure is essential to meet UK tax reporting obligations. Our role is to help you interpret UK property tax liabilities, reliefs and allowances within statutory compliance,  not to imply growth or investment outcomes.

Our Approach to UK Property Tax Compliance

UK Property tax matters demand specialised compliance expertise that general practice accountants simply don't have

Step 1: Initial Property Tax Review

Book a property tax compliance review where we assess your current reporting position, clarify filing requirements, and confirm correct treatment under UK tax law.

Step 2: Correct Structuring & Reporting

Ensure income, ownership and filings are HMRC-compliant.

Step 3: Ongoing Compliance & Support

Annual returns, company accounts, and HMRC correspondence.

Step 4 – HMRC support

Our service relies on clear communication and accessible property tax expertise… Correct compliance is our priority.

FAQ

HAVE AN ISSUE?
GET A PERSONAL GUIDE

+ How can Optimise Accountants help me reduce tax on my investments?
+ Do you advise on the best tax-efficient investments in the UK?
+ Can you handle capital gains tax calculations on property and shares?
+ Do you provide ongoing tax planning or just one-off advice?
+ Can you help with complex structures like Family Investment Companies or Trusts?

MTD for UK Landlords – Compliance Support

We support landlords preparing for Making Tax Digital requirements, including software setup, quarterly submissions, and compliance processes.

Investment Tax Planning & Advisory Services | Optimise Accountants

At Optimise Accountants, we help investors structure their ISAs, pensions, buy-to-lets, and portfolios for maximum tax efficiency. Our experts handle income tax, capital gains tax, and inheritance tax planning with proactive, data-driven strategies. From one-off advice to ongoing tax reviews, we ensure your investments stay compliant and tax-smart year after year.

Optimise


Consultation options.

We offer the two following options for initial consultations.

CALL OPTION ONE

We charge on a fixed monthly fee

  • Rounded_Checkmark

    - Accounts submitted to HMRC & Companies House

  • Rounded_Checkmark

    - Tax support when needed (no extra charge)

  • Rounded_Checkmark

    - An holistic review of your tax structure and future plans

  • Rounded_Checkmark

    - Annual tax return review to discuss future tax plans

CALL OPTION TWO

Want tax advice right now? Book today

  • Rounded_Checkmark

    - Upload your questions in advance

  • Rounded_Checkmark

    - A qualified tax advisors discuss the very best solution with you

  • Rounded_Checkmark

    - A tax report & meeting recording is sent within 48 hours

  • Rounded_Checkmark

    - Clarification questions are answered via email

Appointment booking

'); w.document.close(); var doPrint = function () { w.focus(); w.print(); }; w.onload = doPrint; setTimeout(doPrint, 400); }); })(); //# sourceURL=oa-extraction-planner-js-after

'; if(flex==='anywhere'){ var list = risk==='higher' ? arch.emerging : (risk==='cautious' ? arch.proven : arch.proven.concat(arch.emerging)); html+='

'; html+='

These are genuine starting points for research, not a recommendation to buy there specifically - always verify current yields and growth data for the exact streets you\u2019re considering, not just the city as a whole.

'; } else { html+='

Since you\u2019d rather invest locally, use this as a framework rather than a location list: compare your own area\u2019s average purchase price to realistic achievable rent to see which side of the income/growth trade-off your local market naturally sits on.

'; } return html; } /* ============ PROPERTY TYPE COMPARISON (4 fixed categories) ============ */ var PROPERTY_TYPES=[ { id:'flats', name:'Flats / Apartments', yield:'Moderate (4-6% gross, typical)', growth:'Often strong in city-centre/commuter locations with good transport links', management:'Low-moderate', bestFor:'Capital growth or hands-off investors; simple first purchase', notes:['Leasehold - service charge and ground rent affect net yield and mortgageability','Cladding/EWS1 checks matter on some post-2018 builds','New-build premium can mean slower growth in the first few years'] }, { id:'houses', name:'Houses (single-let)', yield:'Moderate (5-7% gross, typical)', growth:'Steady, tends to track wider local house price growth', management:'Low', bestFor:'Balanced strategy; family-tenant demand areas; simplest letting model', notes:['Freehold - full control over maintenance and improvements, no service charge','Garden/exterior maintenance is your responsibility','Family tenants tend to stay longer, reducing void and re-letting costs'] }, { id:'hmo', name:'HMO (House in Multiple Occupation)', yield:'High (often 8-12%+ gross)', growth:'Can lag single-let equivalent - smaller specialist buyer pool on resale', management:'High', bestFor:'Income-focused, hands-on investors, or those using a specialist HMO agent', notes:['Mandatory licensing for 5+ occupants (often lower via additional licensing) - budget licence fees and fire safety works','Article 4 Directions restrict HMO conversions without planning permission in some areas','Higher wear, turnover and bills-inclusive costs compress net yield vs the gross headline'] }, { id:'str', name:'Short-term / Serviced Lets', yield:'Potentially highest, but highly variable and seasonal', growth:'Not the primary driver - this is closer to an operating business than a buy-and-hold play', management:'Very high', bestFor:'Investors treating it as an active business, in genuine tourist/business-visitor locations', notes:['Many councils require planning permission or registration, some cap nights let per year','Standard BTL mortgages often don\u2019t permit short-term letting - specific lender consent needed','Income and tax treatment differ from standard rental income - confirm treatment before committing'] } ]; function recommendType(strategy, handson, risk){ if(handson==='hands-off') return strategy==='capital' ? 'flats' : 'houses'; if(risk==='higher' && strategy!=='capital') return 'str'; if(strategy==='income') return 'hmo'; if(strategy==='capital') return handson==='hands-on' ? 'houses' : 'flats'; return 'houses'; } function propertyGrid(recommendedId){ var html='

'; PROPERTY_TYPES.forEach(function(t){ var rec = t.id===recommendedId; html+='
'+ (rec?'Best fit for you':'')+ '

'+t.name+'

'+ '
Yield'+t.yield+'
'+ '
Growth'+t.growth+'
'+ '
Management'+t.management+'
'+ '
Best for'+t.bestFor+'
'+ ''+ '
'; }); html+='

'; return html; } function capitalNote(tier){ if(tier==='low') return 'With under £50,000 to deploy, focus on one property with strong fundamentals rather than spreading thin - leverage (your mortgage) does the rest of the work.'; if(tier==='mid') return 'With £50,000-£150,000, you likely have room for either one higher-value property or 2-3 smaller ones - consider whether concentration or diversification suits your risk appetite better.'; return 'With £150,000+, you have genuine flexibility - multiple properties, a bigger HMO conversion, or a higher-value single asset are all realistically on the table; the question becomes which best fits the strategy above, not what you can afford.'; } /* ============ ACTION PLAN ============ */ var TYPE_LABEL={ flats:'a flat', houses:'a house (single-let)', hmo:'an HMO', str:'a short-term/serviced let' }; function actionPlan(strategyLabel, recommendedTypeId, locationFlex, experience){ var steps=[]; steps.push({ h:'Choose your area', p: locationFlex==='anywhere' ? 'Shortlist 2-3 areas from Section B, then compare actual asking prices to achievable rent on live listings in each - don\u2019t rely on city-wide averages for your final decision.' : 'Use the framework in Section B to assess your own local area\u2019s price-to-rent ratio, then decide if it genuinely fits an '+strategyLabel+' strategy or if you need to widen your search.' }); steps.push({ h:'Choose your property strategy', p:'Based on your answers, '+TYPE_LABEL[recommendedTypeId]+' is your best fit - but review the full comparison in Section C and sense-check it against what\u2019s actually available and affordable in your shortlisted area(s).' }); steps.push({ h:'Get your finance in place', p:'Speak to a mortgage broker and get an Agreement in Principle before you start viewing seriously - it confirms your real budget and shows sellers/agents you\u2019re a credible buyer.' }); steps.push({ h:'Decide your ownership structure', p:'Individual or limited company ownership needs deciding before you exchange, not after - talk to Optimise Accountants about which fits your tax position and the strategy above.' }); steps.push({ h:'Run the numbers on every property you view', p:'Purchase price, realistic rent, all costs (not just the mortgage) - model it before you fall in love with a property, not after you\u2019ve made an offer.' }); steps.push({ h:'Build your team', p:'Line up a solicitor, mortgage broker and (if relevant) a letting/management agent before you need them - doing this under time pressure after an offer is accepted leads to rushed decisions.' }); steps.push({ h:'Sort compliance before day one of the tenancy', p:'Gas Safety Certificate, EICR, EPC and (for HMOs) licensing all need to be in place before a tenant moves in, not arranged reactively afterwards.' }); return steps; } var NEXT_STEPS={ first:['Get an Agreement in Principle from a mortgage broker before you start viewing - it tells you your real budget, not a guess.','Decide on individual vs limited company ownership before you exchange, not after - it\u2019s far harder to change later.','Budget for void periods, maintenance and letting agent fees from day one, not just the mortgage payment.'], growing:['Review whether your existing properties and this new purchase sit well together as a portfolio, or whether you\u2019re accidentally over-concentrated in one area or property type.','Check whether refinancing an existing property could release deposit capital more efficiently than fresh savings.','Revisit your ownership structure - what worked for property one may not be optimal now you\u2019re scaling.'], portfolio:['At your scale, a limited company structure is worth actively modelling if you haven\u2019t already, particularly if you\u2019re a higher-rate taxpayer.','Consider whether portfolio mortgage products (assessing your properties as a whole) suit you better than remortgaging individually.','Build a simple compliance calendar across all properties - gas, EICR and EPC renewal dates spread across a portfolio become easy to lose track of.'] }; /* ============ FAQ (rules-based, fixed suggestion chips only - no free text) ============ */ var FAQ=[ { q:'What is an HMO licence?', keywords:['hmo','licence','license','multiple occupation'], answer:'An HMO (House in Multiple Occupation) is a property let to 5+ people forming 2+ households, sharing facilities like a kitchen or bathroom - these need a mandatory HMO licence from the council. Some councils require licences at lower thresholds too (additional licensing), so always check with the specific council before buying.' }, { q:'What is Section 24?', keywords:['section 24','mortgage interest','tax relief'], answer:'Section 24 restricts mortgage interest relief for individual landlords to a 20% tax credit rather than deducting it from taxable profit at your marginal rate. It hits higher-rate taxpayers hardest, which is why many higher-rate landlords look at limited company ownership instead.' }, { q:'Should I use a limited company?', keywords:['limited company','ltd','corporation tax','company structure'], answer:'Owning through a limited company means rental profit is taxed at Corporation Tax rates (19-25%) rather than Income Tax, and mortgage interest is fully deductible. It\u2019s often more tax-efficient for higher-rate taxpayers or those building a larger portfolio, but it comes with different mortgage products, accounting requirements and costs on extracting profit - get this modelled specifically for your situation.' }, { q:'How much deposit do I need?', keywords:['deposit','how much money','capital needed','afford'], answer:'Most buy-to-let mortgages need a minimum 25% deposit, though some products go as low as 15-20%. On top of the deposit, budget for stamp duty (with the additional-property surcharge), legal fees, survey costs, and a contingency for any immediate works.' }, { q:'What is gross vs net yield?', keywords:['yield','return','roi'], answer:'Gross yield is annual rent divided by purchase price. Net yield subtracts running costs (management, maintenance, insurance, void allowance) before dividing - net yield is the more honest number for comparing properties, since two properties with the same gross yield can have very different costs.' }, { q:'Is Airbnb allowed on a BTL mortgage?', keywords:['airbnb','short term','serviced accommodation','str'], answer:'Short-term/serviced letting can generate higher income than a standard tenancy but needs far more active management (or a management company), and many councils now require planning permission or registration. Standard buy-to-let mortgages often don\u2019t permit it either - you\u2019ll likely need specific lender consent, and the tax treatment differs from ordinary rental income.' }, { q:'What is a Gas Safety Certificate?', keywords:['gas safe','gas certificate','cp12'], answer:'A Gas Safety Certificate (CP12) is a legal requirement, renewed annually, for any rental property with gas appliances - it must be carried out by a Gas Safe registered engineer. There are no exceptions and no self-certification route.' }, { q:'What is an EICR?', keywords:['eicr','electrical','electrician certificate'], answer:'An EICR (Electrical Installation Condition Report) has been a legal requirement for private rentals since 2020, renewed at least every 5 years. Use a competent-person scheme member (NICEIC, NAPIT or similar) so the certificate is valid for compliance purposes.' }, { q:'What EPC rating do I need?', keywords:['epc','energy performance','energy rating'], answer:'An Energy Performance Certificate is currently required to rate at least E to legally let a property, moving to C by 2028 for new tenancies and 2030 for existing ones. Budget for any upgrade works well ahead of those deadlines rather than at renewal time.' }, { q:'What is an Article 4 Direction?', keywords:['article 4','planning permission hmo'], answer:'An Article 4 Direction removes the usual permitted-development right to convert a family house into a small HMO without planning permission. It applies in specific designated areas, usually where a council wants to limit HMO concentration - always check whether your target area has one before assuming a conversion is straightforward.' }, { q:'What changed with the Renters\u2019 Rights Act?', keywords:['renters rights','section 21','eviction'], answer:'The Renters\u2019 Rights Act 2025 (in force from 1 May 2026) abolished Section 21 "no fault" evictions and converted assured shorthold tenancies to periodic assured tenancies with no fixed term - tenants can now leave with 2 months\u2019 notice at any point.' }, { q:'Tips for my first investment property?', keywords:['first property', 'first time landlord', 'getting started'], answer:'Start with an Agreement in Principle from a mortgage broker so you know your real budget, decide on ownership structure (individual vs limited company) before you exchange, and run the full numbers - not just the mortgage payment - on every property before you make an offer.' } ]; function chatCard(){ return '

'+ '
Common questions

Tap a question below for a straight answer from our fixed knowledge base. For anything about your specific situation, speak to Optimise Accountants directly.

'+ '
Tap any question below to see the answer.
'+ '
'+FAQ.map(function(entry, i){return '';}).join('')+'
'+ '

'; } function wireChat(){ var log=document.getElementById('ps-chat-log'); function addMsg(text, who){ var d=document.createElement('div'); d.className='ps-msg '+who; d.textContent=text; log.appendChild(d); log.scrollTop=log.scrollHeight; } document.querySelectorAll('.ps-chip').forEach(function(chip){ chip.addEventListener('click', function(){ var entry=FAQ[parseInt(chip.dataset.i,10)]; addMsg(entry.q, 'user'); setTimeout(function(){ addMsg(entry.answer, 'bot'); }, 200); }); }); } /* ============ STATE ============ */ var step=0; var answers={}; function computeStrategy(){ var incomeScore=0, capitalScore=0; switch(answers.goal){ case 'income': incomeScore+=3; break; case 'capital': capitalScore+=3; break; default: incomeScore+=1; capitalScore+=1; } switch(answers.taxrate){ case 'basic': incomeScore+=2; break; case 'higher': capitalScore+=2; break; default: incomeScore+=1; capitalScore+=1; } switch(answers.risk){ case 'cautious': incomeScore+=2; break; case 'higher': capitalScore+=2; break; } var diff=incomeScore-capitalScore; var label = diff>=3 ? 'income' : (diff<=-3 ? 'capital' : 'balance'); var total=incomeScore+capitalScore; var incomePct=total>0?Math.round(incomeScore/total*100):50; return { label:label, incomePct:incomePct, capitalPct:100-incomePct }; } /* ============ RENDER ============ */ function renderIntro(){ return '

'+ '

Ready to build your strategy?

'+ '

7 quick questions, about 2 minutes. You\u2019ll get a personalised strategy, location ideas, a property-type comparison, and a step-by-step action plan.

'+ ''+ '

'; } function renderQuestion(i){ var q=QUESTIONS[i]; var html='

'+q.title+'

'; q.options.forEach(function(opt){ var selected = answers[q.id]===opt.value; html+=''; }); html+='
'; html+= i>0 ? '' : ''; html+='

'; return html; } function renderResults(){ var strat=computeStrategy(); var st=STRATEGY_TEXT[strat.label]; var recType=recommendType(strat.label, answers.handson, answers.risk); var html=''; // A - Strategy html+='

A

Investment strategy: income vs capital

'; html+='
'+(strat.incomePct>12?strat.incomePct+'% Income':'')+'
'+(strat.capitalPct>12?strat.capitalPct+'% Capital':'')+'
'; html+='

'+st.title+'

'+st.summary+'

'; html+='

Your tax position

'+taxNote(answers.taxrate)+'

'; html+='

'; // B - Location html+='

B

Location profile

'; html+='
'+locationBlock(strat.label, answers.risk, answers.locationFlex)+'
'; html+='

'; // C - Property type comparison html+='

C

Property type: flats vs houses vs HMO vs short-term lets

'; html+=propertyGrid(recType); html+='

Your capital

'+capitalNote(answers.capital)+'

'; html+='

'; // D - Action plan html+='

D

Your action plan

'; html+='
    '; actionPlan(strat.label, recType, answers.locationFlex, answers.experience).forEach(function(s){ html+='
  1. '+s.h+'

    '+s.p+'

  2. '; }); html+='
'; html+='

Specific to your experience level

'; html+='

'; html+='

'+ ''+ ''+ '

'; // E - Chat html+='

?

Have a question?

'; html+=chatCard(); html+='

'; return html; } function renderProgress(){ var bar=document.getElementById('ps-progress'); if(step===0 || step>QUESTIONS.length){ bar.hidden=true; return; } bar.hidden=false; var pct=Math.round((step)/QUESTIONS.length*100); document.getElementById('ps-progress-fill').style.width=pct+'%'; document.getElementById('ps-progress-label').textContent='Question '+step+' of '+QUESTIONS.length; } function render(){ var host=document.getElementById('ps-stage'); renderProgress(); if(step===0){ host.innerHTML=renderIntro(); document.getElementById('ps-start').addEventListener('click', function(){ step=1; render(); }); } else if(step>=1 && step<=QUESTIONS.length){ host.innerHTML=renderQuestion(step-1); var q=QUESTIONS[step-1]; host.querySelectorAll('.ps-option').forEach(function(btn){ btn.addEventListener('click', function(){ answers[q.id]=btn.dataset.value; step++; render(); }); }); var backBtn=document.getElementById('ps-back'); if(backBtn) backBtn.addEventListener('click', function(){ step--; render(); }); } else { host.innerHTML=renderResults(); document.getElementById('ps-restart').addEventListener('click', function(){ step=0; answers={}; render(); }); document.getElementById('ps-print').addEventListener('click', function(){ // Print via an isolated popup rather than window.print() on the live page - // see the CGT calculator (a sibling tool) for the full explanation of why // this is more reliable than page-level print CSS defences, especially for // this snippet which runs site-wide and could otherwise interfere with - // or be interfered with by - other tools' print output. var widget = document.getElementById('optPs'); var css = ''; document.querySelectorAll('style').forEach(function (s) { if (s.textContent.indexOf('.opt-ps') !== -1 || s.textContent.indexOf('#optPs') !== -1) css += s.textContent; }); var w = window.open('', '_blank'); if (!w) { alert('Your browser blocked the print popup for this page. Please allow popups for this site (usually a small icon in the address bar) and click \'Print or save the full report\' again.'); return; } w.document.open(); w.document.write('

Portfolio Strategy - report' + widget.outerHTML + '

'); w.document.close(); var doPrint = function () { w.focus(); w.print(); }; w.onload = doPrint; setTimeout(doPrint, 400); }); wireChat(); } } render(); /* Build the instructional video iframe at runtime rather than emitting a static

'+ '

'+ ''; } function platformCard(item, trade, location){ return '

'+ '
'+item.name+''+badge('Review platform','blue')+'
'+ '

'+item.desc+'

'+ ''+ '

'; } /* ============ TAB RENDERERS ============ */ function renderGas(location){ var html='

🔥

Gas Safety - legally mandated register

'; OFFICIAL_REGISTERS.gas.forEach(function(item){ html+=registerCard(item, location); }); html+='

This one is not optional

Only a Gas Safe registered engineer may legally carry out gas work in a rental property. Always ask for their Gas Safe ID card and check the licence card number against the register before work starts, not after.

'; html+='

'; return html; } function renderElectrical(location){ var html='

Electrical - competent person schemes

'; OFFICIAL_REGISTERS.electrical.forEach(function(item){ html+=registerCard(item, location); }); html+='

Why scheme membership matters

A competent-person scheme member can self-certify their own work as Building Regulations compliant. An electrician outside any scheme may still be capable, but you\u2019ll need separate Building Control sign-off - extra cost and delay that scheme membership avoids.

'; html+='

'; return html; } function renderEpc(location){ var html='

📄

EPC assessors

'; OFFICIAL_REGISTERS.epc.forEach(function(item){ html+=registerCard(item, location); }); html+='

Finding an assessor to book

The GOV.UK register above is best for looking up an existing EPC. To book a new assessment, search a review platform or your local accreditation scheme (Elmhurst, Stroma, Quidos) for a domestic energy assessor near you.

'+ '
'; html+='

'; return html; } function renderFireLegionella(location){ var html='

🧯

Fire & Legionella risk assessment

'; FIRE_LEGIONELLA.forEach(function(item){ html+=registerCard(item, location); }); html+='

'; return html; } function renderGeneralTrades(location){ var html='

🔧

General trades - filter by rating on these platforms

'; REVIEW_PLATFORMS.forEach(function(item){ html+=platformCard(item, 'tradesperson', location); }); html+='

How to actually get the 4-star-plus filter

Each platform above has its own on-site rating filter and category search once you land on it - search "tradesperson near '+(location||'you')+'" on any of them, then sort by rating and read the most recent reviews rather than the overall score alone (a great score from 3 years ago tells you less than a handful of reviews from this year).

'; html+='

'; return html; } function renderCompliance(){ var html='

What\u2019s actually a legal requirement, and what isn\u2019t

'; COMPLIANCE_POINTS.forEach(function(t){ html+='
'+t+'
'; }); html+='

Certificate costs (gas, EICR, EPC, fire/legionella assessments) are normally fully deductible revenue expenses against rental income in the year incurred - keep every invoice.

'; html+='

'; return html; } var TABS=[ { id:'gas', label:'🔥 Gas Safety', render:renderGas }, { id:'electrical', label:'⚡ Electrical', render:renderElectrical }, { id:'epc', label:'📄 EPC', render:renderEpc }, { id:'fire', label:'🧯 Fire & Legionella', render:renderFireLegionella }, { id:'general', label:'🔧 General Trades', render:renderGeneralTrades }, { id:'compliance', label:'✅ Compliance Notes', render:function(){ return renderCompliance(); } } ]; var activeTab='gas'; var currentLocation=''; function renderTabs(){ var host=document.getElementById('tf-tabs'); host.innerHTML=TABS.map(function(t){ return ''; }).join(''); host.querySelectorAll('.tf-tab').forEach(function(b){ b.addEventListener('click', function(){ activeTab=b.dataset.tab; renderTabs(); renderBody(); }); }); } function renderBody(){ var tab=TABS.filter(function(t){return t.id===activeTab;})[0]; document.getElementById('tf-body').innerHTML = tab.render(currentLocation); } function search(){ var input=document.getElementById('tf-location'); var note=document.getElementById('tf-search-note'); var resultEl=document.getElementById('tf-result'); note.textContent=''; var val=input.value.trim(); if(!val){ note.textContent='Please enter a postcode or town.'; resultEl.hidden=true; return; } currentLocation=val; resultEl.hidden=false; activeTab='gas'; renderTabs(); renderBody(); } document.getElementById('tf-search-btn').addEventListener('click', search); document.getElementById('tf-location').addEventListener('keydown', function(e){ if(e.key==='Enter') search(); }); })(); //# sourceURL=oa-trades-finder-js-after

'+ '

'+ ''; } /* ============ TAB RENDERERS ============ */ function renderKitchens(location){ var html='

🍳

Kitchen suppliers

'; KITCHEN_SUPPLIERS.forEach(function(s){ html+=supplierCard(s, location); }); html+='

'; return html; } function renderBathrooms(location){ var html='

🛁

Bathroom suppliers

'; BATHROOM_SUPPLIERS.forEach(function(s){ html+=supplierCard(s, location); }); html+='

'; return html; } function renderTrade(location){ var html='

🏗️

General trade merchants (both kitchens & bathrooms)

'; TRADE_MERCHANTS.forEach(function(s){ html+=supplierCard(s, location); }); html+='

Worth knowing

Most trade merchants will open an account for a landlord directly, not just for registered builders - it usually just needs proof of the properties you own or manage.

'; html+='

'; return html; } function renderSavings(){ var html='

💰

How to actually get the trade price, not the retail price

'; SAVINGS_TACTICS.forEach(function(t){ html+='
'+t+'
'; }); html+='

'; return html; } function renderTax(){ var html='

📊

The tax question that decides everything: repair or improvement?

'; html+='

Like-for-like replacement = revenue expense

Replacing a worn-out kitchen or bathroom with a modern equivalent of similar quality and standard is normally treated as a repair, deductible in full against that year\u2019s rental income. "Modern equivalent" is allowed - you don\u2019t have to replace like-for-like with an identical outdated spec, and HMRC accepts that some improvement is inherent in using current materials and fittings.

'; html+='

A material upgrade = capital improvement

If the new kitchen or bathroom is of a materially higher standard than what it replaced - extending the layout, adding features that weren\u2019t there before, or a significant step up in quality - it\u2019s treated as a capital improvement. That cost isn\u2019t deductible against rental income; instead it\u2019s added to the property\u2019s base cost and only reduces Capital Gains Tax when you eventually sell.

'; html+='

Why this matters for how you buy

If you\u2019re aiming for the repair treatment, keep the replacement broadly equivalent in scale and standard to what was there before, and keep every invoice - the distinction is made on the facts of what you actually did, not on what you call it. If in doubt, get it reviewed before the work starts, not at tax return time when the choice has already been made for you.

'; html+='

This is general guidance, not a determination on your specific refit - speak to Optimise Accountants to confirm treatment before work begins.

'; html+='

'; return html; } var TABS=[ { id:'kitchens', label:'🍳 Kitchens', render:renderKitchens }, { id:'bathrooms', label:'🛁 Bathrooms', render:renderBathrooms }, { id:'trade', label:'🏗️ Trade Merchants', render:renderTrade }, { id:'savings', label:'💰 Save Money', render:function(){ return renderSavings(); } }, { id:'tax', label:'📊 Tax Treatment', render:function(){ return renderTax(); } } ]; var activeTab='kitchens'; var currentLocation=''; function renderTabs(){ var host=document.getElementById('kb-tabs'); host.innerHTML=TABS.map(function(t){ return ''; }).join(''); host.querySelectorAll('.kb-tab').forEach(function(b){ b.addEventListener('click', function(){ activeTab=b.dataset.tab; renderTabs(); renderBody(); }); }); } function renderBody(){ var tab=TABS.filter(function(t){return t.id===activeTab;})[0]; document.getElementById('kb-body').innerHTML = tab.render(currentLocation); } function search(){ var input=document.getElementById('kb-location'); var note=document.getElementById('kb-search-note'); var resultEl=document.getElementById('kb-result'); note.textContent=''; var val=input.value.trim(); if(!val){ note.textContent='Please enter a postcode or town.'; resultEl.hidden=true; return; } currentLocation=val; resultEl.hidden=false; activeTab='kitchens'; renderTabs(); renderBody(); } document.getElementById('kb-search-btn').addEventListener('click', search); document.getElementById('kb-location').addEventListener('keydown', function(e){ if(e.key==='Enter') search(); }); })(); //# sourceURL=oa-kb-finder-js-after

'+bodyHtml+'

'; } function domainOf(contactEmail){ var m=/@([^ ]+)$/.exec((contactEmail||'').trim()); return m?m[1]:null; } function siteSearchurl('/domain, query'){ return 'https://www.google.com/search?q='+encodeURIComponent('site:'+domain+' '+query); } function govSearchurl('/query'){ return 'https://www.gov.uk/search/all?keywords='+encodeURIComponent(query); } function linkBtn(url, label, kind){ var cls = kind==='official' ? 'la-link official' : 'la-link search'; var icon = kind==='official' ? '\u2197' : '\uD83D\uDD0D'; return ''+label+' '+icon+''; } function councilSiteLink(domain, query, label){ if(!domain) return ''; return linkBtn(siteSearchurl('/domain, query'), label || ('Search '+domain), 'search'); } function boxRows(title, rowsHtml, color){ return '

'+title+'

'+rowsHtml+'

'; } /* ============ TAB CONTENT BUILDERS ============ */ function renderGrants(d){ var domain=domainOf(d.homelessness.contact); var html=''; if(domain){ html+='

'+linkBtn('https://'+domain, 'Visit '+d.name+' website', 'official')+'

'; } html+='

🏚️

Empty Homes / Improvement Grants

'; if(d.emptyHomes.available){ html+=box('Grant available', d.emptyHomes.details, 'green'); } else { html+=box('Not confirmed for this council', d.emptyHomes.details, 'amber'); } html+='

'+councilSiteLink(domain, 'empty homes grant landlord', 'Search '+d.name+' for empty homes grants')+'

'; html+='

'; html+='

National energy & adaptation grants (apply everywhere, including here)

'; NATIONAL_SCHEMES.forEach(function(sc){ html+='
'+ '
'+sc.name+''+badge(sc.status, sc.status.indexOf('Active')===0||sc.status==='Ongoing'?'green':'amber')+'
'+ row('Amount', sc.amount)+row('Eligibility', sc.eligibility)+ '

'+linkBtn(sc.url, sc.urlType==='official'?'Official GOV.UK page':'Search GOV.UK', sc.urlType)+'

'+ '
'; }); html+='

'; html+='

'+box('Tax note - important', 'Grants and incentive payments are potentially taxable and treatment varies by structure (individual vs limited company) and by whether the payment is capital or revenue in nature. Speak to Optimise Accountants before accepting any grant or incentive.', 'green')+'

'; return html; } function renderRentalSchemes(d){ var domain=domainOf(d.homelessness.contact); var html=''; html+='

🏠

General needs / homelessness prevention

'; html+='
'+ '
General needs
'+ '

'+d.homelessness.scheme+'

'+ row('Cash incentive', d.homelessness.cash)+ row('Additional benefits', d.homelessness.extras)+ row('Contact', d.homelessness.contact)+ '

'+councilSiteLink(domain, d.homelessness.scheme, 'Search '+d.name+' for "'+d.homelessness.scheme+'"')+'

'+ '

'; html+='

🌍

Other rental scheme routes with this council

'; SCHEME_SECTORS.forEach(function(sec){ html+='
'+ '
'+sec.sector+'
'+ '

'+sec.summary+'

'+ row('How it works', sec.detail)+ row('Contact', sec.contactNote+' General enquiries: '+d.homelessness.contact)+ '

'+councilSiteLink(domain, sec.sector+' housing team', 'Search '+d.name+' for '+sec.sector)+'

'+ '
'; }); html+='

'; html+='

'+box('Note on figures', 'Unlike the general needs scheme above, asylum, children\u2019s services and adult social care placements are almost always negotiated per property rather than published as a fixed incentive table. Treat any figure you\u2019re quoted as specific to that placement, not a standard rate.', 'amber')+'

'; return html; } function renderLicensing(d){ var domain=domainOf(d.homelessness.contact); var html=''; html+='

📍

Selective Licensing

'+ box('Current position', d.licensing.selective)+ '

'+councilSiteLink(domain, 'selective licensing landlord', 'Search '+d.name+' for selective licensing')+'

'+ '

Selective licensing requires every private landlord in the designated area to hold a licence, regardless of property type. Letting without one is a criminal offence and can trigger a Rent Repayment Order.

'; html+='

🏢

HMO Licensing

'+ box('Current position', d.licensing.hmo)+ '

'+councilSiteLink(domain, 'HMO licence apply', 'Search '+d.name+' for HMO licensing')+'

'+ '

Mandatory HMO licensing applies to properties with 5+ occupants forming 2+ households. Some councils apply a lower threshold via additional licensing.

'; html+='

📄

Additional Licensing

'+ box('Current position', d.licensing.additional)+ '

'+councilSiteLink(domain, 'additional licensing landlord', 'Search '+d.name+' for additional licensing')+'

'; html+='

'+box('Always verify direct with the council', 'Licensing zones change frequently. Confirm the current position with '+d.name+' before letting - operating without a required licence is a criminal offence.', 'red')+'

'; return html; } function renderLegislation(d){ var html=''; html+='

⚖️

Legislation specific to this area

'; d.legislation.forEach(function(item){ html+='
'+item+'
'; }); html+='
EPC position: '+d.epc+'
'; var domain=domainOf(d.homelessness.contact); html+='

'+councilSiteLink(domain, 'private rented sector policy landlord', 'Search '+d.name+' for local housing policy')+'

'; html+='

'; html+='

🇬🇧

National legislation - applies to every landlord

'; NATIONAL_LEGISLATION.forEach(function(leg){ html+='
'+leg.law+''+badge(leg.inForce,'amber')+'

'+leg.impact+'

'+linkBtn(leg.url, leg.urlType==='official'?'Official GOV.UK page':'Search GOV.UK', leg.urlType)+'
'; }); html+='

'; return html; } function renderOtherConsiderations(){ var html='

💡

Practical considerations before you sign anything

'; OTHER_CONSIDERATIONS.forEach(function(txt){ html+='
'+txt+'
'; }); html+='

'+linkBtn('https://www.gov.uk/browse/housing-local-services/renting-tenancy', 'GOV.UK: renting out property - guidance hub', 'official')+'

'; html+='

'; return html; } var TABS=[ { id:'grants', label:'💰 Grants', render:renderGrants }, { id:'schemes', label:'🏘️ Rental Schemes', render:renderRentalSchemes }, { id:'licences', label:'📋 Licences', render:renderLicensing }, { id:'legislation', label:'⚖️ Legislation', render:renderLegislation }, { id:'other', label:'💡 Other Considerations', render:function(){ return renderOtherConsiderations(); } } ]; var activeTab='grants'; var currentData=null; function renderTabs(){ var host=document.getElementById('la-tabs'); host.innerHTML=TABS.map(function(t){ return ''; }).join(''); host.querySelectorAll('.la-tab').forEach(function(b){ b.addEventListener('click', function(){ activeTab=b.dataset.tab; renderTabs(); renderBody(); }); }); } function renderBody(){ var tab=TABS.filter(function(t){return t.id===activeTab;})[0]; document.getElementById('la-body').innerHTML = tab.render(currentData); } function renderNational(){ var schemesHost=document.getElementById('la-national-schemes'); var html='

National grants & schemes

'; NATIONAL_SCHEMES.forEach(function(sc){ html+='

'+sc.name+''+badge(sc.status,'blue')+'
'+row('Amount',sc.amount)+row('Eligibility',sc.eligibility)+'

'+linkBtn(sc.url, sc.urlType==='official'?'Official GOV.UK page':'Search GOV.UK', sc.urlType)+'

'; }); schemesHost.innerHTML=html; var legHost=document.getElementById('la-national-legislation'); var lh='

⚖️

National legislation

'; NATIONAL_LEGISLATION.forEach(function(leg){ lh+='

'+leg.law+''+badge(leg.inForce,'amber')+'

'+leg.impact+'

'+linkBtn(leg.url, leg.urlType==='official'?'Official GOV.UK page':'Search GOV.UK', leg.urlType)+'

'; }); legHost.innerHTML=lh; var otherHost=document.getElementById('la-national-other'); var oh='

💡

Other considerations

'; OTHER_CONSIDERATIONS.forEach(function(txt){ oh+='

'+txt+'

'; }); otherHost.innerHTML=oh; } /* ============ SEARCH ============ */ function lookup(){ var input=document.getElementById('la-postcode'); var note=document.getElementById('la-search-note'); var resultEl=document.getElementById('la-result'); note.textContent=''; var clean=input.value.trim().toUpperCase().replace(/\s+/g,''); if(!clean){ note.textContent='Please enter a postcode.'; resultEl.hidden=true; return; } var laKey=null; for(var len=Math.min(clean.length,5); len>=1; len--){ var prefix=clean.slice(0,len); if(POSTCODE_TO_LA[prefix]){ laKey=prefix in POSTCODE_TO_LA ? POSTCODE_TO_LA[prefix] : null; break; } } if(laKey && LA_DATA[laKey]){ currentData=LA_DATA[laKey]; document.getElementById('la-result-name').textContent=currentData.name; document.getElementById('la-result-sub').textContent=currentData.region+' \u00B7 Data reviewed '+currentData.lastVerified; document.getElementById('la-region-badge').textContent=currentData.region; resultEl.hidden=false; activeTab='grants'; renderTabs(); renderBody(); } else { resultEl.hidden=true; note.textContent="We don't have specific data for this postcode yet. Please contact your local council's Housing Options team directly, or get in touch with Optimise Accountants for a bespoke review."; } } document.getElementById('la-search-btn').addEventListener('click', lookup); document.getElementById('la-postcode').addEventListener('keydown', function(e){ if(e.key==='Enter') lookup(); }); renderNational(); })(); //# sourceURL=oa-la-finder-js-after

'+ ln('Cost base (purchase + stamp duty/legal + arrangement)', gbp(c.costBase))+ ln('Current value', gbp(p.value))+ ln('Unrealised gain', gbp(c.gain), true)+ ln('Indicative CGT'+(co?' (CT 19%, before banding)':' (before annual exempt amount)'), gbp(-cgtFlat))+ ln('Indicative net proceeds after tax', gbp(c.gain-cgtFlat), true)+ '

'; } var who = co ? 'in a company' : (view==='higher'?'as a higher-rate taxpayer':'as a basic-rate taxpayer'); card.innerHTML= '

'+(p.label||'Unnamed property')+'

'+ '

'+ '
'+ '

Capital invested

'+capHTML+'
'+ '

Annual income & profit

'+incHTML+'
'+ cgtHTML+ '

'+(p.label||'This property')+': '+pct(c.yield)+' gross yield. Held '+who+', you keep '+gbp(net)+' after tax of the '+gbp(c.grossProfit)+' gross profit'+(net<0?' — it runs at a loss on these figures.':'.')+'

'+ '

'; donut(card.querySelector('[data-donut]'), net>=0?pie.slices:pie.slices.slice(1)); card.querySelector('[data-pie]').innerHTML=legendHTML(pie.slices); return card; } /* ============ RECOMPUTE ============ */ function recompute(){ var co=(ownership==='company'); R.querySelector('#pf-rate-wrap').hidden = co; R.querySelector('#pf-own-note').textContent = co ? 'Limited company: mortgage interest is deductible and profit is taxed at Corporation Tax (19% per property here; the portfolio applies the 19% / marginal / 25% bands). Tax is shown before extracting profit.' : 'Individual: Income Tax applies and mortgage interest is restricted under Section 24 (relieved at 20%, not your marginal rate).'; updateInputSubtotals(); var activeProps=props.filter(isActive); var agg={value:0,invested:0,balance:0,equity:0,rent:0,interest:0,rawInterest:0,costs:0,grossProfit:0,taxB:0,taxH:0,taxCo:0,gain:0,anyCost:false}; var rows=[]; var resultsHost=document.getElementById('pf-properties'); resultsHost.innerHTML=''; activeProps.forEach(function(p){ var c=calcProp(p); agg.value+=p.value; agg.invested+=c.invested; agg.balance+=p.balance; agg.equity+=c.equity; agg.rent+=c.effRent; agg.interest+=c.effInterest; agg.rawInterest+=p.interest; agg.costs+=c.costs; agg.grossProfit+=c.grossProfit; agg.taxB+=c.taxB; agg.taxH+=c.taxH; agg.taxCo+=c.taxCo; if(c.hasCost){ agg.gain+=c.gain; agg.anyCost=true; } rows.push({p:p,c:c}); resultsHost.appendChild(buildResultCard(p,c,co)); }); /* portfolio donut */ var pTax = co ? corpTax(agg.grossProfit) : (view==='higher'?agg.taxH:agg.taxB); var pNet = agg.grossProfit - pTax; var pSlices=[{label:'You (landlord)',v:Math.max(0,pNet),c:'var(--you)'}, {label:'Bank (interest)',v:agg.interest,c:'var(--bank)'}, {label:'HMRC (tax)',v:pTax,c:'var(--hmrc)'}]; donut(document.getElementById('pf-port-donut'), pNet>=0?pSlices:pSlices.slice(1)); document.getElementById('pf-port-legend').innerHTML=legendHTML(pSlices); document.getElementById('pf-port-donutcap').textContent='Split of '+gbp(agg.rent-agg.costs)+' (rent after running costs), '+(co?'limited company':(view==='higher'?'higher-rate':'basic-rate'))+' basis.'; var pYield=agg.value>0?agg.rent/agg.value:0; var pRoi=agg.invested>0?pNet/agg.invested:0; var pRoe=agg.equity>0?pNet/agg.equity:0; var pLtv=agg.value>0?agg.balance/agg.value:0; document.getElementById('pf-port-cap').innerHTML= stat(gbp(agg.value),'Portfolio value')+stat(gbp(agg.equity),'Equity')+stat(pct(pLtv),'LTV')+ stat(gbp(agg.invested),'Capital invested')+stat(pct(pRoi),'ROI')+stat(pct(pRoe),'Return on equity'); document.getElementById('pf-port-inc').innerHTML= ln('Gross rent', gbp(agg.rent))+ ln('Less running costs', gbp(-agg.costs))+ ln('Less mortgage interest', gbp(-agg.interest))+ ln('Gross profit (before tax)', gbp(agg.grossProfit), true, agg.grossProfit<0)+ ln('Tax'+(co?' (Corporation Tax)':''), gbp(-pTax))+ ln('Net profit (after tax)', gbp(pNet), true, pNet<0)+ ln('Gross yield', pct(pYield))+ ln('Net margin', agg.rent>0?pct(pNet/agg.rent):'\u2014'); var portCgtBlock=document.getElementById('pf-port-cgt-block'); var portCgt=0, gainAfterAEA=0; if(agg.anyCost && agg.gain>0){ portCgtBlock.hidden=false; if(co){ portCgt=corpTax(agg.gain); document.getElementById('pf-port-cgt').innerHTML= ln('Total unrealised gain across portfolio', gbp(agg.gain), true)+ ln('Indicative Corporation Tax on gain (banded)', gbp(-portCgt))+ ln('Indicative net proceeds after tax', gbp(agg.gain-portCgt), true); } else { gainAfterAEA=Math.max(0, agg.gain-CFG.CGT_AEA); var rate=view==='higher'?CFG.CGT_HIGHER:CFG.CGT_BASIC; portCgt=gainAfterAEA*rate; document.getElementById('pf-port-cgt').innerHTML= ln('Total unrealised gain across portfolio', gbp(agg.gain), true)+ ln('Less annual exempt amount', gbp(-Math.min(agg.gain,CFG.CGT_AEA)))+ ln('Taxable gain', gbp(gainAfterAEA))+ ln('Indicative CGT at '+pct(rate), gbp(-portCgt))+ ln('Indicative net proceeds after tax', gbp(agg.gain-portCgt), true); } } else { portCgtBlock.hidden=true; } var coTax=corpTax(agg.grossProfit); document.getElementById('pf-tax-basic').textContent=gbp(agg.taxB); document.getElementById('pf-tax-higher').textContent=gbp(agg.taxH); document.getElementById('pf-tax-co').textContent=gbp(coTax); document.getElementById('pf-net-basic').textContent='You keep '+gbp(agg.grossProfit-agg.taxB); document.getElementById('pf-net-higher').textContent='You keep '+gbp(agg.grossProfit-agg.taxH); document.getElementById('pf-net-co').textContent='Retained in company '+gbp(agg.grossProfit-coTax); R.querySelector('#pf-st-basic').classList.toggle('pf-on', !co && view==='basic'); R.querySelector('#pf-st-higher').classList.toggle('pf-on', !co && view==='higher'); R.querySelector('#pf-st-co').classList.toggle('pf-on', co); document.getElementById('pf-struct-note').textContent='Company figure uses Corporation Tax on '+gbp(agg.grossProfit)+' of profit (19% to \u00A350,000, 25% above \u00A3250,000, marginal relief between) and is before extracting profit as dividends or salary, which would be taxed again. For a higher-rate landlord the gap versus personal ownership is the key Section 24 question.'; renderTable(rows,agg,co,pTax,pNet); renderInsights(rows,agg,co,portCgt,gainAfterAEA); } function renderTable(rows,agg,co,pTax,pNet){ var tb=document.getElementById('pf-tbody'); tb.innerHTML=''; if(rows.length===0){ document.getElementById('pf-table-note').textContent='Enter your properties in the table above to populate this comparison.'; return; } var best=null,worst=null; rows.forEach(function(r){var c=r.c; if(c.invested>0){var net=c.grossProfit-selTax(c);var roi=net/c.invested; if(best===null||roi>best.roi)best={id:r.p.id,roi:roi}; if(worst===null||roi1&&best&&r.p.id===best.id)tr.className='pf-best'; if(rows.length>1&&worst&&r.p.id===worst.id&&(!best||worst.id!==best.id))tr.className='pf-worst'; tr.innerHTML=''+(r.p.label||'Unnamed')+''+gbp(r.p.value)+''+gbp(c.invested)+''+ ''+pct(c.yield)+''+gbp(c.grossProfit)+''+gbp(tax)+''+gbp(net)+''+ ''+(c.effRent>0?pct(net/c.effRent):'\u2014')+''+ ''+(c.invested>0?pct(net/c.invested):'\u2014')+''+ ''+(c.equity>0?pct(net/c.equity):'\u2014')+''+ ''+(c.hasCost?gbp(c.gain):'\u2014')+''; tb.appendChild(tr); }); if(rows.length>1){ var pYield=agg.value>0?agg.rent/agg.value:0; var tr=document.createElement('tr'); tr.className='pf-total'; tr.innerHTML='Portfolio'+gbp(agg.value)+''+gbp(agg.invested)+''+pct(pYield)+''+ ''+gbp(agg.grossProfit)+''+gbp(pTax)+''+gbp(pNet)+''+ ''+(agg.rent>0?pct(pNet/agg.rent):'\u2014')+''+ ''+(agg.invested>0?pct(pNet/agg.invested):'\u2014')+''+ ''+(agg.equity>0?pct(pNet/agg.equity):'\u2014')+''+ ''+(agg.anyCost?gbp(agg.gain):'\u2014')+''; tb.appendChild(tr); } document.getElementById('pf-table-note').textContent = co ? 'Company columns use 19% Corporation Tax per property; the Portfolio row uses the company\u2019s banded rate on total profit, so it can exceed the sum of the rows. "Gain if sold" is only shown where a purchase price has been entered.' : 'Figures shown on the '+(view==='higher'?'higher-rate':'basic-rate')+' Income Tax basis selected above. "Gain if sold" is only shown where a purchase price has been entered.'; } function renderInsights(rows,agg,co,portCgt,gainAfterAEA){ var ul=document.getElementById('pf-insights'); ul.innerHTML=''; var add=function(h){var li=document.createElement('li');li.innerHTML=h;ul.appendChild(li);}; var prompts=document.getElementById('pf-prompts'); prompts.innerHTML=''; var addP=function(t){var d=document.createElement('div');d.className='pf-prompt';d.textContent=t;prompts.appendChild(d);}; if(agg.rent<=0){ add('Enter your properties in the table above to see the analysis.'); return; } var pTax = co ? corpTax(agg.grossProfit) : (view==='higher'?agg.taxH:agg.taxB); var pNet = agg.grossProfit - pTax; if(!co){ var gap=agg.taxH-agg.taxB; if(gap>1) add('Section 24 is costing about '+gbp(gap)+' a year at the higher rate versus basic rate, because 20% relief is lost on '+gbp(agg.interest)+' of interest. A limited company would make that interest fully deductible — compare the structures above.'); var coTax=corpTax(agg.grossProfit); var saving=(view==='higher'?agg.taxH:agg.taxB)-coTax; if(saving>1) add('On these figures a company would pay '+gbp(coTax)+' Corporation Tax versus '+gbp(view==='higher'?agg.taxH:agg.taxB)+' personally — about '+gbp(saving)+' less in tax before extracting profit. Extraction, mortgage availability and a CGT charge on incorporating existing properties change the picture, so model it properly before acting.'); } else { add('Within a company, interest is deductible, so the bank\u2019s share of '+gbp(agg.interest)+' is taxed-relieved in full. The trade-off is extracting profit: dividends or salary are taxed again on the way out.'); if(agg.grossProfit>CFG.CT_LOWER) add('Total company profit of '+gbp(agg.grossProfit)+' exceeds the \u00A350,000 small-profits threshold, so part is taxed above 19% under marginal relief — the portfolio figure reflects this.'); } var pMargin=agg.rent>0?pNet/agg.rent:0; if(pMargin<0.10) add('You keep only '+pct(Math.max(0,pMargin))+' of the rent after the bank and HMRC. Small moves in rate, rent or structure shift this sharply.'); var avgRate=agg.balance>0?agg.rawInterest/agg.balance:0; rows.forEach(function(r){ var c=r.c, share=(agg.rent>0?c.effInterest/c.effRent:0); if(share>0.5) add(''+(r.p.label||'A property')+': over half the rent goes to the lender ('+pct(share)+'). A 1% rate cut would save about '+gbp(r.p.balance*0.01)+' a year.'); else if(avgRate>0 && r.p.balance>0 && c.impliedRate>avgRate+0.01) add(''+(r.p.label||'A property')+' is on an above-average rate ('+pct(c.impliedRate)+' vs portfolio '+pct(avgRate)+'). Refinancing toward the average could save around '+gbp(r.p.balance*(c.impliedRate-avgRate))+'.'); }); rows.forEach(function(r){var c=r.c, net=c.grossProfit-selTax(c), roe=c.equity>0?net/c.equity:0; if(c.equity>50000 && roe<0.04 && roe>=0) add(''+(r.p.label||'A property')+' holds '+gbp(c.equity)+' of equity earning only '+pct(roe)+' return on equity. That capital may work harder refinanced or redeployed.');}); rows.forEach(function(r){var c=r.c, net=c.grossProfit-selTax(c); if(net<0) add(''+(r.p.label||'A property')+' runs at a loss after tax ('+gbp(net)+'). Is it held for capital growth, and is that deliberate?');}); var wi=rows.filter(function(r){return r.c.invested>0;}); if(wi.length>1){ wi.sort(function(x,y){return ((y.c.grossProfit-selTax(y.c))/y.c.invested)-((x.c.grossProfit-selTax(x.c))/x.c.invested);}); var b=wi[0],w=wi[wi.length-1]; add('Best return: '+(b.p.label||'a property')+' at '+pct((b.c.grossProfit-selTax(b.c))/b.c.invested)+' ROI. Lowest: '+(w.p.label||'a property')+' at '+pct((w.c.grossProfit-selTax(w.c))/w.c.invested)+'.');} rows.forEach(function(r){ if(agg.value>0 && r.p.value/agg.value>0.4 && rows.length>1) add('Concentration: '+(r.p.label||'one property')+' is '+pct(r.p.value/agg.value)+' of portfolio value — single-asset risk worth noting.');}); if(agg.anyCost && agg.gain>0){ var netProceeds=agg.gain-portCgt; add('If you sold the whole portfolio today, the indicative gain is '+gbp(agg.gain)+' with roughly '+gbp(portCgt)+' of tax on it, leaving about '+gbp(netProceeds)+' net. Compare that lump sum, reinvested elsewhere, against '+gbp(pNet)+' of net rental income a year to weigh hold versus sell.'); rows.forEach(function(r){ if(r.c.hasCost && r.c.gain>0){ var net=r.c.grossProfit-selTax(r.c), cgtFlat=selCgtFlat(r.c); if(net>0 && r.c.gain>0){ var yearsToMatch=cgtFlat>0?(cgtFlat/net).toFixed(1):'0'; if(net'+(r.p.label||'A property')+' has grown by '+gbp(r.c.gain)+' but only nets '+gbp(net)+' a year in rent. The tax on selling ('+gbp(cgtFlat)+') would take about '+yearsToMatch+' years of current net income to replace — worth weighing capital growth against yield.'); }}}); } else if(!agg.anyCost){ add('Add an original purchase price to any property to see an indicative capital gains position if you sold today — useful for weighing hold versus sell.'); } addP('Your portfolio pays '+gbp(agg.interest)+' a year to lenders and '+gbp(pTax)+' to HMRC. Which is easier to reduce, and what would it take?'); addP('If you sold your lowest-returning property and cleared debt on the rest, what would your net income, tax position and risk look like?'); addP('Are these properties working for income, for capital growth, or out of habit \u2014 and does the structure still fit your goal?'); addP('From April 2026 reliefs tighten and Making Tax Digital for landlords is phasing in. Are your records kept property by property, ready to report quarterly?'); } /* ============ WIRING ============ */ R.querySelectorAll('.pf-og').forEach(function(b){b.addEventListener('click',function(){ ownership=b.dataset.own; R.querySelectorAll('.pf-og').forEach(function(x){var on=x===b;x.classList.toggle('is-on',on);x.setAttribute('aria-checked',on?'true':'false');}); recompute(); });}); R.querySelectorAll('.pf-tg').forEach(function(b){b.addEventListener('click',function(){ view=b.dataset.view; R.querySelectorAll('.pf-tg').forEach(function(x){var on=x===b;x.classList.toggle('is-on',on);x.setAttribute('aria-checked',on?'true':'false');}); recompute(); });}); document.getElementById('pf-print').addEventListener('click',function(){ // Print via an isolated popup rather than window.print() on the live page - // see the CGT calculator (a sibling tool) for the full explanation of why // this is more reliable than page-level print CSS defences, especially for // this snippet which runs site-wide and could otherwise interfere with - // or be interfered with by - other tools' print output. var widget = document.getElementById('optPf'); var clone = widget.cloneNode(true); // The input table uses data-col/data-k attributes rather than id, so sync // by that combination instead. outerHTML reflects HTML attributes, not // live JS values, so this must be done explicitly or the popup shows blanks. widget.querySelectorAll('input[data-k]').forEach(function (el) { var sel = '[data-col="' + el.dataset.col + '"][data-k="' + el.dataset.k + '"]'; var c = clone.querySelector(sel); if (c) c.setAttribute('value', el.value); }); var css = ''; document.querySelectorAll('style').forEach(function (s) { if (s.textContent.indexOf('.opt-pf') !== -1 || s.textContent.indexOf('#optPf') !== -1) css += s.textContent; }); var w = window.open('', '_blank'); if (!w) { alert('Your browser blocked the print popup for this page. Please allow popups for this site (usually a small icon in the address bar) and click \'Print or save the full report\' again.'); return; } w.document.open(); w.document.write('Property Portfolio Review - report' + clone.outerHTML + '

'); w.document.close(); var doPrint = function () { w.focus(); w.print(); }; w.onload = doPrint; setTimeout(doPrint, 400); }); buildInputTable(); recompute(); /* Build the instructional video iframe at runtime rather than emitting a static