{
  "schema_version": "1.0.0",
  "run_id": "calculated-8c5bb21459cf",
  "mode": "calculated_only",
  "status": "passed",
  "dataset": {
    "id": "novartis-q4-2025-ifrs-v1",
    "title": "Novartis: Q4 operating-income review",
    "company": "Novartis",
    "current_period": "2025-Q4",
    "prior_period": "2024-Q4",
    "unit": "USD million",
    "basis": "IFRS reported",
    "scope": "Consolidated; fourth quarter; unaudited",
    "capture_method": "Reviewed manual transcription of the public report; automated extraction is not implemented.",
    "inspected_on": "2026-10-15",
    "sources": [
      {
        "id": "income-statement",
        "title": "Novartis Q4 and full-year 2025 financial report: consolidated income statement",
        "url": "https://www.novartis.com/sites/novartiscom/files/q4-2025-interim-financial-report-en.pdf#page=17",
        "page": 17,
        "pdf_page_index": 16
      },
      {
        "id": "performance-review",
        "title": "Novartis Q4 and full-year 2025 financial report: operating-performance review",
        "url": "https://www.novartis.com/sites/novartiscom/files/q4-2025-interim-financial-report-en.pdf#page=5",
        "page": 5,
        "pdf_page_index": 4
      }
    ],
    "source_pdf_sha256": "96b1174acff58ba1cb1212ad7b9f74aecfbf966c126c437a65928f0ab2908543"
  },
  "facts": [
    {
      "id": "net_sales",
      "label": "Net sales",
      "prior": 13153,
      "current": 13336,
      "unit": "USD million",
      "source_ids": [
        "income-statement"
      ],
      "sign": "positive"
    },
    {
      "id": "other_revenues",
      "label": "Other revenues",
      "prior": 405,
      "current": 524,
      "unit": "USD million",
      "source_ids": [
        "income-statement"
      ],
      "sign": "positive"
    },
    {
      "id": "cost_of_goods_sold",
      "label": "Cost of goods sold",
      "prior": -3324,
      "current": -3611,
      "unit": "USD million",
      "source_ids": [
        "income-statement"
      ],
      "sign": "negative"
    },
    {
      "id": "selling_general_administration",
      "label": "Selling, general and administration",
      "prior": -3501,
      "current": -3440,
      "unit": "USD million",
      "source_ids": [
        "income-statement"
      ],
      "sign": "negative"
    },
    {
      "id": "research_and_development",
      "label": "Research and development",
      "prior": -2842,
      "current": -3163,
      "unit": "USD million",
      "source_ids": [
        "income-statement"
      ],
      "sign": "negative"
    },
    {
      "id": "other_income",
      "label": "Other income",
      "prior": 298,
      "current": 417,
      "unit": "USD million",
      "source_ids": [
        "income-statement"
      ],
      "sign": "positive"
    },
    {
      "id": "other_expense",
      "label": "Other expense",
      "prior": -659,
      "current": -447,
      "unit": "USD million",
      "source_ids": [
        "income-statement"
      ],
      "sign": "negative"
    },
    {
      "id": "operating_income",
      "label": "Operating income",
      "prior": 3530,
      "current": 3616,
      "unit": "USD million",
      "source_ids": [
        "income-statement"
      ],
      "sign": "positive"
    }
  ],
  "bridge": {
    "prior": 3530,
    "current": 3616,
    "delta": 86,
    "residual": 0,
    "unit": "USD million",
    "contributions": [
      {
        "metric_id": "net_sales",
        "label": "Net sales",
        "prior": 13153,
        "current": 13336,
        "source_ids": [
          "income-statement"
        ],
        "delta": 183
      },
      {
        "metric_id": "other_revenues",
        "label": "Other revenues",
        "prior": 405,
        "current": 524,
        "source_ids": [
          "income-statement"
        ],
        "delta": 119
      },
      {
        "metric_id": "cost_of_goods_sold",
        "label": "Cost of goods sold",
        "prior": -3324,
        "current": -3611,
        "source_ids": [
          "income-statement"
        ],
        "delta": -287
      },
      {
        "metric_id": "selling_general_administration",
        "label": "Selling, general and administration",
        "prior": -3501,
        "current": -3440,
        "source_ids": [
          "income-statement"
        ],
        "delta": 61
      },
      {
        "metric_id": "research_and_development",
        "label": "Research and development",
        "prior": -2842,
        "current": -3163,
        "source_ids": [
          "income-statement"
        ],
        "delta": -321
      },
      {
        "metric_id": "other_income",
        "label": "Other income",
        "prior": 298,
        "current": 417,
        "source_ids": [
          "income-statement"
        ],
        "delta": 119
      },
      {
        "metric_id": "other_expense",
        "label": "Other expense",
        "prior": -659,
        "current": -447,
        "source_ids": [
          "income-statement"
        ],
        "delta": 212
      }
    ]
  },
  "metrics": {
    "sales_growth_percent": 1.3913175701360907,
    "operating_margin_prior_percent": 26.83798372994754,
    "operating_margin_current_percent": 27.114577084583086,
    "operating_margin_change_pp": 0.2765933546355477
  },
  "pipeline": [
    {
      "id": "source",
      "label": "Read source",
      "status": "passed",
      "description": "Reviewed public report extract, with page references.",
      "artifact": "data/novartis-q4-2025.json"
    },
    {
      "id": "normalize",
      "label": "Normalize facts",
      "status": "passed",
      "description": "Validate period, units, signs, metric IDs and source references.",
      "artifact": "facts"
    },
    {
      "id": "calculate",
      "label": "Reconcile movement",
      "status": "passed",
      "description": "Calculate seven signed contributions and check both income totals.",
      "artifact": "bridge"
    },
    {
      "id": "evidence",
      "label": "Select evidence",
      "status": "passed",
      "description": "Select bounded report summaries by relevant metric IDs.",
      "artifact": "evidence"
    },
    {
      "id": "brief",
      "label": "Build brief",
      "status": "calculated_only",
      "description": "Render a deterministic brief; no model has been called.",
      "artifact": "brief"
    },
    {
      "id": "evaluate",
      "label": "Check failures",
      "status": "passed",
      "description": "Run real validation and deliberately corrupted-input checks.",
      "artifact": "evaluation"
    }
  ],
  "evidence": [
    {
      "id": "E1",
      "source_id": "performance-review",
      "page": 5,
      "summary": "The company attributes the operating-income increase to higher government grant income and lower SG&A expenses, partly offset by higher R&D expenses.",
      "metric_ids": [
        "other_income",
        "selling_general_administration",
        "research_and_development",
        "operating_income"
      ],
      "kind": "company_reported_explanation"
    }
  ],
  "brief": {
    "title": "Operating income increased by USD 86 million.",
    "observations": [
      {
        "id": "income",
        "text": "Reported operating income moved from USD 3,530 million to USD 3,616 million. The seven signed contributions reconcile to the USD 86 million increase.",
        "kind": "arithmetic_observation",
        "metric_ids": [
          "operating_income"
        ],
        "evidence_ids": []
      },
      {
        "id": "rd",
        "text": "The largest negative contribution was Research and development, at USD 321 million. Lower other expenses contributed USD 212 million in the opposite direction.",
        "kind": "arithmetic_observation",
        "metric_ids": [
          "research_and_development",
          "other_expense"
        ],
        "evidence_ids": []
      },
      {
        "id": "company",
        "text": "The company attributes the operating-income increase to higher government grant income and lower SG&A expenses, partly offset by higher R&D expenses.",
        "kind": "company_reported_explanation",
        "metric_ids": [
          "other_income",
          "selling_general_administration",
          "research_and_development",
          "operating_income"
        ],
        "evidence_ids": [
          "E1"
        ]
      }
    ],
    "limitations": [
      "This is new independent portfolio work using public reports; it is not work performed for Novartis.",
      "These are reported actuals versus the prior year, not an internal budget or forecast.",
      "The signed income-statement bridge explains arithmetic contributions, not operational causality.",
      "The report extract was manually reviewed; automated PDF extraction and historical ingestion are not implemented.",
      "Core non-IFRS and constant-currency results are outside this comparison.",
      "A company explanation is attributed to its report; it has not been independently proven.",
      "No forecasting model, autonomous agent or measured model-quality advantage is claimed."
    ]
  },
  "checks": [
    {
      "id": "period",
      "label": "Comparable quarters",
      "passed": true,
      "detail": "Q4 2025 versus Q4 2024; reported IFRS; USD millions."
    },
    {
      "id": "signs",
      "label": "Expense signs preserved",
      "passed": true,
      "detail": "Expenses remain negative, exactly as in the source statement."
    },
    {
      "id": "bridge",
      "label": "Movement reconciles",
      "passed": true,
      "detail": "Signed contributions sum to +86 USDm; residual is 0."
    },
    {
      "id": "sources",
      "label": "Source references resolve",
      "passed": true,
      "detail": "Every fact and selected evidence record has a known source ID."
    }
  ],
  "evaluation": {
    "passed": 22,
    "failed": 0,
    "total": 22,
    "cases": [
      {
        "id": "income_bridge",
        "label": "Seven signed movements reconcile",
        "expected": "+86 USDm; residual 0",
        "actual": "+86 USDm; residual 0",
        "passed": true
      },
      {
        "id": "period_totals",
        "label": "Both income statements reconcile",
        "expected": "3530 and 3616 USDm",
        "actual": "3530 and 3616 USDm",
        "passed": true
      },
      {
        "id": "wrong_sign",
        "label": "Reject an expense with a flipped sign",
        "expected": "Rejected",
        "actual": "Rejected",
        "passed": true
      },
      {
        "id": "wrong_sign_metadata",
        "label": "Reject altered sign metadata",
        "expected": "Rejected",
        "actual": "Rejected",
        "passed": true
      },
      {
        "id": "wrong_unit",
        "label": "Reject mismatched units",
        "expected": "Rejected",
        "actual": "Rejected",
        "passed": true
      },
      {
        "id": "missing_period",
        "label": "Reject a missing comparison period",
        "expected": "Rejected",
        "actual": "Rejected",
        "passed": true
      },
      {
        "id": "wrong_period",
        "label": "Reject quarter versus full-year comparison",
        "expected": "Rejected",
        "actual": "Rejected",
        "passed": true
      },
      {
        "id": "wrong_basis",
        "label": "Reject core versus IFRS comparison",
        "expected": "Rejected",
        "actual": "Rejected",
        "passed": true
      },
      {
        "id": "missing_metric",
        "label": "Reject a missing financial metric",
        "expected": "Rejected",
        "actual": "Rejected",
        "passed": true
      },
      {
        "id": "duplicate_metric",
        "label": "Reject a duplicated financial metric",
        "expected": "Rejected",
        "actual": "Rejected",
        "passed": true
      },
      {
        "id": "changed_total",
        "label": "Reject an income-statement total mismatch",
        "expected": "Rejected",
        "actual": "Rejected",
        "passed": true
      },
      {
        "id": "offsetting_total_error",
        "label": "Reject errors hidden by equal prior/current offsets",
        "expected": "Rejected",
        "actual": "Rejected",
        "passed": true
      },
      {
        "id": "unknown_source",
        "label": "Reject an unknown fact source",
        "expected": "Rejected",
        "actual": "Rejected",
        "passed": true
      },
      {
        "id": "unsupported_number",
        "label": "Reject model-written quantities",
        "expected": "Rejected",
        "actual": "Rejected",
        "passed": true
      },
      {
        "id": "unknown_citation",
        "label": "Reject an unknown citation",
        "expected": "Rejected",
        "actual": "Rejected",
        "passed": true
      },
      {
        "id": "missing_citation",
        "label": "Reject an explanation without evidence",
        "expected": "Rejected",
        "actual": "Rejected",
        "passed": true
      },
      {
        "id": "uncovered_metric",
        "label": "Reject evidence for an unrelated metric",
        "expected": "Rejected",
        "actual": "Rejected",
        "passed": true
      },
      {
        "id": "unknown_metric",
        "label": "Reject an invented metric",
        "expected": "Rejected",
        "actual": "Rejected",
        "passed": true
      },
      {
        "id": "contradictory_text",
        "label": "Reject a numberless claim that contradicts the facts",
        "expected": "Rejected",
        "actual": "Rejected",
        "passed": true
      },
      {
        "id": "spelled_out_quantity",
        "label": "Reject quantities written as words",
        "expected": "Rejected",
        "actual": "Rejected",
        "passed": true
      },
      {
        "id": "invented_cause",
        "label": "Reject an invented cause with a real citation",
        "expected": "Rejected",
        "actual": "Rejected",
        "passed": true
      },
      {
        "id": "missing_evidence",
        "label": "No narrative evidence produces an empty evidence set",
        "expected": "No company explanation",
        "actual": "No company explanation",
        "passed": true
      }
    ],
    "scope": "Deterministic fixture and validator evaluation. This is not an LLM-quality benchmark."
  },
  "model": {
    "configured": false,
    "enabled": false,
    "reason": "No model request has been made. Live inference is disabled for this no-spend evaluation.",
    "available_models": [
      {
        "id": "openai/gpt-4.1-nano",
        "label": "GPT-4.1 Nano"
      },
      {
        "id": "openai/gpt-4.1-mini",
        "label": "GPT-4.1 Mini"
      }
    ]
  },
  "trace": {
    "run_id": "calculated-8c5bb21459cf",
    "mode": "calculated_only",
    "source_snapshot_hash": "8c5bb21459cf2efb023a999d37c3e335fbd484318ee561fda82591a73de3b662",
    "hash_scope": "Canonical manually reviewed JSON extract, not the source PDF bytes.",
    "prompt_version": null,
    "events": [
      {
        "step": "source",
        "status": "passed",
        "detail": "Reviewed public report extract, with page references."
      },
      {
        "step": "normalize",
        "status": "passed",
        "detail": "Validate period, units, signs, metric IDs and source references."
      },
      {
        "step": "calculate",
        "status": "passed",
        "detail": "Calculate seven signed contributions and check both income totals."
      },
      {
        "step": "evidence",
        "status": "passed",
        "detail": "Select bounded report summaries by relevant metric IDs."
      },
      {
        "step": "brief",
        "status": "calculated_only",
        "detail": "Render a deterministic brief; no model has been called."
      },
      {
        "step": "evaluate",
        "status": "passed",
        "detail": "Run real validation and deliberately corrupted-input checks."
      }
    ]
  },
  "cost": {
    "currency": "USD",
    "actual": 0,
    "estimated": 0,
    "model_calls": 0,
    "label": "Calculated locally. No model request or inference cost."
  }
}
