{"id":200,"date":"2026-03-01T09:00:00","date_gmt":"2026-03-01T09:00:00","guid":{"rendered":"https:\/\/taxbull.co.uk\/blog\/how-we-calculate\/"},"modified":"2026-03-01T09:00:00","modified_gmt":"2026-03-01T09:00:00","slug":"how-we-calculate","status":"publish","type":"page","link":"https:\/\/taxbull.co.uk\/blog\/how-we-calculate\/","title":{"rendered":"How TaxBull Calculates Your Capital Gains Tax"},"content":{"rendered":"<p>Transparency matters when your tax bill is on the line. This page explains exactly which HMRC rules TaxBull applies, in what order, and how we handle the edge cases.<\/p>\n<h2>Legislation we follow<\/h2>\n<table>\n<thead>\n<tr>\n<th>Rule<\/th>\n<th>Legislation<\/th>\n<th>HMRC Reference<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td>Same-day matching<\/td>\n<td>TCGA 1992 s.105(1)<\/td>\n<td>CG51560<\/td>\n<\/tr>\n<tr>\n<td>Same-day compositing<\/td>\n<td>TCGA 1992 s.105(1)<\/td>\n<td>CGT calculator algorithm<\/td>\n<\/tr>\n<tr>\n<td>30-day bed &#038; breakfast rule<\/td>\n<td>TCGA 1992 s.106A<\/td>\n<td>CG51565<\/td>\n<\/tr>\n<tr>\n<td>Section 104 pool (average cost)<\/td>\n<td>TCGA 1992 s.104<\/td>\n<td>CG51570, HS284<\/td>\n<\/tr>\n<tr>\n<td>Options as chargeable assets<\/td>\n<td>TCGA 1992 s.144<\/td>\n<td>CG12300, CG55500<\/td>\n<\/tr>\n<tr>\n<td>Option exercise = single transaction<\/td>\n<td>TCGA 1992 s.144(2)-(3)<\/td>\n<td>CG55535<\/td>\n<\/tr>\n<tr>\n<td>Incidental costs of disposal<\/td>\n<td>TCGA 1992 s.38(1)(c)<\/td>\n<td>CG15250<\/td>\n<\/tr>\n<tr>\n<td>Annual exempt amount<\/td>\n<td>TCGA 1992 s.1L<\/td>\n<td>CG18100<\/td>\n<\/tr>\n<tr>\n<td>CGT rates (from 30 Oct 2024)<\/td>\n<td>Finance Act 2025 s.7-12<\/td>\n<td>\u2014<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<h2>Processing order<\/h2>\n<p><strong>Step 1 \u2014 Parse.<\/strong> Your CSV is parsed entirely in your browser. We detect the broker format (Robinhood UK, Trading 212, Freetrade, Tastytrade, or generic) and extract: date, transaction type, instrument, quantity, price, and amount.<\/p>\n<p><strong>Step 2 \u2014 Classify.<\/strong> Each transaction is classified as a stock trade, option trade, or non-CGT event (deposits, dividends, FX conversions). Non-CGT events are excluded.<\/p>\n<p><strong>Step 3 \u2014 FX conversion.<\/strong> USD amounts are converted to GBP using HMRC&#8217;s official monthly exchange rates from trade-tariff.service.gov.uk. Each transaction uses the rate for the month it occurred in.<\/p>\n<p><strong>Step 4 \u2014 Fee calculation.<\/strong> Broker-specific fees are calculated and added to acquisition costs or deducted from disposal proceeds. For Robinhood UK this includes the 0.1% FX spread, Trading Activity Fee, Options Regulatory Fee, and commission.<\/p>\n<p><strong>Step 5 \u2014 Option matching.<\/strong> Options are grouped by identical key (same ticker + expiry + call\/put + strike). Within each group, closes are matched to opens using FIFO order with a two-pass temporal constraint: Pass 1 matches only against opens from earlier dates. Pass 2 falls back to same-day opens (preventing roll mismatches). Expiries are matched to remaining opens. Assignments and exercises produce \u00a30 option gain and pass the premium to the stock CGT engine.<\/p>\n<p><strong>Step 6 \u2014 Stock matching.<\/strong> For each instrument, all buy and sell transactions are processed through HMRC&#8217;s three-rule hierarchy:<\/p>\n<p>6a. <strong>Same-day compositing:<\/strong> All buys on the same day are merged into a single composite buy (weighted average cost). All sells on the same day are merged into a single composite sell. This happens <em>before<\/em> matching, per TCGA s.105(1).<\/p>\n<p>6b. <strong>Same-day matching:<\/strong> Composite sells are matched against composite same-day buys.<\/p>\n<p>6c. <strong>30-day matching:<\/strong> Remaining sells are matched against buys in the 30 days following the sale. Earliest buy first. Day 30 is included, day 31 is not.<\/p>\n<p>6d. <strong>Section 104 pool:<\/strong> Everything left goes to the weighted-average pool. Cost is allocated proportionally: cost_of_sold_shares = pool_total_cost \u00d7 (shares_sold \u00f7 pool_total_shares).<\/p>\n<p><strong>Step 7 \u2014 Summary.<\/strong> Events are grouped by tax year (6 April to 5 April). Gains and losses are separated. SA108 box figures are calculated: listed shares in Boxes 23-30, options in Boxes 14-22.<\/p>\n<h2>Validation<\/h2>\n<p>Our calculation engine has been tested against:<\/p>\n<p>The published algorithm at cgtcalculator.com, including their Example 1 dataset (12 trades across VOD and BP, 2020-2025).<\/p>\n<p>AccountingWeb&#8217;s worked bed and breakfast examples.<\/p>\n<p>A custom 15-test suite covering: same-day compositing correctness, 30-day boundary edge cases (day 30 vs day 31), pool erosion across multiple sells, fee and stamp duty handling, same-day priority over B&#038;B and pool, B&#038;B earliest-buy-first ordering, competing sells for the same B&#038;B buy, pure losses, and mixed gain\/loss scenarios.<\/p>\n<h2>What we don&#8217;t handle (yet)<\/h2>\n<p>Corporate actions beyond stock splits (mergers, demergers, takeover paper-for-paper exchanges). These require manual adjustment.<\/p>\n<p>Pre-April 1982 holdings and the 31 March 1982 rebasing rules.<\/p>\n<p>Business Asset Disposal Relief, Investors&#8217; Relief, or any other CGT reliefs.<\/p>\n<p>CFD taxation (which may be treated as income rather than capital gains depending on HMRC&#8217;s view of your trading pattern).<\/p>\n<p>If any of these apply to your situation, consult a tax professional.<\/p>\n<p><em>Last updated: March 2026. Rules and rates reflect Finance Act 2025 and HMRC guidance current at time of writing.<\/em><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Transparency matters when your tax bill is on the line. This page explains exactly which HMRC rules TaxBull applies, in what order, and how we handle the edge\u2026<\/p>\n","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"footnotes":""},"class_list":["post-200","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/taxbull.co.uk\/blog\/wp-json\/wp\/v2\/pages\/200","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/taxbull.co.uk\/blog\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/taxbull.co.uk\/blog\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/taxbull.co.uk\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/taxbull.co.uk\/blog\/wp-json\/wp\/v2\/comments?post=200"}],"version-history":[{"count":0,"href":"https:\/\/taxbull.co.uk\/blog\/wp-json\/wp\/v2\/pages\/200\/revisions"}],"wp:attachment":[{"href":"https:\/\/taxbull.co.uk\/blog\/wp-json\/wp\/v2\/media?parent=200"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}