Business and investment: methods
The Business dimension asks whether investment is growing and whether factories are filling up. It combines differently dated measures rather than estimating private corporate capex from a single proxy. Current numbers in sentences come from economy/business/facts. Each reading retains its own period; missing evidence is labelled unavailable.
Inputs
The step reads warehouse inputs only through tipsheet.sources.databank.latest_snapshot. It never writes to the Data bank or fetches data. All inputs are optional.
- RBI survey workbooks (
rbi_survey_tables). OBICUS capacity utilisation, its seasonally adjusted measure, respondent count, new-order yearly growth and total inventories/sales. Industrial Outlook supplies business assessment and expectations indices. Services and Infrastructure Outlook supplies overall-business and physical-investment response balances. Explicit survey/table/series identifiers prevent mixing different questions. - National accounts. Held
economy_growth_quarterlysupplies GFCF yearly real growth, percentage-point contribution to GDP growth and real GDP share. GDP bases remain separate; the headline uses only the new base.macro_saving_investment_annualsupplies fixed investment divided by current-price GDP separately for the back series, old base and new base. We do not use the upstream gross-capital-formation measure that adds inventories and valuables. Annual dates label April starts of financial years. National investment includes households, government and companies. - Production.
macro_iip_monthlysupplies capital-goods and infrastructure/construction-goods yearly growth. Changes in its segment labels mark base changes and break chart lines.core_industries_indexsupplies overall, cement and steel indices: yearly growth is calculated on a complete calendar within each base, then the newest base with valid growth wins at overlaps. No ratio crosses bases. Output serves exports and inventories as well as domestic investment and excludes imports. - Companies.
companies_q_allsupplies RBI matched-company sales and operating-profit yearly growth, operating margin, EBIT/interest cover, interest/sales and the sales-growth sample count. See the company-results method for reconciliation. The universe is listed non-government non-financial firms, not a survivor-selected list of today’s stocks. Growth compares matched companies within each release; membership and ratio composition change between releases. Growth is nominal. Comparable capex is absent; neither depreciation nor profits substitute for it. - Credit (
rbi_sectoral_credit). Select statementsectors, universeselected_scb_sibc, categories 2, 2.1, 2.2, 2.3. Use RBI’s published matched yearly growth, the newest released cell per reporting date, then the last reporting date per month. Do not mix all-bank and reporting-bank figures or compute growth from changing samples. Credit includes working capital. - Registry. Optional
economy_scorecard.jsoncontributes Business rows and its own date/staleness counts. It does not override underlying figures or determine the verdict.
All warehouse datasets used here already have stale_after_days registrations in schedule/sources.yaml, including survey workbooks, sectoral credit and core industries. No ingestion is added. The runner stably orders declared prerequisites before their consumers, including across plugin lanes. Full-run ordering depends on economy_growth, companies and macro; --only economy_business uses held derivatives without rebuilding dependencies. Business recomputes in M1 (morning), W1 (weekly catch-up), or an explicit local release run without TIER. E1/E2 evening and W2 fund tiers do no Business computation or publication and retain the previously published, dated bundles. The step declares TIER in its non-secret runtime cache contract, preventing an evening no-op from becoming a reusable morning result. Other steps retain their existing cache settings. This adds no scheduled job or network request.
Calendar and release handling
Monthly and quarterly dates label period starts; annual dates label financial-year starts. Levels/assessments require completed periods. Published expectations keep their target quarter, including an unfinished quarter; their target is not a realised outcome. Surveys and credit are filtered by actual vintage/release dates; core releases are filtered where dates exist.
Choose each survey cell’s latest vintage at or before as_of, keeping a newer null rather than reviving an older value. Duplicate cells within a vintage or duplicate derived periods fail. The current survey overlay has a single October 2026 release containing historical tables. These are latest-vintage histories, not reconstructions of what was known historically. Other derivatives also lack complete release archives. as_of is a descriptive cutoff, not a vintage-replay API.
Calendar reindexing leaves missing periods null. Yearly production growth requires the matching prior-year month. Each column’s latest and previous non-null values retain their own dates; a change may span missing releases. Staleness is measured from period end: over 90 days monthly, 180 quarterly, 550 annually. Future expectation quarters are never treated as realised observations.
Scorecard, verdict and horizons
Eight available readings use economy_common.history_place: adjusted factory use, new-base GFCF growth, capital goods, construction goods, sales, operating margin, manufacturing assessment and industry credit. Historical ranges omit April 2020–June 2022. Histories under 20 quarterly or 60 monthly observations have no usual-range ruler. These are descriptive full-history comparisons. Production ranges span marked measurement changes; the national-accounts growth ruler uses only the new base.
The verdict requires non-stale adjusted factory use and new-base GFCF growth. Positive real investment growth and an increase in adjusted capacity use from its previous available quarter yield “Investment is growing and factories are busier”. Otherwise positive investment growth gets a mixed-signal verdict. This never asserts growing private corporate capex. The decade comparison is the median of available adjusted factory readings within ten years of as_of, not an optimal utilisation threshold.
C95: capacity and later investment
The specification was committed before computing a forward comparison in docs/research/site_calculations_spec.md, C95. C96–C99 remain unused. A timing error in the original rule was disclosed after the first run: a +120-day decision cannot observe q+1 GDP under a +60-day release assumption. The corrected decision is q-end +165 days. It leaves the outcome horizon and regression unchanged; availability is now checked explicitly.
Use seasonally adjusted capacity in q. Control for GFCF yearly growth in q+1 only if that quarter’s end +60 days precedes the decision. The outcome is GFCF yearly growth in q+3, the first complete quarter starting after the decision. Require its end +60 days by as_of. Exclude paths touching April 2020–June 2022. Match calendar quarters without interpolation. Test each GDP base independently, including its own overlap history.
Regress the outcome on an intercept, capacity and the control; require 24 origins. Report the capacity slope in percentage points of growth per percentage point of factory use. The 95% percentile interval uses 1,999 moving-block bootstrap draws, four consecutive calendar-quarter origins per block, seed 95. Blocks cannot cross missing/excluded origins; require 1,900 finite full-rank draws. A positive slope with its interval wholly above zero passes. Other estimable results do not pass; insufficient samples are untestable. No alternative horizon is selected after seeing results.
The prediction was a positive old-base slope with an interval including zero, and insufficient new-base history. Corrected publication: 40 old-base origins, slope −1.2017, interval −2.2345 to −0.0953, does not pass; prediction wrong. New base: 11 origins, untestable; short-history prediction supported. The timing repair changes neither result. This is a conditional association using revised data and assumed lags, not causality or a validated real-time forecast. The negative slope is not an investment signal.
Publication and verification
Namespaced compute/publish/step code creates nine optional series bundles and facts under economy/business/*. Missing outputs remove old manifest entries. Pages guard both bundle and column availability. Identical held inputs and explicit as_of produce identical hashes; wall-clock generation stamps are removed. The step stays within the 60-second and 150 KB-per-bundle budgets and participates in existing unchanged-input tracing.
RBI survey readings, company results and industry-credit charts hide table/CSV/JSON controls with no-download. Derived MoSPI/OEA comparisons retain controls. Every chart names its publisher. No FBIL, FIMMDA, CCIL or AMFI data are used.
Run the brief’s pipeline and economy tests from pipeline/. scripts/economy/verify_business.py checks sources, bundles and rendered numeric claims. apps/site/scripts/verify-economy-business.mjs scrolls every page before screenshots, checks charts/controls, and records console errors and overflow at desktop and phone widths. The session status records exact results and pre-existing repository-wide blockers.