{
    "ok": true,
    "_meta": {
        "validator": "oppl_complex_asset_json_validator",
        "validator_version": "1.1.17",
        "captured_at_utc": "2026-08-09T19:16:56+00:00",
        "captured_unix": 1786303016,
        "input_source": "url",
        "input_url": "https://oppl.ai/llms/runs/etf/IE00B53H0131_ucits_default_latest.json",
        "source_assessment_hash": "18b2bd51e7c091fd957b757efe3d846af9119787f6ec6612ca49bed9f3af15b2",
        "agent_enabled": true,
        "agent_provider": "openrouter",
        "agent_model": "gpt-4.1-mini",
        "agent_temperature": 0,
        "agent_max_tokens": 1800,
        "warn_short_agent": true,
        "validator_modes": {
            "deterministic": "executed",
            "agent": "executed"
        }
    },
    "isin": "IE00B53H0131",
    "classification": "non-complex",
    "policy_mode": "ucits_default",
    "decision_rule_applied": "etf_ucits_no_complex_override_rule",
    "source_classification": null,
    "source_decision_rule_applied": null,
    "resolution": {
        "applied": false
    },
    "validator_verdict": "fail",
    "publishable": false,
    "confidence": 0.92,
    "issue_count": 3,
    "issues": [
        {
            "severity": "warn",
            "code": "unsubstantiated_hard_signal_on_non_complex_contango_backwardation",
            "message": "signals.contango_backwardation=true but no supporting_evidence quote directly substantiates that hard-complex feature. Because the signal itself is not evidentially substantiated, it must not be used by the validator to overturn an otherwise coherent non-complex classification."
        },
        {
            "severity": "warn",
            "code": "unsubstantiated_hard_signal_on_non_complex_complex_index",
            "message": "signals.complex_index=true but no supporting_evidence quote directly substantiates that hard-complex feature. Because the signal itself is not evidentially substantiated, it must not be used by the validator to overturn an otherwise coherent non-complex classification."
        },
        {
            "severity": "fail",
            "code": "non_complex_with_supported_hard_complex_signal",
            "message": "classification=non-complex but directly supported hard complex signal(s) are present: commodity_futures_roll"
        }
    ],
    "suggested_repairs": [
        "Remove or downgrade unsupported contango_backwardation, or add product-specific evidence for it. Until supported, treat it as an evidence-quality flag rather than a classification contradiction.",
        "Remove or downgrade unsupported complex_index, or add product-specific evidence for it. Until supported, treat it as an evidence-quality flag rather than a classification contradiction.",
        "Reconcile the non-complex classification with the directly supported hard-complex feature(s), or correct the supporting evidence/signal if the feature is misidentified."
    ],
    "reassessment": {
        "required": false
    },
    "deterministic_review": {
        "ok": true,
        "validator_type": "deterministic",
        "validator_verdict": "fail",
        "publishable": false,
        "confidence": 0.92,
        "issues": [
            {
                "severity": "warn",
                "code": "unsubstantiated_hard_signal_on_non_complex_contango_backwardation",
                "message": "signals.contango_backwardation=true but no supporting_evidence quote directly substantiates that hard-complex feature. Because the signal itself is not evidentially substantiated, it must not be used by the validator to overturn an otherwise coherent non-complex classification."
            },
            {
                "severity": "warn",
                "code": "unsubstantiated_hard_signal_on_non_complex_complex_index",
                "message": "signals.complex_index=true but no supporting_evidence quote directly substantiates that hard-complex feature. Because the signal itself is not evidentially substantiated, it must not be used by the validator to overturn an otherwise coherent non-complex classification."
            },
            {
                "severity": "fail",
                "code": "non_complex_with_supported_hard_complex_signal",
                "message": "classification=non-complex but directly supported hard complex signal(s) are present: commodity_futures_roll"
            }
        ],
        "suggested_repairs": [
            "Remove or downgrade unsupported contango_backwardation, or add product-specific evidence for it. Until supported, treat it as an evidence-quality flag rather than a classification contradiction.",
            "Remove or downgrade unsupported complex_index, or add product-specific evidence for it. Until supported, treat it as an evidence-quality flag rather than a classification contradiction.",
            "Reconcile the non-complex classification with the directly supported hard-complex feature(s), or correct the supporting evidence/signal if the feature is misidentified."
        ],
        "reassessment": {
            "required": false
        },
        "resolution": {
            "applied": false
        },
        "decisive_signal_evidence": {
            "checked": true,
            "decision_rule_signal": null,
            "decision_rule_signal_true": null,
            "decision_rule_signal_supported": null,
            "decision_rule_matching_evidence_count": null,
            "decision_rule_matches": [],
            "true_hard_signals": [
                "synthetic_replication",
                "commodity_futures_roll",
                "contango_backwardation",
                "complex_index"
            ],
            "supported_hard_signals": [
                "synthetic_replication",
                "commodity_futures_roll"
            ],
            "unsupported_hard_signals": [
                "contango_backwardation",
                "complex_index"
            ],
            "checks": {
                "synthetic_replication": {
                    "signal_true": true,
                    "direct_evidence": true,
                    "matching_evidence_count": 2,
                    "decision_rule_uses_signal": false,
                    "matches": [
                        {
                            "index": 0,
                            "source": "FACTSHEET",
                            "evidence_signal": "synthetic_replication",
                            "quote": "The fund synthetically replicates the index performance by investing in a swap."
                        },
                        {
                            "index": 1,
                            "source": "FACTSHEET",
                            "evidence_signal": "swaps",
                            "quote": "Replication methodology Synthetic (Fully Funded + Total Return Swap)"
                        }
                    ]
                },
                "commodity_futures_roll": {
                    "signal_true": true,
                    "direct_evidence": true,
                    "matching_evidence_count": 2,
                    "decision_rule_uses_signal": false,
                    "matches": [
                        {
                            "index": 3,
                            "source": "FACTSHEET",
                            "evidence_signal": "commodity_futures_roll",
                            "quote": "By providing investors with access to \u201cConstant Maturities\u201d, it not only gives a more continuous exposure to the asset class and avoids the speculative activity that can surround monthly rolls of traditional indices, but can also minimize exposure to negative roll yield, making the index more representative of the underlying market price movements."
                        },
                        {
                            "index": 4,
                            "source": "FACTSHEET",
                            "evidence_signal": "contango_backwardation",
                            "quote": "minimize exposure to negative roll yield"
                        }
                    ]
                },
                "contango_backwardation": {
                    "signal_true": true,
                    "direct_evidence": false,
                    "matching_evidence_count": 0,
                    "decision_rule_uses_signal": false,
                    "matches": []
                },
                "complex_index": {
                    "signal_true": true,
                    "direct_evidence": false,
                    "matching_evidence_count": 0,
                    "decision_rule_uses_signal": false,
                    "matches": []
                }
            }
        },
        "derivative_materiality": {
            "checked": true,
            "policy_mode": "ucits_default",
            "type": "ETF",
            "ucits": true,
            "physical_replication": false,
            "swaps_signal": true,
            "synthetic_replication": true,
            "derivatives_core_strategy": true,
            "derivatives_epm_only": false,
            "derivative_evidence_count": 3,
            "swap_evidence_count": 2,
            "permission_or_ancillary_evidence_count": 0,
            "core_derivative_evidence_count": 2,
            "only_permission_or_ancillary_derivative_evidence": false,
            "supported_independent_hard_signals": [
                "synthetic_replication",
                "commodity_futures_roll"
            ]
        },
        "source_decisive_signal_evidence": null,
        "source_derivative_materiality": null,
        "detected_features": {
            "helo_or_core_options_overlay": false,
            "physical_replication": false,
            "physical_replication_direct_evidence": false,
            "physical_replication_evidence_count": 0,
            "has_epm_only_evidence": false,
            "has_core_derivatives_evidence": true,
            "has_generic_fdi_permission_evidence": false,
            "has_option_overlay_evidence": false
        }
    },
    "agent_review": {
        "ok": true,
        "model": "gpt-4.1-mini",
        "temperature": 0,
        "max_tokens": 1800,
        "usage": {
            "prompt_tokens": 5104,
            "completion_tokens": 615,
            "total_tokens": 5719,
            "raw": {
                "prompt_tokens": 5104,
                "completion_tokens": 615,
                "total_tokens": 5719,
                "cost": 0.0024496,
                "is_byok": false,
                "prompt_tokens_details": {
                    "cached_tokens": 1920,
                    "cache_write_tokens": 0,
                    "audio_tokens": 0,
                    "video_tokens": 0
                },
                "cost_details": {
                    "upstream_inference_cost": 0.0024496,
                    "upstream_inference_prompt_cost": 0.0014656,
                    "upstream_inference_completions_cost": 0.000984
                },
                "completion_tokens_details": {
                    "reasoning_tokens": 0,
                    "image_tokens": 0,
                    "audio_tokens": 0
                }
            }
        },
        "cost": {
            "estimated": false,
            "actual_provider_cost_available": true,
            "model": "gpt-4.1-mini",
            "prompt_tokens": 5104,
            "completion_tokens": 615,
            "total_tokens": 5719,
            "input_cost_usd": 0.0014656,
            "output_cost_usd": 0.000984,
            "estimated_cost_usd": 0.0024496,
            "pricing_basis": "openrouter_usage_cost"
        },
        "review": {
            "validator_verdict": "fail",
            "publishable": false,
            "confidence": 0.92,
            "summary": "The assessment is internally consistent in classification and evidence mapping, with the non-complex classification supported by the decision rule applied and product-specific evidence. However, there is a direct product-specific hard-complex signal (commodity_futures_roll) that conflicts with the non-complex classification, causing a fail. Some hard-complex signals (contango_backwardation, complex_index) are unsubstantiated by direct evidence and should be downgraded or removed. The derivatives_core_strategy=true flag is supported by product-specific evidence, and derivatives_epm_only=false is consistent with no ancillary/permission-only evidence. There is no conflict between derivatives_epm_only and derivatives_core_strategy flags. The synthetic_replication and swaps signals are directly evidenced and support the core derivative strategy. The decision rule applied (etf_ucits_no_complex_override_rule) is consistent with the non-complex classification and the synthetic replication in ucits_default mode. The assessment is not publishable as-is due to the fail on the unsupported hard-complex signal conflicting with classification. Suggested repairs include reconciling the classification with the commodity_futures_roll evidence or correcting the evidence/signals, and removing or substantiating unsupported hard signals contango_backwardation and complex_index.",
            "issues": [
                {
                    "severity": "warn",
                    "code": "unsubstantiated_hard_signal_on_non_complex_contango_backwardation",
                    "message": "signals.contango_backwardation=true but no supporting_evidence quote directly substantiates that hard-complex feature. Because the signal itself is not evidentially substantiated, it must not be used by the validator to overturn an otherwise coherent non-complex classification."
                },
                {
                    "severity": "warn",
                    "code": "unsubstantiated_hard_signal_on_non_complex_complex_index",
                    "message": "signals.complex_index=true but no supporting_evidence quote directly substantiates that hard-complex feature. Because the signal itself is not evidentially substantiated, it must not be used by the validator to overturn an otherwise coherent non-complex classification."
                },
                {
                    "severity": "fail",
                    "code": "non_complex_with_supported_hard_complex_signal",
                    "message": "classification=non-complex but directly supported hard complex signal(s) are present: commodity_futures_roll"
                }
            ],
            "suggested_repairs": [
                "Remove or downgrade unsupported contango_backwardation, or add product-specific evidence for it. Until supported, treat it as an evidence-quality flag rather than a classification contradiction.",
                "Remove or downgrade unsupported complex_index, or add product-specific evidence for it. Until supported, treat it as an evidence-quality flag rather than a classification contradiction.",
                "Reconcile the non-complex classification with the directly supported hard-complex feature(s), or correct the supporting evidence/signal if the feature is misidentified."
            ]
        }
    }
}