Skip to content

Learn

Company Research and Valuation

Update an earnings model and trace the change in EPS

Updating an earnings model after results should produce a traceable bridge from the old forecast to the new one. First replace the reported quarter with compatible actual inputs. Then change future drivers only where new evidence supports a revision. Recalculate the model after each stage, so the effect of actual results remains distinguishable from a change in your assumptions about the future.

This guide uses a deliberately small personal model with quarterly revenue, operating margin, finance cost and tax rate. It calculates a simplified parent-profit proxy and annual EPS under a fixed share assumption. It is an independently executable method, not an automatic filing reader, a complete three-statement model or evidence that CoTrading updates research models. A fresh consensus forecast cannot substitute for explaining changes in your own model.

Freeze the old model and identify the new information

Save the old model, model version, fiscal year, units, share assumption and source references before editing. Mark every quarter as actual or assumed. Keep a driver dictionary defining whether operating margin includes particular expenses and what the simplified profit line represents. An old forecast is useful evidence of your previous expectation only if it survives the update; editing the same cells without history destroys that comparison.

Obtain the newly published quarter from the issuer’s formal report, including period, currency, consolidation scope and relevant notes. IAS 34’s overview distinguishes interim reporting from the annual report. Verify whether a disclosed figure is single-quarter or cumulative before replacing a quarterly input. A half-year amount should not be pasted into Q2 as if it represented that quarter alone.

Separate reported facts from evidence about future periods. Actual revenue and a reported margin may replace the completed quarter. An order-book update, cost contract or explicit management statement might motivate a future revision, but needs its own period and source reference. The model remains yours: the report supplies evidence, while the choice to translate that evidence into a future driver is a documented research judgment.

Make the small model computable before changing it

For each quarter, simplified profit is (revenue * margin - finance) * (1 - tax). Annual EPS is the sum of four quarterly profits divided by a supplied 100 million share assumption. Amounts are millions of CNY. The old model has revenue 100, operating margin 20%, finance cost zero and tax rate 25% in every quarter. Each quarter therefore contributes profit of 15, annual profit is 60 and forecast EPS is 0.60 CNY.

This equation leaves out many items in real financial statements, including non-operating income, minority interests and deferred-tax details. Choose a fuller model when those items matter. Do not present the proxy as a reconciled statutory profit merely because it uses accounting-like labels. IAS 33 describes EPS numerator and denominator requirements; our fixed denominator is an explicit simplifying assumption, not an automatic diluted-EPS reconciliation.

Require finite numeric drivers, nonnegative revenue, margins and tax rates within the supported range, and positive shares. Python Decimal handles the decimal arithmetic, but the script also rejects NaN and infinities. A missing required actual remains unknown. Passing validation should mean that the stated model can be calculated, not that every economic assumption has been verified by software.

Replace the reported quarter without revising the future

The fictional Q1 filing supplies revenue 120, margin 18%, finance cost zero and tax rate 25%, with source identifier filing:AAA:Q1. Q1 profit becomes 16.2. Leave Q2, Q3 and Q4 exactly as the old model. Annual profit becomes 61.2 and EPS becomes 0.612. The actual-replacement effect is therefore plus 0.012 CNY per share, compared with the old 0.60.

Save this intermediate model as well as the result. It answers a precise question: what happens if the new reported quarter replaces the old estimate while the future outlook is unchanged? Without this stage, an optimistic future-margin change might conceal a weak reported result, or a strong result might be incorrectly described as a major improvement in the future business outlook.

The implementation deep-copies the old model. Actual replacements retain their source identifier and actual status. Required actual driver fields are collected together, and the quarter is evaluated before any model is returned. The source field is a traceability reference supplied by the researcher; it does not establish that the program independently verified a report’s authenticity or performed a generic extraction task.

Revise only future drivers with recorded evidence

The fixture supplies two reviewed Q2 changes: revenue becomes 110 with source orders:AAA:review-1, and margin becomes 19% with source costs:AAA:review-1. Finance cost and tax rate remain unchanged. Q2 profit is now 15.675 rather than 15. The annual total becomes 61.875 and EPS becomes 0.61875. The future-assumption effect relative to the actual-only model is plus 0.00675.

The bridge reconciles: 0.60 + 0.012 + 0.00675 = 0.61875. Its order is explicit: actual replacement first, supported future revisions second. Where several nonlinear assumptions interact, a different revision order can allocate effects differently. Preserve the chosen order instead of claiming that the individual contributions are uniquely determined causal effects. The final recomputed EPS should still reconcile to the final driver table.

before = eps(old_model)
actual_only = eps(after_actual)
after = eps(revised_model)
actual_effect = actual_only - before
assumption_effect = after - actual_only

Download the complete example. Use Python 3.12+, the standard library and synthetic data, then run python R549.py. The implementation includes immutable old-model checks, a driver-level source log, supported field validation, rejected changes, unknown outputs and arithmetic assertions. The excerpt shows the bridge once all three models can be calculated.

Block unsupported revisions and preserve missing actuals

Someone proposes raising Q3 margin from 20% to 30% but supplies no source. The script records missing_revision_evidence and leaves Q3 at 20%. Q4 also remains unchanged. Their status stays assumed: preserving an assumption does not transform it into a newly confirmed fact. Record the unanswered research question separately so an attractive result cannot silently justify an unsupported input.

A different failure occurs when Q1’s required actual tax input is missing. The replacement model returns unknown annual EPS and unknown bridge effects. It does not borrow the old 25% forecast tax rate and label the resulting quarter actual. If you deliberately want a provisional estimate, create a separate mixed actual-and-assumption model with a clear status; do not hide that choice in the reported-results update.

These cases require different next actions. An unsupported Q3 revision needs more evidence or a decision to retain the old assumption. A missing Q1 actual requires source review, an alternative compatible reported profit line or an explicitly approved modeling assumption. Treating both as a generic retry would conceal which part of the model is incomplete and whether a completed forecast can be responsibly issued.

Review the change log before distributing the model

Produce a driver table with quarter, field, old value, new value, actual-or-assumed status, source identifier and reason. Keep the actual-only and final EPS alongside the old EPS, plus rejected changes and missing inputs. Recalculate quarterly profit independently for the changed periods. Check that unchanged periods and the original saved model retain their original values and that the bridge sums to the final difference.

For a real model, also review share dilution, changed accounting scope, cash-flow implications and balance-sheet consistency. The small fixture does not cover them. If any changes are material, extend the model and its checks before distributing an EPS conclusion. A successful Python run proves the displayed simplified calculations and boundaries, not the completeness of an issuer valuation or an earnings forecast.

Update again with new evidence, not with silent overwrites

When another quarter arrives or a reviewed assumption changes, create a new version using the last accepted model as the starting point. Preserve the source version that justified each driver. Correcting an extraction error should be distinguishable from changing a forward operating assumption. That distinction lets a reviewer explain why the forecast moved instead of relying on a generated narrative that merely restates the final EPS.

FAQ

Should every future quarter change after an earnings release?

Only when the evidence supports those changes. Unaffected assumptions remain visible and unchanged.

Can an old forecast fill a missing actual field?

It can only support an explicitly provisional model. It must not be relabeled as reported fact.