"""
Embedded registry schema.

AUTO-GENERATED by scripts/generate_sdk.py - DO NOT EDIT MANUALLY!
"""
from __future__ import annotations

from typing import Any, Dict

SCHEMA: Dict[str, Any] = {'version': '3.2.1',
 'generated_by': 'export_schema',
 'categories': ['alerts',
                'alternatives',
                'analytics',
                'asset_allocation',
                'audit',
                'billing',
                'bonds',
                'clients',
                'data',
                'documents',
                'esg',
                'exports',
                'factors',
                'fh',
                'macro',
                'news',
                'options',
                'portfolio',
                'profiling',
                'publications',
                'queries',
                'search',
                'securities',
                'stocks',
                'workflows'],
 'operations': {'alerts.ack': {'action': 'alerts.ack',
                               'category': 'alerts',
                               'operation': 'ack',
                               'summary': 'Acknowledge alert',
                               'description': '',
                               'methodology_doc': '',
                               'params': [{'name': 'event_id',
                                           'type': 'string',
                                           'required': True,
                                           'description': 'Event ID'}],
                               'required_params': ['event_id'],
                               'optional_params': [],
                               'credits': 1,
                               'tags': ['Alerts'],
                               'deprecated': False,
                               'internal': False,
                               'supports_format': False},
                'alerts.create': {'action': 'alerts.create',
                                  'category': 'alerts',
                                  'operation': 'create',
                                  'summary': 'Create alert rule',
                                  'description': '',
                                  'methodology_doc': '',
                                  'params': [{'name': 'name',
                                              'type': 'string',
                                              'required': True,
                                              'description': 'Alert name'},
                                             {'name': 'condition',
                                              'type': 'dict',
                                              'required': True,
                                              'description': 'Alert condition'},
                                             {'name': 'action',
                                              'type': 'dict',
                                              'required': False,
                                              'description': 'Alert action (webhook, email)'},
                                             {'name': 'enabled',
                                              'type': 'bool',
                                              'required': False,
                                              'description': 'Enable alert',
                                              'default': True}],
                                  'required_params': ['name', 'condition'],
                                  'optional_params': ['action', 'enabled'],
                                  'credits': 1,
                                  'tags': ['Alerts', 'CRUD'],
                                  'deprecated': False,
                                  'internal': False,
                                  'supports_format': False},
                'alerts.delete': {'action': 'alerts.delete',
                                  'category': 'alerts',
                                  'operation': 'delete',
                                  'summary': 'Delete alert rule',
                                  'description': '',
                                  'methodology_doc': '',
                                  'params': [{'name': 'rule_id',
                                              'type': 'string',
                                              'required': True,
                                              'description': 'Rule ID'}],
                                  'required_params': ['rule_id'],
                                  'optional_params': [],
                                  'credits': 1,
                                  'tags': ['Alerts', 'CRUD'],
                                  'deprecated': False,
                                  'internal': False,
                                  'supports_format': False},
                'alerts.evaluate': {'action': 'alerts.evaluate',
                                    'category': 'alerts',
                                    'operation': 'evaluate',
                                    'summary': 'Evaluate alert',
                                    'description': 'Manually evaluate an alert rule.',
                                    'methodology_doc': '',
                                    'params': [{'name': 'rule_id',
                                                'type': 'string',
                                                'required': True,
                                                'description': 'Rule ID'}],
                                    'required_params': ['rule_id'],
                                    'optional_params': [],
                                    'credits': 1,
                                    'tags': ['Alerts'],
                                    'deprecated': False,
                                    'internal': False,
                                    'supports_format': False},
                'alerts.get': {'action': 'alerts.get',
                               'category': 'alerts',
                               'operation': 'get',
                               'summary': 'Get alert rule',
                               'description': '',
                               'methodology_doc': '',
                               'params': [{'name': 'rule_id',
                                           'type': 'string',
                                           'required': True,
                                           'description': 'Rule ID'}],
                               'required_params': ['rule_id'],
                               'optional_params': [],
                               'credits': 1,
                               'tags': ['Alerts', 'CRUD'],
                               'deprecated': False,
                               'internal': False,
                               'supports_format': False},
                'alerts.history': {'action': 'alerts.history',
                                   'category': 'alerts',
                                   'operation': 'history',
                                   'summary': 'Alert history',
                                   'description': 'Get alert event history.',
                                   'methodology_doc': '',
                                   'params': [{'name': 'rule_id',
                                               'type': 'string',
                                               'required': False,
                                               'description': 'Filter by rule'},
                                              {'name': 'limit',
                                               'type': 'int',
                                               'required': False,
                                               'description': 'Maximum results',
                                               'default': 100},
                                              {'name': 'format',
                                               'type': 'string',
                                               'required': False,
                                               'description': 'Output format: dict|df|arrow|parquet',
                                               'default': 'dict'}],
                                   'required_params': [],
                                   'optional_params': ['rule_id', 'limit', 'format'],
                                   'credits': 1,
                                   'tags': ['Alerts'],
                                   'deprecated': False,
                                   'internal': False,
                                   'supports_format': True},
                'alerts.list': {'action': 'alerts.list',
                                'category': 'alerts',
                                'operation': 'list',
                                'summary': 'List alert rules',
                                'description': '',
                                'methodology_doc': '',
                                'params': [{'name': 'enabled',
                                            'type': 'bool',
                                            'required': False,
                                            'description': 'Filter by enabled'},
                                           {'name': 'limit',
                                            'type': 'int',
                                            'required': False,
                                            'description': 'Maximum results',
                                            'default': 100},
                                           {'name': 'format',
                                            'type': 'string',
                                            'required': False,
                                            'description': 'Output format: dict|df|arrow|parquet',
                                            'default': 'dict'}],
                                'required_params': [],
                                'optional_params': ['enabled', 'limit', 'format'],
                                'credits': 1,
                                'tags': ['Alerts', 'CRUD'],
                                'deprecated': False,
                                'internal': False,
                                'supports_format': True},
                'alerts.run': {'action': 'alerts.run',
                               'category': 'alerts',
                               'operation': 'run',
                               'summary': 'Run all alerts',
                               'description': 'Evaluate all enabled alerts.',
                               'methodology_doc': '',
                               'params': [],
                               'required_params': [],
                               'optional_params': [],
                               'credits': 1,
                               'tags': ['Alerts'],
                               'deprecated': False,
                               'internal': False,
                               'supports_format': False},
                'alerts.update': {'action': 'alerts.update',
                                  'category': 'alerts',
                                  'operation': 'update',
                                  'summary': 'Update alert rule',
                                  'description': '',
                                  'methodology_doc': '',
                                  'params': [{'name': 'rule_id',
                                              'type': 'string',
                                              'required': True,
                                              'description': 'Rule ID'},
                                             {'name': 'name',
                                              'type': 'string',
                                              'required': False,
                                              'description': 'New name'},
                                             {'name': 'condition',
                                              'type': 'dict',
                                              'required': False,
                                              'description': 'New condition'},
                                             {'name': 'action',
                                              'type': 'dict',
                                              'required': False,
                                              'description': 'New action'},
                                             {'name': 'enabled',
                                              'type': 'bool',
                                              'required': False,
                                              'description': 'Enable/disable'}],
                                  'required_params': ['rule_id'],
                                  'optional_params': ['name', 'condition', 'action', 'enabled'],
                                  'credits': 1,
                                  'tags': ['Alerts', 'CRUD'],
                                  'deprecated': False,
                                  'internal': False,
                                  'supports_format': False},
                'alternatives.cash_flow': {'action': 'alternatives.cash_flow',
                                           'category': 'alternatives',
                                           'operation': 'cash_flow',
                                           'summary': 'Add cash flow',
                                           'description': '',
                                           'methodology_doc': '',
                                           'params': [{'name': 'asset_id',
                                                       'type': 'string',
                                                       'required': True,
                                                       'description': 'Asset ID'},
                                                      {'name': 'date',
                                                       'type': 'string',
                                                       'required': True,
                                                       'description': 'Cash flow date'},
                                                      {'name': 'flow_type',
                                                       'type': 'string',
                                                       'required': True,
                                                       'description': 'capital_call|distribution|fee'},
                                                      {'name': 'amount',
                                                       'type': 'float',
                                                       'required': True,
                                                       'description': 'Amount'},
                                                      {'name': 'description',
                                                       'type': 'string',
                                                       'required': False,
                                                       'description': 'Description'}],
                                           'required_params': ['asset_id', 'date', 'flow_type', 'amount'],
                                           'optional_params': ['description'],
                                           'credits': 1,
                                           'tags': ['Alternatives'],
                                           'deprecated': False,
                                           'internal': False,
                                           'supports_format': False},
                'alternatives.create': {'action': 'alternatives.create',
                                        'category': 'alternatives',
                                        'operation': 'create',
                                        'summary': 'Create alternative asset',
                                        'description': '',
                                        'methodology_doc': '',
                                        'params': [{'name': 'name',
                                                    'type': 'string',
                                                    'required': True,
                                                    'description': 'Asset name'},
                                                   {'name': 'asset_type',
                                                    'type': 'string',
                                                    'required': True,
                                                    'description': 'private_equity|real_estate|hedge_fund|private_credit|other'},
                                                   {'name': 'fund_name',
                                                    'type': 'string',
                                                    'required': False,
                                                    'description': 'Fund name'},
                                                   {'name': 'commitment',
                                                    'type': 'float',
                                                    'required': False,
                                                    'description': 'Total commitment'},
                                                   {'name': 'currency',
                                                    'type': 'string',
                                                    'required': False,
                                                    'description': 'Currency',
                                                    'default': 'EUR'},
                                                   {'name': 'vintage_year',
                                                    'type': 'int',
                                                    'required': False,
                                                    'description': 'Vintage year'},
                                                   {'name': 'manager',
                                                    'type': 'string',
                                                    'required': False,
                                                    'description': 'Manager name'}],
                                        'required_params': ['name', 'asset_type'],
                                        'optional_params': ['fund_name',
                                                            'commitment',
                                                            'currency',
                                                            'vintage_year',
                                                            'manager'],
                                        'credits': 1,
                                        'tags': ['Alternatives', 'CRUD'],
                                        'deprecated': False,
                                        'internal': False,
                                        'supports_format': False},
                'alternatives.delete': {'action': 'alternatives.delete',
                                        'category': 'alternatives',
                                        'operation': 'delete',
                                        'summary': 'Delete alternative asset',
                                        'description': '',
                                        'methodology_doc': '',
                                        'params': [{'name': 'asset_id',
                                                    'type': 'string',
                                                    'required': True,
                                                    'description': 'Asset ID'}],
                                        'required_params': ['asset_id'],
                                        'optional_params': [],
                                        'credits': 1,
                                        'tags': ['Alternatives', 'CRUD'],
                                        'deprecated': False,
                                        'internal': False,
                                        'supports_format': False},
                'alternatives.get': {'action': 'alternatives.get',
                                     'category': 'alternatives',
                                     'operation': 'get',
                                     'summary': 'Get alternative asset',
                                     'description': '',
                                     'methodology_doc': '',
                                     'params': [{'name': 'asset_id',
                                                 'type': 'string',
                                                 'required': True,
                                                 'description': 'Asset ID'},
                                                {'name': 'include_cash_flows',
                                                 'type': 'bool',
                                                 'required': False,
                                                 'description': 'Include cash flows',
                                                 'default': True},
                                                {'name': 'include_nav_history',
                                                 'type': 'bool',
                                                 'required': False,
                                                 'description': 'Include NAV history',
                                                 'default': True}],
                                     'required_params': ['asset_id'],
                                     'optional_params': ['include_cash_flows', 'include_nav_history'],
                                     'credits': 1,
                                     'tags': ['Alternatives', 'CRUD'],
                                     'deprecated': False,
                                     'internal': False,
                                     'supports_format': False},
                'alternatives.list': {'action': 'alternatives.list',
                                      'category': 'alternatives',
                                      'operation': 'list',
                                      'summary': 'List alternative assets',
                                      'description': '',
                                      'methodology_doc': '',
                                      'params': [{'name': 'asset_type',
                                                  'type': 'string',
                                                  'required': False,
                                                  'description': 'Filter by type'},
                                                 {'name': 'status',
                                                  'type': 'string',
                                                  'required': False,
                                                  'description': 'Filter by status'},
                                                 {'name': 'search',
                                                  'type': 'string',
                                                  'required': False,
                                                  'description': 'Search in name'},
                                                 {'name': 'limit',
                                                  'type': 'int',
                                                  'required': False,
                                                  'description': 'Maximum results',
                                                  'default': 50},
                                                 {'name': 'format',
                                                  'type': 'string',
                                                  'required': False,
                                                  'description': 'Output format: dict|df|arrow|parquet',
                                                  'default': 'dict'}],
                                      'required_params': [],
                                      'optional_params': ['asset_type', 'status', 'search', 'limit', 'format'],
                                      'credits': 1,
                                      'tags': ['Alternatives', 'CRUD'],
                                      'deprecated': False,
                                      'internal': False,
                                      'supports_format': True},
                'alternatives.nav_update': {'action': 'alternatives.nav_update',
                                            'category': 'alternatives',
                                            'operation': 'nav_update',
                                            'summary': 'Add NAV update',
                                            'description': '',
                                            'methodology_doc': '',
                                            'params': [{'name': 'asset_id',
                                                        'type': 'string',
                                                        'required': True,
                                                        'description': 'Asset ID'},
                                                       {'name': 'date',
                                                        'type': 'string',
                                                        'required': True,
                                                        'description': 'Valuation date'},
                                                       {'name': 'nav',
                                                        'type': 'float',
                                                        'required': True,
                                                        'description': 'NAV value'},
                                                       {'name': 'source',
                                                        'type': 'string',
                                                        'required': False,
                                                        'description': 'Source',
                                                        'default': 'manual'}],
                                            'required_params': ['asset_id', 'date', 'nav'],
                                            'optional_params': ['source'],
                                            'credits': 1,
                                            'tags': ['Alternatives'],
                                            'deprecated': False,
                                            'internal': False,
                                            'supports_format': False},
                'alternatives.performance': {'action': 'alternatives.performance',
                                             'category': 'alternatives',
                                             'operation': 'performance',
                                             'summary': 'Calculate performance',
                                             'description': 'Calculate IRR, TVPI, DPI, etc.',
                                             'methodology_doc': '',
                                             'params': [{'name': 'asset_id',
                                                         'type': 'string',
                                                         'required': True,
                                                         'description': 'Asset ID'},
                                                        {'name': 'as_of_date',
                                                         'type': 'string',
                                                         'required': False,
                                                         'description': 'As of date'}],
                                             'required_params': ['asset_id'],
                                             'optional_params': ['as_of_date'],
                                             'credits': 1,
                                             'tags': ['Alternatives'],
                                             'deprecated': False,
                                             'internal': False,
                                             'supports_format': False},
                'alternatives.summary': {'action': 'alternatives.summary',
                                         'category': 'alternatives',
                                         'operation': 'summary',
                                         'summary': 'Portfolio summary',
                                         'description': 'Aggregated summary of all alternatives.',
                                         'methodology_doc': '',
                                         'params': [{'name': 'asset_type',
                                                     'type': 'string',
                                                     'required': False,
                                                     'description': 'Filter by type'}],
                                         'required_params': [],
                                         'optional_params': ['asset_type'],
                                         'credits': 1,
                                         'tags': ['Alternatives'],
                                         'deprecated': False,
                                         'internal': False,
                                         'supports_format': False},
                'alternatives.update': {'action': 'alternatives.update',
                                        'category': 'alternatives',
                                        'operation': 'update',
                                        'summary': 'Update alternative asset',
                                        'description': '',
                                        'methodology_doc': '',
                                        'params': [{'name': 'asset_id',
                                                    'type': 'string',
                                                    'required': True,
                                                    'description': 'Asset ID'},
                                                   {'name': 'name',
                                                    'type': 'string',
                                                    'required': False,
                                                    'description': 'New name'},
                                                   {'name': 'fund_name',
                                                    'type': 'string',
                                                    'required': False,
                                                    'description': 'New fund name'},
                                                   {'name': 'status',
                                                    'type': 'string',
                                                    'required': False,
                                                    'description': 'New status'}],
                                        'required_params': ['asset_id'],
                                        'optional_params': ['name', 'fund_name', 'status'],
                                        'credits': 1,
                                        'tags': ['Alternatives', 'CRUD'],
                                        'deprecated': False,
                                        'internal': False,
                                        'supports_format': False},
                'analytics.annual_returns': {'action': 'analytics.annual_returns',
                                             'category': 'analytics',
                                             'operation': 'annual_returns',
                                             'summary': 'Annualized returns',
                                             'description': '',
                                             'methodology_doc': 'methodology/returns.md#annualization',
                                             'params': [{'name': 'identifiers',
                                                         'type': 'list',
                                                         'required': False,
                                                         'description': 'List of TepiloraCodes'},
                                                        {'name': 'prices',
                                                         'type': 'dict',
                                                         'required': False,
                                                         'description': 'User-provided prices (DataFrame or dict)'},
                                                        {'name': 'prices_file',
                                                         'type': 'string',
                                                         'required': False,
                                                         'description': 'Path to prices file'},
                                                        {'name': 'start_date',
                                                         'type': 'string',
                                                         'required': False,
                                                         'description': 'Start date (YYYY-MM-DD)'},
                                                        {'name': 'end_date',
                                                         'type': 'string',
                                                         'required': False,
                                                         'description': 'End date (YYYY-MM-DD)'},
                                                        {'name': 'format',
                                                         'type': 'string',
                                                         'required': False,
                                                         'description': 'Output format: dict|df|arrow|parquet',
                                                         'default': 'dict'}],
                                             'required_params': [],
                                             'optional_params': ['identifiers',
                                                                 'prices',
                                                                 'prices_file',
                                                                 'start_date',
                                                                 'end_date',
                                                                 'format'],
                                             'credits': 1,
                                             'tags': ['Analytics'],
                                             'deprecated': False,
                                             'internal': False,
                                             'supports_format': True},
                'analytics.annual_volatility': {'action': 'analytics.annual_volatility',
                                                'category': 'analytics',
                                                'operation': 'annual_volatility',
                                                'summary': 'Annualized volatility',
                                                'description': '',
                                                'methodology_doc': 'methodology/risk.md#volatility',
                                                'params': [{'name': 'identifiers',
                                                            'type': 'list',
                                                            'required': False,
                                                            'description': 'List of TepiloraCodes'},
                                                           {'name': 'prices',
                                                            'type': 'dict',
                                                            'required': False,
                                                            'description': 'User-provided prices (DataFrame or dict)'},
                                                           {'name': 'prices_file',
                                                            'type': 'string',
                                                            'required': False,
                                                            'description': 'Path to prices file'},
                                                           {'name': 'start_date',
                                                            'type': 'string',
                                                            'required': False,
                                                            'description': 'Start date (YYYY-MM-DD)'},
                                                           {'name': 'end_date',
                                                            'type': 'string',
                                                            'required': False,
                                                            'description': 'End date (YYYY-MM-DD)'},
                                                           {'name': 'format',
                                                            'type': 'string',
                                                            'required': False,
                                                            'description': 'Output format: dict|df|arrow|parquet',
                                                            'default': 'dict'}],
                                                'required_params': [],
                                                'optional_params': ['identifiers',
                                                                    'prices',
                                                                    'prices_file',
                                                                    'start_date',
                                                                    'end_date',
                                                                    'format'],
                                                'credits': 1,
                                                'tags': ['Analytics'],
                                                'deprecated': False,
                                                'internal': False,
                                                'supports_format': True},
                'analytics.average_drawdown': {'action': 'analytics.average_drawdown',
                                               'category': 'analytics',
                                               'operation': 'average_drawdown',
                                               'summary': 'Average drawdown',
                                               'description': '',
                                               'methodology_doc': 'methodology/risk.md#maximum-drawdown',
                                               'params': [{'name': 'identifiers',
                                                           'type': 'list',
                                                           'required': False,
                                                           'description': 'List of TepiloraCodes'},
                                                          {'name': 'prices',
                                                           'type': 'dict',
                                                           'required': False,
                                                           'description': 'User-provided prices (DataFrame or dict)'},
                                                          {'name': 'prices_file',
                                                           'type': 'string',
                                                           'required': False,
                                                           'description': 'Path to prices file'},
                                                          {'name': 'start_date',
                                                           'type': 'string',
                                                           'required': False,
                                                           'description': 'Start date (YYYY-MM-DD)'},
                                                          {'name': 'end_date',
                                                           'type': 'string',
                                                           'required': False,
                                                           'description': 'End date (YYYY-MM-DD)'},
                                                          {'name': 'format',
                                                           'type': 'string',
                                                           'required': False,
                                                           'description': 'Output format: dict|df|arrow|parquet',
                                                           'default': 'dict'}],
                                               'required_params': [],
                                               'optional_params': ['identifiers',
                                                                   'prices',
                                                                   'prices_file',
                                                                   'start_date',
                                                                   'end_date',
                                                                   'format'],
                                               'credits': 1,
                                               'tags': ['Analytics'],
                                               'deprecated': False,
                                               'internal': False,
                                               'supports_format': True},
                'analytics.batch': {'action': 'analytics.batch',
                                    'category': 'analytics',
                                    'operation': 'batch',
                                    'summary': 'Batch analytics',
                                    'description': 'Execute multiple analytics functions in one call.',
                                    'methodology_doc': '',
                                    'params': [{'name': 'operations',
                                                'type': 'list',
                                                'required': True,
                                                'description': 'List of operations [{function, params}]'},
                                               {'name': 'identifiers',
                                                'type': 'list',
                                                'required': False,
                                                'description': 'List of TepiloraCodes'},
                                               {'name': 'prices',
                                                'type': 'dict',
                                                'required': False,
                                                'description': 'Shared prices data'},
                                               {'name': 'start_date',
                                                'type': 'string',
                                                'required': False,
                                                'description': 'Start date (YYYY-MM-DD)'},
                                               {'name': 'end_date',
                                                'type': 'string',
                                                'required': False,
                                                'description': 'End date (YYYY-MM-DD)'}],
                                    'required_params': ['operations'],
                                    'optional_params': ['identifiers', 'prices', 'start_date', 'end_date'],
                                    'credits': 1,
                                    'tags': ['Analytics'],
                                    'deprecated': False,
                                    'internal': False,
                                    'supports_format': False},
                'analytics.best_period': {'action': 'analytics.best_period',
                                          'category': 'analytics',
                                          'operation': 'best_period',
                                          'summary': 'Best period return',
                                          'description': '',
                                          'methodology_doc': '',
                                          'params': [{'name': 'identifiers',
                                                      'type': 'list',
                                                      'required': False,
                                                      'description': 'List of TepiloraCodes'},
                                                     {'name': 'prices',
                                                      'type': 'dict',
                                                      'required': False,
                                                      'description': 'User-provided prices (DataFrame or dict)'},
                                                     {'name': 'prices_file',
                                                      'type': 'string',
                                                      'required': False,
                                                      'description': 'Path to prices file'},
                                                     {'name': 'start_date',
                                                      'type': 'string',
                                                      'required': False,
                                                      'description': 'Start date (YYYY-MM-DD)'},
                                                     {'name': 'end_date',
                                                      'type': 'string',
                                                      'required': False,
                                                      'description': 'End date (YYYY-MM-DD)'},
                                                     {'name': 'format',
                                                      'type': 'string',
                                                      'required': False,
                                                      'description': 'Output format: dict|df|arrow|parquet',
                                                      'default': 'dict'}],
                                          'required_params': [],
                                          'optional_params': ['identifiers',
                                                              'prices',
                                                              'prices_file',
                                                              'start_date',
                                                              'end_date',
                                                              'format'],
                                          'credits': 1,
                                          'tags': ['Analytics'],
                                          'deprecated': False,
                                          'internal': False,
                                          'supports_format': True},
                'analytics.burke_ratio': {'action': 'analytics.burke_ratio',
                                          'category': 'analytics',
                                          'operation': 'burke_ratio',
                                          'summary': 'Burke ratio',
                                          'description': '',
                                          'methodology_doc': 'methodology/ratios.md#burke-ratio',
                                          'params': [{'name': 'identifiers',
                                                      'type': 'list',
                                                      'required': False,
                                                      'description': 'List of TepiloraCodes'},
                                                     {'name': 'prices',
                                                      'type': 'dict',
                                                      'required': False,
                                                      'description': 'User-provided prices (DataFrame or dict)'},
                                                     {'name': 'prices_file',
                                                      'type': 'string',
                                                      'required': False,
                                                      'description': 'Path to prices file'},
                                                     {'name': 'start_date',
                                                      'type': 'string',
                                                      'required': False,
                                                      'description': 'Start date (YYYY-MM-DD)'},
                                                     {'name': 'end_date',
                                                      'type': 'string',
                                                      'required': False,
                                                      'description': 'End date (YYYY-MM-DD)'},
                                                     {'name': 'format',
                                                      'type': 'string',
                                                      'required': False,
                                                      'description': 'Output format: dict|df|arrow|parquet',
                                                      'default': 'dict'}],
                                          'required_params': [],
                                          'optional_params': ['identifiers',
                                                              'prices',
                                                              'prices_file',
                                                              'start_date',
                                                              'end_date',
                                                              'format'],
                                          'credits': 1,
                                          'tags': ['Analytics'],
                                          'deprecated': False,
                                          'internal': False,
                                          'supports_format': True},
                'analytics.capture_ratio': {'action': 'analytics.capture_ratio',
                                            'category': 'analytics',
                                            'operation': 'capture_ratio',
                                            'summary': 'Up/down capture ratio',
                                            'description': '',
                                            'methodology_doc': 'methodology/ratios.md#capture-ratio',
                                            'params': [{'name': 'identifiers',
                                                        'type': 'list',
                                                        'required': False,
                                                        'description': 'List of TepiloraCodes'},
                                                       {'name': 'prices',
                                                        'type': 'dict',
                                                        'required': False,
                                                        'description': 'User-provided prices (DataFrame or dict)'},
                                                       {'name': 'prices_file',
                                                        'type': 'string',
                                                        'required': False,
                                                        'description': 'Path to prices file'},
                                                       {'name': 'start_date',
                                                        'type': 'string',
                                                        'required': False,
                                                        'description': 'Start date (YYYY-MM-DD)'},
                                                       {'name': 'end_date',
                                                        'type': 'string',
                                                        'required': False,
                                                        'description': 'End date (YYYY-MM-DD)'},
                                                       {'name': 'format',
                                                        'type': 'string',
                                                        'required': False,
                                                        'description': 'Output format: dict|df|arrow|parquet',
                                                        'default': 'dict'}],
                                            'required_params': [],
                                            'optional_params': ['identifiers',
                                                                'prices',
                                                                'prices_file',
                                                                'start_date',
                                                                'end_date',
                                                                'format'],
                                            'credits': 1,
                                            'tags': ['Analytics'],
                                            'deprecated': False,
                                            'internal': False,
                                            'supports_format': True},
                'analytics.cumulative_performance': {'action': 'analytics.cumulative_performance',
                                                     'category': 'analytics',
                                                     'operation': 'cumulative_performance',
                                                     'summary': 'Cumulative performance',
                                                     'description': '',
                                                     'methodology_doc': 'methodology/returns.md#cumulative',
                                                     'params': [{'name': 'identifiers',
                                                                 'type': 'list',
                                                                 'required': False,
                                                                 'description': 'List of TepiloraCodes'},
                                                                {'name': 'prices',
                                                                 'type': 'dict',
                                                                 'required': False,
                                                                 'description': 'User-provided prices (DataFrame or '
                                                                                'dict)'},
                                                                {'name': 'prices_file',
                                                                 'type': 'string',
                                                                 'required': False,
                                                                 'description': 'Path to prices file'},
                                                                {'name': 'start_date',
                                                                 'type': 'string',
                                                                 'required': False,
                                                                 'description': 'Start date (YYYY-MM-DD)'},
                                                                {'name': 'end_date',
                                                                 'type': 'string',
                                                                 'required': False,
                                                                 'description': 'End date (YYYY-MM-DD)'},
                                                                {'name': 'format',
                                                                 'type': 'string',
                                                                 'required': False,
                                                                 'description': 'Output format: dict|df|arrow|parquet',
                                                                 'default': 'dict'}],
                                                     'required_params': [],
                                                     'optional_params': ['identifiers',
                                                                         'prices',
                                                                         'prices_file',
                                                                         'start_date',
                                                                         'end_date',
                                                                         'format'],
                                                     'credits': 1,
                                                     'tags': ['Analytics'],
                                                     'deprecated': False,
                                                     'internal': False,
                                                     'supports_format': True},
                'analytics.downside_capture': {'action': 'analytics.downside_capture',
                                               'category': 'analytics',
                                               'operation': 'downside_capture',
                                               'summary': 'Downside capture',
                                               'description': '',
                                               'methodology_doc': 'methodology/ratios.md#capture-ratio',
                                               'params': [{'name': 'identifiers',
                                                           'type': 'list',
                                                           'required': False,
                                                           'description': 'List of TepiloraCodes'},
                                                          {'name': 'prices',
                                                           'type': 'dict',
                                                           'required': False,
                                                           'description': 'User-provided prices (DataFrame or dict)'},
                                                          {'name': 'prices_file',
                                                           'type': 'string',
                                                           'required': False,
                                                           'description': 'Path to prices file'},
                                                          {'name': 'start_date',
                                                           'type': 'string',
                                                           'required': False,
                                                           'description': 'Start date (YYYY-MM-DD)'},
                                                          {'name': 'end_date',
                                                           'type': 'string',
                                                           'required': False,
                                                           'description': 'End date (YYYY-MM-DD)'},
                                                          {'name': 'format',
                                                           'type': 'string',
                                                           'required': False,
                                                           'description': 'Output format: dict|df|arrow|parquet',
                                                           'default': 'dict'}],
                                               'required_params': [],
                                               'optional_params': ['identifiers',
                                                                   'prices',
                                                                   'prices_file',
                                                                   'start_date',
                                                                   'end_date',
                                                                   'format'],
                                               'credits': 1,
                                               'tags': ['Analytics'],
                                               'deprecated': False,
                                               'internal': False,
                                               'supports_format': True},
                'analytics.downside_deviation': {'action': 'analytics.downside_deviation',
                                                 'category': 'analytics',
                                                 'operation': 'downside_deviation',
                                                 'summary': 'Downside deviation',
                                                 'description': '',
                                                 'methodology_doc': 'methodology/risk.md#downside-deviation',
                                                 'params': [{'name': 'identifiers',
                                                             'type': 'list',
                                                             'required': False,
                                                             'description': 'List of TepiloraCodes'},
                                                            {'name': 'prices',
                                                             'type': 'dict',
                                                             'required': False,
                                                             'description': 'User-provided prices (DataFrame or dict)'},
                                                            {'name': 'prices_file',
                                                             'type': 'string',
                                                             'required': False,
                                                             'description': 'Path to prices file'},
                                                            {'name': 'start_date',
                                                             'type': 'string',
                                                             'required': False,
                                                             'description': 'Start date (YYYY-MM-DD)'},
                                                            {'name': 'end_date',
                                                             'type': 'string',
                                                             'required': False,
                                                             'description': 'End date (YYYY-MM-DD)'},
                                                            {'name': 'format',
                                                             'type': 'string',
                                                             'required': False,
                                                             'description': 'Output format: dict|df|arrow|parquet',
                                                             'default': 'dict'}],
                                                 'required_params': [],
                                                 'optional_params': ['identifiers',
                                                                     'prices',
                                                                     'prices_file',
                                                                     'start_date',
                                                                     'end_date',
                                                                     'format'],
                                                 'credits': 1,
                                                 'tags': ['Analytics'],
                                                 'deprecated': False,
                                                 'internal': False,
                                                 'supports_format': True},
                'analytics.drawdown': {'action': 'analytics.drawdown',
                                       'category': 'analytics',
                                       'operation': 'drawdown',
                                       'summary': 'Drawdown series',
                                       'description': '',
                                       'methodology_doc': 'methodology/risk.md#maximum-drawdown',
                                       'params': [{'name': 'identifiers',
                                                   'type': 'list',
                                                   'required': False,
                                                   'description': 'List of TepiloraCodes'},
                                                  {'name': 'prices',
                                                   'type': 'dict',
                                                   'required': False,
                                                   'description': 'User-provided prices (DataFrame or dict)'},
                                                  {'name': 'prices_file',
                                                   'type': 'string',
                                                   'required': False,
                                                   'description': 'Path to prices file'},
                                                  {'name': 'start_date',
                                                   'type': 'string',
                                                   'required': False,
                                                   'description': 'Start date (YYYY-MM-DD)'},
                                                  {'name': 'end_date',
                                                   'type': 'string',
                                                   'required': False,
                                                   'description': 'End date (YYYY-MM-DD)'},
                                                  {'name': 'format',
                                                   'type': 'string',
                                                   'required': False,
                                                   'description': 'Output format: dict|df|arrow|parquet',
                                                   'default': 'dict'}],
                                       'required_params': [],
                                       'optional_params': ['identifiers',
                                                           'prices',
                                                           'prices_file',
                                                           'start_date',
                                                           'end_date',
                                                           'format'],
                                       'credits': 1,
                                       'tags': ['Analytics'],
                                       'deprecated': False,
                                       'internal': False,
                                       'supports_format': True},
                'analytics.drawdown_duration': {'action': 'analytics.drawdown_duration',
                                                'category': 'analytics',
                                                'operation': 'drawdown_duration',
                                                'summary': 'Drawdown duration',
                                                'description': '',
                                                'methodology_doc': 'methodology/risk.md#maximum-drawdown',
                                                'params': [{'name': 'identifiers',
                                                            'type': 'list',
                                                            'required': False,
                                                            'description': 'List of TepiloraCodes'},
                                                           {'name': 'prices',
                                                            'type': 'dict',
                                                            'required': False,
                                                            'description': 'User-provided prices (DataFrame or dict)'},
                                                           {'name': 'prices_file',
                                                            'type': 'string',
                                                            'required': False,
                                                            'description': 'Path to prices file'},
                                                           {'name': 'start_date',
                                                            'type': 'string',
                                                            'required': False,
                                                            'description': 'Start date (YYYY-MM-DD)'},
                                                           {'name': 'end_date',
                                                            'type': 'string',
                                                            'required': False,
                                                            'description': 'End date (YYYY-MM-DD)'},
                                                           {'name': 'format',
                                                            'type': 'string',
                                                            'required': False,
                                                            'description': 'Output format: dict|df|arrow|parquet',
                                                            'default': 'dict'}],
                                                'required_params': [],
                                                'optional_params': ['identifiers',
                                                                    'prices',
                                                                    'prices_file',
                                                                    'start_date',
                                                                    'end_date',
                                                                    'format'],
                                                'credits': 1,
                                                'tags': ['Analytics'],
                                                'deprecated': False,
                                                'internal': False,
                                                'supports_format': True},
                'analytics.egarch_volatility': {'action': 'analytics.egarch_volatility',
                                                'category': 'analytics',
                                                'operation': 'egarch_volatility',
                                                'summary': 'EGARCH volatility',
                                                'description': '',
                                                'methodology_doc': 'methodology/risk.md#garch',
                                                'params': [{'name': 'identifiers',
                                                            'type': 'list',
                                                            'required': False,
                                                            'description': 'List of TepiloraCodes'},
                                                           {'name': 'prices',
                                                            'type': 'dict',
                                                            'required': False,
                                                            'description': 'User-provided prices (DataFrame or dict)'},
                                                           {'name': 'prices_file',
                                                            'type': 'string',
                                                            'required': False,
                                                            'description': 'Path to prices file'},
                                                           {'name': 'start_date',
                                                            'type': 'string',
                                                            'required': False,
                                                            'description': 'Start date (YYYY-MM-DD)'},
                                                           {'name': 'end_date',
                                                            'type': 'string',
                                                            'required': False,
                                                            'description': 'End date (YYYY-MM-DD)'},
                                                           {'name': 'format',
                                                            'type': 'string',
                                                            'required': False,
                                                            'description': 'Output format: dict|df|arrow|parquet',
                                                            'default': 'dict'}],
                                                'required_params': [],
                                                'optional_params': ['identifiers',
                                                                    'prices',
                                                                    'prices_file',
                                                                    'start_date',
                                                                    'end_date',
                                                                    'format'],
                                                'credits': 1,
                                                'tags': ['Analytics'],
                                                'deprecated': False,
                                                'internal': False,
                                                'supports_format': True},
                'analytics.factor_attribution': {'action': 'analytics.factor_attribution',
                                                 'category': 'analytics',
                                                 'operation': 'factor_attribution',
                                                 'summary': 'Factor attribution',
                                                 'description': '',
                                                 'methodology_doc': 'methodology/attribution.md#factor',
                                                 'params': [{'name': 'identifiers',
                                                             'type': 'list',
                                                             'required': False,
                                                             'description': 'List of TepiloraCodes'},
                                                            {'name': 'prices',
                                                             'type': 'dict',
                                                             'required': False,
                                                             'description': 'User-provided prices (DataFrame or dict)'},
                                                            {'name': 'prices_file',
                                                             'type': 'string',
                                                             'required': False,
                                                             'description': 'Path to prices file'},
                                                            {'name': 'start_date',
                                                             'type': 'string',
                                                             'required': False,
                                                             'description': 'Start date (YYYY-MM-DD)'},
                                                            {'name': 'end_date',
                                                             'type': 'string',
                                                             'required': False,
                                                             'description': 'End date (YYYY-MM-DD)'},
                                                            {'name': 'format',
                                                             'type': 'string',
                                                             'required': False,
                                                             'description': 'Output format: dict|df|arrow|parquet',
                                                             'default': 'dict'}],
                                                 'required_params': [],
                                                 'optional_params': ['identifiers',
                                                                     'prices',
                                                                     'prices_file',
                                                                     'start_date',
                                                                     'end_date',
                                                                     'format'],
                                                 'credits': 1,
                                                 'tags': ['Analytics'],
                                                 'deprecated': False,
                                                 'internal': False,
                                                 'supports_format': True},
                'analytics.factor_regression': {'action': 'analytics.factor_regression',
                                                'category': 'analytics',
                                                'operation': 'factor_regression',
                                                'summary': 'Factor regression (FF3/FF5)',
                                                'description': '',
                                                'methodology_doc': 'methodology/factors.md#fama-french',
                                                'params': [{'name': 'identifiers',
                                                            'type': 'list',
                                                            'required': False,
                                                            'description': 'List of TepiloraCodes'},
                                                           {'name': 'prices',
                                                            'type': 'dict',
                                                            'required': False,
                                                            'description': 'User-provided prices (DataFrame or dict)'},
                                                           {'name': 'prices_file',
                                                            'type': 'string',
                                                            'required': False,
                                                            'description': 'Path to prices file'},
                                                           {'name': 'start_date',
                                                            'type': 'string',
                                                            'required': False,
                                                            'description': 'Start date (YYYY-MM-DD)'},
                                                           {'name': 'end_date',
                                                            'type': 'string',
                                                            'required': False,
                                                            'description': 'End date (YYYY-MM-DD)'},
                                                           {'name': 'model',
                                                            'type': 'string',
                                                            'required': False,
                                                            'description': 'FF3|FF5|Carhart',
                                                            'default': 'FF3'},
                                                           {'name': 'format',
                                                            'type': 'string',
                                                            'required': False,
                                                            'description': 'Output format: dict|df|arrow|parquet',
                                                            'default': 'dict'}],
                                                'required_params': [],
                                                'optional_params': ['identifiers',
                                                                    'prices',
                                                                    'prices_file',
                                                                    'start_date',
                                                                    'end_date',
                                                                    'model',
                                                                    'format'],
                                                'credits': 1,
                                                'tags': ['Analytics'],
                                                'deprecated': False,
                                                'internal': False,
                                                'supports_format': True},
                'analytics.gain_loss_ratio': {'action': 'analytics.gain_loss_ratio',
                                              'category': 'analytics',
                                              'operation': 'gain_loss_ratio',
                                              'summary': 'Gain/loss ratio',
                                              'description': '',
                                              'methodology_doc': '',
                                              'params': [{'name': 'identifiers',
                                                          'type': 'list',
                                                          'required': False,
                                                          'description': 'List of TepiloraCodes'},
                                                         {'name': 'prices',
                                                          'type': 'dict',
                                                          'required': False,
                                                          'description': 'User-provided prices (DataFrame or dict)'},
                                                         {'name': 'prices_file',
                                                          'type': 'string',
                                                          'required': False,
                                                          'description': 'Path to prices file'},
                                                         {'name': 'start_date',
                                                          'type': 'string',
                                                          'required': False,
                                                          'description': 'Start date (YYYY-MM-DD)'},
                                                         {'name': 'end_date',
                                                          'type': 'string',
                                                          'required': False,
                                                          'description': 'End date (YYYY-MM-DD)'},
                                                         {'name': 'format',
                                                          'type': 'string',
                                                          'required': False,
                                                          'description': 'Output format: dict|df|arrow|parquet',
                                                          'default': 'dict'}],
                                              'required_params': [],
                                              'optional_params': ['identifiers',
                                                                  'prices',
                                                                  'prices_file',
                                                                  'start_date',
                                                                  'end_date',
                                                                  'format'],
                                              'credits': 1,
                                              'tags': ['Analytics'],
                                              'deprecated': False,
                                              'internal': False,
                                              'supports_format': True},
                'analytics.garch_forecast': {'action': 'analytics.garch_forecast',
                                             'category': 'analytics',
                                             'operation': 'garch_forecast',
                                             'summary': 'GARCH forecast',
                                             'description': '',
                                             'methodology_doc': 'methodology/risk.md#garch',
                                             'params': [{'name': 'identifiers',
                                                         'type': 'list',
                                                         'required': False,
                                                         'description': 'List of TepiloraCodes'},
                                                        {'name': 'prices',
                                                         'type': 'dict',
                                                         'required': False,
                                                         'description': 'User-provided prices (DataFrame or dict)'},
                                                        {'name': 'prices_file',
                                                         'type': 'string',
                                                         'required': False,
                                                         'description': 'Path to prices file'},
                                                        {'name': 'start_date',
                                                         'type': 'string',
                                                         'required': False,
                                                         'description': 'Start date (YYYY-MM-DD)'},
                                                        {'name': 'end_date',
                                                         'type': 'string',
                                                         'required': False,
                                                         'description': 'End date (YYYY-MM-DD)'},
                                                        {'name': 'horizon',
                                                         'type': 'int',
                                                         'required': False,
                                                         'description': 'Forecast horizon',
                                                         'default': 10},
                                                        {'name': 'format',
                                                         'type': 'string',
                                                         'required': False,
                                                         'description': 'Output format: dict|df|arrow|parquet',
                                                         'default': 'dict'}],
                                             'required_params': [],
                                             'optional_params': ['identifiers',
                                                                 'prices',
                                                                 'prices_file',
                                                                 'start_date',
                                                                 'end_date',
                                                                 'horizon',
                                                                 'format'],
                                             'credits': 1,
                                             'tags': ['Analytics'],
                                             'deprecated': False,
                                             'internal': False,
                                             'supports_format': True},
                'analytics.garch_volatility': {'action': 'analytics.garch_volatility',
                                               'category': 'analytics',
                                               'operation': 'garch_volatility',
                                               'summary': 'GARCH volatility',
                                               'description': '',
                                               'methodology_doc': 'methodology/risk.md#garch',
                                               'params': [{'name': 'identifiers',
                                                           'type': 'list',
                                                           'required': False,
                                                           'description': 'List of TepiloraCodes'},
                                                          {'name': 'prices',
                                                           'type': 'dict',
                                                           'required': False,
                                                           'description': 'User-provided prices (DataFrame or dict)'},
                                                          {'name': 'prices_file',
                                                           'type': 'string',
                                                           'required': False,
                                                           'description': 'Path to prices file'},
                                                          {'name': 'start_date',
                                                           'type': 'string',
                                                           'required': False,
                                                           'description': 'Start date (YYYY-MM-DD)'},
                                                          {'name': 'end_date',
                                                           'type': 'string',
                                                           'required': False,
                                                           'description': 'End date (YYYY-MM-DD)'},
                                                          {'name': 'format',
                                                           'type': 'string',
                                                           'required': False,
                                                           'description': 'Output format: dict|df|arrow|parquet',
                                                           'default': 'dict'}],
                                               'required_params': [],
                                               'optional_params': ['identifiers',
                                                                   'prices',
                                                                   'prices_file',
                                                                   'start_date',
                                                                   'end_date',
                                                                   'format'],
                                               'credits': 1,
                                               'tags': ['Analytics'],
                                               'deprecated': False,
                                               'internal': False,
                                               'supports_format': True},
                'analytics.hurst_exponent': {'action': 'analytics.hurst_exponent',
                                             'category': 'analytics',
                                             'operation': 'hurst_exponent',
                                             'summary': 'Hurst exponent',
                                             'description': '',
                                             'methodology_doc': '',
                                             'params': [{'name': 'identifiers',
                                                         'type': 'list',
                                                         'required': False,
                                                         'description': 'List of TepiloraCodes'},
                                                        {'name': 'prices',
                                                         'type': 'dict',
                                                         'required': False,
                                                         'description': 'User-provided prices (DataFrame or dict)'},
                                                        {'name': 'prices_file',
                                                         'type': 'string',
                                                         'required': False,
                                                         'description': 'Path to prices file'},
                                                        {'name': 'start_date',
                                                         'type': 'string',
                                                         'required': False,
                                                         'description': 'Start date (YYYY-MM-DD)'},
                                                        {'name': 'end_date',
                                                         'type': 'string',
                                                         'required': False,
                                                         'description': 'End date (YYYY-MM-DD)'},
                                                        {'name': 'format',
                                                         'type': 'string',
                                                         'required': False,
                                                         'description': 'Output format: dict|df|arrow|parquet',
                                                         'default': 'dict'}],
                                             'required_params': [],
                                             'optional_params': ['identifiers',
                                                                 'prices',
                                                                 'prices_file',
                                                                 'start_date',
                                                                 'end_date',
                                                                 'format'],
                                             'credits': 1,
                                             'tags': ['Analytics'],
                                             'deprecated': False,
                                             'internal': False,
                                             'supports_format': True},
                'analytics.info': {'action': 'analytics.info',
                                   'category': 'analytics',
                                   'operation': 'info',
                                   'summary': 'Get function info',
                                   'description': 'Get detailed info about an analytics function.',
                                   'methodology_doc': '',
                                   'params': [{'name': 'function',
                                               'type': 'string',
                                               'required': True,
                                               'description': 'Function name'}],
                                   'required_params': ['function'],
                                   'optional_params': [],
                                   'credits': 1,
                                   'tags': ['Analytics'],
                                   'deprecated': False,
                                   'internal': False,
                                   'supports_format': False},
                'analytics.list': {'action': 'analytics.list',
                                   'category': 'analytics',
                                   'operation': 'list',
                                   'summary': 'List analytics functions',
                                   'description': 'List available analytics functions.',
                                   'methodology_doc': '',
                                   'params': [{'name': 'category',
                                               'type': 'string',
                                               'required': False,
                                               'description': 'Filter by category'}],
                                   'required_params': [],
                                   'optional_params': ['category'],
                                   'credits': 1,
                                   'tags': ['Analytics'],
                                   'deprecated': False,
                                   'internal': False,
                                   'supports_format': False},
                'analytics.log_returns': {'action': 'analytics.log_returns',
                                          'category': 'analytics',
                                          'operation': 'log_returns',
                                          'summary': 'Log returns',
                                          'description': '',
                                          'methodology_doc': 'methodology/returns.md',
                                          'params': [{'name': 'identifiers',
                                                      'type': 'list',
                                                      'required': False,
                                                      'description': 'List of TepiloraCodes'},
                                                     {'name': 'prices',
                                                      'type': 'dict',
                                                      'required': False,
                                                      'description': 'User-provided prices (DataFrame or dict)'},
                                                     {'name': 'prices_file',
                                                      'type': 'string',
                                                      'required': False,
                                                      'description': 'Path to prices file'},
                                                     {'name': 'start_date',
                                                      'type': 'string',
                                                      'required': False,
                                                      'description': 'Start date (YYYY-MM-DD)'},
                                                     {'name': 'end_date',
                                                      'type': 'string',
                                                      'required': False,
                                                      'description': 'End date (YYYY-MM-DD)'},
                                                     {'name': 'format',
                                                      'type': 'string',
                                                      'required': False,
                                                      'description': 'Output format: dict|df|arrow|parquet',
                                                      'default': 'dict'}],
                                          'required_params': [],
                                          'optional_params': ['identifiers',
                                                              'prices',
                                                              'prices_file',
                                                              'start_date',
                                                              'end_date',
                                                              'format'],
                                          'credits': 1,
                                          'tags': ['Analytics'],
                                          'deprecated': False,
                                          'internal': False,
                                          'supports_format': True},
                'analytics.max_drawdown': {'action': 'analytics.max_drawdown',
                                           'category': 'analytics',
                                           'operation': 'max_drawdown',
                                           'summary': 'Maximum drawdown',
                                           'description': '',
                                           'methodology_doc': 'methodology/risk.md#maximum-drawdown',
                                           'params': [{'name': 'identifiers',
                                                       'type': 'list',
                                                       'required': False,
                                                       'description': 'List of TepiloraCodes'},
                                                      {'name': 'prices',
                                                       'type': 'dict',
                                                       'required': False,
                                                       'description': 'User-provided prices (DataFrame or dict)'},
                                                      {'name': 'prices_file',
                                                       'type': 'string',
                                                       'required': False,
                                                       'description': 'Path to prices file'},
                                                      {'name': 'start_date',
                                                       'type': 'string',
                                                       'required': False,
                                                       'description': 'Start date (YYYY-MM-DD)'},
                                                      {'name': 'end_date',
                                                       'type': 'string',
                                                       'required': False,
                                                       'description': 'End date (YYYY-MM-DD)'},
                                                      {'name': 'format',
                                                       'type': 'string',
                                                       'required': False,
                                                       'description': 'Output format: dict|df|arrow|parquet',
                                                       'default': 'dict'}],
                                           'required_params': [],
                                           'optional_params': ['identifiers',
                                                               'prices',
                                                               'prices_file',
                                                               'start_date',
                                                               'end_date',
                                                               'format'],
                                           'credits': 1,
                                           'tags': ['Analytics'],
                                           'deprecated': False,
                                           'internal': False,
                                           'supports_format': True},
                'analytics.momentum': {'action': 'analytics.momentum',
                                       'category': 'analytics',
                                       'operation': 'momentum',
                                       'summary': 'Momentum indicator',
                                       'description': '',
                                       'methodology_doc': '',
                                       'params': [{'name': 'identifiers',
                                                   'type': 'list',
                                                   'required': False,
                                                   'description': 'List of TepiloraCodes'},
                                                  {'name': 'prices',
                                                   'type': 'dict',
                                                   'required': False,
                                                   'description': 'User-provided prices (DataFrame or dict)'},
                                                  {'name': 'prices_file',
                                                   'type': 'string',
                                                   'required': False,
                                                   'description': 'Path to prices file'},
                                                  {'name': 'start_date',
                                                   'type': 'string',
                                                   'required': False,
                                                   'description': 'Start date (YYYY-MM-DD)'},
                                                  {'name': 'end_date',
                                                   'type': 'string',
                                                   'required': False,
                                                   'description': 'End date (YYYY-MM-DD)'},
                                                  {'name': 'period',
                                                   'type': 'int',
                                                   'required': False,
                                                   'description': 'Lookback period',
                                                   'default': 21},
                                                  {'name': 'format',
                                                   'type': 'string',
                                                   'required': False,
                                                   'description': 'Output format: dict|df|arrow|parquet',
                                                   'default': 'dict'}],
                                       'required_params': [],
                                       'optional_params': ['identifiers',
                                                           'prices',
                                                           'prices_file',
                                                           'start_date',
                                                           'end_date',
                                                           'period',
                                                           'format'],
                                       'credits': 1,
                                       'tags': ['Analytics'],
                                       'deprecated': False,
                                       'internal': False,
                                       'supports_format': True},
                'analytics.monthly_returns': {'action': 'analytics.monthly_returns',
                                              'category': 'analytics',
                                              'operation': 'monthly_returns',
                                              'summary': 'Monthly returns',
                                              'description': '',
                                              'methodology_doc': 'methodology/returns.md',
                                              'params': [{'name': 'identifiers',
                                                          'type': 'list',
                                                          'required': False,
                                                          'description': 'List of TepiloraCodes'},
                                                         {'name': 'prices',
                                                          'type': 'dict',
                                                          'required': False,
                                                          'description': 'User-provided prices (DataFrame or dict)'},
                                                         {'name': 'prices_file',
                                                          'type': 'string',
                                                          'required': False,
                                                          'description': 'Path to prices file'},
                                                         {'name': 'start_date',
                                                          'type': 'string',
                                                          'required': False,
                                                          'description': 'Start date (YYYY-MM-DD)'},
                                                         {'name': 'end_date',
                                                          'type': 'string',
                                                          'required': False,
                                                          'description': 'End date (YYYY-MM-DD)'},
                                                         {'name': 'format',
                                                          'type': 'string',
                                                          'required': False,
                                                          'description': 'Output format: dict|df|arrow|parquet',
                                                          'default': 'dict'}],
                                              'required_params': [],
                                              'optional_params': ['identifiers',
                                                                  'prices',
                                                                  'prices_file',
                                                                  'start_date',
                                                                  'end_date',
                                                                  'format'],
                                              'credits': 1,
                                              'tags': ['Analytics'],
                                              'deprecated': False,
                                              'internal': False,
                                              'supports_format': True},
                'analytics.monthly_volatility': {'action': 'analytics.monthly_volatility',
                                                 'category': 'analytics',
                                                 'operation': 'monthly_volatility',
                                                 'summary': 'Monthly volatility',
                                                 'description': '',
                                                 'methodology_doc': 'methodology/risk.md#volatility',
                                                 'params': [{'name': 'identifiers',
                                                             'type': 'list',
                                                             'required': False,
                                                             'description': 'List of TepiloraCodes'},
                                                            {'name': 'prices',
                                                             'type': 'dict',
                                                             'required': False,
                                                             'description': 'User-provided prices (DataFrame or dict)'},
                                                            {'name': 'prices_file',
                                                             'type': 'string',
                                                             'required': False,
                                                             'description': 'Path to prices file'},
                                                            {'name': 'start_date',
                                                             'type': 'string',
                                                             'required': False,
                                                             'description': 'Start date (YYYY-MM-DD)'},
                                                            {'name': 'end_date',
                                                             'type': 'string',
                                                             'required': False,
                                                             'description': 'End date (YYYY-MM-DD)'},
                                                            {'name': 'format',
                                                             'type': 'string',
                                                             'required': False,
                                                             'description': 'Output format: dict|df|arrow|parquet',
                                                             'default': 'dict'}],
                                                 'required_params': [],
                                                 'optional_params': ['identifiers',
                                                                     'prices',
                                                                     'prices_file',
                                                                     'start_date',
                                                                     'end_date',
                                                                     'format'],
                                                 'credits': 1,
                                                 'tags': ['Analytics'],
                                                 'deprecated': False,
                                                 'internal': False,
                                                 'supports_format': True},
                'analytics.omega_ratio': {'action': 'analytics.omega_ratio',
                                          'category': 'analytics',
                                          'operation': 'omega_ratio',
                                          'summary': 'Omega ratio',
                                          'description': '',
                                          'methodology_doc': 'methodology/ratios.md#omega-ratio',
                                          'params': [{'name': 'identifiers',
                                                      'type': 'list',
                                                      'required': False,
                                                      'description': 'List of TepiloraCodes'},
                                                     {'name': 'prices',
                                                      'type': 'dict',
                                                      'required': False,
                                                      'description': 'User-provided prices (DataFrame or dict)'},
                                                     {'name': 'prices_file',
                                                      'type': 'string',
                                                      'required': False,
                                                      'description': 'Path to prices file'},
                                                     {'name': 'start_date',
                                                      'type': 'string',
                                                      'required': False,
                                                      'description': 'Start date (YYYY-MM-DD)'},
                                                     {'name': 'end_date',
                                                      'type': 'string',
                                                      'required': False,
                                                      'description': 'End date (YYYY-MM-DD)'},
                                                     {'name': 'threshold',
                                                      'type': 'float',
                                                      'required': False,
                                                      'description': 'Return threshold',
                                                      'default': 0.0},
                                                     {'name': 'format',
                                                      'type': 'string',
                                                      'required': False,
                                                      'description': 'Output format: dict|df|arrow|parquet',
                                                      'default': 'dict'}],
                                          'required_params': [],
                                          'optional_params': ['identifiers',
                                                              'prices',
                                                              'prices_file',
                                                              'start_date',
                                                              'end_date',
                                                              'threshold',
                                                              'format'],
                                          'credits': 1,
                                          'tags': ['Analytics'],
                                          'deprecated': False,
                                          'internal': False,
                                          'supports_format': True},
                'analytics.pain_index': {'action': 'analytics.pain_index',
                                         'category': 'analytics',
                                         'operation': 'pain_index',
                                         'summary': 'Pain index',
                                         'description': '',
                                         'methodology_doc': 'methodology/risk.md#pain-index',
                                         'params': [{'name': 'identifiers',
                                                     'type': 'list',
                                                     'required': False,
                                                     'description': 'List of TepiloraCodes'},
                                                    {'name': 'prices',
                                                     'type': 'dict',
                                                     'required': False,
                                                     'description': 'User-provided prices (DataFrame or dict)'},
                                                    {'name': 'prices_file',
                                                     'type': 'string',
                                                     'required': False,
                                                     'description': 'Path to prices file'},
                                                    {'name': 'start_date',
                                                     'type': 'string',
                                                     'required': False,
                                                     'description': 'Start date (YYYY-MM-DD)'},
                                                    {'name': 'end_date',
                                                     'type': 'string',
                                                     'required': False,
                                                     'description': 'End date (YYYY-MM-DD)'},
                                                    {'name': 'format',
                                                     'type': 'string',
                                                     'required': False,
                                                     'description': 'Output format: dict|df|arrow|parquet',
                                                     'default': 'dict'}],
                                         'required_params': [],
                                         'optional_params': ['identifiers',
                                                             'prices',
                                                             'prices_file',
                                                             'start_date',
                                                             'end_date',
                                                             'format'],
                                         'credits': 1,
                                         'tags': ['Analytics'],
                                         'deprecated': False,
                                         'internal': False,
                                         'supports_format': True},
                'analytics.profit_factor': {'action': 'analytics.profit_factor',
                                            'category': 'analytics',
                                            'operation': 'profit_factor',
                                            'summary': 'Profit factor',
                                            'description': '',
                                            'methodology_doc': '',
                                            'params': [{'name': 'identifiers',
                                                        'type': 'list',
                                                        'required': False,
                                                        'description': 'List of TepiloraCodes'},
                                                       {'name': 'prices',
                                                        'type': 'dict',
                                                        'required': False,
                                                        'description': 'User-provided prices (DataFrame or dict)'},
                                                       {'name': 'prices_file',
                                                        'type': 'string',
                                                        'required': False,
                                                        'description': 'Path to prices file'},
                                                       {'name': 'start_date',
                                                        'type': 'string',
                                                        'required': False,
                                                        'description': 'Start date (YYYY-MM-DD)'},
                                                       {'name': 'end_date',
                                                        'type': 'string',
                                                        'required': False,
                                                        'description': 'End date (YYYY-MM-DD)'},
                                                       {'name': 'format',
                                                        'type': 'string',
                                                        'required': False,
                                                        'description': 'Output format: dict|df|arrow|parquet',
                                                        'default': 'dict'}],
                                            'required_params': [],
                                            'optional_params': ['identifiers',
                                                                'prices',
                                                                'prices_file',
                                                                'start_date',
                                                                'end_date',
                                                                'format'],
                                            'credits': 1,
                                            'tags': ['Analytics'],
                                            'deprecated': False,
                                            'internal': False,
                                            'supports_format': True},
                'analytics.rate_of_change': {'action': 'analytics.rate_of_change',
                                             'category': 'analytics',
                                             'operation': 'rate_of_change',
                                             'summary': 'Rate of change',
                                             'description': '',
                                             'methodology_doc': '',
                                             'params': [{'name': 'identifiers',
                                                         'type': 'list',
                                                         'required': False,
                                                         'description': 'List of TepiloraCodes'},
                                                        {'name': 'prices',
                                                         'type': 'dict',
                                                         'required': False,
                                                         'description': 'User-provided prices (DataFrame or dict)'},
                                                        {'name': 'prices_file',
                                                         'type': 'string',
                                                         'required': False,
                                                         'description': 'Path to prices file'},
                                                        {'name': 'start_date',
                                                         'type': 'string',
                                                         'required': False,
                                                         'description': 'Start date (YYYY-MM-DD)'},
                                                        {'name': 'end_date',
                                                         'type': 'string',
                                                         'required': False,
                                                         'description': 'End date (YYYY-MM-DD)'},
                                                        {'name': 'period',
                                                         'type': 'int',
                                                         'required': False,
                                                         'description': 'Lookback period',
                                                         'default': 21},
                                                        {'name': 'format',
                                                         'type': 'string',
                                                         'required': False,
                                                         'description': 'Output format: dict|df|arrow|parquet',
                                                         'default': 'dict'}],
                                             'required_params': [],
                                             'optional_params': ['identifiers',
                                                                 'prices',
                                                                 'prices_file',
                                                                 'start_date',
                                                                 'end_date',
                                                                 'period',
                                                                 'format'],
                                             'credits': 1,
                                             'tags': ['Analytics'],
                                             'deprecated': False,
                                             'internal': False,
                                             'supports_format': True},
                'analytics.relative_strength': {'action': 'analytics.relative_strength',
                                                'category': 'analytics',
                                                'operation': 'relative_strength',
                                                'summary': 'Relative strength',
                                                'description': '',
                                                'methodology_doc': '',
                                                'params': [{'name': 'identifiers',
                                                            'type': 'list',
                                                            'required': False,
                                                            'description': 'List of TepiloraCodes'},
                                                           {'name': 'prices',
                                                            'type': 'dict',
                                                            'required': False,
                                                            'description': 'User-provided prices (DataFrame or dict)'},
                                                           {'name': 'prices_file',
                                                            'type': 'string',
                                                            'required': False,
                                                            'description': 'Path to prices file'},
                                                           {'name': 'start_date',
                                                            'type': 'string',
                                                            'required': False,
                                                            'description': 'Start date (YYYY-MM-DD)'},
                                                           {'name': 'end_date',
                                                            'type': 'string',
                                                            'required': False,
                                                            'description': 'End date (YYYY-MM-DD)'},
                                                           {'name': 'format',
                                                            'type': 'string',
                                                            'required': False,
                                                            'description': 'Output format: dict|df|arrow|parquet',
                                                            'default': 'dict'}],
                                                'required_params': [],
                                                'optional_params': ['identifiers',
                                                                    'prices',
                                                                    'prices_file',
                                                                    'start_date',
                                                                    'end_date',
                                                                    'format'],
                                                'credits': 1,
                                                'tags': ['Analytics'],
                                                'deprecated': False,
                                                'internal': False,
                                                'supports_format': True},
                'analytics.returns': {'action': 'analytics.returns',
                                      'category': 'analytics',
                                      'operation': 'returns',
                                      'summary': 'Simple returns',
                                      'description': '',
                                      'methodology_doc': 'methodology/returns.md',
                                      'params': [{'name': 'identifiers',
                                                  'type': 'list',
                                                  'required': False,
                                                  'description': 'List of TepiloraCodes'},
                                                 {'name': 'prices',
                                                  'type': 'dict',
                                                  'required': False,
                                                  'description': 'User-provided prices (DataFrame or dict)'},
                                                 {'name': 'prices_file',
                                                  'type': 'string',
                                                  'required': False,
                                                  'description': 'Path to prices file'},
                                                 {'name': 'start_date',
                                                  'type': 'string',
                                                  'required': False,
                                                  'description': 'Start date (YYYY-MM-DD)'},
                                                 {'name': 'end_date',
                                                  'type': 'string',
                                                  'required': False,
                                                  'description': 'End date (YYYY-MM-DD)'},
                                                 {'name': 'format',
                                                  'type': 'string',
                                                  'required': False,
                                                  'description': 'Output format: dict|df|arrow|parquet',
                                                  'default': 'dict'}],
                                      'required_params': [],
                                      'optional_params': ['identifiers',
                                                          'prices',
                                                          'prices_file',
                                                          'start_date',
                                                          'end_date',
                                                          'format'],
                                      'credits': 1,
                                      'tags': ['Analytics'],
                                      'deprecated': False,
                                      'internal': False,
                                      'supports_format': True},
                'analytics.rolling_alpha': {'action': 'analytics.rolling_alpha',
                                            'category': 'analytics',
                                            'operation': 'rolling_alpha',
                                            'summary': 'Rolling alpha',
                                            'description': '',
                                            'methodology_doc': 'methodology/factors.md#alpha',
                                            'params': [{'name': 'identifiers',
                                                        'type': 'list',
                                                        'required': False,
                                                        'description': 'List of TepiloraCodes'},
                                                       {'name': 'prices',
                                                        'type': 'dict',
                                                        'required': False,
                                                        'description': 'User-provided prices (DataFrame or dict)'},
                                                       {'name': 'prices_file',
                                                        'type': 'string',
                                                        'required': False,
                                                        'description': 'Path to prices file'},
                                                       {'name': 'start_date',
                                                        'type': 'string',
                                                        'required': False,
                                                        'description': 'Start date (YYYY-MM-DD)'},
                                                       {'name': 'end_date',
                                                        'type': 'string',
                                                        'required': False,
                                                        'description': 'End date (YYYY-MM-DD)'},
                                                       {'name': 'period',
                                                        'type': 'int',
                                                        'required': False,
                                                        'description': 'Rolling window',
                                                        'default': 252},
                                                       {'name': 'rf',
                                                        'type': 'float',
                                                        'required': False,
                                                        'description': 'Risk-free rate',
                                                        'default': 0.0},
                                                       {'name': 'format',
                                                        'type': 'string',
                                                        'required': False,
                                                        'description': 'Output format: dict|df|arrow|parquet',
                                                        'default': 'dict'}],
                                            'required_params': [],
                                            'optional_params': ['identifiers',
                                                                'prices',
                                                                'prices_file',
                                                                'start_date',
                                                                'end_date',
                                                                'period',
                                                                'rf',
                                                                'format'],
                                            'credits': 1,
                                            'tags': ['Analytics'],
                                            'deprecated': False,
                                            'internal': False,
                                            'supports_format': True},
                'analytics.rolling_autocorrelation': {'action': 'analytics.rolling_autocorrelation',
                                                      'category': 'analytics',
                                                      'operation': 'rolling_autocorrelation',
                                                      'summary': 'Rolling autocorrelation',
                                                      'description': '',
                                                      'methodology_doc': 'methodology/risk.md#autocorrelation',
                                                      'params': [{'name': 'identifiers',
                                                                  'type': 'list',
                                                                  'required': False,
                                                                  'description': 'List of TepiloraCodes'},
                                                                 {'name': 'prices',
                                                                  'type': 'dict',
                                                                  'required': False,
                                                                  'description': 'User-provided prices (DataFrame or '
                                                                                 'dict)'},
                                                                 {'name': 'prices_file',
                                                                  'type': 'string',
                                                                  'required': False,
                                                                  'description': 'Path to prices file'},
                                                                 {'name': 'start_date',
                                                                  'type': 'string',
                                                                  'required': False,
                                                                  'description': 'Start date (YYYY-MM-DD)'},
                                                                 {'name': 'end_date',
                                                                  'type': 'string',
                                                                  'required': False,
                                                                  'description': 'End date (YYYY-MM-DD)'},
                                                                 {'name': 'period',
                                                                  'type': 'int',
                                                                  'required': False,
                                                                  'description': 'Rolling window',
                                                                  'default': 63},
                                                                 {'name': 'lag',
                                                                  'type': 'int',
                                                                  'required': False,
                                                                  'description': 'Autocorrelation lag',
                                                                  'default': 1},
                                                                 {'name': 'format',
                                                                  'type': 'string',
                                                                  'required': False,
                                                                  'description': 'Output format: dict|df|arrow|parquet',
                                                                  'default': 'dict'}],
                                                      'required_params': [],
                                                      'optional_params': ['identifiers',
                                                                          'prices',
                                                                          'prices_file',
                                                                          'start_date',
                                                                          'end_date',
                                                                          'period',
                                                                          'lag',
                                                                          'format'],
                                                      'credits': 1,
                                                      'tags': ['Analytics'],
                                                      'deprecated': False,
                                                      'internal': False,
                                                      'supports_format': True},
                'analytics.rolling_beta': {'action': 'analytics.rolling_beta',
                                           'category': 'analytics',
                                           'operation': 'rolling_beta',
                                           'summary': 'Rolling beta',
                                           'description': '',
                                           'methodology_doc': 'methodology/factors.md#beta',
                                           'params': [{'name': 'identifiers',
                                                       'type': 'list',
                                                       'required': False,
                                                       'description': 'List of TepiloraCodes'},
                                                      {'name': 'prices',
                                                       'type': 'dict',
                                                       'required': False,
                                                       'description': 'User-provided prices (DataFrame or dict)'},
                                                      {'name': 'prices_file',
                                                       'type': 'string',
                                                       'required': False,
                                                       'description': 'Path to prices file'},
                                                      {'name': 'start_date',
                                                       'type': 'string',
                                                       'required': False,
                                                       'description': 'Start date (YYYY-MM-DD)'},
                                                      {'name': 'end_date',
                                                       'type': 'string',
                                                       'required': False,
                                                       'description': 'End date (YYYY-MM-DD)'},
                                                      {'name': 'period',
                                                       'type': 'int',
                                                       'required': False,
                                                       'description': 'Rolling window',
                                                       'default': 252},
                                                      {'name': 'format',
                                                       'type': 'string',
                                                       'required': False,
                                                       'description': 'Output format: dict|df|arrow|parquet',
                                                       'default': 'dict'}],
                                           'required_params': [],
                                           'optional_params': ['identifiers',
                                                               'prices',
                                                               'prices_file',
                                                               'start_date',
                                                               'end_date',
                                                               'period',
                                                               'format'],
                                           'credits': 1,
                                           'tags': ['Analytics'],
                                           'deprecated': False,
                                           'internal': False,
                                           'supports_format': True},
                'analytics.rolling_beta_timing': {'action': 'analytics.rolling_beta_timing',
                                                  'category': 'analytics',
                                                  'operation': 'rolling_beta_timing',
                                                  'summary': 'Rolling beta timing',
                                                  'description': '',
                                                  'methodology_doc': 'methodology/factors.md#beta',
                                                  'params': [{'name': 'identifiers',
                                                              'type': 'list',
                                                              'required': False,
                                                              'description': 'List of TepiloraCodes'},
                                                             {'name': 'prices',
                                                              'type': 'dict',
                                                              'required': False,
                                                              'description': 'User-provided prices (DataFrame or '
                                                                             'dict)'},
                                                             {'name': 'prices_file',
                                                              'type': 'string',
                                                              'required': False,
                                                              'description': 'Path to prices file'},
                                                             {'name': 'start_date',
                                                              'type': 'string',
                                                              'required': False,
                                                              'description': 'Start date (YYYY-MM-DD)'},
                                                             {'name': 'end_date',
                                                              'type': 'string',
                                                              'required': False,
                                                              'description': 'End date (YYYY-MM-DD)'},
                                                             {'name': 'period',
                                                              'type': 'int',
                                                              'required': False,
                                                              'description': 'Rolling window',
                                                              'default': 252},
                                                             {'name': 'format',
                                                              'type': 'string',
                                                              'required': False,
                                                              'description': 'Output format: dict|df|arrow|parquet',
                                                              'default': 'dict'}],
                                                  'required_params': [],
                                                  'optional_params': ['identifiers',
                                                                      'prices',
                                                                      'prices_file',
                                                                      'start_date',
                                                                      'end_date',
                                                                      'period',
                                                                      'format'],
                                                  'credits': 1,
                                                  'tags': ['Analytics'],
                                                  'deprecated': False,
                                                  'internal': False,
                                                  'supports_format': True},
                'analytics.rolling_cagr': {'action': 'analytics.rolling_cagr',
                                           'category': 'analytics',
                                           'operation': 'rolling_cagr',
                                           'summary': 'Rolling CAGR',
                                           'description': '',
                                           'methodology_doc': 'methodology/returns.md#cagr',
                                           'params': [{'name': 'identifiers',
                                                       'type': 'list',
                                                       'required': False,
                                                       'description': 'List of TepiloraCodes'},
                                                      {'name': 'prices',
                                                       'type': 'dict',
                                                       'required': False,
                                                       'description': 'User-provided prices (DataFrame or dict)'},
                                                      {'name': 'prices_file',
                                                       'type': 'string',
                                                       'required': False,
                                                       'description': 'Path to prices file'},
                                                      {'name': 'start_date',
                                                       'type': 'string',
                                                       'required': False,
                                                       'description': 'Start date (YYYY-MM-DD)'},
                                                      {'name': 'end_date',
                                                       'type': 'string',
                                                       'required': False,
                                                       'description': 'End date (YYYY-MM-DD)'},
                                                      {'name': 'period',
                                                       'type': 'int',
                                                       'required': False,
                                                       'description': 'Rolling window',
                                                       'default': 252},
                                                      {'name': 'format',
                                                       'type': 'string',
                                                       'required': False,
                                                       'description': 'Output format: dict|df|arrow|parquet',
                                                       'default': 'dict'}],
                                           'required_params': [],
                                           'optional_params': ['identifiers',
                                                               'prices',
                                                               'prices_file',
                                                               'start_date',
                                                               'end_date',
                                                               'period',
                                                               'format'],
                                           'credits': 1,
                                           'tags': ['Analytics'],
                                           'deprecated': False,
                                           'internal': False,
                                           'supports_format': True},
                'analytics.rolling_calmar': {'action': 'analytics.rolling_calmar',
                                             'category': 'analytics',
                                             'operation': 'rolling_calmar',
                                             'summary': 'Rolling Calmar ratio',
                                             'description': '',
                                             'methodology_doc': 'methodology/ratios.md#calmar-ratio',
                                             'params': [{'name': 'identifiers',
                                                         'type': 'list',
                                                         'required': False,
                                                         'description': 'List of TepiloraCodes'},
                                                        {'name': 'prices',
                                                         'type': 'dict',
                                                         'required': False,
                                                         'description': 'User-provided prices (DataFrame or dict)'},
                                                        {'name': 'prices_file',
                                                         'type': 'string',
                                                         'required': False,
                                                         'description': 'Path to prices file'},
                                                        {'name': 'start_date',
                                                         'type': 'string',
                                                         'required': False,
                                                         'description': 'Start date (YYYY-MM-DD)'},
                                                        {'name': 'end_date',
                                                         'type': 'string',
                                                         'required': False,
                                                         'description': 'End date (YYYY-MM-DD)'},
                                                        {'name': 'period',
                                                         'type': 'int',
                                                         'required': False,
                                                         'description': 'Rolling window',
                                                         'default': 252},
                                                        {'name': 'format',
                                                         'type': 'string',
                                                         'required': False,
                                                         'description': 'Output format: dict|df|arrow|parquet',
                                                         'default': 'dict'}],
                                             'required_params': [],
                                             'optional_params': ['identifiers',
                                                                 'prices',
                                                                 'prices_file',
                                                                 'start_date',
                                                                 'end_date',
                                                                 'period',
                                                                 'format'],
                                             'credits': 1,
                                             'tags': ['Analytics'],
                                             'deprecated': False,
                                             'internal': False,
                                             'supports_format': True},
                'analytics.rolling_correlation': {'action': 'analytics.rolling_correlation',
                                                  'category': 'analytics',
                                                  'operation': 'rolling_correlation',
                                                  'summary': 'Rolling correlation',
                                                  'description': '',
                                                  'methodology_doc': 'methodology/risk.md#correlation',
                                                  'params': [{'name': 'identifiers',
                                                              'type': 'list',
                                                              'required': False,
                                                              'description': 'List of TepiloraCodes'},
                                                             {'name': 'prices',
                                                              'type': 'dict',
                                                              'required': False,
                                                              'description': 'User-provided prices (DataFrame or '
                                                                             'dict)'},
                                                             {'name': 'prices_file',
                                                              'type': 'string',
                                                              'required': False,
                                                              'description': 'Path to prices file'},
                                                             {'name': 'start_date',
                                                              'type': 'string',
                                                              'required': False,
                                                              'description': 'Start date (YYYY-MM-DD)'},
                                                             {'name': 'end_date',
                                                              'type': 'string',
                                                              'required': False,
                                                              'description': 'End date (YYYY-MM-DD)'},
                                                             {'name': 'period',
                                                              'type': 'int',
                                                              'required': False,
                                                              'description': 'Rolling window',
                                                              'default': 63},
                                                             {'name': 'format',
                                                              'type': 'string',
                                                              'required': False,
                                                              'description': 'Output format: dict|df|arrow|parquet',
                                                              'default': 'dict'}],
                                                  'required_params': [],
                                                  'optional_params': ['identifiers',
                                                                      'prices',
                                                                      'prices_file',
                                                                      'start_date',
                                                                      'end_date',
                                                                      'period',
                                                                      'format'],
                                                  'credits': 1,
                                                  'tags': ['Analytics'],
                                                  'deprecated': False,
                                                  'internal': False,
                                                  'supports_format': True},
                'analytics.rolling_covariance': {'action': 'analytics.rolling_covariance',
                                                 'category': 'analytics',
                                                 'operation': 'rolling_covariance',
                                                 'summary': 'Rolling covariance',
                                                 'description': '',
                                                 'methodology_doc': 'methodology/risk.md#covariance',
                                                 'params': [{'name': 'identifiers',
                                                             'type': 'list',
                                                             'required': False,
                                                             'description': 'List of TepiloraCodes'},
                                                            {'name': 'prices',
                                                             'type': 'dict',
                                                             'required': False,
                                                             'description': 'User-provided prices (DataFrame or dict)'},
                                                            {'name': 'prices_file',
                                                             'type': 'string',
                                                             'required': False,
                                                             'description': 'Path to prices file'},
                                                            {'name': 'start_date',
                                                             'type': 'string',
                                                             'required': False,
                                                             'description': 'Start date (YYYY-MM-DD)'},
                                                            {'name': 'end_date',
                                                             'type': 'string',
                                                             'required': False,
                                                             'description': 'End date (YYYY-MM-DD)'},
                                                            {'name': 'period',
                                                             'type': 'int',
                                                             'required': False,
                                                             'description': 'Rolling window',
                                                             'default': 63},
                                                            {'name': 'format',
                                                             'type': 'string',
                                                             'required': False,
                                                             'description': 'Output format: dict|df|arrow|parquet',
                                                             'default': 'dict'}],
                                                 'required_params': [],
                                                 'optional_params': ['identifiers',
                                                                     'prices',
                                                                     'prices_file',
                                                                     'start_date',
                                                                     'end_date',
                                                                     'period',
                                                                     'format'],
                                                 'credits': 1,
                                                 'tags': ['Analytics'],
                                                 'deprecated': False,
                                                 'internal': False,
                                                 'supports_format': True},
                'analytics.rolling_cvar': {'action': 'analytics.rolling_cvar',
                                           'category': 'analytics',
                                           'operation': 'rolling_cvar',
                                           'summary': 'Rolling CVaR (Expected Shortfall)',
                                           'description': '',
                                           'methodology_doc': 'methodology/risk.md#cvar',
                                           'params': [{'name': 'identifiers',
                                                       'type': 'list',
                                                       'required': False,
                                                       'description': 'List of TepiloraCodes'},
                                                      {'name': 'prices',
                                                       'type': 'dict',
                                                       'required': False,
                                                       'description': 'User-provided prices (DataFrame or dict)'},
                                                      {'name': 'prices_file',
                                                       'type': 'string',
                                                       'required': False,
                                                       'description': 'Path to prices file'},
                                                      {'name': 'start_date',
                                                       'type': 'string',
                                                       'required': False,
                                                       'description': 'Start date (YYYY-MM-DD)'},
                                                      {'name': 'end_date',
                                                       'type': 'string',
                                                       'required': False,
                                                       'description': 'End date (YYYY-MM-DD)'},
                                                      {'name': 'period',
                                                       'type': 'int',
                                                       'required': False,
                                                       'description': 'Rolling window',
                                                       'default': 252},
                                                      {'name': 'confidence',
                                                       'type': 'float',
                                                       'required': False,
                                                       'description': 'Confidence level',
                                                       'default': 0.95},
                                                      {'name': 'format',
                                                       'type': 'string',
                                                       'required': False,
                                                       'description': 'Output format: dict|df|arrow|parquet',
                                                       'default': 'dict'}],
                                           'required_params': [],
                                           'optional_params': ['identifiers',
                                                               'prices',
                                                               'prices_file',
                                                               'start_date',
                                                               'end_date',
                                                               'period',
                                                               'confidence',
                                                               'format'],
                                           'credits': 1,
                                           'tags': ['Analytics'],
                                           'deprecated': False,
                                           'internal': False,
                                           'supports_format': True},
                'analytics.rolling_downside_beta': {'action': 'analytics.rolling_downside_beta',
                                                    'category': 'analytics',
                                                    'operation': 'rolling_downside_beta',
                                                    'summary': 'Rolling downside beta',
                                                    'description': '',
                                                    'methodology_doc': 'methodology/factors.md#beta',
                                                    'params': [{'name': 'identifiers',
                                                                'type': 'list',
                                                                'required': False,
                                                                'description': 'List of TepiloraCodes'},
                                                               {'name': 'prices',
                                                                'type': 'dict',
                                                                'required': False,
                                                                'description': 'User-provided prices (DataFrame or '
                                                                               'dict)'},
                                                               {'name': 'prices_file',
                                                                'type': 'string',
                                                                'required': False,
                                                                'description': 'Path to prices file'},
                                                               {'name': 'start_date',
                                                                'type': 'string',
                                                                'required': False,
                                                                'description': 'Start date (YYYY-MM-DD)'},
                                                               {'name': 'end_date',
                                                                'type': 'string',
                                                                'required': False,
                                                                'description': 'End date (YYYY-MM-DD)'},
                                                               {'name': 'period',
                                                                'type': 'int',
                                                                'required': False,
                                                                'description': 'Rolling window',
                                                                'default': 252},
                                                               {'name': 'format',
                                                                'type': 'string',
                                                                'required': False,
                                                                'description': 'Output format: dict|df|arrow|parquet',
                                                                'default': 'dict'}],
                                                    'required_params': [],
                                                    'optional_params': ['identifiers',
                                                                        'prices',
                                                                        'prices_file',
                                                                        'start_date',
                                                                        'end_date',
                                                                        'period',
                                                                        'format'],
                                                    'credits': 1,
                                                    'tags': ['Analytics'],
                                                    'deprecated': False,
                                                    'internal': False,
                                                    'supports_format': True},
                'analytics.rolling_factor_regression': {'action': 'analytics.rolling_factor_regression',
                                                        'category': 'analytics',
                                                        'operation': 'rolling_factor_regression',
                                                        'summary': 'Rolling factor regression',
                                                        'description': '',
                                                        'methodology_doc': 'methodology/factors.md#fama-french',
                                                        'params': [{'name': 'identifiers',
                                                                    'type': 'list',
                                                                    'required': False,
                                                                    'description': 'List of TepiloraCodes'},
                                                                   {'name': 'prices',
                                                                    'type': 'dict',
                                                                    'required': False,
                                                                    'description': 'User-provided prices (DataFrame or '
                                                                                   'dict)'},
                                                                   {'name': 'prices_file',
                                                                    'type': 'string',
                                                                    'required': False,
                                                                    'description': 'Path to prices file'},
                                                                   {'name': 'start_date',
                                                                    'type': 'string',
                                                                    'required': False,
                                                                    'description': 'Start date (YYYY-MM-DD)'},
                                                                   {'name': 'end_date',
                                                                    'type': 'string',
                                                                    'required': False,
                                                                    'description': 'End date (YYYY-MM-DD)'},
                                                                   {'name': 'model',
                                                                    'type': 'string',
                                                                    'required': False,
                                                                    'description': 'FF3|FF5|Carhart',
                                                                    'default': 'FF3'},
                                                                   {'name': 'period',
                                                                    'type': 'int',
                                                                    'required': False,
                                                                    'description': 'Rolling window',
                                                                    'default': 252},
                                                                   {'name': 'format',
                                                                    'type': 'string',
                                                                    'required': False,
                                                                    'description': 'Output format: '
                                                                                   'dict|df|arrow|parquet',
                                                                    'default': 'dict'}],
                                                        'required_params': [],
                                                        'optional_params': ['identifiers',
                                                                            'prices',
                                                                            'prices_file',
                                                                            'start_date',
                                                                            'end_date',
                                                                            'model',
                                                                            'period',
                                                                            'format'],
                                                        'credits': 1,
                                                        'tags': ['Analytics'],
                                                        'deprecated': False,
                                                        'internal': False,
                                                        'supports_format': True},
                'analytics.rolling_garch': {'action': 'analytics.rolling_garch',
                                            'category': 'analytics',
                                            'operation': 'rolling_garch',
                                            'summary': 'Rolling GARCH',
                                            'description': '',
                                            'methodology_doc': 'methodology/risk.md#garch',
                                            'params': [{'name': 'identifiers',
                                                        'type': 'list',
                                                        'required': False,
                                                        'description': 'List of TepiloraCodes'},
                                                       {'name': 'prices',
                                                        'type': 'dict',
                                                        'required': False,
                                                        'description': 'User-provided prices (DataFrame or dict)'},
                                                       {'name': 'prices_file',
                                                        'type': 'string',
                                                        'required': False,
                                                        'description': 'Path to prices file'},
                                                       {'name': 'start_date',
                                                        'type': 'string',
                                                        'required': False,
                                                        'description': 'Start date (YYYY-MM-DD)'},
                                                       {'name': 'end_date',
                                                        'type': 'string',
                                                        'required': False,
                                                        'description': 'End date (YYYY-MM-DD)'},
                                                       {'name': 'period',
                                                        'type': 'int',
                                                        'required': False,
                                                        'description': 'Rolling window',
                                                        'default': 252},
                                                       {'name': 'format',
                                                        'type': 'string',
                                                        'required': False,
                                                        'description': 'Output format: dict|df|arrow|parquet',
                                                        'default': 'dict'}],
                                            'required_params': [],
                                            'optional_params': ['identifiers',
                                                                'prices',
                                                                'prices_file',
                                                                'start_date',
                                                                'end_date',
                                                                'period',
                                                                'format'],
                                            'credits': 1,
                                            'tags': ['Analytics'],
                                            'deprecated': False,
                                            'internal': False,
                                            'supports_format': True},
                'analytics.rolling_information_ratio': {'action': 'analytics.rolling_information_ratio',
                                                        'category': 'analytics',
                                                        'operation': 'rolling_information_ratio',
                                                        'summary': 'Rolling information ratio',
                                                        'description': '',
                                                        'methodology_doc': 'methodology/ratios.md#information-ratio',
                                                        'params': [{'name': 'identifiers',
                                                                    'type': 'list',
                                                                    'required': False,
                                                                    'description': 'List of TepiloraCodes'},
                                                                   {'name': 'prices',
                                                                    'type': 'dict',
                                                                    'required': False,
                                                                    'description': 'User-provided prices (DataFrame or '
                                                                                   'dict)'},
                                                                   {'name': 'prices_file',
                                                                    'type': 'string',
                                                                    'required': False,
                                                                    'description': 'Path to prices file'},
                                                                   {'name': 'start_date',
                                                                    'type': 'string',
                                                                    'required': False,
                                                                    'description': 'Start date (YYYY-MM-DD)'},
                                                                   {'name': 'end_date',
                                                                    'type': 'string',
                                                                    'required': False,
                                                                    'description': 'End date (YYYY-MM-DD)'},
                                                                   {'name': 'period',
                                                                    'type': 'int',
                                                                    'required': False,
                                                                    'description': 'Rolling window',
                                                                    'default': 252},
                                                                   {'name': 'format',
                                                                    'type': 'string',
                                                                    'required': False,
                                                                    'description': 'Output format: '
                                                                                   'dict|df|arrow|parquet',
                                                                    'default': 'dict'}],
                                                        'required_params': [],
                                                        'optional_params': ['identifiers',
                                                                            'prices',
                                                                            'prices_file',
                                                                            'start_date',
                                                                            'end_date',
                                                                            'period',
                                                                            'format'],
                                                        'credits': 1,
                                                        'tags': ['Analytics'],
                                                        'deprecated': False,
                                                        'internal': False,
                                                        'supports_format': True},
                'analytics.rolling_kurtosis': {'action': 'analytics.rolling_kurtosis',
                                               'category': 'analytics',
                                               'operation': 'rolling_kurtosis',
                                               'summary': 'Rolling kurtosis',
                                               'description': '',
                                               'methodology_doc': 'methodology/risk.md#kurtosis',
                                               'params': [{'name': 'identifiers',
                                                           'type': 'list',
                                                           'required': False,
                                                           'description': 'List of TepiloraCodes'},
                                                          {'name': 'prices',
                                                           'type': 'dict',
                                                           'required': False,
                                                           'description': 'User-provided prices (DataFrame or dict)'},
                                                          {'name': 'prices_file',
                                                           'type': 'string',
                                                           'required': False,
                                                           'description': 'Path to prices file'},
                                                          {'name': 'start_date',
                                                           'type': 'string',
                                                           'required': False,
                                                           'description': 'Start date (YYYY-MM-DD)'},
                                                          {'name': 'end_date',
                                                           'type': 'string',
                                                           'required': False,
                                                           'description': 'End date (YYYY-MM-DD)'},
                                                          {'name': 'period',
                                                           'type': 'int',
                                                           'required': False,
                                                           'description': 'Rolling window',
                                                           'default': 63},
                                                          {'name': 'format',
                                                           'type': 'string',
                                                           'required': False,
                                                           'description': 'Output format: dict|df|arrow|parquet',
                                                           'default': 'dict'}],
                                               'required_params': [],
                                               'optional_params': ['identifiers',
                                                                   'prices',
                                                                   'prices_file',
                                                                   'start_date',
                                                                   'end_date',
                                                                   'period',
                                                                   'format'],
                                               'credits': 1,
                                               'tags': ['Analytics'],
                                               'deprecated': False,
                                               'internal': False,
                                               'supports_format': True},
                'analytics.rolling_r_squared': {'action': 'analytics.rolling_r_squared',
                                                'category': 'analytics',
                                                'operation': 'rolling_r_squared',
                                                'summary': 'Rolling R-squared',
                                                'description': '',
                                                'methodology_doc': 'methodology/factors.md#r-squared',
                                                'params': [{'name': 'identifiers',
                                                            'type': 'list',
                                                            'required': False,
                                                            'description': 'List of TepiloraCodes'},
                                                           {'name': 'prices',
                                                            'type': 'dict',
                                                            'required': False,
                                                            'description': 'User-provided prices (DataFrame or dict)'},
                                                           {'name': 'prices_file',
                                                            'type': 'string',
                                                            'required': False,
                                                            'description': 'Path to prices file'},
                                                           {'name': 'start_date',
                                                            'type': 'string',
                                                            'required': False,
                                                            'description': 'Start date (YYYY-MM-DD)'},
                                                           {'name': 'end_date',
                                                            'type': 'string',
                                                            'required': False,
                                                            'description': 'End date (YYYY-MM-DD)'},
                                                           {'name': 'period',
                                                            'type': 'int',
                                                            'required': False,
                                                            'description': 'Rolling window',
                                                            'default': 252},
                                                           {'name': 'format',
                                                            'type': 'string',
                                                            'required': False,
                                                            'description': 'Output format: dict|df|arrow|parquet',
                                                            'default': 'dict'}],
                                                'required_params': [],
                                                'optional_params': ['identifiers',
                                                                    'prices',
                                                                    'prices_file',
                                                                    'start_date',
                                                                    'end_date',
                                                                    'period',
                                                                    'format'],
                                                'credits': 1,
                                                'tags': ['Analytics'],
                                                'deprecated': False,
                                                'internal': False,
                                                'supports_format': True},
                'analytics.rolling_regression': {'action': 'analytics.rolling_regression',
                                                 'category': 'analytics',
                                                 'operation': 'rolling_regression',
                                                 'summary': 'Rolling regression',
                                                 'description': '',
                                                 'methodology_doc': 'methodology/factors.md#regression',
                                                 'params': [{'name': 'identifiers',
                                                             'type': 'list',
                                                             'required': False,
                                                             'description': 'List of TepiloraCodes'},
                                                            {'name': 'prices',
                                                             'type': 'dict',
                                                             'required': False,
                                                             'description': 'User-provided prices (DataFrame or dict)'},
                                                            {'name': 'prices_file',
                                                             'type': 'string',
                                                             'required': False,
                                                             'description': 'Path to prices file'},
                                                            {'name': 'start_date',
                                                             'type': 'string',
                                                             'required': False,
                                                             'description': 'Start date (YYYY-MM-DD)'},
                                                            {'name': 'end_date',
                                                             'type': 'string',
                                                             'required': False,
                                                             'description': 'End date (YYYY-MM-DD)'},
                                                            {'name': 'period',
                                                             'type': 'int',
                                                             'required': False,
                                                             'description': 'Rolling window',
                                                             'default': 252},
                                                            {'name': 'format',
                                                             'type': 'string',
                                                             'required': False,
                                                             'description': 'Output format: dict|df|arrow|parquet',
                                                             'default': 'dict'}],
                                                 'required_params': [],
                                                 'optional_params': ['identifiers',
                                                                     'prices',
                                                                     'prices_file',
                                                                     'start_date',
                                                                     'end_date',
                                                                     'period',
                                                                     'format'],
                                                 'credits': 1,
                                                 'tags': ['Analytics'],
                                                 'deprecated': False,
                                                 'internal': False,
                                                 'supports_format': True},
                'analytics.rolling_residuals': {'action': 'analytics.rolling_residuals',
                                                'category': 'analytics',
                                                'operation': 'rolling_residuals',
                                                'summary': 'Rolling residuals',
                                                'description': '',
                                                'methodology_doc': 'methodology/factors.md#regression',
                                                'params': [{'name': 'identifiers',
                                                            'type': 'list',
                                                            'required': False,
                                                            'description': 'List of TepiloraCodes'},
                                                           {'name': 'prices',
                                                            'type': 'dict',
                                                            'required': False,
                                                            'description': 'User-provided prices (DataFrame or dict)'},
                                                           {'name': 'prices_file',
                                                            'type': 'string',
                                                            'required': False,
                                                            'description': 'Path to prices file'},
                                                           {'name': 'start_date',
                                                            'type': 'string',
                                                            'required': False,
                                                            'description': 'Start date (YYYY-MM-DD)'},
                                                           {'name': 'end_date',
                                                            'type': 'string',
                                                            'required': False,
                                                            'description': 'End date (YYYY-MM-DD)'},
                                                           {'name': 'period',
                                                            'type': 'int',
                                                            'required': False,
                                                            'description': 'Rolling window',
                                                            'default': 252},
                                                           {'name': 'format',
                                                            'type': 'string',
                                                            'required': False,
                                                            'description': 'Output format: dict|df|arrow|parquet',
                                                            'default': 'dict'}],
                                                'required_params': [],
                                                'optional_params': ['identifiers',
                                                                    'prices',
                                                                    'prices_file',
                                                                    'start_date',
                                                                    'end_date',
                                                                    'period',
                                                                    'format'],
                                                'credits': 1,
                                                'tags': ['Analytics'],
                                                'deprecated': False,
                                                'internal': False,
                                                'supports_format': True},
                'analytics.rolling_sharpe': {'action': 'analytics.rolling_sharpe',
                                             'category': 'analytics',
                                             'operation': 'rolling_sharpe',
                                             'summary': 'Rolling Sharpe ratio',
                                             'description': '',
                                             'methodology_doc': 'methodology/ratios.md#sharpe-ratio',
                                             'params': [{'name': 'identifiers',
                                                         'type': 'list',
                                                         'required': False,
                                                         'description': 'List of TepiloraCodes'},
                                                        {'name': 'prices',
                                                         'type': 'dict',
                                                         'required': False,
                                                         'description': 'User-provided prices (DataFrame or dict)'},
                                                        {'name': 'prices_file',
                                                         'type': 'string',
                                                         'required': False,
                                                         'description': 'Path to prices file'},
                                                        {'name': 'start_date',
                                                         'type': 'string',
                                                         'required': False,
                                                         'description': 'Start date (YYYY-MM-DD)'},
                                                        {'name': 'end_date',
                                                         'type': 'string',
                                                         'required': False,
                                                         'description': 'End date (YYYY-MM-DD)'},
                                                        {'name': 'period',
                                                         'type': 'int',
                                                         'required': False,
                                                         'description': 'Rolling window',
                                                         'default': 252},
                                                        {'name': 'rf',
                                                         'type': 'float',
                                                         'required': False,
                                                         'description': 'Risk-free rate',
                                                         'default': 0.0},
                                                        {'name': 'format',
                                                         'type': 'string',
                                                         'required': False,
                                                         'description': 'Output format: dict|df|arrow|parquet',
                                                         'default': 'dict'}],
                                             'required_params': [],
                                             'optional_params': ['identifiers',
                                                                 'prices',
                                                                 'prices_file',
                                                                 'start_date',
                                                                 'end_date',
                                                                 'period',
                                                                 'rf',
                                                                 'format'],
                                             'credits': 1,
                                             'tags': ['Analytics'],
                                             'deprecated': False,
                                             'internal': False,
                                             'supports_format': True},
                'analytics.rolling_skewness': {'action': 'analytics.rolling_skewness',
                                               'category': 'analytics',
                                               'operation': 'rolling_skewness',
                                               'summary': 'Rolling skewness',
                                               'description': '',
                                               'methodology_doc': 'methodology/risk.md#skewness',
                                               'params': [{'name': 'identifiers',
                                                           'type': 'list',
                                                           'required': False,
                                                           'description': 'List of TepiloraCodes'},
                                                          {'name': 'prices',
                                                           'type': 'dict',
                                                           'required': False,
                                                           'description': 'User-provided prices (DataFrame or dict)'},
                                                          {'name': 'prices_file',
                                                           'type': 'string',
                                                           'required': False,
                                                           'description': 'Path to prices file'},
                                                          {'name': 'start_date',
                                                           'type': 'string',
                                                           'required': False,
                                                           'description': 'Start date (YYYY-MM-DD)'},
                                                          {'name': 'end_date',
                                                           'type': 'string',
                                                           'required': False,
                                                           'description': 'End date (YYYY-MM-DD)'},
                                                          {'name': 'period',
                                                           'type': 'int',
                                                           'required': False,
                                                           'description': 'Rolling window',
                                                           'default': 63},
                                                          {'name': 'format',
                                                           'type': 'string',
                                                           'required': False,
                                                           'description': 'Output format: dict|df|arrow|parquet',
                                                           'default': 'dict'}],
                                               'required_params': [],
                                               'optional_params': ['identifiers',
                                                                   'prices',
                                                                   'prices_file',
                                                                   'start_date',
                                                                   'end_date',
                                                                   'period',
                                                                   'format'],
                                               'credits': 1,
                                               'tags': ['Analytics'],
                                               'deprecated': False,
                                               'internal': False,
                                               'supports_format': True},
                'analytics.rolling_sortino': {'action': 'analytics.rolling_sortino',
                                              'category': 'analytics',
                                              'operation': 'rolling_sortino',
                                              'summary': 'Rolling Sortino ratio',
                                              'description': '',
                                              'methodology_doc': 'methodology/ratios.md#sortino-ratio',
                                              'params': [{'name': 'identifiers',
                                                          'type': 'list',
                                                          'required': False,
                                                          'description': 'List of TepiloraCodes'},
                                                         {'name': 'prices',
                                                          'type': 'dict',
                                                          'required': False,
                                                          'description': 'User-provided prices (DataFrame or dict)'},
                                                         {'name': 'prices_file',
                                                          'type': 'string',
                                                          'required': False,
                                                          'description': 'Path to prices file'},
                                                         {'name': 'start_date',
                                                          'type': 'string',
                                                          'required': False,
                                                          'description': 'Start date (YYYY-MM-DD)'},
                                                         {'name': 'end_date',
                                                          'type': 'string',
                                                          'required': False,
                                                          'description': 'End date (YYYY-MM-DD)'},
                                                         {'name': 'period',
                                                          'type': 'int',
                                                          'required': False,
                                                          'description': 'Rolling window',
                                                          'default': 252},
                                                         {'name': 'rf',
                                                          'type': 'float',
                                                          'required': False,
                                                          'description': 'Risk-free rate',
                                                          'default': 0.0},
                                                         {'name': 'format',
                                                          'type': 'string',
                                                          'required': False,
                                                          'description': 'Output format: dict|df|arrow|parquet',
                                                          'default': 'dict'}],
                                              'required_params': [],
                                              'optional_params': ['identifiers',
                                                                  'prices',
                                                                  'prices_file',
                                                                  'start_date',
                                                                  'end_date',
                                                                  'period',
                                                                  'rf',
                                                                  'format'],
                                              'credits': 1,
                                              'tags': ['Analytics'],
                                              'deprecated': False,
                                              'internal': False,
                                              'supports_format': True},
                'analytics.rolling_treynor': {'action': 'analytics.rolling_treynor',
                                              'category': 'analytics',
                                              'operation': 'rolling_treynor',
                                              'summary': 'Rolling Treynor ratio',
                                              'description': '',
                                              'methodology_doc': 'methodology/ratios.md#treynor-ratio',
                                              'params': [{'name': 'identifiers',
                                                          'type': 'list',
                                                          'required': False,
                                                          'description': 'List of TepiloraCodes'},
                                                         {'name': 'prices',
                                                          'type': 'dict',
                                                          'required': False,
                                                          'description': 'User-provided prices (DataFrame or dict)'},
                                                         {'name': 'prices_file',
                                                          'type': 'string',
                                                          'required': False,
                                                          'description': 'Path to prices file'},
                                                         {'name': 'start_date',
                                                          'type': 'string',
                                                          'required': False,
                                                          'description': 'Start date (YYYY-MM-DD)'},
                                                         {'name': 'end_date',
                                                          'type': 'string',
                                                          'required': False,
                                                          'description': 'End date (YYYY-MM-DD)'},
                                                         {'name': 'period',
                                                          'type': 'int',
                                                          'required': False,
                                                          'description': 'Rolling window',
                                                          'default': 252},
                                                         {'name': 'rf',
                                                          'type': 'float',
                                                          'required': False,
                                                          'description': 'Risk-free rate',
                                                          'default': 0.0},
                                                         {'name': 'format',
                                                          'type': 'string',
                                                          'required': False,
                                                          'description': 'Output format: dict|df|arrow|parquet',
                                                          'default': 'dict'}],
                                              'required_params': [],
                                              'optional_params': ['identifiers',
                                                                  'prices',
                                                                  'prices_file',
                                                                  'start_date',
                                                                  'end_date',
                                                                  'period',
                                                                  'rf',
                                                                  'format'],
                                              'credits': 1,
                                              'tags': ['Analytics'],
                                              'deprecated': False,
                                              'internal': False,
                                              'supports_format': True},
                'analytics.rolling_upside_beta': {'action': 'analytics.rolling_upside_beta',
                                                  'category': 'analytics',
                                                  'operation': 'rolling_upside_beta',
                                                  'summary': 'Rolling upside beta',
                                                  'description': '',
                                                  'methodology_doc': 'methodology/factors.md#beta',
                                                  'params': [{'name': 'identifiers',
                                                              'type': 'list',
                                                              'required': False,
                                                              'description': 'List of TepiloraCodes'},
                                                             {'name': 'prices',
                                                              'type': 'dict',
                                                              'required': False,
                                                              'description': 'User-provided prices (DataFrame or '
                                                                             'dict)'},
                                                             {'name': 'prices_file',
                                                              'type': 'string',
                                                              'required': False,
                                                              'description': 'Path to prices file'},
                                                             {'name': 'start_date',
                                                              'type': 'string',
                                                              'required': False,
                                                              'description': 'Start date (YYYY-MM-DD)'},
                                                             {'name': 'end_date',
                                                              'type': 'string',
                                                              'required': False,
                                                              'description': 'End date (YYYY-MM-DD)'},
                                                             {'name': 'period',
                                                              'type': 'int',
                                                              'required': False,
                                                              'description': 'Rolling window',
                                                              'default': 252},
                                                             {'name': 'format',
                                                              'type': 'string',
                                                              'required': False,
                                                              'description': 'Output format: dict|df|arrow|parquet',
                                                              'default': 'dict'}],
                                                  'required_params': [],
                                                  'optional_params': ['identifiers',
                                                                      'prices',
                                                                      'prices_file',
                                                                      'start_date',
                                                                      'end_date',
                                                                      'period',
                                                                      'format'],
                                                  'credits': 1,
                                                  'tags': ['Analytics'],
                                                  'deprecated': False,
                                                  'internal': False,
                                                  'supports_format': True},
                'analytics.rolling_var': {'action': 'analytics.rolling_var',
                                          'category': 'analytics',
                                          'operation': 'rolling_var',
                                          'summary': 'Rolling Value at Risk',
                                          'description': '',
                                          'methodology_doc': 'methodology/risk.md#value-at-risk',
                                          'params': [{'name': 'identifiers',
                                                      'type': 'list',
                                                      'required': False,
                                                      'description': 'List of TepiloraCodes'},
                                                     {'name': 'prices',
                                                      'type': 'dict',
                                                      'required': False,
                                                      'description': 'User-provided prices (DataFrame or dict)'},
                                                     {'name': 'prices_file',
                                                      'type': 'string',
                                                      'required': False,
                                                      'description': 'Path to prices file'},
                                                     {'name': 'start_date',
                                                      'type': 'string',
                                                      'required': False,
                                                      'description': 'Start date (YYYY-MM-DD)'},
                                                     {'name': 'end_date',
                                                      'type': 'string',
                                                      'required': False,
                                                      'description': 'End date (YYYY-MM-DD)'},
                                                     {'name': 'period',
                                                      'type': 'int',
                                                      'required': False,
                                                      'description': 'Rolling window',
                                                      'default': 252},
                                                     {'name': 'confidence',
                                                      'type': 'float',
                                                      'required': False,
                                                      'description': 'Confidence level',
                                                      'default': 0.95},
                                                     {'name': 'format',
                                                      'type': 'string',
                                                      'required': False,
                                                      'description': 'Output format: dict|df|arrow|parquet',
                                                      'default': 'dict'}],
                                          'required_params': [],
                                          'optional_params': ['identifiers',
                                                              'prices',
                                                              'prices_file',
                                                              'start_date',
                                                              'end_date',
                                                              'period',
                                                              'confidence',
                                                              'format'],
                                          'credits': 1,
                                          'tags': ['Analytics'],
                                          'deprecated': False,
                                          'internal': False,
                                          'supports_format': True},
                'analytics.rolling_variance': {'action': 'analytics.rolling_variance',
                                               'category': 'analytics',
                                               'operation': 'rolling_variance',
                                               'summary': 'Rolling variance',
                                               'description': '',
                                               'methodology_doc': 'methodology/risk.md#volatility',
                                               'params': [{'name': 'identifiers',
                                                           'type': 'list',
                                                           'required': False,
                                                           'description': 'List of TepiloraCodes'},
                                                          {'name': 'prices',
                                                           'type': 'dict',
                                                           'required': False,
                                                           'description': 'User-provided prices (DataFrame or dict)'},
                                                          {'name': 'prices_file',
                                                           'type': 'string',
                                                           'required': False,
                                                           'description': 'Path to prices file'},
                                                          {'name': 'start_date',
                                                           'type': 'string',
                                                           'required': False,
                                                           'description': 'Start date (YYYY-MM-DD)'},
                                                          {'name': 'end_date',
                                                           'type': 'string',
                                                           'required': False,
                                                           'description': 'End date (YYYY-MM-DD)'},
                                                          {'name': 'period',
                                                           'type': 'int',
                                                           'required': False,
                                                           'description': 'Rolling window',
                                                           'default': 21},
                                                          {'name': 'format',
                                                           'type': 'string',
                                                           'required': False,
                                                           'description': 'Output format: dict|df|arrow|parquet',
                                                           'default': 'dict'}],
                                               'required_params': [],
                                               'optional_params': ['identifiers',
                                                                   'prices',
                                                                   'prices_file',
                                                                   'start_date',
                                                                   'end_date',
                                                                   'period',
                                                                   'format'],
                                               'credits': 1,
                                               'tags': ['Analytics'],
                                               'deprecated': False,
                                               'internal': False,
                                               'supports_format': True},
                'analytics.rolling_volatility': {'action': 'analytics.rolling_volatility',
                                                 'category': 'analytics',
                                                 'operation': 'rolling_volatility',
                                                 'summary': 'Rolling volatility',
                                                 'description': '',
                                                 'methodology_doc': 'methodology/risk.md#volatility',
                                                 'params': [{'name': 'identifiers',
                                                             'type': 'list',
                                                             'required': False,
                                                             'description': 'List of TepiloraCodes'},
                                                            {'name': 'prices',
                                                             'type': 'dict',
                                                             'required': False,
                                                             'description': 'User-provided prices (DataFrame or dict)'},
                                                            {'name': 'prices_file',
                                                             'type': 'string',
                                                             'required': False,
                                                             'description': 'Path to prices file'},
                                                            {'name': 'start_date',
                                                             'type': 'string',
                                                             'required': False,
                                                             'description': 'Start date (YYYY-MM-DD)'},
                                                            {'name': 'end_date',
                                                             'type': 'string',
                                                             'required': False,
                                                             'description': 'End date (YYYY-MM-DD)'},
                                                            {'name': 'period',
                                                             'type': 'int',
                                                             'required': False,
                                                             'description': 'Rolling window',
                                                             'default': 21},
                                                            {'name': 'format',
                                                             'type': 'string',
                                                             'required': False,
                                                             'description': 'Output format: dict|df|arrow|parquet',
                                                             'default': 'dict'}],
                                                 'required_params': [],
                                                 'optional_params': ['identifiers',
                                                                     'prices',
                                                                     'prices_file',
                                                                     'start_date',
                                                                     'end_date',
                                                                     'period',
                                                                     'format'],
                                                 'credits': 1,
                                                 'tags': ['Analytics'],
                                                 'deprecated': False,
                                                 'internal': False,
                                                 'supports_format': True},
                'analytics.semi_deviation': {'action': 'analytics.semi_deviation',
                                             'category': 'analytics',
                                             'operation': 'semi_deviation',
                                             'summary': 'Semi-deviation',
                                             'description': '',
                                             'methodology_doc': 'methodology/risk.md#semi-deviation',
                                             'params': [{'name': 'identifiers',
                                                         'type': 'list',
                                                         'required': False,
                                                         'description': 'List of TepiloraCodes'},
                                                        {'name': 'prices',
                                                         'type': 'dict',
                                                         'required': False,
                                                         'description': 'User-provided prices (DataFrame or dict)'},
                                                        {'name': 'prices_file',
                                                         'type': 'string',
                                                         'required': False,
                                                         'description': 'Path to prices file'},
                                                        {'name': 'start_date',
                                                         'type': 'string',
                                                         'required': False,
                                                         'description': 'Start date (YYYY-MM-DD)'},
                                                        {'name': 'end_date',
                                                         'type': 'string',
                                                         'required': False,
                                                         'description': 'End date (YYYY-MM-DD)'},
                                                        {'name': 'format',
                                                         'type': 'string',
                                                         'required': False,
                                                         'description': 'Output format: dict|df|arrow|parquet',
                                                         'default': 'dict'}],
                                             'required_params': [],
                                             'optional_params': ['identifiers',
                                                                 'prices',
                                                                 'prices_file',
                                                                 'start_date',
                                                                 'end_date',
                                                                 'format'],
                                             'credits': 1,
                                             'tags': ['Analytics'],
                                             'deprecated': False,
                                             'internal': False,
                                             'supports_format': True},
                'analytics.semi_variance': {'action': 'analytics.semi_variance',
                                            'category': 'analytics',
                                            'operation': 'semi_variance',
                                            'summary': 'Semi-variance',
                                            'description': '',
                                            'methodology_doc': 'methodology/risk.md#semi-variance',
                                            'params': [{'name': 'identifiers',
                                                        'type': 'list',
                                                        'required': False,
                                                        'description': 'List of TepiloraCodes'},
                                                       {'name': 'prices',
                                                        'type': 'dict',
                                                        'required': False,
                                                        'description': 'User-provided prices (DataFrame or dict)'},
                                                       {'name': 'prices_file',
                                                        'type': 'string',
                                                        'required': False,
                                                        'description': 'Path to prices file'},
                                                       {'name': 'start_date',
                                                        'type': 'string',
                                                        'required': False,
                                                        'description': 'Start date (YYYY-MM-DD)'},
                                                       {'name': 'end_date',
                                                        'type': 'string',
                                                        'required': False,
                                                        'description': 'End date (YYYY-MM-DD)'},
                                                       {'name': 'format',
                                                        'type': 'string',
                                                        'required': False,
                                                        'description': 'Output format: dict|df|arrow|parquet',
                                                        'default': 'dict'}],
                                            'required_params': [],
                                            'optional_params': ['identifiers',
                                                                'prices',
                                                                'prices_file',
                                                                'start_date',
                                                                'end_date',
                                                                'format'],
                                            'credits': 1,
                                            'tags': ['Analytics'],
                                            'deprecated': False,
                                            'internal': False,
                                            'supports_format': True},
                'analytics.sterling_ratio': {'action': 'analytics.sterling_ratio',
                                             'category': 'analytics',
                                             'operation': 'sterling_ratio',
                                             'summary': 'Sterling ratio',
                                             'description': '',
                                             'methodology_doc': 'methodology/ratios.md#sterling-ratio',
                                             'params': [{'name': 'identifiers',
                                                         'type': 'list',
                                                         'required': False,
                                                         'description': 'List of TepiloraCodes'},
                                                        {'name': 'prices',
                                                         'type': 'dict',
                                                         'required': False,
                                                         'description': 'User-provided prices (DataFrame or dict)'},
                                                        {'name': 'prices_file',
                                                         'type': 'string',
                                                         'required': False,
                                                         'description': 'Path to prices file'},
                                                        {'name': 'start_date',
                                                         'type': 'string',
                                                         'required': False,
                                                         'description': 'Start date (YYYY-MM-DD)'},
                                                        {'name': 'end_date',
                                                         'type': 'string',
                                                         'required': False,
                                                         'description': 'End date (YYYY-MM-DD)'},
                                                        {'name': 'format',
                                                         'type': 'string',
                                                         'required': False,
                                                         'description': 'Output format: dict|df|arrow|parquet',
                                                         'default': 'dict'}],
                                             'required_params': [],
                                             'optional_params': ['identifiers',
                                                                 'prices',
                                                                 'prices_file',
                                                                 'start_date',
                                                                 'end_date',
                                                                 'format'],
                                             'credits': 1,
                                             'tags': ['Analytics'],
                                             'deprecated': False,
                                             'internal': False,
                                             'supports_format': True},
                'analytics.tail_ratio': {'action': 'analytics.tail_ratio',
                                         'category': 'analytics',
                                         'operation': 'tail_ratio',
                                         'summary': 'Tail ratio',
                                         'description': '',
                                         'methodology_doc': 'methodology/risk.md#tail-ratio',
                                         'params': [{'name': 'identifiers',
                                                     'type': 'list',
                                                     'required': False,
                                                     'description': 'List of TepiloraCodes'},
                                                    {'name': 'prices',
                                                     'type': 'dict',
                                                     'required': False,
                                                     'description': 'User-provided prices (DataFrame or dict)'},
                                                    {'name': 'prices_file',
                                                     'type': 'string',
                                                     'required': False,
                                                     'description': 'Path to prices file'},
                                                    {'name': 'start_date',
                                                     'type': 'string',
                                                     'required': False,
                                                     'description': 'Start date (YYYY-MM-DD)'},
                                                    {'name': 'end_date',
                                                     'type': 'string',
                                                     'required': False,
                                                     'description': 'End date (YYYY-MM-DD)'},
                                                    {'name': 'format',
                                                     'type': 'string',
                                                     'required': False,
                                                     'description': 'Output format: dict|df|arrow|parquet',
                                                     'default': 'dict'}],
                                         'required_params': [],
                                         'optional_params': ['identifiers',
                                                             'prices',
                                                             'prices_file',
                                                             'start_date',
                                                             'end_date',
                                                             'format'],
                                         'credits': 1,
                                         'tags': ['Analytics'],
                                         'deprecated': False,
                                         'internal': False,
                                         'supports_format': True},
                'analytics.tracking_error': {'action': 'analytics.tracking_error',
                                             'category': 'analytics',
                                             'operation': 'tracking_error',
                                             'summary': 'Tracking error',
                                             'description': '',
                                             'methodology_doc': 'methodology/risk.md#tracking-error',
                                             'params': [{'name': 'identifiers',
                                                         'type': 'list',
                                                         'required': False,
                                                         'description': 'List of TepiloraCodes'},
                                                        {'name': 'prices',
                                                         'type': 'dict',
                                                         'required': False,
                                                         'description': 'User-provided prices (DataFrame or dict)'},
                                                        {'name': 'prices_file',
                                                         'type': 'string',
                                                         'required': False,
                                                         'description': 'Path to prices file'},
                                                        {'name': 'start_date',
                                                         'type': 'string',
                                                         'required': False,
                                                         'description': 'Start date (YYYY-MM-DD)'},
                                                        {'name': 'end_date',
                                                         'type': 'string',
                                                         'required': False,
                                                         'description': 'End date (YYYY-MM-DD)'},
                                                        {'name': 'format',
                                                         'type': 'string',
                                                         'required': False,
                                                         'description': 'Output format: dict|df|arrow|parquet',
                                                         'default': 'dict'}],
                                             'required_params': [],
                                             'optional_params': ['identifiers',
                                                                 'prices',
                                                                 'prices_file',
                                                                 'start_date',
                                                                 'end_date',
                                                                 'format'],
                                             'credits': 1,
                                             'tags': ['Analytics'],
                                             'deprecated': False,
                                             'internal': False,
                                             'supports_format': True},
                'analytics.tracking_error_volatility': {'action': 'analytics.tracking_error_volatility',
                                                        'category': 'analytics',
                                                        'operation': 'tracking_error_volatility',
                                                        'summary': 'Tracking error volatility',
                                                        'description': '',
                                                        'methodology_doc': 'methodology/risk.md#tracking-error',
                                                        'params': [{'name': 'identifiers',
                                                                    'type': 'list',
                                                                    'required': False,
                                                                    'description': 'List of TepiloraCodes'},
                                                                   {'name': 'prices',
                                                                    'type': 'dict',
                                                                    'required': False,
                                                                    'description': 'User-provided prices (DataFrame or '
                                                                                   'dict)'},
                                                                   {'name': 'prices_file',
                                                                    'type': 'string',
                                                                    'required': False,
                                                                    'description': 'Path to prices file'},
                                                                   {'name': 'start_date',
                                                                    'type': 'string',
                                                                    'required': False,
                                                                    'description': 'Start date (YYYY-MM-DD)'},
                                                                   {'name': 'end_date',
                                                                    'type': 'string',
                                                                    'required': False,
                                                                    'description': 'End date (YYYY-MM-DD)'},
                                                                   {'name': 'format',
                                                                    'type': 'string',
                                                                    'required': False,
                                                                    'description': 'Output format: '
                                                                                   'dict|df|arrow|parquet',
                                                                    'default': 'dict'}],
                                                        'required_params': [],
                                                        'optional_params': ['identifiers',
                                                                            'prices',
                                                                            'prices_file',
                                                                            'start_date',
                                                                            'end_date',
                                                                            'format'],
                                                        'credits': 1,
                                                        'tags': ['Analytics'],
                                                        'deprecated': False,
                                                        'internal': False,
                                                        'supports_format': True},
                'analytics.ulcer_index': {'action': 'analytics.ulcer_index',
                                          'category': 'analytics',
                                          'operation': 'ulcer_index',
                                          'summary': 'Ulcer index',
                                          'description': '',
                                          'methodology_doc': 'methodology/risk.md#ulcer-index',
                                          'params': [{'name': 'identifiers',
                                                      'type': 'list',
                                                      'required': False,
                                                      'description': 'List of TepiloraCodes'},
                                                     {'name': 'prices',
                                                      'type': 'dict',
                                                      'required': False,
                                                      'description': 'User-provided prices (DataFrame or dict)'},
                                                     {'name': 'prices_file',
                                                      'type': 'string',
                                                      'required': False,
                                                      'description': 'Path to prices file'},
                                                     {'name': 'start_date',
                                                      'type': 'string',
                                                      'required': False,
                                                      'description': 'Start date (YYYY-MM-DD)'},
                                                     {'name': 'end_date',
                                                      'type': 'string',
                                                      'required': False,
                                                      'description': 'End date (YYYY-MM-DD)'},
                                                     {'name': 'format',
                                                      'type': 'string',
                                                      'required': False,
                                                      'description': 'Output format: dict|df|arrow|parquet',
                                                      'default': 'dict'}],
                                          'required_params': [],
                                          'optional_params': ['identifiers',
                                                              'prices',
                                                              'prices_file',
                                                              'start_date',
                                                              'end_date',
                                                              'format'],
                                          'credits': 1,
                                          'tags': ['Analytics'],
                                          'deprecated': False,
                                          'internal': False,
                                          'supports_format': True},
                'analytics.upside_capture': {'action': 'analytics.upside_capture',
                                             'category': 'analytics',
                                             'operation': 'upside_capture',
                                             'summary': 'Upside capture',
                                             'description': '',
                                             'methodology_doc': 'methodology/ratios.md#capture-ratio',
                                             'params': [{'name': 'identifiers',
                                                         'type': 'list',
                                                         'required': False,
                                                         'description': 'List of TepiloraCodes'},
                                                        {'name': 'prices',
                                                         'type': 'dict',
                                                         'required': False,
                                                         'description': 'User-provided prices (DataFrame or dict)'},
                                                        {'name': 'prices_file',
                                                         'type': 'string',
                                                         'required': False,
                                                         'description': 'Path to prices file'},
                                                        {'name': 'start_date',
                                                         'type': 'string',
                                                         'required': False,
                                                         'description': 'Start date (YYYY-MM-DD)'},
                                                        {'name': 'end_date',
                                                         'type': 'string',
                                                         'required': False,
                                                         'description': 'End date (YYYY-MM-DD)'},
                                                        {'name': 'format',
                                                         'type': 'string',
                                                         'required': False,
                                                         'description': 'Output format: dict|df|arrow|parquet',
                                                         'default': 'dict'}],
                                             'required_params': [],
                                             'optional_params': ['identifiers',
                                                                 'prices',
                                                                 'prices_file',
                                                                 'start_date',
                                                                 'end_date',
                                                                 'format'],
                                             'credits': 1,
                                             'tags': ['Analytics'],
                                             'deprecated': False,
                                             'internal': False,
                                             'supports_format': True},
                'analytics.upside_deviation': {'action': 'analytics.upside_deviation',
                                               'category': 'analytics',
                                               'operation': 'upside_deviation',
                                               'summary': 'Upside deviation',
                                               'description': '',
                                               'methodology_doc': 'methodology/risk.md#downside-deviation',
                                               'params': [{'name': 'identifiers',
                                                           'type': 'list',
                                                           'required': False,
                                                           'description': 'List of TepiloraCodes'},
                                                          {'name': 'prices',
                                                           'type': 'dict',
                                                           'required': False,
                                                           'description': 'User-provided prices (DataFrame or dict)'},
                                                          {'name': 'prices_file',
                                                           'type': 'string',
                                                           'required': False,
                                                           'description': 'Path to prices file'},
                                                          {'name': 'start_date',
                                                           'type': 'string',
                                                           'required': False,
                                                           'description': 'Start date (YYYY-MM-DD)'},
                                                          {'name': 'end_date',
                                                           'type': 'string',
                                                           'required': False,
                                                           'description': 'End date (YYYY-MM-DD)'},
                                                          {'name': 'format',
                                                           'type': 'string',
                                                           'required': False,
                                                           'description': 'Output format: dict|df|arrow|parquet',
                                                           'default': 'dict'}],
                                               'required_params': [],
                                               'optional_params': ['identifiers',
                                                                   'prices',
                                                                   'prices_file',
                                                                   'start_date',
                                                                   'end_date',
                                                                   'format'],
                                               'credits': 1,
                                               'tags': ['Analytics'],
                                               'deprecated': False,
                                               'internal': False,
                                               'supports_format': True},
                'analytics.win_rate': {'action': 'analytics.win_rate',
                                       'category': 'analytics',
                                       'operation': 'win_rate',
                                       'summary': 'Win rate (% positive periods)',
                                       'description': '',
                                       'methodology_doc': '',
                                       'params': [{'name': 'identifiers',
                                                   'type': 'list',
                                                   'required': False,
                                                   'description': 'List of TepiloraCodes'},
                                                  {'name': 'prices',
                                                   'type': 'dict',
                                                   'required': False,
                                                   'description': 'User-provided prices (DataFrame or dict)'},
                                                  {'name': 'prices_file',
                                                   'type': 'string',
                                                   'required': False,
                                                   'description': 'Path to prices file'},
                                                  {'name': 'start_date',
                                                   'type': 'string',
                                                   'required': False,
                                                   'description': 'Start date (YYYY-MM-DD)'},
                                                  {'name': 'end_date',
                                                   'type': 'string',
                                                   'required': False,
                                                   'description': 'End date (YYYY-MM-DD)'},
                                                  {'name': 'format',
                                                   'type': 'string',
                                                   'required': False,
                                                   'description': 'Output format: dict|df|arrow|parquet',
                                                   'default': 'dict'}],
                                       'required_params': [],
                                       'optional_params': ['identifiers',
                                                           'prices',
                                                           'prices_file',
                                                           'start_date',
                                                           'end_date',
                                                           'format'],
                                       'credits': 1,
                                       'tags': ['Analytics'],
                                       'deprecated': False,
                                       'internal': False,
                                       'supports_format': True},
                'analytics.worst_period': {'action': 'analytics.worst_period',
                                           'category': 'analytics',
                                           'operation': 'worst_period',
                                           'summary': 'Worst period return',
                                           'description': '',
                                           'methodology_doc': '',
                                           'params': [{'name': 'identifiers',
                                                       'type': 'list',
                                                       'required': False,
                                                       'description': 'List of TepiloraCodes'},
                                                      {'name': 'prices',
                                                       'type': 'dict',
                                                       'required': False,
                                                       'description': 'User-provided prices (DataFrame or dict)'},
                                                      {'name': 'prices_file',
                                                       'type': 'string',
                                                       'required': False,
                                                       'description': 'Path to prices file'},
                                                      {'name': 'start_date',
                                                       'type': 'string',
                                                       'required': False,
                                                       'description': 'Start date (YYYY-MM-DD)'},
                                                      {'name': 'end_date',
                                                       'type': 'string',
                                                       'required': False,
                                                       'description': 'End date (YYYY-MM-DD)'},
                                                      {'name': 'format',
                                                       'type': 'string',
                                                       'required': False,
                                                       'description': 'Output format: dict|df|arrow|parquet',
                                                       'default': 'dict'}],
                                           'required_params': [],
                                           'optional_params': ['identifiers',
                                                               'prices',
                                                               'prices_file',
                                                               'start_date',
                                                               'end_date',
                                                               'format'],
                                           'credits': 1,
                                           'tags': ['Analytics'],
                                           'deprecated': False,
                                           'internal': False,
                                           'supports_format': True},
                'asset_allocation.backtest': {'action': 'asset_allocation.backtest',
                                              'category': 'asset_allocation',
                                              'operation': 'backtest',
                                              'summary': 'Backtest model',
                                              'description': 'Backtest model using portfolio returns engine.',
                                              'methodology_doc': '',
                                              'params': [{'name': 'model',
                                                          'type': 'dict',
                                                          'required': True,
                                                          'description': 'Asset allocation model'},
                                                         {'name': 'start_date',
                                                          'type': 'string',
                                                          'required': False,
                                                          'description': 'Start date (YYYY-MM-DD)'},
                                                         {'name': 'end_date',
                                                          'type': 'string',
                                                          'required': False,
                                                          'description': 'End date (YYYY-MM-DD)'},
                                                         {'name': 'rebalance_frequency',
                                                          'type': 'string',
                                                          'required': False,
                                                          'description': 'monthly|quarterly|annual|weekly'},
                                                         {'name': 'return_method',
                                                          'type': 'string',
                                                          'required': False,
                                                          'description': 'twr|mwr|modified_dietz',
                                                          'default': 'twr'},
                                                         {'name': 'format',
                                                          'type': 'string',
                                                          'required': False,
                                                          'description': 'Output format: dict|df|arrow|parquet',
                                                          'default': 'dict'}],
                                              'required_params': ['model'],
                                              'optional_params': ['start_date',
                                                                  'end_date',
                                                                  'rebalance_frequency',
                                                                  'return_method',
                                                                  'format'],
                                              'credits': 1,
                                              'tags': ['AssetAllocation', 'Backtest'],
                                              'deprecated': False,
                                              'internal': False,
                                              'supports_format': True},
                'asset_allocation.compare': {'action': 'asset_allocation.compare',
                                             'category': 'asset_allocation',
                                             'operation': 'compare',
                                             'summary': 'Compare multiple models',
                                             'description': 'Backtest and compare multiple asset allocation models.',
                                             'methodology_doc': '',
                                             'params': [{'name': 'models',
                                                         'type': 'list',
                                                         'required': True,
                                                         'description': 'List of asset allocation models'},
                                                        {'name': 'start_date',
                                                         'type': 'string',
                                                         'required': False,
                                                         'description': 'Start date (YYYY-MM-DD)'},
                                                        {'name': 'end_date',
                                                         'type': 'string',
                                                         'required': False,
                                                         'description': 'End date (YYYY-MM-DD)'},
                                                        {'name': 'metrics',
                                                         'type': 'list',
                                                         'required': False,
                                                         'description': 'Metrics to include in comparison'},
                                                        {'name': 'format',
                                                         'type': 'string',
                                                         'required': False,
                                                         'description': 'Output format: dict|df|arrow|parquet',
                                                         'default': 'dict'}],
                                             'required_params': ['models'],
                                             'optional_params': ['start_date', 'end_date', 'metrics', 'format'],
                                             'credits': 1,
                                             'tags': ['AssetAllocation', 'Backtest'],
                                             'deprecated': False,
                                             'internal': False,
                                             'supports_format': True},
                'asset_allocation.decompose': {'action': 'asset_allocation.decompose',
                                               'category': 'asset_allocation',
                                               'operation': 'decompose',
                                               'summary': 'Decompose portfolio by asset class',
                                               'description': 'Map portfolio securities into asset classes (or model '
                                                              'classes).',
                                               'methodology_doc': '',
                                               'params': [{'name': 'portfolio_id',
                                                           'type': 'string',
                                                           'required': True,
                                                           'description': 'Portfolio ID'},
                                                          {'name': 'model',
                                                           'type': 'dict',
                                                           'required': False,
                                                           'description': 'Optional model for class mapping'}],
                                               'required_params': ['portfolio_id'],
                                               'optional_params': ['model'],
                                               'credits': 1,
                                               'tags': ['AssetAllocation', 'Analysis'],
                                               'deprecated': False,
                                               'internal': False,
                                               'supports_format': False},
                'asset_allocation.drift': {'action': 'asset_allocation.drift',
                                           'category': 'asset_allocation',
                                           'operation': 'drift',
                                           'summary': 'Calculate model drift',
                                           'description': 'Compare current portfolio weights vs model target '
                                                          'allocation.',
                                           'methodology_doc': '',
                                           'params': [{'name': 'model',
                                                       'type': 'dict',
                                                       'required': True,
                                                       'description': 'Asset allocation model'},
                                                      {'name': 'portfolio_id',
                                                       'type': 'string',
                                                       'required': True,
                                                       'description': 'Portfolio ID'},
                                                      {'name': 'tolerance',
                                                       'type': 'float',
                                                       'required': False,
                                                       'description': 'Absolute drift threshold',
                                                       'default': 0.05}],
                                           'required_params': ['model', 'portfolio_id'],
                                           'optional_params': ['tolerance'],
                                           'credits': 1,
                                           'tags': ['AssetAllocation', 'Rebalancing'],
                                           'deprecated': False,
                                           'internal': False,
                                           'supports_format': False},
                'asset_allocation.frontier': {'action': 'asset_allocation.frontier',
                                              'category': 'asset_allocation',
                                              'operation': 'frontier',
                                              'summary': 'Efficient frontier',
                                              'description': 'Compute efficient frontier from model class proxies.',
                                              'methodology_doc': '',
                                              'params': [{'name': 'model',
                                                          'type': 'dict',
                                                          'required': True,
                                                          'description': 'Asset allocation model'},
                                                         {'name': 'start_date',
                                                          'type': 'string',
                                                          'required': False,
                                                          'description': 'Start date (YYYY-MM-DD)'},
                                                         {'name': 'end_date',
                                                          'type': 'string',
                                                          'required': False,
                                                          'description': 'End date (YYYY-MM-DD)'},
                                                         {'name': 'points',
                                                          'type': 'int',
                                                          'required': False,
                                                          'description': 'Number of frontier points',
                                                          'default': 50},
                                                         {'name': 'cov_method',
                                                          'type': 'string',
                                                          'required': False,
                                                          'description': 'sample|ledoit_wolf|oas|ewma',
                                                          'default': 'ledoit_wolf'},
                                                         {'name': 'rf',
                                                          'type': 'float',
                                                          'required': False,
                                                          'description': 'Risk-free rate',
                                                          'default': 0.0},
                                                         {'name': 'format',
                                                          'type': 'string',
                                                          'required': False,
                                                          'description': 'Output format: dict|df|arrow|parquet',
                                                          'default': 'dict'}],
                                              'required_params': ['model'],
                                              'optional_params': ['start_date',
                                                                  'end_date',
                                                                  'points',
                                                                  'cov_method',
                                                                  'rf',
                                                                  'format'],
                                              'credits': 1,
                                              'tags': ['AssetAllocation', 'Optimization'],
                                              'deprecated': False,
                                              'internal': False,
                                              'supports_format': True},
                'asset_allocation.optimize': {'action': 'asset_allocation.optimize',
                                              'category': 'asset_allocation',
                                              'operation': 'optimize',
                                              'summary': 'Optimize model allocation',
                                              'description': 'Run a single optimization for model classes and bounds.',
                                              'methodology_doc': '',
                                              'params': [{'name': 'model',
                                                          'type': 'dict',
                                                          'required': True,
                                                          'description': 'Asset allocation model'},
                                                         {'name': 'start_date',
                                                          'type': 'string',
                                                          'required': False,
                                                          'description': 'Start date (YYYY-MM-DD)'},
                                                         {'name': 'end_date',
                                                          'type': 'string',
                                                          'required': False,
                                                          'description': 'End date (YYYY-MM-DD)'},
                                                         {'name': 'objective',
                                                          'type': 'string',
                                                          'required': False,
                                                          'description': 'max_sharpe|min_risk|target_return|risk_parity',
                                                          'default': 'max_sharpe'},
                                                         {'name': 'target_return',
                                                          'type': 'float',
                                                          'required': False,
                                                          'description': 'Target return for target_return objective'},
                                                         {'name': 'rf',
                                                          'type': 'float',
                                                          'required': False,
                                                          'description': 'Risk-free rate',
                                                          'default': 0.0},
                                                         {'name': 'cov_method',
                                                          'type': 'string',
                                                          'required': False,
                                                          'description': 'sample|ledoit_wolf|oas|ewma',
                                                          'default': 'ledoit_wolf'}],
                                              'required_params': ['model'],
                                              'optional_params': ['start_date',
                                                                  'end_date',
                                                                  'objective',
                                                                  'target_return',
                                                                  'rf',
                                                                  'cov_method'],
                                              'credits': 1,
                                              'tags': ['AssetAllocation', 'Optimization'],
                                              'deprecated': False,
                                              'internal': False,
                                              'supports_format': False},
                'asset_allocation.risk_profile': {'action': 'asset_allocation.risk_profile',
                                                  'category': 'asset_allocation',
                                                  'operation': 'risk_profile',
                                                  'summary': 'Get risk profile template',
                                                  'description': 'Return static model template for MiFID SRI 1-7.',
                                                  'methodology_doc': '',
                                                  'params': [{'name': 'risk_level',
                                                              'type': 'int',
                                                              'required': True,
                                                              'description': 'MiFID SRI risk level 1-7'},
                                                             {'name': 'currency',
                                                              'type': 'string',
                                                              'required': False,
                                                              'description': 'Model currency',
                                                              'default': 'EUR'},
                                                             {'name': 'include_proxies',
                                                              'type': 'bool',
                                                              'required': False,
                                                              'description': 'Include suggested proxy TepiloraCodes',
                                                              'default': True}],
                                                  'required_params': ['risk_level'],
                                                  'optional_params': ['currency', 'include_proxies'],
                                                  'credits': 1,
                                                  'tags': ['AssetAllocation', 'Templates'],
                                                  'deprecated': False,
                                                  'internal': False,
                                                  'supports_format': False},
                'asset_allocation.stress': {'action': 'asset_allocation.stress',
                                            'category': 'asset_allocation',
                                            'operation': 'stress',
                                            'summary': 'Stress test model',
                                            'description': 'Apply deterministic class-level scenarios to model '
                                                           'weights.',
                                            'methodology_doc': '',
                                            'params': [{'name': 'model',
                                                        'type': 'dict',
                                                        'required': True,
                                                        'description': 'Asset allocation model'},
                                                       {'name': 'scenarios',
                                                        'type': 'any',
                                                        'required': False,
                                                        'description': 'Scenario names or custom definitions; accepts '
                                                                       'list and dict custom shocks'},
                                                       {'name': 'start_date',
                                                        'type': 'string',
                                                        'required': False,
                                                        'description': 'Start date (YYYY-MM-DD)'}],
                                            'required_params': ['model'],
                                            'optional_params': ['scenarios', 'start_date'],
                                            'credits': 1,
                                            'tags': ['AssetAllocation', 'Risk'],
                                            'deprecated': False,
                                            'internal': False,
                                            'supports_format': False},
                'asset_allocation.suggest_securities': {'action': 'asset_allocation.suggest_securities',
                                                        'category': 'asset_allocation',
                                                        'operation': 'suggest_securities',
                                                        'summary': 'Suggest securities by class',
                                                        'description': 'Suggest securities for one or all model '
                                                                       'classes via securities.search.',
                                                        'methodology_doc': '',
                                                        'params': [{'name': 'model',
                                                                    'type': 'dict',
                                                                    'required': True,
                                                                    'description': 'Asset allocation model'},
                                                                   {'name': 'class_name',
                                                                    'type': 'string',
                                                                    'required': False,
                                                                    'description': 'Specific class name'},
                                                                   {'name': 'filters',
                                                                    'type': 'dict',
                                                                    'required': False,
                                                                    'description': 'Optional filters for '
                                                                                   'securities.search'},
                                                                   {'name': 'limit',
                                                                    'type': 'int',
                                                                    'required': False,
                                                                    'description': 'Max suggestions per class',
                                                                    'default': 5}],
                                                        'required_params': ['model'],
                                                        'optional_params': ['class_name', 'filters', 'limit'],
                                                        'credits': 1,
                                                        'tags': ['AssetAllocation', 'Discovery'],
                                                        'deprecated': False,
                                                        'internal': False,
                                                        'supports_format': False},
                'asset_allocation.validate': {'action': 'asset_allocation.validate',
                                              'category': 'asset_allocation',
                                              'operation': 'validate',
                                              'summary': 'Validate asset allocation model',
                                              'description': 'Validate structure, weights, and proxy availability in '
                                                             'D_full.parquet.',
                                              'methodology_doc': '',
                                              'params': [{'name': 'model',
                                                          'type': 'dict',
                                                          'required': True,
                                                          'description': 'Asset allocation model'}],
                                              'required_params': ['model'],
                                              'optional_params': [],
                                              'credits': 1,
                                              'tags': ['AssetAllocation', 'Validation'],
                                              'deprecated': False,
                                              'internal': False,
                                              'supports_format': False},
                'audit.history': {'action': 'audit.history',
                                  'category': 'audit',
                                  'operation': 'history',
                                  'summary': 'Entity history',
                                  'description': 'Get change history for an entity.',
                                  'methodology_doc': '',
                                  'params': [{'name': 'entity_type',
                                              'type': 'string',
                                              'required': True,
                                              'description': 'Entity type'},
                                             {'name': 'entity_id',
                                              'type': 'string',
                                              'required': True,
                                              'description': 'Entity ID'},
                                             {'name': 'format',
                                              'type': 'string',
                                              'required': False,
                                              'description': 'Output format: dict|df|arrow|parquet',
                                              'default': 'dict'}],
                                  'required_params': ['entity_type', 'entity_id'],
                                  'optional_params': ['format'],
                                  'credits': 1,
                                  'tags': ['Audit'],
                                  'deprecated': False,
                                  'internal': False,
                                  'supports_format': True},
                'audit.query': {'action': 'audit.query',
                                'category': 'audit',
                                'operation': 'query',
                                'summary': 'Query audit log',
                                'description': '',
                                'methodology_doc': '',
                                'params': [{'name': 'entity_type',
                                            'type': 'string',
                                            'required': False,
                                            'description': 'Filter by entity type'},
                                           {'name': 'entity_id',
                                            'type': 'string',
                                            'required': False,
                                            'description': 'Filter by entity ID'},
                                           {'name': 'action',
                                            'type': 'string',
                                            'required': False,
                                            'description': 'Filter by action'},
                                           {'name': 'start_date',
                                            'type': 'string',
                                            'required': False,
                                            'description': 'Start date (YYYY-MM-DD)'},
                                           {'name': 'end_date',
                                            'type': 'string',
                                            'required': False,
                                            'description': 'End date (YYYY-MM-DD)'},
                                           {'name': 'limit',
                                            'type': 'int',
                                            'required': False,
                                            'description': 'Maximum results',
                                            'default': 100},
                                           {'name': 'format',
                                            'type': 'string',
                                            'required': False,
                                            'description': 'Output format: dict|df|arrow|parquet',
                                            'default': 'dict'}],
                                'required_params': [],
                                'optional_params': ['entity_type',
                                                    'entity_id',
                                                    'action',
                                                    'start_date',
                                                    'end_date',
                                                    'limit',
                                                    'format'],
                                'credits': 1,
                                'tags': ['Audit'],
                                'deprecated': False,
                                'internal': False,
                                'supports_format': True},
                'billing.aggregate': {'action': 'billing.aggregate',
                                      'category': 'billing',
                                      'operation': 'aggregate',
                                      'summary': 'Aggregate fees',
                                      'description': 'Aggregate fees for a client.',
                                      'methodology_doc': '',
                                      'params': [{'name': 'client_id',
                                                  'type': 'string',
                                                  'required': True,
                                                  'description': 'Client ID'},
                                                 {'name': 'year',
                                                  'type': 'int',
                                                  'required': False,
                                                  'description': 'Filter by year'},
                                                 {'name': 'format',
                                                  'type': 'string',
                                                  'required': False,
                                                  'description': 'Output format: dict|df|arrow|parquet',
                                                  'default': 'dict'}],
                                      'required_params': ['client_id'],
                                      'optional_params': ['year', 'format'],
                                      'credits': 1,
                                      'tags': ['Billing'],
                                      'deprecated': False,
                                      'internal': False,
                                      'supports_format': True},
                'billing.calculate': {'action': 'billing.calculate',
                                      'category': 'billing',
                                      'operation': 'calculate',
                                      'summary': 'Calculate fee',
                                      'description': 'Calculate fee based on schedule.',
                                      'methodology_doc': '',
                                      'params': [{'name': 'fee_schedule',
                                                  'type': 'dict',
                                                  'required': False,
                                                  'description': 'Fee schedule (inline dict or ID/name string)'},
                                                 {'name': 'aum',
                                                  'type': 'float',
                                                  'required': False,
                                                  'description': 'Assets under management'},
                                                 {'name': 'portfolio_return',
                                                  'type': 'float',
                                                  'required': False,
                                                  'description': 'Portfolio return'},
                                                 {'name': 'benchmark_return',
                                                  'type': 'float',
                                                  'required': False,
                                                  'description': 'Benchmark return'},
                                                 {'name': 'high_water_mark',
                                                  'type': 'float',
                                                  'required': False,
                                                  'description': 'High water mark'},
                                                 {'name': 'period_start',
                                                  'type': 'string',
                                                  'required': False,
                                                  'description': 'Period start date'},
                                                 {'name': 'period_end',
                                                  'type': 'string',
                                                  'required': False,
                                                  'description': 'Period end date'}],
                                      'required_params': [],
                                      'optional_params': ['fee_schedule',
                                                          'aum',
                                                          'portfolio_return',
                                                          'benchmark_return',
                                                          'high_water_mark',
                                                          'period_start',
                                                          'period_end'],
                                      'credits': 1,
                                      'tags': ['Billing'],
                                      'deprecated': False,
                                      'internal': False,
                                      'supports_format': False},
                'billing.record_create': {'action': 'billing.record_create',
                                          'category': 'billing',
                                          'operation': 'record_create',
                                          'summary': 'Create billing record',
                                          'description': '',
                                          'methodology_doc': '',
                                          'params': [{'name': 'client_id',
                                                      'type': 'string',
                                                      'required': True,
                                                      'description': 'Client ID'},
                                                     {'name': 'fee_schedule_id',
                                                      'type': 'string',
                                                      'required': True,
                                                      'description': 'Fee schedule ID'},
                                                     {'name': 'period_start',
                                                      'type': 'string',
                                                      'required': True,
                                                      'description': 'Period start date'},
                                                     {'name': 'period_end',
                                                      'type': 'string',
                                                      'required': True,
                                                      'description': 'Period end date'},
                                                     {'name': 'aum',
                                                      'type': 'float',
                                                      'required': False,
                                                      'description': 'AUM'},
                                                     {'name': 'portfolio_return',
                                                      'type': 'float',
                                                      'required': False,
                                                      'description': 'Portfolio return'},
                                                     {'name': 'benchmark_return',
                                                      'type': 'float',
                                                      'required': False,
                                                      'description': 'Benchmark return'},
                                                     {'name': 'high_water_mark',
                                                      'type': 'float',
                                                      'required': False,
                                                      'description': 'High water mark'},
                                                     {'name': 'portfolio_id',
                                                      'type': 'string',
                                                      'required': False,
                                                      'description': 'Portfolio ID'},
                                                     {'name': 'notes',
                                                      'type': 'string',
                                                      'required': False,
                                                      'description': 'Notes'}],
                                          'required_params': ['client_id',
                                                              'fee_schedule_id',
                                                              'period_start',
                                                              'period_end'],
                                          'optional_params': ['aum',
                                                              'portfolio_return',
                                                              'benchmark_return',
                                                              'high_water_mark',
                                                              'portfolio_id',
                                                              'notes'],
                                          'credits': 1,
                                          'tags': ['Billing'],
                                          'deprecated': False,
                                          'internal': False,
                                          'supports_format': False},
                'billing.record_list': {'action': 'billing.record_list',
                                        'category': 'billing',
                                        'operation': 'record_list',
                                        'summary': 'List billing records',
                                        'description': '',
                                        'methodology_doc': '',
                                        'params': [{'name': 'client_id',
                                                    'type': 'string',
                                                    'required': False,
                                                    'description': 'Filter by client'},
                                                   {'name': 'year',
                                                    'type': 'int',
                                                    'required': False,
                                                    'description': 'Filter by year'},
                                                   {'name': 'limit',
                                                    'type': 'int',
                                                    'required': False,
                                                    'description': 'Maximum results',
                                                    'default': 100},
                                                   {'name': 'format',
                                                    'type': 'string',
                                                    'required': False,
                                                    'description': 'Output format: dict|df|arrow|parquet',
                                                    'default': 'dict'}],
                                        'required_params': [],
                                        'optional_params': ['client_id', 'year', 'limit', 'format'],
                                        'credits': 1,
                                        'tags': ['Billing'],
                                        'deprecated': False,
                                        'internal': False,
                                        'supports_format': True},
                'billing.schedule_create': {'action': 'billing.schedule_create',
                                            'category': 'billing',
                                            'operation': 'schedule_create',
                                            'summary': 'Create fee schedule',
                                            'description': '',
                                            'methodology_doc': '',
                                            'params': [{'name': 'name',
                                                        'type': 'string',
                                                        'required': True,
                                                        'description': 'Schedule name'},
                                                       {'name': 'fee_type',
                                                        'type': 'string',
                                                        'required': True,
                                                        'description': 'aum_percentage|flat|tiered|performance'},
                                                       {'name': 'frequency',
                                                        'type': 'string',
                                                        'required': False,
                                                        'description': 'monthly|quarterly|annually',
                                                        'default': 'quarterly'},
                                                       {'name': 'currency',
                                                        'type': 'string',
                                                        'required': False,
                                                        'description': 'Currency',
                                                        'default': 'EUR'}],
                                            'required_params': ['name', 'fee_type'],
                                            'optional_params': ['frequency', 'currency'],
                                            'credits': 1,
                                            'tags': ['Billing', 'CRUD'],
                                            'deprecated': False,
                                            'internal': False,
                                            'supports_format': False},
                'billing.schedule_delete': {'action': 'billing.schedule_delete',
                                            'category': 'billing',
                                            'operation': 'schedule_delete',
                                            'summary': 'Delete fee schedule',
                                            'description': '',
                                            'methodology_doc': '',
                                            'params': [{'name': 'id',
                                                        'type': 'string',
                                                        'required': True,
                                                        'description': 'Schedule ID'}],
                                            'required_params': ['id'],
                                            'optional_params': [],
                                            'credits': 1,
                                            'tags': ['Billing', 'CRUD'],
                                            'deprecated': False,
                                            'internal': False,
                                            'supports_format': False},
                'billing.schedule_get': {'action': 'billing.schedule_get',
                                         'category': 'billing',
                                         'operation': 'schedule_get',
                                         'summary': 'Get fee schedule',
                                         'description': '',
                                         'methodology_doc': '',
                                         'params': [{'name': 'id',
                                                     'type': 'string',
                                                     'required': False,
                                                     'description': 'Schedule ID'},
                                                    {'name': 'name',
                                                     'type': 'string',
                                                     'required': False,
                                                     'description': 'Schedule name'}],
                                         'required_params': [],
                                         'optional_params': ['id', 'name'],
                                         'credits': 1,
                                         'tags': ['Billing', 'CRUD'],
                                         'deprecated': False,
                                         'internal': False,
                                         'supports_format': False},
                'billing.schedule_list': {'action': 'billing.schedule_list',
                                          'category': 'billing',
                                          'operation': 'schedule_list',
                                          'summary': 'List fee schedules',
                                          'description': '',
                                          'methodology_doc': '',
                                          'params': [{'name': 'fee_type',
                                                      'type': 'string',
                                                      'required': False,
                                                      'description': 'Filter by fee type'},
                                                     {'name': 'limit',
                                                      'type': 'int',
                                                      'required': False,
                                                      'description': 'Maximum results',
                                                      'default': 100},
                                                     {'name': 'format',
                                                      'type': 'string',
                                                      'required': False,
                                                      'description': 'Output format: dict|df|arrow|parquet',
                                                      'default': 'dict'}],
                                          'required_params': [],
                                          'optional_params': ['fee_type', 'limit', 'format'],
                                          'credits': 1,
                                          'tags': ['Billing', 'CRUD'],
                                          'deprecated': False,
                                          'internal': False,
                                          'supports_format': True},
                'billing.schedule_update': {'action': 'billing.schedule_update',
                                            'category': 'billing',
                                            'operation': 'schedule_update',
                                            'summary': 'Update fee schedule',
                                            'description': '',
                                            'methodology_doc': '',
                                            'params': [{'name': 'id',
                                                        'type': 'string',
                                                        'required': True,
                                                        'description': 'Schedule ID'},
                                                       {'name': 'name',
                                                        'type': 'string',
                                                        'required': False,
                                                        'description': 'New name'}],
                                            'required_params': ['id'],
                                            'optional_params': ['name'],
                                            'credits': 1,
                                            'tags': ['Billing', 'CRUD'],
                                            'deprecated': False,
                                            'internal': False,
                                            'supports_format': False},
                'billing.simulate': {'action': 'billing.simulate',
                                     'category': 'billing',
                                     'operation': 'simulate',
                                     'summary': 'Simulate fees',
                                     'description': 'Simulate fees for different scenarios.',
                                     'methodology_doc': '',
                                     'params': [{'name': 'fee_schedule',
                                                 'type': 'dict',
                                                 'required': True,
                                                 'description': 'Fee schedule'},
                                                {'name': 'scenarios',
                                                 'type': 'list',
                                                 'required': False,
                                                 'description': 'Scenarios to simulate'}],
                                     'required_params': ['fee_schedule'],
                                     'optional_params': ['scenarios'],
                                     'credits': 1,
                                     'tags': ['Billing'],
                                     'deprecated': False,
                                     'internal': False,
                                     'supports_format': False},
                'bonds.analyze': {'action': 'bonds.analyze',
                                  'category': 'bonds',
                                  'operation': 'analyze',
                                  'summary': 'Analyze bond',
                                  'description': 'Calculate YTM, duration, convexity. coupon_rate and maturity_date '
                                                 'auto-populated from metadata if missing.',
                                  'methodology_doc': 'methodology/bonds.md',
                                  'params': [{'name': 'identifier',
                                              'type': 'string',
                                              'required': True,
                                              'description': 'TepiloraCode or ISIN'},
                                             {'name': 'face_value',
                                              'type': 'float',
                                              'required': False,
                                              'description': 'Face/par value',
                                              'default': 1000},
                                             {'name': 'coupon_rate',
                                              'type': 'float',
                                              'required': False,
                                              'description': 'Coupon rate (decimal). Auto-populated from metadata if '
                                                             'missing'},
                                             {'name': 'maturity_date',
                                              'type': 'string',
                                              'required': False,
                                              'description': 'Maturity date YYYY-MM-DD. Auto-populated from metadata '
                                                             'if missing'},
                                             {'name': 'frequency',
                                              'type': 'int',
                                              'required': False,
                                              'description': 'Coupon frequency (1,2,4,12). Auto-populated from '
                                                             'metadata if missing'},
                                             {'name': 'day_count',
                                              'type': 'string',
                                              'required': False,
                                              'description': 'Day count convention. Auto-populated from metadata if '
                                                             'missing'}],
                                  'required_params': ['identifier'],
                                  'optional_params': ['face_value',
                                                      'coupon_rate',
                                                      'maturity_date',
                                                      'frequency',
                                                      'day_count'],
                                  'credits': 1,
                                  'tags': ['Bonds'],
                                  'deprecated': False,
                                  'internal': False,
                                  'supports_format': False},
                'bonds.curve': {'action': 'bonds.curve',
                                'category': 'bonds',
                                'operation': 'curve',
                                'summary': 'Yield curve',
                                'description': 'Get yield curve data.',
                                'methodology_doc': '',
                                'params': [{'name': 'currency',
                                            'type': 'string',
                                            'required': False,
                                            'description': 'Currency',
                                            'default': 'EUR'},
                                           {'name': 'date',
                                            'type': 'string',
                                            'required': False,
                                            'description': 'As of date'}],
                                'required_params': [],
                                'optional_params': ['currency', 'date'],
                                'credits': 1,
                                'tags': ['Bonds'],
                                'deprecated': False,
                                'internal': False,
                                'supports_format': False},
                'bonds.ladder': {'action': 'bonds.ladder',
                                 'category': 'bonds',
                                 'operation': 'ladder',
                                 'summary': 'Bond ladder',
                                 'description': 'Build a bond ladder.',
                                 'methodology_doc': '',
                                 'params': [{'name': 'identifiers',
                                             'type': 'list',
                                             'required': False,
                                             'description': 'List of TepiloraCodes'},
                                            {'name': 'target_maturities',
                                             'type': 'list',
                                             'required': False,
                                             'description': 'Target maturity years'},
                                            {'name': 'investment_amount',
                                             'type': 'float',
                                             'required': False,
                                             'description': 'Total investment amount'},
                                            {'name': 'rungs',
                                             'type': 'int',
                                             'required': False,
                                             'description': 'Number of rungs',
                                             'default': 5},
                                            {'name': 'format',
                                             'type': 'string',
                                             'required': False,
                                             'description': 'Output format: dict|df|arrow|parquet',
                                             'default': 'dict'}],
                                 'required_params': [],
                                 'optional_params': ['identifiers',
                                                     'target_maturities',
                                                     'investment_amount',
                                                     'rungs',
                                                     'format'],
                                 'credits': 1,
                                 'tags': ['Bonds'],
                                 'deprecated': False,
                                 'internal': False,
                                 'supports_format': True},
                'bonds.lookup': {'action': 'bonds.lookup',
                                 'category': 'bonds',
                                 'operation': 'lookup',
                                 'summary': 'Fast bond metadata lookup',
                                 'description': 'Returns bond metadata from D_full.parquet without calculations',
                                 'methodology_doc': '',
                                 'params': [{'name': 'identifier',
                                             'type': 'string',
                                             'required': False,
                                             'description': 'Single bond identifier'},
                                            {'name': 'identifiers',
                                             'type': 'list',
                                             'required': False,
                                             'description': 'Multiple bond identifiers'},
                                            {'name': 'format',
                                             'type': 'string',
                                             'required': False,
                                             'description': 'Output format',
                                             'default': 'dict'}],
                                 'required_params': [],
                                 'optional_params': ['identifier', 'identifiers', 'format'],
                                 'credits': 1,
                                 'tags': ['bonds', 'metadata'],
                                 'deprecated': False,
                                 'internal': False,
                                 'supports_format': True},
                'bonds.maturity_profile': {'action': 'bonds.maturity_profile',
                                           'category': 'bonds',
                                           'operation': 'maturity_profile',
                                           'summary': 'Maturity distribution by bucket',
                                           'description': 'Maturity distribution (0-1y, 1-3y, 3-5y, 5-7y, 7-10y, 10+y)',
                                           'methodology_doc': '',
                                           'params': [{'name': 'identifiers',
                                                       'type': 'list',
                                                       'required': True,
                                                       'description': 'Bond identifiers'},
                                                      {'name': 'weights',
                                                       'type': 'list',
                                                       'required': False,
                                                       'description': 'Portfolio weights'},
                                                      {'name': 'format',
                                                       'type': 'string',
                                                       'required': False,
                                                       'description': 'Output format',
                                                       'default': 'dict'}],
                                           'required_params': ['identifiers'],
                                           'optional_params': ['weights', 'format'],
                                           'credits': 1,
                                           'tags': ['bonds', 'risk'],
                                           'deprecated': False,
                                           'internal': False,
                                           'supports_format': True},
                'bonds.metrics': {'action': 'bonds.metrics',
                                  'category': 'bonds',
                                  'operation': 'metrics',
                                  'summary': 'Bond metrics',
                                  'description': 'Duration, convexity, etc.',
                                  'methodology_doc': '',
                                  'params': [{'name': 'identifier',
                                              'type': 'string',
                                              'required': True,
                                              'description': 'TepiloraCode or ISIN'}],
                                  'required_params': ['identifier'],
                                  'optional_params': [],
                                  'credits': 1,
                                  'tags': ['Bonds'],
                                  'deprecated': False,
                                  'internal': False,
                                  'supports_format': False},
                'bonds.portfolio': {'action': 'bonds.portfolio',
                                    'category': 'bonds',
                                    'operation': 'portfolio',
                                    'summary': 'Bond portfolio analytics',
                                    'description': 'Portfolio-level bond analytics.',
                                    'methodology_doc': '',
                                    'params': [{'name': 'identifiers',
                                                'type': 'list',
                                                'required': False,
                                                'description': 'List of TepiloraCodes'},
                                               {'name': 'weights',
                                                'type': 'list',
                                                'required': False,
                                                'description': 'Portfolio weights (list of floats, same order as '
                                                               'identifiers)'},
                                               {'name': 'include_duration',
                                                'type': 'bool',
                                                'required': False,
                                                'description': 'Include duration analysis',
                                                'default': True},
                                               {'name': 'format',
                                                'type': 'string',
                                                'required': False,
                                                'description': 'Output format: dict|df|arrow|parquet',
                                                'default': 'dict'}],
                                    'required_params': [],
                                    'optional_params': ['identifiers', 'weights', 'include_duration', 'format'],
                                    'credits': 1,
                                    'tags': ['Bonds'],
                                    'deprecated': False,
                                    'internal': False,
                                    'supports_format': True},
                'bonds.screen': {'action': 'bonds.screen',
                                 'category': 'bonds',
                                 'operation': 'screen',
                                 'summary': 'Screen bonds',
                                 'description': 'Screen bonds by criteria. Returns all matching bonds by default.',
                                 'methodology_doc': '',
                                 'params': [{'name': 'criteria',
                                             'type': 'dict',
                                             'required': False,
                                             'description': 'Screening criteria'},
                                            {'name': 'universe',
                                             'type': 'dict',
                                             'required': False,
                                             'description': 'Universe filter (e.g. TepiloraBondType, '
                                                            'TepiloraBondIssuer)'},
                                            {'name': 'rank_by',
                                             'type': 'string',
                                             'required': False,
                                             'description': 'Metric to rank by (ytm, duration, etc.)'},
                                            {'name': 'limit',
                                             'type': 'int',
                                             'required': False,
                                             'description': 'Max results (default: all)'},
                                            {'name': 'format',
                                             'type': 'string',
                                             'required': False,
                                             'description': 'Output format: dict|df|arrow|parquet',
                                             'default': 'dict'}],
                                 'required_params': [],
                                 'optional_params': ['criteria', 'universe', 'rank_by', 'limit', 'format'],
                                 'credits': 1,
                                 'tags': ['Bonds', 'Screening'],
                                 'deprecated': False,
                                 'internal': False,
                                 'supports_format': True},
                'bonds.spread': {'action': 'bonds.spread',
                                 'category': 'bonds',
                                 'operation': 'spread',
                                 'summary': 'Credit spread',
                                 'description': 'Calculate credit spread vs benchmark.',
                                 'methodology_doc': '',
                                 'params': [{'name': 'identifiers',
                                             'type': 'list',
                                             'required': True,
                                             'description': 'List of TepiloraCodes'},
                                            {'name': 'benchmark',
                                             'type': 'string',
                                             'required': False,
                                             'description': 'Benchmark bond identifier'},
                                            {'name': 'format',
                                             'type': 'string',
                                             'required': False,
                                             'description': 'Output format: dict|df|arrow|parquet',
                                             'default': 'dict'}],
                                 'required_params': ['identifiers'],
                                 'optional_params': ['benchmark', 'format'],
                                 'credits': 1,
                                 'tags': ['Bonds'],
                                 'deprecated': False,
                                 'internal': False,
                                 'supports_format': True},
                'clients.assign_portfolio': {'action': 'clients.assign_portfolio',
                                             'category': 'clients',
                                             'operation': 'assign_portfolio',
                                             'summary': 'Assign portfolio to client',
                                             'description': '',
                                             'methodology_doc': '',
                                             'params': [{'name': 'client_id',
                                                         'type': 'string',
                                                         'required': True,
                                                         'description': 'Client ID'},
                                                        {'name': 'id',
                                                         'type': 'string',
                                                         'required': True,
                                                         'description': 'Portfolio ID'}],
                                             'required_params': ['client_id', 'id'],
                                             'optional_params': [],
                                             'credits': 1,
                                             'tags': ['Clients'],
                                             'deprecated': False,
                                             'internal': False,
                                             'supports_format': False},
                'clients.create': {'action': 'clients.create',
                                   'category': 'clients',
                                   'operation': 'create',
                                   'summary': 'Create client',
                                   'description': '',
                                   'methodology_doc': '',
                                   'params': [{'name': 'name',
                                               'type': 'string',
                                               'required': True,
                                               'description': 'Client name'},
                                              {'name': 'email',
                                               'type': 'string',
                                               'required': False,
                                               'description': 'Client email'},
                                              {'name': 'external_id',
                                               'type': 'string',
                                               'required': False,
                                               'description': 'External system ID'},
                                              {'name': 'metadata',
                                               'type': 'dict',
                                               'required': False,
                                               'description': 'Additional metadata'}],
                                   'required_params': ['name'],
                                   'optional_params': ['email', 'external_id', 'metadata'],
                                   'credits': 1,
                                   'tags': ['Clients', 'CRUD'],
                                   'deprecated': False,
                                   'internal': False,
                                   'supports_format': False},
                'clients.delete': {'action': 'clients.delete',
                                   'category': 'clients',
                                   'operation': 'delete',
                                   'summary': 'Delete client',
                                   'description': '',
                                   'methodology_doc': '',
                                   'params': [{'name': 'client_id',
                                               'type': 'string',
                                               'required': True,
                                               'description': 'Client ID'}],
                                   'required_params': ['client_id'],
                                   'optional_params': [],
                                   'credits': 1,
                                   'tags': ['Clients', 'CRUD'],
                                   'deprecated': False,
                                   'internal': False,
                                   'supports_format': False},
                'clients.get': {'action': 'clients.get',
                                'category': 'clients',
                                'operation': 'get',
                                'summary': 'Get client',
                                'description': '',
                                'methodology_doc': '',
                                'params': [{'name': 'client_id',
                                            'type': 'string',
                                            'required': True,
                                            'description': 'Client ID'}],
                                'required_params': ['client_id'],
                                'optional_params': [],
                                'credits': 1,
                                'tags': ['Clients', 'CRUD'],
                                'deprecated': False,
                                'internal': False,
                                'supports_format': False},
                'clients.list': {'action': 'clients.list',
                                 'category': 'clients',
                                 'operation': 'list',
                                 'summary': 'List clients',
                                 'description': '',
                                 'methodology_doc': '',
                                 'params': [{'name': 'search',
                                             'type': 'string',
                                             'required': False,
                                             'description': 'Search in name'},
                                            {'name': 'status',
                                             'type': 'string',
                                             'required': False,
                                             'description': 'active|inactive|all',
                                             'default': 'active'},
                                            {'name': 'limit',
                                             'type': 'int',
                                             'required': False,
                                             'description': 'Maximum results',
                                             'default': 50},
                                            {'name': 'offset',
                                             'type': 'int',
                                             'required': False,
                                             'description': 'Pagination offset',
                                             'default': 0},
                                            {'name': 'format',
                                             'type': 'string',
                                             'required': False,
                                             'description': 'Output format: dict|df|arrow|parquet',
                                             'default': 'dict'}],
                                 'required_params': [],
                                 'optional_params': ['search', 'status', 'limit', 'offset', 'format'],
                                 'credits': 1,
                                 'tags': ['Clients', 'CRUD'],
                                 'deprecated': False,
                                 'internal': False,
                                 'supports_format': True},
                'clients.portfolios': {'action': 'clients.portfolios',
                                       'category': 'clients',
                                       'operation': 'portfolios',
                                       'summary': 'List client portfolios',
                                       'description': '',
                                       'methodology_doc': '',
                                       'params': [{'name': 'client_id',
                                                   'type': 'string',
                                                   'required': True,
                                                   'description': 'Client ID'},
                                                  {'name': 'format',
                                                   'type': 'string',
                                                   'required': False,
                                                   'description': 'Output format: dict|df|arrow|parquet',
                                                   'default': 'dict'}],
                                       'required_params': ['client_id'],
                                       'optional_params': ['format'],
                                       'credits': 1,
                                       'tags': ['Clients'],
                                       'deprecated': False,
                                       'internal': False,
                                       'supports_format': True},
                'clients.unassign_portfolio': {'action': 'clients.unassign_portfolio',
                                               'category': 'clients',
                                               'operation': 'unassign_portfolio',
                                               'summary': 'Unassign portfolio from client',
                                               'description': '',
                                               'methodology_doc': '',
                                               'params': [{'name': 'client_id',
                                                           'type': 'string',
                                                           'required': True,
                                                           'description': 'Client ID'},
                                                          {'name': 'id',
                                                           'type': 'string',
                                                           'required': True,
                                                           'description': 'Portfolio ID'}],
                                               'required_params': ['client_id', 'id'],
                                               'optional_params': [],
                                               'credits': 1,
                                               'tags': ['Clients'],
                                               'deprecated': False,
                                               'internal': False,
                                               'supports_format': False},
                'clients.update': {'action': 'clients.update',
                                   'category': 'clients',
                                   'operation': 'update',
                                   'summary': 'Update client',
                                   'description': '',
                                   'methodology_doc': '',
                                   'params': [{'name': 'client_id',
                                               'type': 'string',
                                               'required': True,
                                               'description': 'Client ID'},
                                              {'name': 'name',
                                               'type': 'string',
                                               'required': False,
                                               'description': 'New name'},
                                              {'name': 'email',
                                               'type': 'string',
                                               'required': False,
                                               'description': 'New email'},
                                              {'name': 'status',
                                               'type': 'string',
                                               'required': False,
                                               'description': 'New status'},
                                              {'name': 'metadata',
                                               'type': 'dict',
                                               'required': False,
                                               'description': 'New metadata'}],
                                   'required_params': ['client_id'],
                                   'optional_params': ['name', 'email', 'status', 'metadata'],
                                   'credits': 1,
                                   'tags': ['Clients', 'CRUD'],
                                   'deprecated': False,
                                   'internal': False,
                                   'supports_format': False},
                'data.security': {'action': 'data.security',
                                  'category': 'data',
                                  'operation': 'security',
                                  'summary': 'Get raw security data',
                                  'description': 'Raw data access for a security.',
                                  'methodology_doc': '',
                                  'params': [{'name': 'identifier',
                                              'type': 'string',
                                              'required': True,
                                              'description': 'TepiloraCode or ISIN'},
                                             {'name': 'fields',
                                              'type': 'list',
                                              'required': False,
                                              'description': 'Fields to return'}],
                                  'required_params': ['identifier'],
                                  'optional_params': ['fields'],
                                  'credits': 1,
                                  'tags': ['Data'],
                                  'deprecated': False,
                                  'internal': False,
                                  'supports_format': False},
                'documents.capabilities': {'action': 'documents.capabilities',
                                           'category': 'documents',
                                           'operation': 'capabilities',
                                           'summary': 'Get capabilities',
                                           'description': 'Get document processing capabilities.',
                                           'methodology_doc': '',
                                           'params': [],
                                           'required_params': [],
                                           'optional_params': [],
                                           'credits': 1,
                                           'tags': ['Documents'],
                                           'deprecated': False,
                                           'internal': False,
                                           'supports_format': False},
                'documents.classify': {'action': 'documents.classify',
                                       'category': 'documents',
                                       'operation': 'classify',
                                       'summary': 'Classify document',
                                       'description': 'Classify document type.',
                                       'methodology_doc': '',
                                       'params': [{'name': 'file_path',
                                                   'type': 'string',
                                                   'required': True,
                                                   'description': 'File path'}],
                                       'required_params': ['file_path'],
                                       'optional_params': [],
                                       'credits': 1,
                                       'tags': ['Documents'],
                                       'deprecated': False,
                                       'internal': False,
                                       'supports_format': False},
                'documents.parse': {'action': 'documents.parse',
                                    'category': 'documents',
                                    'operation': 'parse',
                                    'summary': 'Parse document',
                                    'description': 'Parse PDF or Excel document.',
                                    'methodology_doc': '',
                                    'params': [{'name': 'file_path',
                                                'type': 'string',
                                                'required': True,
                                                'description': 'File path'},
                                               {'name': 'document_type',
                                                'type': 'string',
                                                'required': False,
                                                'description': 'Document type hint'},
                                               {'name': 'extraction_method',
                                                'type': 'string',
                                                'required': False,
                                                'description': 'Extraction method',
                                                'default': 'auto'},
                                               {'name': 'use_ocr_fallback',
                                                'type': 'bool',
                                                'required': False,
                                                'description': 'Use OCR fallback',
                                                'default': True},
                                               {'name': 'include_raw_text',
                                                'type': 'bool',
                                                'required': False,
                                                'description': 'Include raw text in response',
                                                'default': False}],
                                    'required_params': ['file_path'],
                                    'optional_params': ['document_type',
                                                        'extraction_method',
                                                        'use_ocr_fallback',
                                                        'include_raw_text'],
                                    'credits': 1,
                                    'tags': ['Documents'],
                                    'deprecated': False,
                                    'internal': False,
                                    'supports_format': False},
                'documents.types': {'action': 'documents.types',
                                    'category': 'documents',
                                    'operation': 'types',
                                    'summary': 'List document types',
                                    'description': 'List supported document types.',
                                    'methodology_doc': '',
                                    'params': [],
                                    'required_params': [],
                                    'optional_params': [],
                                    'credits': 1,
                                    'tags': ['Documents'],
                                    'deprecated': False,
                                    'internal': False,
                                    'supports_format': False},
                'esg.compare': {'action': 'esg.compare',
                                'category': 'esg',
                                'operation': 'compare',
                                'summary': 'Compare ESG',
                                'description': 'Compare ESG scores across portfolios.',
                                'methodology_doc': '',
                                'params': [{'name': 'portfolios',
                                            'type': 'list',
                                            'required': True,
                                            'description': 'List of portfolio weights dicts'}],
                                'required_params': ['portfolios'],
                                'optional_params': [],
                                'credits': 1,
                                'tags': ['ESG'],
                                'deprecated': False,
                                'internal': False,
                                'supports_format': False},
                'esg.get': {'action': 'esg.get',
                            'category': 'esg',
                            'operation': 'get',
                            'summary': 'Get ESG data',
                            'description': 'Get ESG scores for securities.',
                            'methodology_doc': '',
                            'params': [{'name': 'identifiers',
                                        'type': 'list',
                                        'required': True,
                                        'description': 'List of TepiloraCodes'}],
                            'required_params': ['identifiers'],
                            'optional_params': [],
                            'credits': 1,
                            'tags': ['ESG'],
                            'deprecated': False,
                            'internal': False,
                            'supports_format': False},
                'esg.portfolio': {'action': 'esg.portfolio',
                                  'category': 'esg',
                                  'operation': 'portfolio',
                                  'summary': 'Portfolio ESG',
                                  'description': 'Calculate weighted ESG score for portfolio.',
                                  'methodology_doc': '',
                                  'params': [{'name': 'id',
                                              'type': 'string',
                                              'required': True,
                                              'description': 'Portfolio ID'}],
                                  'required_params': ['id'],
                                  'optional_params': [],
                                  'credits': 1,
                                  'tags': ['ESG'],
                                  'deprecated': False,
                                  'internal': False,
                                  'supports_format': False},
                'esg.scores': {'action': 'esg.scores',
                               'category': 'esg',
                               'operation': 'scores',
                               'summary': 'Get ESG scores (alias of esg.get)',
                               'description': 'Alias for esg.get. Use esg.get instead.',
                               'methodology_doc': '',
                               'params': [{'name': 'identifiers',
                                           'type': 'list',
                                           'required': True,
                                           'description': 'List of TepiloraCodes'}],
                               'required_params': ['identifiers'],
                               'optional_params': [],
                               'credits': 1,
                               'tags': ['ESG'],
                               'deprecated': True,
                               'internal': False,
                               'supports_format': False},
                'esg.screen': {'action': 'esg.screen',
                               'category': 'esg',
                               'operation': 'screen',
                               'summary': 'ESG screen',
                               'description': 'Screen securities by ESG criteria.',
                               'methodology_doc': '',
                               'params': [{'name': 'universe',
                                           'type': 'list',
                                           'required': False,
                                           'description': 'Universe of identifiers'},
                                          {'name': 'min_sri',
                                           'type': 'int',
                                           'required': False,
                                           'description': 'Minimum SRI score'},
                                          {'name': 'max_sri',
                                           'type': 'int',
                                           'required': False,
                                           'description': 'Maximum SRI score'},
                                          {'name': 'min_esg_score',
                                           'type': 'float',
                                           'required': False,
                                           'description': 'Minimum ESG score'},
                                          {'name': 'sfdr_filter',
                                           'type': 'string',
                                           'required': False,
                                           'description': 'SFDR filter'},
                                          {'name': 'limit',
                                           'type': 'int',
                                           'required': False,
                                           'description': 'Maximum results',
                                           'default': 100},
                                          {'name': 'format',
                                           'type': 'string',
                                           'required': False,
                                           'description': 'Output format: dict|df|arrow|parquet',
                                           'default': 'dict'}],
                               'required_params': [],
                               'optional_params': ['universe',
                                                   'min_sri',
                                                   'max_sri',
                                                   'min_esg_score',
                                                   'sfdr_filter',
                                                   'limit',
                                                   'format'],
                               'credits': 1,
                               'tags': ['ESG', 'Screening'],
                               'deprecated': False,
                               'internal': False,
                               'supports_format': True},
                'esg.summary': {'action': 'esg.summary',
                                'category': 'esg',
                                'operation': 'summary',
                                'summary': 'ESG summary',
                                'description': 'Aggregated ESG statistics.',
                                'methodology_doc': '',
                                'params': [{'name': 'identifiers',
                                            'type': 'list',
                                            'required': False,
                                            'description': 'List of TepiloraCodes'}],
                                'required_params': [],
                                'optional_params': ['identifiers'],
                                'credits': 1,
                                'tags': ['ESG'],
                                'deprecated': False,
                                'internal': False,
                                'supports_format': False},
                'exports.export': {'action': 'exports.export',
                                   'category': 'exports',
                                   'operation': 'export',
                                   'summary': 'Export data',
                                   'description': 'Export data to file format.',
                                   'methodology_doc': '',
                                   'params': [{'name': 'source',
                                               'type': 'string',
                                               'required': True,
                                               'description': "Source action (e.g., 'securities.search')"},
                                              {'name': 'source_params',
                                               'type': 'dict',
                                               'required': False,
                                               'description': 'Parameters for source action'},
                                              {'name': 'format',
                                               'type': 'string',
                                               'required': False,
                                               'description': 'json|csv|xlsx|parquet',
                                               'default': 'json'},
                                              {'name': 'filename',
                                               'type': 'string',
                                               'required': False,
                                               'description': 'Output filename'},
                                              {'name': 'include_metadata',
                                               'type': 'bool',
                                               'required': False,
                                               'description': 'Include metadata',
                                               'default': True},
                                              {'name': 'compression',
                                               'type': 'string',
                                               'required': False,
                                               'description': 'Compression (for parquet)'}],
                                   'required_params': ['source'],
                                   'optional_params': ['source_params',
                                                       'format',
                                                       'filename',
                                                       'include_metadata',
                                                       'compression'],
                                   'credits': 1,
                                   'tags': ['Exports'],
                                   'deprecated': False,
                                   'internal': False,
                                   'supports_format': False},
                'exports.formats': {'action': 'exports.formats',
                                    'category': 'exports',
                                    'operation': 'formats',
                                    'summary': 'List formats',
                                    'description': 'List supported export formats.',
                                    'methodology_doc': '',
                                    'params': [],
                                    'required_params': [],
                                    'optional_params': [],
                                    'credits': 1,
                                    'tags': ['Exports'],
                                    'deprecated': False,
                                    'internal': False,
                                    'supports_format': False},
                'factors.get': {'action': 'factors.get',
                                'category': 'factors',
                                'operation': 'get',
                                'summary': 'Get factor data',
                                'description': '',
                                'methodology_doc': '',
                                'params': [{'name': 'model',
                                            'type': 'string',
                                            'required': False,
                                            'description': 'FF3|FF5|Carhart',
                                            'default': 'FF3'},
                                           {'name': 'start_date',
                                            'type': 'string',
                                            'required': False,
                                            'description': 'Start date (YYYY-MM-DD)'},
                                           {'name': 'end_date',
                                            'type': 'string',
                                            'required': False,
                                            'description': 'End date (YYYY-MM-DD)'},
                                           {'name': 'format',
                                            'type': 'string',
                                            'required': False,
                                            'description': 'Output format: dict|df|arrow|parquet',
                                            'default': 'dict'}],
                                'required_params': [],
                                'optional_params': ['model', 'start_date', 'end_date', 'format'],
                                'credits': 1,
                                'tags': ['Factors'],
                                'deprecated': False,
                                'internal': False,
                                'supports_format': True},
                'factors.list': {'action': 'factors.list',
                                 'category': 'factors',
                                 'operation': 'list',
                                 'summary': 'List available factors',
                                 'description': '',
                                 'methodology_doc': '',
                                 'params': [],
                                 'required_params': [],
                                 'optional_params': [],
                                 'credits': 1,
                                 'tags': ['Factors'],
                                 'deprecated': False,
                                 'internal': False,
                                 'supports_format': False},
                'factors.loading': {'action': 'factors.loading',
                                    'category': 'factors',
                                    'operation': 'loading',
                                    'summary': 'Load factor data (alias of factors.get)',
                                    'description': 'Alias for factors.get. Use factors.get instead.',
                                    'methodology_doc': '',
                                    'params': [{'name': 'model',
                                                'type': 'string',
                                                'required': False,
                                                'description': 'FF3|FF5|Carhart',
                                                'default': 'FF3'},
                                               {'name': 'start_date',
                                                'type': 'string',
                                                'required': False,
                                                'description': 'Start date (YYYY-MM-DD)'},
                                               {'name': 'end_date',
                                                'type': 'string',
                                                'required': False,
                                                'description': 'End date (YYYY-MM-DD)'},
                                               {'name': 'format',
                                                'type': 'string',
                                                'required': False,
                                                'description': 'Output format: dict|df|arrow|parquet',
                                                'default': 'dict'}],
                                    'required_params': [],
                                    'optional_params': ['model', 'start_date', 'end_date', 'format'],
                                    'credits': 1,
                                    'tags': ['Factors'],
                                    'deprecated': True,
                                    'internal': False,
                                    'supports_format': True},
                'factors.portfolio_exposure': {'action': 'factors.portfolio_exposure',
                                               'category': 'factors',
                                               'operation': 'portfolio_exposure',
                                               'summary': 'Portfolio factor exposure',
                                               'description': 'Compute aggregated portfolio-level factor exposures '
                                                              'from constituent holdings.',
                                               'methodology_doc': 'methodology/factors.md#portfolio-exposure',
                                               'params': [{'name': 'portfolio_id',
                                                           'type': 'string',
                                                           'required': False,
                                                           'description': 'Portfolio ID'},
                                                          {'name': 'id',
                                                           'type': 'string',
                                                           'required': False,
                                                           'description': 'Alias for portfolio_id'},
                                                          {'name': 'weights',
                                                           'type': 'dict',
                                                           'required': False,
                                                           'description': 'Weights dict {identifier: weight}'},
                                                          {'name': 'benchmark',
                                                           'type': 'string',
                                                           'required': False,
                                                           'description': 'Benchmark identifier'},
                                                          {'name': 'model',
                                                           'type': 'string',
                                                           'required': False,
                                                           'description': 'FF3|FF5|Carhart',
                                                           'default': 'FF5'},
                                                          {'name': 'period',
                                                           'type': 'int',
                                                           'required': False,
                                                           'description': 'Rolling window',
                                                           'default': 252},
                                                          {'name': 'start_date',
                                                           'type': 'string',
                                                           'required': False,
                                                           'description': 'Start date (YYYY-MM-DD)'},
                                                          {'name': 'end_date',
                                                           'type': 'string',
                                                           'required': False,
                                                           'description': 'End date (YYYY-MM-DD)'},
                                                          {'name': 'format',
                                                           'type': 'string',
                                                           'required': False,
                                                           'description': 'Output format: dict|df|arrow|parquet',
                                                           'default': 'dict'}],
                                               'required_params': [],
                                               'optional_params': ['portfolio_id',
                                                                   'id',
                                                                   'weights',
                                                                   'benchmark',
                                                                   'model',
                                                                   'period',
                                                                   'start_date',
                                                                   'end_date',
                                                                   'format'],
                                               'credits': 1,
                                               'tags': ['Factors', 'Portfolio', 'Risk'],
                                               'deprecated': False,
                                               'internal': False,
                                               'supports_format': True},
                'factors.risk_model': {'action': 'factors.risk_model',
                                       'category': 'factors',
                                       'operation': 'risk_model',
                                       'summary': 'Factor risk decomposition',
                                       'description': 'Compute factor covariance and decompose security risk into '
                                                      'systematic and specific components.',
                                       'methodology_doc': 'methodology/factors.md#risk-model',
                                       'params': [{'name': 'identifiers',
                                                   'type': 'list',
                                                   'required': False,
                                                   'description': 'Security identifier(s)'},
                                                  {'name': 'model',
                                                   'type': 'string',
                                                   'required': False,
                                                   'description': 'FF3|FF5|Carhart',
                                                   'default': 'FF5'},
                                                  {'name': 'period',
                                                   'type': 'int',
                                                   'required': False,
                                                   'description': 'Rolling window for covariance',
                                                   'default': 252},
                                                  {'name': 'cov_method',
                                                   'type': 'string',
                                                   'required': False,
                                                   'description': 'Covariance method: sample|ledoit_wolf|oas|ewma',
                                                   'default': 'sample'},
                                                  {'name': 'include_statistics',
                                                   'type': 'bool',
                                                   'required': False,
                                                   'description': 'Include SE/t-stats/p-values for betas',
                                                   'default': False},
                                                  {'name': 'start_date',
                                                   'type': 'string',
                                                   'required': False,
                                                   'description': 'Start date (YYYY-MM-DD)'},
                                                  {'name': 'end_date',
                                                   'type': 'string',
                                                   'required': False,
                                                   'description': 'End date (YYYY-MM-DD)'},
                                                  {'name': 'format',
                                                   'type': 'string',
                                                   'required': False,
                                                   'description': 'Output format: dict|df|arrow|parquet',
                                                   'default': 'dict'}],
                                       'required_params': [],
                                       'optional_params': ['identifiers',
                                                           'model',
                                                           'period',
                                                           'cov_method',
                                                           'include_statistics',
                                                           'start_date',
                                                           'end_date',
                                                           'format'],
                                       'credits': 1,
                                       'tags': ['Factors', 'Risk'],
                                       'deprecated': False,
                                       'internal': False,
                                       'supports_format': True},
                'factors.rolling_covariance': {'action': 'factors.rolling_covariance',
                                               'category': 'factors',
                                               'operation': 'rolling_covariance',
                                               'summary': 'Rolling factor covariance',
                                               'description': 'Compute time-varying factor correlation/covariance '
                                                              'matrices.',
                                               'methodology_doc': 'methodology/factors.md#rolling-covariance',
                                               'params': [{'name': 'model',
                                                           'type': 'string',
                                                           'required': False,
                                                           'description': 'FF3|FF5|Carhart',
                                                           'default': 'FF5'},
                                                          {'name': 'period',
                                                           'type': 'int',
                                                           'required': False,
                                                           'description': 'Rolling window',
                                                           'default': 126},
                                                          {'name': 'cov_method',
                                                           'type': 'string',
                                                           'required': False,
                                                           'description': 'Covariance method: '
                                                                          'sample|ledoit_wolf|oas|ewma',
                                                           'default': 'sample'},
                                                          {'name': 'output',
                                                           'type': 'string',
                                                           'required': False,
                                                           'description': 'correlation|covariance|both',
                                                           'default': 'correlation'},
                                                          {'name': 'annualize',
                                                           'type': 'bool',
                                                           'required': False,
                                                           'description': 'Annualize covariance',
                                                           'default': True},
                                                          {'name': 'start_date',
                                                           'type': 'string',
                                                           'required': False,
                                                           'description': 'Start date (YYYY-MM-DD)'},
                                                          {'name': 'end_date',
                                                           'type': 'string',
                                                           'required': False,
                                                           'description': 'End date (YYYY-MM-DD)'},
                                                          {'name': 'format',
                                                           'type': 'string',
                                                           'required': False,
                                                           'description': 'Output format: dict|df|arrow|parquet',
                                                           'default': 'dict'}],
                                               'required_params': [],
                                               'optional_params': ['model',
                                                                   'period',
                                                                   'cov_method',
                                                                   'output',
                                                                   'annualize',
                                                                   'start_date',
                                                                   'end_date',
                                                                   'format'],
                                               'credits': 1,
                                               'tags': ['Factors', 'Risk'],
                                               'deprecated': False,
                                               'internal': False,
                                               'supports_format': True},
                'factors.scenario': {'action': 'factors.scenario',
                                     'category': 'factors',
                                     'operation': 'scenario',
                                     'summary': 'Factor scenario analysis',
                                     'description': 'Stress test portfolio/securities with hypothetical factor shocks.',
                                     'methodology_doc': 'methodology/factors.md#scenario',
                                     'params': [{'name': 'identifiers',
                                                 'type': 'list',
                                                 'required': False,
                                                 'description': 'Security identifier(s)'},
                                                {'name': 'portfolio_id',
                                                 'type': 'string',
                                                 'required': False,
                                                 'description': 'Portfolio ID'},
                                                {'name': 'id',
                                                 'type': 'string',
                                                 'required': False,
                                                 'description': 'Alias for portfolio_id'},
                                                {'name': 'weights',
                                                 'type': 'dict',
                                                 'required': False,
                                                 'description': 'Weights dict'},
                                                {'name': 'scenarios',
                                                 'type': 'list',
                                                 'required': True,
                                                 'description': "List of scenario dicts or 'historical'"},
                                                {'name': 'model',
                                                 'type': 'string',
                                                 'required': False,
                                                 'description': 'FF3|FF5|Carhart',
                                                 'default': 'FF5'},
                                                {'name': 'period',
                                                 'type': 'int',
                                                 'required': False,
                                                 'description': 'Regression window',
                                                 'default': 252},
                                                {'name': 'start_date',
                                                 'type': 'string',
                                                 'required': False,
                                                 'description': 'Start date (YYYY-MM-DD)'},
                                                {'name': 'end_date',
                                                 'type': 'string',
                                                 'required': False,
                                                 'description': 'End date (YYYY-MM-DD)'},
                                                {'name': 'format',
                                                 'type': 'string',
                                                 'required': False,
                                                 'description': 'Output format: dict|df|arrow|parquet',
                                                 'default': 'dict'}],
                                     'required_params': ['scenarios'],
                                     'optional_params': ['identifiers',
                                                         'portfolio_id',
                                                         'id',
                                                         'weights',
                                                         'model',
                                                         'period',
                                                         'start_date',
                                                         'end_date',
                                                         'format'],
                                     'credits': 1,
                                     'tags': ['Factors', 'Risk', 'Stress Test'],
                                     'deprecated': False,
                                     'internal': False,
                                     'supports_format': True},
                'factors.status': {'action': 'factors.status',
                                   'category': 'factors',
                                   'operation': 'status',
                                   'summary': 'Factor data status',
                                   'description': 'Get factor data freshness.',
                                   'methodology_doc': '',
                                   'params': [],
                                   'required_params': [],
                                   'optional_params': [],
                                   'credits': 1,
                                   'tags': ['Factors'],
                                   'deprecated': False,
                                   'internal': False,
                                   'supports_format': False},
                'fh.financials': {'action': 'fh.financials',
                                  'category': 'fh',
                                  'operation': 'financials',
                                  'summary': 'Get financials',
                                  'description': 'Income statement, balance sheet, cash flow.',
                                  'methodology_doc': '',
                                  'params': [{'name': 'identifiers',
                                              'type': 'list',
                                              'required': True,
                                              'description': 'List of TepiloraCodes'},
                                             {'name': 'statement',
                                              'type': 'string',
                                              'required': False,
                                              'description': 'income|balance|cashflow|all',
                                              'default': 'all'},
                                             {'name': 'format',
                                              'type': 'string',
                                              'required': False,
                                              'description': 'Output format: dict|df|arrow|parquet',
                                              'default': 'dict'}],
                                  'required_params': ['identifiers'],
                                  'optional_params': ['statement', 'format'],
                                  'credits': 1,
                                  'tags': ['Fundamentals'],
                                  'deprecated': False,
                                  'internal': False,
                                  'supports_format': True},
                'fh.history': {'action': 'fh.history',
                               'category': 'fh',
                               'operation': 'history',
                               'summary': 'Get fundamentals history',
                               'description': 'Historical fundamental data.',
                               'methodology_doc': '',
                               'params': [{'name': 'identifiers',
                                           'type': 'list',
                                           'required': True,
                                           'description': 'List of TepiloraCodes'},
                                          {'name': 'columns',
                                           'type': 'list',
                                           'required': False,
                                           'description': 'Columns to return'},
                                          {'name': 'start_date',
                                           'type': 'string',
                                           'required': False,
                                           'description': 'Start date (YYYY-MM-DD)'},
                                          {'name': 'end_date',
                                           'type': 'string',
                                           'required': False,
                                           'description': 'End date (YYYY-MM-DD)'},
                                          {'name': 'format',
                                           'type': 'string',
                                           'required': False,
                                           'description': 'Output format: dict|df|arrow|parquet',
                                           'default': 'dict'}],
                               'required_params': ['identifiers'],
                               'optional_params': ['columns', 'start_date', 'end_date', 'format'],
                               'credits': 1,
                               'tags': ['Fundamentals'],
                               'deprecated': False,
                               'internal': False,
                               'supports_format': True},
                'fh.info': {'action': 'fh.info',
                            'category': 'fh',
                            'operation': 'info',
                            'summary': 'Column info',
                            'description': 'Get information about available columns.',
                            'methodology_doc': '',
                            'params': [],
                            'required_params': [],
                            'optional_params': [],
                            'credits': 1,
                            'tags': ['Fundamentals'],
                            'deprecated': False,
                            'internal': False,
                            'supports_format': False},
                'fh.latest': {'action': 'fh.latest',
                              'category': 'fh',
                              'operation': 'latest',
                              'summary': 'Get latest fundamentals',
                              'description': 'Get most recent fundamental data.',
                              'methodology_doc': '',
                              'params': [{'name': 'identifiers',
                                          'type': 'list',
                                          'required': True,
                                          'description': 'List of TepiloraCodes'},
                                         {'name': 'columns',
                                          'type': 'list',
                                          'required': False,
                                          'description': 'Columns to return'},
                                         {'name': 'format',
                                          'type': 'string',
                                          'required': False,
                                          'description': 'Output format: dict|df|arrow|parquet',
                                          'default': 'dict'}],
                              'required_params': ['identifiers'],
                              'optional_params': ['columns', 'format'],
                              'credits': 1,
                              'tags': ['Fundamentals'],
                              'deprecated': False,
                              'internal': False,
                              'supports_format': True},
                'fh.load': {'action': 'fh.load',
                            'category': 'fh',
                            'operation': 'load',
                            'summary': 'Load fundamentals',
                            'description': 'Load fundamental data for securities.',
                            'methodology_doc': '',
                            'params': [{'name': 'identifiers',
                                        'type': 'list',
                                        'required': True,
                                        'description': 'List of TepiloraCodes'},
                                       {'name': 'columns',
                                        'type': 'list',
                                        'required': False,
                                        'description': 'Columns to load'},
                                       {'name': 'format',
                                        'type': 'string',
                                        'required': False,
                                        'description': 'Output format: dict|df|arrow|parquet',
                                        'default': 'dict'}],
                            'required_params': ['identifiers'],
                            'optional_params': ['columns', 'format'],
                            'credits': 1,
                            'tags': ['Fundamentals'],
                            'deprecated': False,
                            'internal': False,
                            'supports_format': True},
                'fh.metrics': {'action': 'fh.metrics',
                               'category': 'fh',
                               'operation': 'metrics',
                               'summary': 'Get derived metrics',
                               'description': 'Pre-calculated metrics (ROE, margins, etc.).',
                               'methodology_doc': '',
                               'params': [{'name': 'identifiers',
                                           'type': 'list',
                                           'required': True,
                                           'description': 'List of TepiloraCodes'},
                                          {'name': 'metrics',
                                           'type': 'list',
                                           'required': False,
                                           'description': 'Metric groups: '
                                                          'margins|profitability|leverage|efficiency|growth'},
                                          {'name': 'format',
                                           'type': 'string',
                                           'required': False,
                                           'description': 'Output format: dict|df|arrow|parquet',
                                           'default': 'dict'}],
                               'required_params': ['identifiers'],
                               'optional_params': ['metrics', 'format'],
                               'credits': 1,
                               'tags': ['Fundamentals'],
                               'deprecated': False,
                               'internal': False,
                               'supports_format': True},
                'fh.quality': {'action': 'fh.quality',
                               'category': 'fh',
                               'operation': 'quality',
                               'summary': 'Quality score',
                               'description': 'Calculate quality score (0-100).',
                               'methodology_doc': '',
                               'params': [{'name': 'identifiers',
                                           'type': 'list',
                                           'required': True,
                                           'description': 'List of TepiloraCodes'},
                                          {'name': 'format',
                                           'type': 'string',
                                           'required': False,
                                           'description': 'Output format: dict|df|arrow|parquet',
                                           'default': 'dict'}],
                               'required_params': ['identifiers'],
                               'optional_params': ['format'],
                               'credits': 1,
                               'tags': ['Fundamentals'],
                               'deprecated': False,
                               'internal': False,
                               'supports_format': True},
                'macro.calendar': {'action': 'macro.calendar',
                                   'category': 'macro',
                                   'operation': 'calendar',
                                   'summary': 'Economic calendar',
                                   'description': 'Upcoming economic events.',
                                   'methodology_doc': '',
                                   'params': [{'name': 'country',
                                               'type': 'string',
                                               'required': False,
                                               'description': 'Filter by country'},
                                              {'name': 'from_date',
                                               'type': 'string',
                                               'required': False,
                                               'description': 'From date'},
                                              {'name': 'to_date',
                                               'type': 'string',
                                               'required': False,
                                               'description': 'To date'},
                                              {'name': 'limit',
                                               'type': 'int',
                                               'required': False,
                                               'description': 'Maximum results',
                                               'default': 100},
                                              {'name': 'format',
                                               'type': 'string',
                                               'required': False,
                                               'description': 'Output format: dict|df|arrow|parquet',
                                               'default': 'dict'}],
                                   'required_params': [],
                                   'optional_params': ['country', 'from_date', 'to_date', 'limit', 'format'],
                                   'credits': 1,
                                   'tags': ['Macro'],
                                   'deprecated': False,
                                   'internal': False,
                                   'supports_format': True},
                'macro.countries': {'action': 'macro.countries',
                                    'category': 'macro',
                                    'operation': 'countries',
                                    'summary': 'List countries',
                                    'description': 'List available countries.',
                                    'methodology_doc': '',
                                    'params': [{'name': 'format',
                                                'type': 'string',
                                                'required': False,
                                                'description': 'Output format: dict|df|arrow|parquet',
                                                'default': 'dict'}],
                                    'required_params': [],
                                    'optional_params': ['format'],
                                    'credits': 1,
                                    'tags': ['Macro'],
                                    'deprecated': False,
                                    'internal': False,
                                    'supports_format': True},
                'macro.history': {'action': 'macro.history',
                                  'category': 'macro',
                                  'operation': 'history',
                                  'summary': 'Get indicator history',
                                  'description': 'Historical data for macro indicator.',
                                  'methodology_doc': 'methodology/data.md#macro-indicators',
                                  'params': [{'name': 'identifier',
                                              'type': 'string',
                                              'required': True,
                                              'description': 'TepiloraCode or ISIN'},
                                             {'name': 'start_date',
                                              'type': 'string',
                                              'required': False,
                                              'description': 'Start date (YYYY-MM-DD)'},
                                             {'name': 'end_date',
                                              'type': 'string',
                                              'required': False,
                                              'description': 'End date (YYYY-MM-DD)'},
                                             {'name': 'limit',
                                              'type': 'int',
                                              'required': False,
                                              'description': 'Maximum results',
                                              'default': 1000},
                                             {'name': 'format',
                                              'type': 'string',
                                              'required': False,
                                              'description': 'Output format: dict|df|arrow|parquet',
                                              'default': 'dict'}],
                                  'required_params': ['identifier'],
                                  'optional_params': ['start_date', 'end_date', 'limit', 'format'],
                                  'credits': 1,
                                  'tags': ['Macro'],
                                  'deprecated': False,
                                  'internal': False,
                                  'supports_format': True},
                'macro.indicators': {'action': 'macro.indicators',
                                     'category': 'macro',
                                     'operation': 'indicators',
                                     'summary': 'List indicators',
                                     'description': 'List available macro indicators.',
                                     'methodology_doc': '',
                                     'params': [{'name': 'country',
                                                 'type': 'string',
                                                 'required': False,
                                                 'description': 'Filter by country'},
                                                {'name': 'macro_area',
                                                 'type': 'string',
                                                 'required': False,
                                                 'description': 'Filter by area'},
                                                {'name': 'limit',
                                                 'type': 'int',
                                                 'required': False,
                                                 'description': 'Maximum results',
                                                 'default': 100},
                                                {'name': 'format',
                                                 'type': 'string',
                                                 'required': False,
                                                 'description': 'Output format: dict|df|arrow|parquet',
                                                 'default': 'dict'}],
                                     'required_params': [],
                                     'optional_params': ['country', 'macro_area', 'limit', 'format'],
                                     'credits': 1,
                                     'tags': ['Macro'],
                                     'deprecated': False,
                                     'internal': False,
                                     'supports_format': True},
                'macro.latest': {'action': 'macro.latest',
                                 'category': 'macro',
                                 'operation': 'latest',
                                 'summary': 'Get latest values',
                                 'description': 'Most recent indicator values.',
                                 'methodology_doc': '',
                                 'params': [{'name': 'identifier',
                                             'type': 'string',
                                             'required': False,
                                             'description': 'TepiloraCode or ISIN'},
                                            {'name': 'country',
                                             'type': 'string',
                                             'required': False,
                                             'description': 'Filter by country'},
                                            {'name': 'limit',
                                             'type': 'int',
                                             'required': False,
                                             'description': 'Maximum results',
                                             'default': 50},
                                            {'name': 'format',
                                             'type': 'string',
                                             'required': False,
                                             'description': 'Output format: dict|df|arrow|parquet',
                                             'default': 'dict'}],
                                 'required_params': [],
                                 'optional_params': ['identifier', 'country', 'limit', 'format'],
                                 'credits': 1,
                                 'tags': ['Macro'],
                                 'deprecated': False,
                                 'internal': False,
                                 'supports_format': True},
                'macro.search': {'action': 'macro.search',
                                 'category': 'macro',
                                 'operation': 'search',
                                 'summary': 'Search indicators',
                                 'description': 'Search macro indicators by name.',
                                 'methodology_doc': '',
                                 'params': [{'name': 'query',
                                             'type': 'string',
                                             'required': True,
                                             'description': 'Search query'},
                                            {'name': 'country',
                                             'type': 'string',
                                             'required': False,
                                             'description': 'Filter by country'},
                                            {'name': 'limit',
                                             'type': 'int',
                                             'required': False,
                                             'description': 'Maximum results',
                                             'default': 50},
                                            {'name': 'format',
                                             'type': 'string',
                                             'required': False,
                                             'description': 'Output format: dict|df|arrow|parquet',
                                             'default': 'dict'}],
                                 'required_params': ['query'],
                                 'optional_params': ['country', 'limit', 'format'],
                                 'credits': 1,
                                 'tags': ['Macro', 'Search'],
                                 'deprecated': False,
                                 'internal': False,
                                 'supports_format': True},
                'news.details': {'action': 'news.details',
                                 'category': 'news',
                                 'operation': 'details',
                                 'summary': 'Get article details',
                                 'description': 'Full article content by URL.',
                                 'methodology_doc': '',
                                 'params': [{'name': 'url',
                                             'type': 'string',
                                             'required': True,
                                             'description': 'Article URL'}],
                                 'required_params': ['url'],
                                 'optional_params': [],
                                 'credits': 1,
                                 'tags': ['News'],
                                 'deprecated': False,
                                 'internal': False,
                                 'supports_format': False},
                'news.facets': {'action': 'news.facets',
                                'category': 'news',
                                'operation': 'facets',
                                'summary': 'Get news facets',
                                'description': 'Available sources and topics.',
                                'methodology_doc': '',
                                'params': [{'name': 'filters',
                                            'type': 'dict',
                                            'required': False,
                                            'description': 'Pre-filter'}],
                                'required_params': [],
                                'optional_params': ['filters'],
                                'credits': 1,
                                'tags': ['News'],
                                'deprecated': False,
                                'internal': False,
                                'supports_format': False},
                'news.latest': {'action': 'news.latest',
                                'category': 'news',
                                'operation': 'latest',
                                'summary': 'Get latest news',
                                'description': 'Most recent articles.',
                                'methodology_doc': '',
                                'params': [{'name': 'limit',
                                            'type': 'int',
                                            'required': False,
                                            'description': 'Maximum results',
                                            'default': 20},
                                           {'name': 'filters',
                                            'type': 'dict',
                                            'required': False,
                                            'description': 'Source/topic filters'},
                                           {'name': 'format',
                                            'type': 'string',
                                            'required': False,
                                            'description': 'Output format: dict|df|arrow|parquet',
                                            'default': 'dict'}],
                                'required_params': [],
                                'optional_params': ['limit', 'filters', 'format'],
                                'credits': 1,
                                'tags': ['News'],
                                'deprecated': False,
                                'internal': False,
                                'supports_format': True},
                'news.search': {'action': 'news.search',
                                'category': 'news',
                                'operation': 'search',
                                'summary': 'Search news articles',
                                'description': 'Full-text search in news articles.',
                                'methodology_doc': '',
                                'params': [{'name': 'query',
                                            'type': 'string',
                                            'required': True,
                                            'description': 'Search query'},
                                           {'name': 'limit',
                                            'type': 'int',
                                            'required': False,
                                            'description': 'Maximum results',
                                            'default': 20},
                                           {'name': 'start_date',
                                            'type': 'string',
                                            'required': False,
                                            'description': 'Start date (YYYY-MM-DD)'},
                                           {'name': 'end_date',
                                            'type': 'string',
                                            'required': False,
                                            'description': 'End date (YYYY-MM-DD)'},
                                           {'name': 'filters',
                                            'type': 'dict',
                                            'required': False,
                                            'description': 'Source/topic filters'},
                                           {'name': 'format',
                                            'type': 'string',
                                            'required': False,
                                            'description': 'Output format: dict|df|arrow|parquet',
                                            'default': 'dict'}],
                                'required_params': ['query'],
                                'optional_params': ['limit', 'start_date', 'end_date', 'filters', 'format'],
                                'credits': 1,
                                'tags': ['News', 'Search'],
                                'deprecated': False,
                                'internal': False,
                                'supports_format': True},
                'news.trending': {'action': 'news.trending',
                                  'category': 'news',
                                  'operation': 'trending',
                                  'summary': 'Get trending terms',
                                  'description': 'Currently trending topics and entities.',
                                  'methodology_doc': '',
                                  'params': [{'name': 'limit',
                                              'type': 'int',
                                              'required': False,
                                              'description': 'Maximum results',
                                              'default': 50},
                                             {'name': 'term_type',
                                              'type': 'string',
                                              'required': False,
                                              'description': 'all|entity|keyword',
                                              'default': 'all'},
                                             {'name': 'finance_only',
                                              'type': 'bool',
                                              'required': False,
                                              'description': 'Finance terms only',
                                              'default': False},
                                             {'name': 'min_velocity',
                                              'type': 'float',
                                              'required': False,
                                              'description': 'Minimum velocity threshold'},
                                             {'name': 'format',
                                              'type': 'string',
                                              'required': False,
                                              'description': 'Output format: dict|df|arrow|parquet',
                                              'default': 'dict'}],
                                  'required_params': [],
                                  'optional_params': ['limit', 'term_type', 'finance_only', 'min_velocity', 'format'],
                                  'credits': 1,
                                  'tags': ['News', 'Trending'],
                                  'deprecated': False,
                                  'internal': False,
                                  'supports_format': True},
                'news.trending_compare': {'action': 'news.trending_compare',
                                          'category': 'news',
                                          'operation': 'trending_compare',
                                          'summary': 'Compare trending terms',
                                          'description': 'Compare multiple terms over time.',
                                          'methodology_doc': '',
                                          'params': [{'name': 'terms',
                                                      'type': 'list',
                                                      'required': True,
                                                      'description': 'Terms to compare'},
                                                     {'name': 'start_date',
                                                      'type': 'string',
                                                      'required': False,
                                                      'description': 'Start date (YYYY-MM-DD)'},
                                                     {'name': 'end_date',
                                                      'type': 'string',
                                                      'required': False,
                                                      'description': 'End date (YYYY-MM-DD)'},
                                                     {'name': 'format',
                                                      'type': 'string',
                                                      'required': False,
                                                      'description': 'Output format: dict|df|arrow|parquet',
                                                      'default': 'dict'}],
                                          'required_params': ['terms'],
                                          'optional_params': ['start_date', 'end_date', 'format'],
                                          'credits': 1,
                                          'tags': ['News', 'Trending'],
                                          'deprecated': False,
                                          'internal': False,
                                          'supports_format': True},
                'news.trending_history': {'action': 'news.trending_history',
                                          'category': 'news',
                                          'operation': 'trending_history',
                                          'summary': 'Get trending history',
                                          'description': 'Historical trending data for a term.',
                                          'methodology_doc': '',
                                          'params': [{'name': 'term',
                                                      'type': 'string',
                                                      'required': True,
                                                      'description': 'Term to track'},
                                                     {'name': 'start_date',
                                                      'type': 'string',
                                                      'required': False,
                                                      'description': 'Start date (YYYY-MM-DD)'},
                                                     {'name': 'end_date',
                                                      'type': 'string',
                                                      'required': False,
                                                      'description': 'End date (YYYY-MM-DD)'},
                                                     {'name': 'format',
                                                      'type': 'string',
                                                      'required': False,
                                                      'description': 'Output format: dict|df|arrow|parquet',
                                                      'default': 'dict'}],
                                          'required_params': ['term'],
                                          'optional_params': ['start_date', 'end_date', 'format'],
                                          'credits': 1,
                                          'tags': ['News', 'Trending'],
                                          'deprecated': False,
                                          'internal': False,
                                          'supports_format': True},
                'options.greeks': {'action': 'options.greeks',
                                   'category': 'options',
                                   'operation': 'greeks',
                                   'summary': 'Calculate Greeks',
                                   'description': 'Delta, gamma, theta, vega, rho.',
                                   'methodology_doc': 'methodology/options.md#greeks',
                                   'params': [{'name': 'spot',
                                               'type': 'float',
                                               'required': True,
                                               'description': 'Underlying price'},
                                              {'name': 'strike',
                                               'type': 'float',
                                               'required': True,
                                               'description': 'Strike price'},
                                              {'name': 'time_to_expiry',
                                               'type': 'float',
                                               'required': True,
                                               'description': 'Time to expiry (years)'},
                                              {'name': 'risk_free_rate',
                                               'type': 'float',
                                               'required': False,
                                               'description': 'Risk-free rate',
                                               'default': 0.03},
                                              {'name': 'volatility',
                                               'type': 'float',
                                               'required': True,
                                               'description': 'Volatility'},
                                              {'name': 'option_type',
                                               'type': 'string',
                                               'required': False,
                                               'description': 'call|put',
                                               'default': 'call'},
                                              {'name': 'dividend_yield',
                                               'type': 'float',
                                               'required': False,
                                               'description': 'Dividend yield',
                                               'default': 0.0}],
                                   'required_params': ['spot', 'strike', 'time_to_expiry', 'volatility'],
                                   'optional_params': ['risk_free_rate', 'option_type', 'dividend_yield'],
                                   'credits': 1,
                                   'tags': ['Options'],
                                   'deprecated': False,
                                   'internal': False,
                                   'supports_format': False},
                'options.iv': {'action': 'options.iv',
                               'category': 'options',
                               'operation': 'iv',
                               'summary': 'Implied volatility',
                               'description': 'Calculate implied volatility from price.',
                               'methodology_doc': 'methodology/options.md#implied-volatility',
                               'params': [{'name': 'market_price',
                                           'type': 'float',
                                           'required': True,
                                           'description': 'Option market price'},
                                          {'name': 'spot',
                                           'type': 'float',
                                           'required': True,
                                           'description': 'Underlying price'},
                                          {'name': 'strike',
                                           'type': 'float',
                                           'required': True,
                                           'description': 'Strike price'},
                                          {'name': 'time_to_expiry',
                                           'type': 'float',
                                           'required': True,
                                           'description': 'Time to expiry (years)'},
                                          {'name': 'risk_free_rate',
                                           'type': 'float',
                                           'required': False,
                                           'description': 'Risk-free rate',
                                           'default': 0.03},
                                          {'name': 'option_type',
                                           'type': 'string',
                                           'required': False,
                                           'description': 'call|put',
                                           'default': 'call'},
                                          {'name': 'dividend_yield',
                                           'type': 'float',
                                           'required': False,
                                           'description': 'Dividend yield',
                                           'default': 0.0}],
                               'required_params': ['market_price', 'spot', 'strike', 'time_to_expiry'],
                               'optional_params': ['risk_free_rate', 'option_type', 'dividend_yield'],
                               'credits': 1,
                               'tags': ['Options'],
                               'deprecated': False,
                               'internal': False,
                               'supports_format': False},
                'options.payoff': {'action': 'options.payoff',
                                   'category': 'options',
                                   'operation': 'payoff',
                                   'summary': 'Calculate payoff',
                                   'description': 'Calculate payoff at expiry.',
                                   'methodology_doc': '',
                                   'params': [{'name': 'legs',
                                               'type': 'list',
                                               'required': True,
                                               'description': 'Strategy legs'},
                                              {'name': 'spot_range',
                                               'type': 'list',
                                               'required': False,
                                               'description': 'Spot price range [min, max]'},
                                              {'name': 'spot',
                                               'type': 'float',
                                               'required': False,
                                               'description': 'Current spot price'}],
                                   'required_params': ['legs'],
                                   'optional_params': ['spot_range', 'spot'],
                                   'credits': 1,
                                   'tags': ['Options'],
                                   'deprecated': False,
                                   'internal': False,
                                   'supports_format': False},
                'options.price': {'action': 'options.price',
                                  'category': 'options',
                                  'operation': 'price',
                                  'summary': 'Price option',
                                  'description': 'Calculate option price using Black-Scholes.',
                                  'methodology_doc': 'methodology/options.md#black-scholes',
                                  'params': [{'name': 'spot',
                                              'type': 'float',
                                              'required': True,
                                              'description': 'Underlying price'},
                                             {'name': 'strike',
                                              'type': 'float',
                                              'required': True,
                                              'description': 'Strike price'},
                                             {'name': 'time_to_expiry',
                                              'type': 'float',
                                              'required': True,
                                              'description': 'Time to expiry (years)'},
                                             {'name': 'risk_free_rate',
                                              'type': 'float',
                                              'required': False,
                                              'description': 'Risk-free rate',
                                              'default': 0.03},
                                             {'name': 'volatility',
                                              'type': 'float',
                                              'required': True,
                                              'description': 'Volatility'},
                                             {'name': 'option_type',
                                              'type': 'string',
                                              'required': False,
                                              'description': 'call|put',
                                              'default': 'call'},
                                             {'name': 'dividend_yield',
                                              'type': 'float',
                                              'required': False,
                                              'description': 'Dividend yield',
                                              'default': 0.0}],
                                  'required_params': ['spot', 'strike', 'time_to_expiry', 'volatility'],
                                  'optional_params': ['risk_free_rate', 'option_type', 'dividend_yield'],
                                  'credits': 1,
                                  'tags': ['Options'],
                                  'deprecated': False,
                                  'internal': False,
                                  'supports_format': False},
                'options.pricing': {'action': 'options.pricing',
                                    'category': 'options',
                                    'operation': 'pricing',
                                    'summary': 'Price option (alias of options.price)',
                                    'description': 'Alias for options.price. Use options.price instead.',
                                    'methodology_doc': '',
                                    'params': [{'name': 'spot',
                                                'type': 'float',
                                                'required': True,
                                                'description': 'Underlying price'},
                                               {'name': 'strike',
                                                'type': 'float',
                                                'required': True,
                                                'description': 'Strike price'},
                                               {'name': 'time_to_expiry',
                                                'type': 'float',
                                                'required': True,
                                                'description': 'Time to expiry (years)'},
                                               {'name': 'volatility',
                                                'type': 'float',
                                                'required': True,
                                                'description': 'Volatility'}],
                                    'required_params': ['spot', 'strike', 'time_to_expiry', 'volatility'],
                                    'optional_params': [],
                                    'credits': 1,
                                    'tags': ['Options'],
                                    'deprecated': True,
                                    'internal': False,
                                    'supports_format': False},
                'options.strategies': {'action': 'options.strategies',
                                       'category': 'options',
                                       'operation': 'strategies',
                                       'summary': 'List strategies',
                                       'description': 'List predefined option strategies.',
                                       'methodology_doc': '',
                                       'params': [],
                                       'required_params': [],
                                       'optional_params': [],
                                       'credits': 1,
                                       'tags': ['Options'],
                                       'deprecated': False,
                                       'internal': False,
                                       'supports_format': False},
                'options.strategy': {'action': 'options.strategy',
                                     'category': 'options',
                                     'operation': 'strategy',
                                     'summary': 'Price strategy',
                                     'description': 'Price multi-leg option strategy.',
                                     'methodology_doc': '',
                                     'params': [{'name': 'strategy_type',
                                                 'type': 'string',
                                                 'required': True,
                                                 'description': 'Strategy type'},
                                                {'name': 'legs',
                                                 'type': 'list',
                                                 'required': False,
                                                 'description': 'Strategy legs (for custom)'},
                                                {'name': 'spot',
                                                 'type': 'float',
                                                 'required': True,
                                                 'description': 'Underlying price'},
                                                {'name': 'volatility',
                                                 'type': 'float',
                                                 'required': False,
                                                 'description': 'Volatility'},
                                                {'name': 'time_to_expiry',
                                                 'type': 'float',
                                                 'required': False,
                                                 'description': 'Time to expiry'},
                                                {'name': 'risk_free_rate',
                                                 'type': 'float',
                                                 'required': False,
                                                 'description': 'Risk-free rate',
                                                 'default': 0.03}],
                                     'required_params': ['strategy_type', 'spot'],
                                     'optional_params': ['legs', 'volatility', 'time_to_expiry', 'risk_free_rate'],
                                     'credits': 1,
                                     'tags': ['Options'],
                                     'deprecated': False,
                                     'internal': False,
                                     'supports_format': False},
                'portfolio.attribution': {'action': 'portfolio.attribution',
                                          'category': 'portfolio',
                                          'operation': 'attribution',
                                          'summary': 'Performance attribution',
                                          'description': 'Brinson attribution analysis.',
                                          'methodology_doc': 'methodology/attribution.md#brinson',
                                          'params': [{'name': 'id',
                                                      'type': 'string',
                                                      'required': True,
                                                      'description': 'Portfolio ID'},
                                                     {'name': 'start_date',
                                                      'type': 'string',
                                                      'required': False,
                                                      'description': 'Start date (YYYY-MM-DD)'},
                                                     {'name': 'end_date',
                                                      'type': 'string',
                                                      'required': False,
                                                      'description': 'End date (YYYY-MM-DD)'},
                                                     {'name': 'format',
                                                      'type': 'string',
                                                      'required': False,
                                                      'description': 'Output format: dict|df|arrow|parquet',
                                                      'default': 'dict'}],
                                          'required_params': ['id'],
                                          'optional_params': ['start_date', 'end_date', 'format'],
                                          'credits': 1,
                                          'tags': ['Portfolio', 'Attribution'],
                                          'deprecated': False,
                                          'internal': False,
                                          'supports_format': True},
                'portfolio.compare': {'action': 'portfolio.compare',
                                      'category': 'portfolio',
                                      'operation': 'compare',
                                      'summary': 'Compare portfolios',
                                      'description': 'Compare multiple portfolios.',
                                      'methodology_doc': '',
                                      'params': [{'name': 'portfolio_ids',
                                                  'type': 'list',
                                                  'required': True,
                                                  'description': 'Portfolio IDs to compare'},
                                                 {'name': 'start_date',
                                                  'type': 'string',
                                                  'required': False,
                                                  'description': 'Start date (YYYY-MM-DD)'},
                                                 {'name': 'end_date',
                                                  'type': 'string',
                                                  'required': False,
                                                  'description': 'End date (YYYY-MM-DD)'},
                                                 {'name': 'format',
                                                  'type': 'string',
                                                  'required': False,
                                                  'description': 'Output format: dict|df|arrow|parquet',
                                                  'default': 'dict'}],
                                      'required_params': ['portfolio_ids'],
                                      'optional_params': ['start_date', 'end_date', 'format'],
                                      'credits': 1,
                                      'tags': ['Portfolio', 'Analytics'],
                                      'deprecated': False,
                                      'internal': False,
                                      'supports_format': True},
                'portfolio.contribution': {'action': 'portfolio.contribution',
                                           'category': 'portfolio',
                                           'operation': 'contribution',
                                           'summary': 'Return contribution',
                                           'description': 'Contribution of each holding to portfolio return.',
                                           'methodology_doc': 'methodology/attribution.md#contribution',
                                           'params': [{'name': 'id',
                                                       'type': 'string',
                                                       'required': True,
                                                       'description': 'Portfolio ID'},
                                                      {'name': 'start_date',
                                                       'type': 'string',
                                                       'required': False,
                                                       'description': 'Start date (YYYY-MM-DD)'},
                                                      {'name': 'end_date',
                                                       'type': 'string',
                                                       'required': False,
                                                       'description': 'End date (YYYY-MM-DD)'},
                                                      {'name': 'format',
                                                       'type': 'string',
                                                       'required': False,
                                                       'description': 'Output format: dict|df|arrow|parquet',
                                                       'default': 'dict'}],
                                           'required_params': ['id'],
                                           'optional_params': ['start_date', 'end_date', 'format'],
                                           'credits': 1,
                                           'tags': ['Portfolio', 'Attribution'],
                                           'deprecated': False,
                                           'internal': False,
                                           'supports_format': True},
                'portfolio.costs': {'action': 'portfolio.costs',
                                    'category': 'portfolio',
                                    'operation': 'costs',
                                    'summary': 'Portfolio costs',
                                    'description': 'TER and trading costs analysis.',
                                    'methodology_doc': '',
                                    'params': [{'name': 'id',
                                                'type': 'string',
                                                'required': True,
                                                'description': 'Portfolio ID'},
                                               {'name': 'format',
                                                'type': 'string',
                                                'required': False,
                                                'description': 'Output format: dict|df|arrow|parquet',
                                                'default': 'dict'}],
                                    'required_params': ['id'],
                                    'optional_params': ['format'],
                                    'credits': 1,
                                    'tags': ['Portfolio'],
                                    'deprecated': False,
                                    'internal': False,
                                    'supports_format': True},
                'portfolio.create': {'action': 'portfolio.create',
                                     'category': 'portfolio',
                                     'operation': 'create',
                                     'summary': 'Create portfolio',
                                     'description': 'Create a new portfolio.',
                                     'methodology_doc': '',
                                     'params': [{'name': 'name',
                                                 'type': 'string',
                                                 'required': True,
                                                 'description': 'Portfolio name'},
                                                {'name': 'input_type',
                                                 'type': 'string',
                                                 'required': True,
                                                 'description': 'fixed_weights|drifting_weights|holdings|values|trades'},
                                                {'name': 'portfolio_type',
                                                 'type': 'string',
                                                 'required': False,
                                                 'description': 'Real|Suggested|Simulation|Backtest|Model',
                                                 'default': 'Real'},
                                                {'name': 'input_data',
                                                 'type': 'dict',
                                                 'required': False,
                                                 'description': 'Holdings/weights data'},
                                                {'name': 'benchmark',
                                                 'type': 'string',
                                                 'required': False,
                                                 'description': 'Benchmark TepiloraCode'},
                                                {'name': 'description',
                                                 'type': 'string',
                                                 'required': False,
                                                 'description': 'Description',
                                                 'default': ''},
                                                {'name': 'settings',
                                                 'type': 'dict',
                                                 'required': False,
                                                 'description': 'Portfolio settings'}],
                                     'required_params': ['name', 'input_type'],
                                     'optional_params': ['portfolio_type',
                                                         'input_data',
                                                         'benchmark',
                                                         'description',
                                                         'settings'],
                                     'credits': 1,
                                     'tags': ['Portfolio', 'CRUD'],
                                     'deprecated': False,
                                     'internal': False,
                                     'supports_format': False},
                'portfolio.delete': {'action': 'portfolio.delete',
                                     'category': 'portfolio',
                                     'operation': 'delete',
                                     'summary': 'Delete portfolio',
                                     'description': 'Delete portfolio.',
                                     'methodology_doc': '',
                                     'params': [{'name': 'id',
                                                 'type': 'string',
                                                 'required': True,
                                                 'description': 'Portfolio ID'}],
                                     'required_params': ['id'],
                                     'optional_params': [],
                                     'credits': 1,
                                     'tags': ['Portfolio', 'CRUD'],
                                     'deprecated': False,
                                     'internal': False,
                                     'supports_format': False},
                'portfolio.drift': {'action': 'portfolio.drift',
                                    'category': 'portfolio',
                                    'operation': 'drift',
                                    'summary': 'Portfolio drift',
                                    'description': 'Weight drift from target.',
                                    'methodology_doc': '',
                                    'params': [{'name': 'id',
                                                'type': 'string',
                                                'required': True,
                                                'description': 'Portfolio ID'},
                                               {'name': 'format',
                                                'type': 'string',
                                                'required': False,
                                                'description': 'Output format: dict|df|arrow|parquet',
                                                'default': 'dict'}],
                                    'required_params': ['id'],
                                    'optional_params': ['format'],
                                    'credits': 1,
                                    'tags': ['Portfolio'],
                                    'deprecated': False,
                                    'internal': False,
                                    'supports_format': True},
                'portfolio.exposure': {'action': 'portfolio.exposure',
                                       'category': 'portfolio',
                                       'operation': 'exposure',
                                       'summary': 'Portfolio exposure',
                                       'description': 'Exposure by sector, country, currency, etc.',
                                       'methodology_doc': '',
                                       'params': [{'name': 'id',
                                                   'type': 'string',
                                                   'required': True,
                                                   'description': 'Portfolio ID'},
                                                  {'name': 'dimension',
                                                   'type': 'string',
                                                   'required': False,
                                                   'description': 'sector|country|currency|asset_class',
                                                   'default': 'sector'},
                                                  {'name': 'format',
                                                   'type': 'string',
                                                   'required': False,
                                                   'description': 'Output format: dict|df|arrow|parquet',
                                                   'default': 'dict'}],
                                       'required_params': ['id'],
                                       'optional_params': ['dimension', 'format'],
                                       'credits': 1,
                                       'tags': ['Portfolio', 'Analytics'],
                                       'deprecated': False,
                                       'internal': False,
                                       'supports_format': True},
                'portfolio.get': {'action': 'portfolio.get',
                                  'category': 'portfolio',
                                  'operation': 'get',
                                  'summary': 'Get portfolio',
                                  'description': 'Get portfolio details.',
                                  'methodology_doc': '',
                                  'params': [{'name': 'id',
                                              'type': 'string',
                                              'required': True,
                                              'description': 'Portfolio ID'}],
                                  'required_params': ['id'],
                                  'optional_params': [],
                                  'credits': 1,
                                  'tags': ['Portfolio', 'CRUD'],
                                  'deprecated': False,
                                  'internal': False,
                                  'supports_format': False},
                'portfolio.list': {'action': 'portfolio.list',
                                   'category': 'portfolio',
                                   'operation': 'list',
                                   'summary': 'List portfolios',
                                   'description': "List user's portfolios.",
                                   'methodology_doc': '',
                                   'params': [{'name': 'portfolio_type',
                                               'type': 'string',
                                               'required': False,
                                               'description': 'Filter by type'},
                                              {'name': 'input_type',
                                               'type': 'string',
                                               'required': False,
                                               'description': 'Filter by input type'},
                                              {'name': 'search',
                                               'type': 'string',
                                               'required': False,
                                               'description': 'Search in name'},
                                              {'name': 'limit',
                                               'type': 'int',
                                               'required': False,
                                               'description': 'Maximum results',
                                               'default': 50},
                                              {'name': 'offset',
                                               'type': 'int',
                                               'required': False,
                                               'description': 'Pagination offset',
                                               'default': 0},
                                              {'name': 'include_shared',
                                               'type': 'bool',
                                               'required': False,
                                               'description': 'Include shared portfolios',
                                               'default': True}],
                                   'required_params': [],
                                   'optional_params': ['portfolio_type',
                                                       'input_type',
                                                       'search',
                                                       'limit',
                                                       'offset',
                                                       'include_shared'],
                                   'credits': 1,
                                   'tags': ['Portfolio', 'CRUD'],
                                   'deprecated': False,
                                   'internal': False,
                                   'supports_format': False},
                'portfolio.optimize': {'action': 'portfolio.optimize',
                                       'category': 'portfolio',
                                       'operation': 'optimize',
                                       'summary': 'Optimize portfolio',
                                       'description': 'Portfolio optimization (Julia backend).',
                                       'methodology_doc': 'methodology/optimization.md',
                                       'params': [{'name': 'id',
                                                   'type': 'string',
                                                   'required': True,
                                                   'description': 'Portfolio ID'},
                                                  {'name': 'objective',
                                                   'type': 'string',
                                                   'required': False,
                                                   'description': 'Optimization objective',
                                                   'default': 'max_sharpe'},
                                                  {'name': 'constraints',
                                                   'type': 'dict',
                                                   'required': False,
                                                   'description': 'Constraints'},
                                                  {'name': 'settings',
                                                   'type': 'dict',
                                                   'required': False,
                                                   'description': 'Optimizer settings'}],
                                       'required_params': ['id'],
                                       'optional_params': ['objective', 'constraints', 'settings'],
                                       'credits': 1,
                                       'tags': ['Portfolio', 'Optimization'],
                                       'deprecated': False,
                                       'internal': False,
                                       'supports_format': False},
                'portfolio.rebalance': {'action': 'portfolio.rebalance',
                                        'category': 'portfolio',
                                        'operation': 'rebalance',
                                        'summary': 'Rebalance portfolio',
                                        'description': 'Calculate rebalancing trades.',
                                        'methodology_doc': '',
                                        'params': [{'name': 'id',
                                                    'type': 'string',
                                                    'required': True,
                                                    'description': 'Portfolio ID'},
                                                   {'name': 'target_weights',
                                                    'type': 'dict',
                                                    'required': False,
                                                    'description': 'Target weights'},
                                                   {'name': 'format',
                                                    'type': 'string',
                                                    'required': False,
                                                    'description': 'Output format: dict|df|arrow|parquet',
                                                    'default': 'dict'}],
                                        'required_params': ['id'],
                                        'optional_params': ['target_weights', 'format'],
                                        'credits': 1,
                                        'tags': ['Portfolio'],
                                        'deprecated': False,
                                        'internal': False,
                                        'supports_format': True},
                'portfolio.returns': {'action': 'portfolio.returns',
                                      'category': 'portfolio',
                                      'operation': 'returns',
                                      'summary': 'Get portfolio returns',
                                      'description': 'Time series of portfolio returns.',
                                      'methodology_doc': 'methodology/returns.md#portfolio-returns',
                                      'params': [{'name': 'id',
                                                  'type': 'string',
                                                  'required': True,
                                                  'description': 'Portfolio ID'},
                                                 {'name': 'start_date',
                                                  'type': 'string',
                                                  'required': False,
                                                  'description': 'Start date (YYYY-MM-DD)'},
                                                 {'name': 'end_date',
                                                  'type': 'string',
                                                  'required': False,
                                                  'description': 'End date (YYYY-MM-DD)'},
                                                 {'name': 'return_method',
                                                  'type': 'string',
                                                  'required': False,
                                                  'description': 'twr|mwr|modified_dietz',
                                                  'default': 'twr'},
                                                 {'name': 'format',
                                                  'type': 'string',
                                                  'required': False,
                                                  'description': 'Output format: dict|df|arrow|parquet',
                                                  'default': 'dict'}],
                                      'required_params': ['id'],
                                      'optional_params': ['start_date', 'end_date', 'return_method', 'format'],
                                      'credits': 1,
                                      'tags': ['Portfolio', 'Analytics'],
                                      'deprecated': False,
                                      'internal': False,
                                      'supports_format': True},
                'portfolio.share': {'action': 'portfolio.share',
                                    'category': 'portfolio',
                                    'operation': 'share',
                                    'summary': 'Share portfolio',
                                    'description': 'Share portfolio with another user.',
                                    'methodology_doc': '',
                                    'params': [{'name': 'id',
                                                'type': 'string',
                                                'required': True,
                                                'description': 'Portfolio ID'},
                                               {'name': 'target_apikey',
                                                'type': 'string',
                                                'required': True,
                                                'description': 'Target user apikey'},
                                               {'name': 'permission',
                                                'type': 'string',
                                                'required': False,
                                                'description': 'read|write',
                                                'default': 'read'}],
                                    'required_params': ['id', 'target_apikey'],
                                    'optional_params': ['permission'],
                                    'credits': 1,
                                    'tags': ['Portfolio', 'Sharing'],
                                    'deprecated': False,
                                    'internal': False,
                                    'supports_format': False},
                'portfolio.shares': {'action': 'portfolio.shares',
                                     'category': 'portfolio',
                                     'operation': 'shares',
                                     'summary': 'List shares',
                                     'description': 'List users with access to portfolio.',
                                     'methodology_doc': '',
                                     'params': [{'name': 'id',
                                                 'type': 'string',
                                                 'required': True,
                                                 'description': 'Portfolio ID'}],
                                     'required_params': ['id'],
                                     'optional_params': [],
                                     'credits': 1,
                                     'tags': ['Portfolio', 'Sharing'],
                                     'deprecated': False,
                                     'internal': False,
                                     'supports_format': False},
                'portfolio.stress': {'action': 'portfolio.stress',
                                     'category': 'portfolio',
                                     'operation': 'stress',
                                     'summary': 'Stress test',
                                     'description': 'Portfolio stress testing.',
                                     'methodology_doc': 'methodology/risk.md#stress-testing',
                                     'params': [{'name': 'id',
                                                 'type': 'string',
                                                 'required': True,
                                                 'description': 'Portfolio ID'},
                                                {'name': 'scenarios',
                                                 'type': 'list',
                                                 'required': False,
                                                 'description': 'Custom scenarios'}],
                                     'required_params': ['id'],
                                     'optional_params': ['scenarios'],
                                     'credits': 1,
                                     'tags': ['Portfolio', 'Risk'],
                                     'deprecated': False,
                                     'internal': False,
                                     'supports_format': False},
                'portfolio.tearsheet': {'action': 'portfolio.tearsheet',
                                        'category': 'portfolio',
                                        'operation': 'tearsheet',
                                        'summary': 'Portfolio tearsheet',
                                        'description': 'Comprehensive portfolio report.',
                                        'methodology_doc': '',
                                        'params': [{'name': 'id',
                                                    'type': 'string',
                                                    'required': True,
                                                    'description': 'Portfolio ID'},
                                                   {'name': 'start_date',
                                                    'type': 'string',
                                                    'required': False,
                                                    'description': 'Start date (YYYY-MM-DD)'},
                                                   {'name': 'end_date',
                                                    'type': 'string',
                                                    'required': False,
                                                    'description': 'End date (YYYY-MM-DD)'}],
                                        'required_params': ['id'],
                                        'optional_params': ['start_date', 'end_date'],
                                        'credits': 1,
                                        'tags': ['Portfolio', 'Report'],
                                        'deprecated': False,
                                        'internal': False,
                                        'supports_format': False},
                'portfolio.unshare': {'action': 'portfolio.unshare',
                                      'category': 'portfolio',
                                      'operation': 'unshare',
                                      'summary': 'Unshare portfolio',
                                      'description': 'Revoke portfolio sharing.',
                                      'methodology_doc': '',
                                      'params': [{'name': 'id',
                                                  'type': 'string',
                                                  'required': True,
                                                  'description': 'Portfolio ID'},
                                                 {'name': 'target_apikey',
                                                  'type': 'string',
                                                  'required': True,
                                                  'description': 'User to remove'}],
                                      'required_params': ['id', 'target_apikey'],
                                      'optional_params': [],
                                      'credits': 1,
                                      'tags': ['Portfolio', 'Sharing'],
                                      'deprecated': False,
                                      'internal': False,
                                      'supports_format': False},
                'portfolio.update': {'action': 'portfolio.update',
                                     'category': 'portfolio',
                                     'operation': 'update',
                                     'summary': 'Update portfolio',
                                     'description': 'Update portfolio details.',
                                     'methodology_doc': '',
                                     'params': [{'name': 'id',
                                                 'type': 'string',
                                                 'required': True,
                                                 'description': 'Portfolio ID'},
                                                {'name': 'name',
                                                 'type': 'string',
                                                 'required': False,
                                                 'description': 'New name'},
                                                {'name': 'input_data',
                                                 'type': 'dict',
                                                 'required': False,
                                                 'description': 'New holdings/weights'},
                                                {'name': 'benchmark',
                                                 'type': 'string',
                                                 'required': False,
                                                 'description': 'New benchmark'},
                                                {'name': 'description',
                                                 'type': 'string',
                                                 'required': False,
                                                 'description': 'New description'},
                                                {'name': 'settings',
                                                 'type': 'dict',
                                                 'required': False,
                                                 'description': 'New settings'}],
                                     'required_params': ['id'],
                                     'optional_params': ['name', 'input_data', 'benchmark', 'description', 'settings'],
                                     'credits': 1,
                                     'tags': ['Portfolio', 'CRUD'],
                                     'deprecated': False,
                                     'internal': False,
                                     'supports_format': False},
                'profiling.archive': {'action': 'profiling.archive',
                                      'category': 'profiling',
                                      'operation': 'archive',
                                      'summary': 'Archive profile',
                                      'description': '',
                                      'methodology_doc': '',
                                      'params': [{'name': 'profile_id',
                                                  'type': 'string',
                                                  'required': True,
                                                  'description': 'Profile ID'}],
                                      'required_params': ['profile_id'],
                                      'optional_params': [],
                                      'credits': 1,
                                      'tags': ['Profiling', 'MiFID'],
                                      'deprecated': False,
                                      'internal': False,
                                      'supports_format': False},
                'profiling.check_suitability': {'action': 'profiling.check_suitability',
                                                'category': 'profiling',
                                                'operation': 'check_suitability',
                                                'summary': 'Check suitability',
                                                'description': 'Check if portfolio is suitable for client profile.',
                                                'methodology_doc': '',
                                                'params': [{'name': 'client_id',
                                                            'type': 'string',
                                                            'required': True,
                                                            'description': 'Client ID'},
                                                           {'name': 'id',
                                                            'type': 'string',
                                                            'required': True,
                                                            'description': 'Portfolio ID'}],
                                                'required_params': ['client_id', 'id'],
                                                'optional_params': [],
                                                'credits': 1,
                                                'tags': ['Profiling', 'MiFID'],
                                                'deprecated': False,
                                                'internal': False,
                                                'supports_format': False},
                'profiling.convert_answers': {'action': 'profiling.convert_answers',
                                              'category': 'profiling',
                                              'operation': 'convert_answers',
                                              'summary': 'Convert answers to profile',
                                              'description': 'Calculate risk profile from answers.',
                                              'methodology_doc': '',
                                              'params': [{'name': 'answers',
                                                          'type': 'dict',
                                                          'required': True,
                                                          'description': 'Questionnaire answers'}],
                                              'required_params': ['answers'],
                                              'optional_params': [],
                                              'credits': 1,
                                              'tags': ['Profiling', 'MiFID'],
                                              'deprecated': False,
                                              'internal': False,
                                              'supports_format': False},
                'profiling.create_profile': {'action': 'profiling.create_profile',
                                             'category': 'profiling',
                                             'operation': 'create_profile',
                                             'summary': 'Create client profile',
                                             'description': '',
                                             'methodology_doc': '',
                                             'params': [{'name': 'client_id',
                                                         'type': 'string',
                                                         'required': True,
                                                         'description': 'Client ID'},
                                                        {'name': 'answers',
                                                         'type': 'dict',
                                                         'required': True,
                                                         'description': 'Questionnaire answers'}],
                                             'required_params': ['client_id', 'answers'],
                                             'optional_params': [],
                                             'credits': 1,
                                             'tags': ['Profiling', 'MiFID'],
                                             'deprecated': False,
                                             'internal': False,
                                             'supports_format': False},
                'profiling.get_current': {'action': 'profiling.get_current',
                                          'category': 'profiling',
                                          'operation': 'get_current',
                                          'summary': 'Get current profile',
                                          'description': "Get client's current active profile.",
                                          'methodology_doc': '',
                                          'params': [{'name': 'client_id',
                                                      'type': 'string',
                                                      'required': True,
                                                      'description': 'Client ID'}],
                                          'required_params': ['client_id'],
                                          'optional_params': [],
                                          'credits': 1,
                                          'tags': ['Profiling', 'MiFID'],
                                          'deprecated': False,
                                          'internal': False,
                                          'supports_format': False},
                'profiling.get_profile': {'action': 'profiling.get_profile',
                                          'category': 'profiling',
                                          'operation': 'get_profile',
                                          'summary': 'Get profile by ID',
                                          'description': '',
                                          'methodology_doc': '',
                                          'params': [{'name': 'profile_id',
                                                      'type': 'string',
                                                      'required': True,
                                                      'description': 'Profile ID'}],
                                          'required_params': ['profile_id'],
                                          'optional_params': [],
                                          'credits': 1,
                                          'tags': ['Profiling', 'MiFID'],
                                          'deprecated': False,
                                          'internal': False,
                                          'supports_format': False},
                'profiling.list': {'action': 'profiling.list',
                                   'category': 'profiling',
                                   'operation': 'list',
                                   'summary': 'List profiles',
                                   'description': 'List all profiles for a client.',
                                   'methodology_doc': '',
                                   'params': [{'name': 'client_id',
                                               'type': 'string',
                                               'required': True,
                                               'description': 'Client ID'},
                                              {'name': 'include_archived',
                                               'type': 'bool',
                                               'required': False,
                                               'description': 'Include archived',
                                               'default': False}],
                                   'required_params': ['client_id'],
                                   'optional_params': ['include_archived'],
                                   'credits': 1,
                                   'tags': ['Profiling', 'MiFID'],
                                   'deprecated': False,
                                   'internal': False,
                                   'supports_format': False},
                'profiling.questionnaire': {'action': 'profiling.questionnaire',
                                            'category': 'profiling',
                                            'operation': 'questionnaire',
                                            'summary': 'Get MiFID questionnaire',
                                            'description': 'Get questionnaire template.',
                                            'methodology_doc': '',
                                            'params': [{'name': 'version',
                                                        'type': 'string',
                                                        'required': False,
                                                        'description': 'Questionnaire version',
                                                        'default': 'latest'}],
                                            'required_params': [],
                                            'optional_params': ['version'],
                                            'credits': 1,
                                            'tags': ['Profiling', 'MiFID'],
                                            'deprecated': False,
                                            'internal': False,
                                            'supports_format': False},
                'profiling.update': {'action': 'profiling.update',
                                     'category': 'profiling',
                                     'operation': 'update',
                                     'summary': 'Update profile',
                                     'description': '',
                                     'methodology_doc': '',
                                     'params': [{'name': 'profile_id',
                                                 'type': 'string',
                                                 'required': True,
                                                 'description': 'Profile ID'},
                                                {'name': 'answers',
                                                 'type': 'dict',
                                                 'required': False,
                                                 'description': 'New answers'}],
                                     'required_params': ['profile_id'],
                                     'optional_params': ['answers'],
                                     'credits': 1,
                                     'tags': ['Profiling', 'MiFID'],
                                     'deprecated': False,
                                     'internal': False,
                                     'supports_format': False},
                'profiling.validate_answers': {'action': 'profiling.validate_answers',
                                               'category': 'profiling',
                                               'operation': 'validate_answers',
                                               'summary': 'Validate answers',
                                               'description': 'Validate questionnaire answers.',
                                               'methodology_doc': '',
                                               'params': [{'name': 'answers',
                                                           'type': 'dict',
                                                           'required': True,
                                                           'description': 'Questionnaire answers'}],
                                               'required_params': ['answers'],
                                               'optional_params': [],
                                               'credits': 1,
                                               'tags': ['Profiling', 'MiFID'],
                                               'deprecated': False,
                                               'internal': False,
                                               'supports_format': False},
                'publications.by_source': {'action': 'publications.by_source',
                                           'category': 'publications',
                                           'operation': 'by_source',
                                           'summary': 'Get publications by source',
                                           'description': 'Publications from a specific source.',
                                           'methodology_doc': '',
                                           'params': [{'name': 'source_news_id',
                                                       'type': 'string',
                                                       'required': True,
                                                       'description': 'Source news ID'},
                                                      {'name': 'limit',
                                                       'type': 'int',
                                                       'required': False,
                                                       'description': 'Maximum results',
                                                       'default': 50},
                                                      {'name': 'format',
                                                       'type': 'string',
                                                       'required': False,
                                                       'description': 'Output format: dict|df|arrow|parquet',
                                                       'default': 'dict'}],
                                           'required_params': ['source_news_id'],
                                           'optional_params': ['limit', 'format'],
                                           'credits': 1,
                                           'tags': ['Publications'],
                                           'deprecated': False,
                                           'internal': False,
                                           'supports_format': True},
                'publications.details': {'action': 'publications.details',
                                         'category': 'publications',
                                         'operation': 'details',
                                         'summary': 'Get publication details',
                                         'description': 'Full publication by ID.',
                                         'methodology_doc': '',
                                         'params': [{'name': 'doc_id',
                                                     'type': 'string',
                                                     'required': True,
                                                     'description': 'Document ID'}],
                                         'required_params': ['doc_id'],
                                         'optional_params': [],
                                         'credits': 1,
                                         'tags': ['Publications'],
                                         'deprecated': False,
                                         'internal': False,
                                         'supports_format': False},
                'publications.facets': {'action': 'publications.facets',
                                        'category': 'publications',
                                        'operation': 'facets',
                                        'summary': 'Get publication facets',
                                        'description': 'Available sources and types.',
                                        'methodology_doc': '',
                                        'params': [{'name': 'filters',
                                                    'type': 'dict',
                                                    'required': False,
                                                    'description': 'Pre-filter'}],
                                        'required_params': [],
                                        'optional_params': ['filters'],
                                        'credits': 1,
                                        'tags': ['Publications'],
                                        'deprecated': False,
                                        'internal': False,
                                        'supports_format': False},
                'publications.latest': {'action': 'publications.latest',
                                        'category': 'publications',
                                        'operation': 'latest',
                                        'summary': 'Get latest publications',
                                        'description': 'Most recent publications.',
                                        'methodology_doc': '',
                                        'params': [{'name': 'limit',
                                                    'type': 'int',
                                                    'required': False,
                                                    'description': 'Maximum results',
                                                    'default': 20},
                                                   {'name': 'filters',
                                                    'type': 'dict',
                                                    'required': False,
                                                    'description': 'Source/type filters'},
                                                   {'name': 'format',
                                                    'type': 'string',
                                                    'required': False,
                                                    'description': 'Output format: dict|df|arrow|parquet',
                                                    'default': 'dict'}],
                                        'required_params': [],
                                        'optional_params': ['limit', 'filters', 'format'],
                                        'credits': 1,
                                        'tags': ['Publications'],
                                        'deprecated': False,
                                        'internal': False,
                                        'supports_format': True},
                'publications.search': {'action': 'publications.search',
                                        'category': 'publications',
                                        'operation': 'search',
                                        'summary': 'Search publications',
                                        'description': 'Search research reports and publications.',
                                        'methodology_doc': '',
                                        'params': [{'name': 'query',
                                                    'type': 'string',
                                                    'required': True,
                                                    'description': 'Search query'},
                                                   {'name': 'limit',
                                                    'type': 'int',
                                                    'required': False,
                                                    'description': 'Maximum results',
                                                    'default': 20},
                                                   {'name': 'start_date',
                                                    'type': 'string',
                                                    'required': False,
                                                    'description': 'Start date (YYYY-MM-DD)'},
                                                   {'name': 'end_date',
                                                    'type': 'string',
                                                    'required': False,
                                                    'description': 'End date (YYYY-MM-DD)'},
                                                   {'name': 'filters',
                                                    'type': 'dict',
                                                    'required': False,
                                                    'description': 'Source/type filters'},
                                                   {'name': 'format',
                                                    'type': 'string',
                                                    'required': False,
                                                    'description': 'Output format: dict|df|arrow|parquet',
                                                    'default': 'dict'}],
                                        'required_params': ['query'],
                                        'optional_params': ['limit', 'start_date', 'end_date', 'filters', 'format'],
                                        'credits': 1,
                                        'tags': ['Publications', 'Search'],
                                        'deprecated': False,
                                        'internal': False,
                                        'supports_format': True},
                'queries.copy': {'action': 'queries.copy',
                                 'category': 'queries',
                                 'operation': 'copy',
                                 'summary': 'Copy query',
                                 'description': 'Copy query with new name.',
                                 'methodology_doc': '',
                                 'params': [{'name': 'name',
                                             'type': 'string',
                                             'required': True,
                                             'description': 'Source query name'},
                                            {'name': 'category',
                                             'type': 'string',
                                             'required': True,
                                             'description': 'Query category'},
                                            {'name': 'new_name',
                                             'type': 'string',
                                             'required': True,
                                             'description': 'New query name'},
                                            {'name': 'description',
                                             'type': 'string',
                                             'required': False,
                                             'description': 'New description'}],
                                 'required_params': ['name', 'category', 'new_name'],
                                 'optional_params': ['description'],
                                 'credits': 1,
                                 'tags': ['Queries'],
                                 'deprecated': False,
                                 'internal': False,
                                 'supports_format': False},
                'queries.delete': {'action': 'queries.delete',
                                   'category': 'queries',
                                   'operation': 'delete',
                                   'summary': 'Delete query',
                                   'description': 'Delete saved query.',
                                   'methodology_doc': '',
                                   'params': [{'name': 'name',
                                               'type': 'string',
                                               'required': True,
                                               'description': 'Query name'},
                                              {'name': 'category',
                                               'type': 'string',
                                               'required': True,
                                               'description': 'Query category'}],
                                   'required_params': ['name', 'category'],
                                   'optional_params': [],
                                   'credits': 1,
                                   'tags': ['Queries'],
                                   'deprecated': False,
                                   'internal': False,
                                   'supports_format': False},
                'queries.edit': {'action': 'queries.edit',
                                 'category': 'queries',
                                 'operation': 'edit',
                                 'summary': 'Edit query',
                                 'description': 'Update existing query.',
                                 'methodology_doc': '',
                                 'params': [{'name': 'name',
                                             'type': 'string',
                                             'required': True,
                                             'description': 'Query name'},
                                            {'name': 'category',
                                             'type': 'string',
                                             'required': True,
                                             'description': 'Query category'},
                                            {'name': 'definition',
                                             'type': 'dict',
                                             'required': False,
                                             'description': 'New query definition'},
                                            {'name': 'items',
                                             'type': 'list',
                                             'required': False,
                                             'description': 'New static items'},
                                            {'name': 'expression',
                                             'type': 'string',
                                             'required': False,
                                             'description': 'New expression'},
                                            {'name': 'description',
                                             'type': 'string',
                                             'required': False,
                                             'description': 'New description'},
                                            {'name': 'tags',
                                             'type': 'list',
                                             'required': False,
                                             'description': 'New tags'}],
                                 'required_params': ['name', 'category'],
                                 'optional_params': ['definition', 'items', 'expression', 'description', 'tags'],
                                 'credits': 1,
                                 'tags': ['Queries'],
                                 'deprecated': False,
                                 'internal': False,
                                 'supports_format': False},
                'queries.execute': {'action': 'queries.execute',
                                    'category': 'queries',
                                    'operation': 'execute',
                                    'summary': 'Execute query',
                                    'description': 'Execute saved query and return results.',
                                    'methodology_doc': '',
                                    'params': [{'name': 'id',
                                                'type': 'string',
                                                'required': False,
                                                'description': 'Query ID'},
                                               {'name': 'query_id',
                                                'type': 'string',
                                                'required': False,
                                                'description': 'Query ID (alias)'},
                                               {'name': 'name',
                                                'type': 'string',
                                                'required': False,
                                                'description': 'Query name'},
                                               {'name': 'category',
                                                'type': 'string',
                                                'required': False,
                                                'description': 'Query category'},
                                               {'name': 'format',
                                                'type': 'string',
                                                'required': False,
                                                'description': 'Output format',
                                                'default': 'json'},
                                               {'name': 'output_path',
                                                'type': 'string',
                                                'required': False,
                                                'description': 'Output file path'}],
                                    'required_params': [],
                                    'optional_params': ['id', 'query_id', 'name', 'category', 'format', 'output_path'],
                                    'credits': 1,
                                    'tags': ['Queries'],
                                    'deprecated': False,
                                    'internal': False,
                                    'supports_format': True},
                'queries.get': {'action': 'queries.get',
                                'category': 'queries',
                                'operation': 'get',
                                'summary': 'Get saved query',
                                'description': 'Get query by name.',
                                'methodology_doc': '',
                                'params': [{'name': 'name',
                                            'type': 'string',
                                            'required': True,
                                            'description': 'Query name'},
                                           {'name': 'category',
                                            'type': 'string',
                                            'required': True,
                                            'description': 'Query category'}],
                                'required_params': ['name', 'category'],
                                'optional_params': [],
                                'credits': 1,
                                'tags': ['Queries'],
                                'deprecated': False,
                                'internal': False,
                                'supports_format': False},
                'queries.list': {'action': 'queries.list',
                                 'category': 'queries',
                                 'operation': 'list',
                                 'summary': 'List saved queries',
                                 'description': "List user's saved queries.",
                                 'methodology_doc': '',
                                 'params': [{'name': 'category',
                                             'type': 'string',
                                             'required': False,
                                             'description': 'Filter by category'},
                                            {'name': 'limit',
                                             'type': 'int',
                                             'required': False,
                                             'description': 'Maximum results',
                                             'default': 100},
                                            {'name': 'offset',
                                             'type': 'int',
                                             'required': False,
                                             'description': 'Pagination offset',
                                             'default': 0}],
                                 'required_params': [],
                                 'optional_params': ['category', 'limit', 'offset'],
                                 'credits': 1,
                                 'tags': ['Queries'],
                                 'deprecated': False,
                                 'internal': False,
                                 'supports_format': False},
                'queries.preview': {'action': 'queries.preview',
                                    'category': 'queries',
                                    'operation': 'preview',
                                    'summary': 'Preview query',
                                    'description': 'Preview query without saving.',
                                    'methodology_doc': '',
                                    'params': [{'name': 'query',
                                                'type': 'dict',
                                                'required': True,
                                                'description': 'Query definition'},
                                               {'name': 'limit',
                                                'type': 'int',
                                                'required': False,
                                                'description': 'Maximum results',
                                                'default': 10},
                                               {'name': 'format',
                                                'type': 'string',
                                                'required': False,
                                                'description': 'Output format: dict|df|arrow|parquet',
                                                'default': 'dict'}],
                                    'required_params': ['query'],
                                    'optional_params': ['limit', 'format'],
                                    'credits': 1,
                                    'tags': ['Queries'],
                                    'deprecated': False,
                                    'internal': False,
                                    'supports_format': True},
                'queries.save': {'action': 'queries.save',
                                 'category': 'queries',
                                 'operation': 'save',
                                 'summary': 'Save query',
                                 'description': 'Save a new query.',
                                 'methodology_doc': '',
                                 'params': [{'name': 'name',
                                             'type': 'string',
                                             'required': True,
                                             'description': 'Query name'},
                                            {'name': 'category',
                                             'type': 'string',
                                             'required': True,
                                             'description': 'Query category'},
                                            {'name': 'type',
                                             'type': 'string',
                                             'required': False,
                                             'description': 'Query type: dynamic|static|expression',
                                             'default': 'dynamic'},
                                            {'name': 'visibility',
                                             'type': 'string',
                                             'required': False,
                                             'description': 'Visibility: private|workspace',
                                             'default': 'private'},
                                            {'name': 'definition',
                                             'type': 'dict',
                                             'required': False,
                                             'description': 'Query definition (for dynamic)'},
                                            {'name': 'items',
                                             'type': 'list',
                                             'required': False,
                                             'description': 'Static items (for static)'},
                                            {'name': 'expression',
                                             'type': 'string',
                                             'required': False,
                                             'description': 'Expression (for expression type)'},
                                            {'name': 'description',
                                             'type': 'string',
                                             'required': False,
                                             'description': 'Description',
                                             'default': ''},
                                            {'name': 'tags', 'type': 'list', 'required': False, 'description': 'Tags'}],
                                 'required_params': ['name', 'category'],
                                 'optional_params': ['type',
                                                     'visibility',
                                                     'definition',
                                                     'items',
                                                     'expression',
                                                     'description',
                                                     'tags'],
                                 'credits': 1,
                                 'tags': ['Queries'],
                                 'deprecated': False,
                                 'internal': False,
                                 'supports_format': False},
                'search.global': {'action': 'search.global',
                                  'category': 'search',
                                  'operation': 'global',
                                  'summary': 'Global search',
                                  'description': 'Search across securities, news, and publications.',
                                  'methodology_doc': '',
                                  'params': [{'name': 'query',
                                              'type': 'string',
                                              'required': True,
                                              'description': 'Search query'},
                                             {'name': 'limit',
                                              'type': 'int',
                                              'required': False,
                                              'description': 'Maximum results',
                                              'default': 20}],
                                  'required_params': ['query'],
                                  'optional_params': ['limit'],
                                  'credits': 1,
                                  'tags': ['Search'],
                                  'deprecated': False,
                                  'internal': False,
                                  'supports_format': False},
                'securities.breakdowns': {'action': 'securities.breakdowns',
                                          'category': 'securities',
                                          'operation': 'breakdowns',
                                          'summary': 'Get portfolio breakdowns',
                                          'description': 'Sector, country, asset class breakdowns for funds/ETFs.',
                                          'methodology_doc': '',
                                          'params': [{'name': 'identifiers',
                                                      'type': 'list',
                                                      'required': True,
                                                      'description': 'List of TepiloraCodes'}],
                                          'required_params': ['identifiers'],
                                          'optional_params': [],
                                          'credits': 1,
                                          'tags': ['Securities'],
                                          'deprecated': False,
                                          'internal': False,
                                          'supports_format': False},
                'securities.description': {'action': 'securities.description',
                                           'category': 'securities',
                                           'operation': 'description',
                                           'summary': 'Get security description',
                                           'description': 'Full metadata for one or more securities.',
                                           'methodology_doc': '',
                                           'params': [{'name': 'identifier',
                                                       'type': 'string',
                                                       'required': False,
                                                       'description': 'Single identifier'},
                                                      {'name': 'identifiers',
                                                       'type': 'list',
                                                       'required': False,
                                                       'description': 'Multiple identifiers'},
                                                      {'name': 'format',
                                                       'type': 'string',
                                                       'required': False,
                                                       'description': 'Output format: dict|df|arrow|parquet',
                                                       'default': 'dict'}],
                                           'required_params': [],
                                           'optional_params': ['identifier', 'identifiers', 'format'],
                                           'credits': 1,
                                           'tags': ['Securities'],
                                           'deprecated': False,
                                           'internal': False,
                                           'supports_format': True},
                'securities.details': {'action': 'securities.details',
                                       'category': 'securities',
                                       'operation': 'details',
                                       'summary': 'Get security details',
                                       'description': 'Alias for description. Full metadata for one or more '
                                                      'securities.',
                                       'methodology_doc': '',
                                       'params': [{'name': 'identifier',
                                                   'type': 'string',
                                                   'required': False,
                                                   'description': 'Single identifier'},
                                                  {'name': 'identifiers',
                                                   'type': 'list',
                                                   'required': False,
                                                   'description': 'Multiple identifiers'},
                                                  {'name': 'format',
                                                   'type': 'string',
                                                   'required': False,
                                                   'description': 'Output format: dict|df|arrow|parquet',
                                                   'default': 'dict'}],
                                       'required_params': [],
                                       'optional_params': ['identifier', 'identifiers', 'format'],
                                       'credits': 1,
                                       'tags': ['Securities'],
                                       'deprecated': False,
                                       'internal': False,
                                       'supports_format': True},
                'securities.facets': {'action': 'securities.facets',
                                      'category': 'securities',
                                      'operation': 'facets',
                                      'summary': 'Get facets',
                                      'description': 'Aggregated field values for building filters.',
                                      'methodology_doc': '',
                                      'params': [{'name': 'fields',
                                                  'type': 'list',
                                                  'required': True,
                                                  'description': 'Fields to aggregate'},
                                                 {'name': 'filters',
                                                  'type': 'dict',
                                                  'required': False,
                                                  'description': 'Pre-filter'}],
                                      'required_params': ['fields'],
                                      'optional_params': ['filters'],
                                      'credits': 1,
                                      'tags': ['Securities'],
                                      'deprecated': False,
                                      'internal': False,
                                      'supports_format': False},
                'securities.fees': {'action': 'securities.fees',
                                    'category': 'securities',
                                    'operation': 'fees',
                                    'summary': 'Get fee data',
                                    'description': 'TER, ongoing charges, and fee breakdown.',
                                    'methodology_doc': '',
                                    'params': [{'name': 'identifiers',
                                                'type': 'list',
                                                'required': True,
                                                'description': 'List of TepiloraCodes'},
                                               {'name': 'format',
                                                'type': 'string',
                                                'required': False,
                                                'description': 'Output format: dict|df|arrow|parquet',
                                                'default': 'dict'}],
                                    'required_params': ['identifiers'],
                                    'optional_params': ['format'],
                                    'credits': 1,
                                    'tags': ['Securities'],
                                    'deprecated': False,
                                    'internal': False,
                                    'supports_format': True},
                'securities.filter': {'action': 'securities.filter',
                                      'category': 'securities',
                                      'operation': 'filter',
                                      'summary': 'Filter securities',
                                      'description': 'Filter by field values without text search. Results include '
                                                     'TepiloraRating, TER, AUM. Sort is page-local.',
                                      'methodology_doc': '',
                                      'params': [{'name': 'filters',
                                                  'type': 'dict',
                                                  'required': True,
                                                  'description': 'Field filters'},
                                                 {'name': 'limit',
                                                  'type': 'int',
                                                  'required': False,
                                                  'description': 'Maximum results',
                                                  'default': 50},
                                                 {'name': 'offset',
                                                  'type': 'int',
                                                  'required': False,
                                                  'description': 'Pagination offset',
                                                  'default': 0},
                                                 {'name': 'sort',
                                                  'type': 'string',
                                                  'required': False,
                                                  'description': 'Sort field: TepiloraRating, TER, AUM, Name'},
                                                 {'name': 'order',
                                                  'type': 'string',
                                                  'required': False,
                                                  'description': 'Sort order: asc, desc (default per field)'},
                                                 {'name': 'group_by',
                                                  'type': 'string',
                                                  'required': False,
                                                  'description': 'Deduplicate by field (TepiloraParentId). Keeps one '
                                                                 'per group.'},
                                                 {'name': 'preferred_currency',
                                                  'type': 'string',
                                                  'required': False,
                                                  'description': 'When group_by active, prefer share class with this '
                                                                 'currency (e.g. EUR)'},
                                                 {'name': 'format',
                                                  'type': 'string',
                                                  'required': False,
                                                  'description': 'Output format: dict|df|arrow|parquet',
                                                  'default': 'dict'}],
                                      'required_params': ['filters'],
                                      'optional_params': ['limit',
                                                          'offset',
                                                          'sort',
                                                          'order',
                                                          'group_by',
                                                          'preferred_currency',
                                                          'format'],
                                      'credits': 1,
                                      'tags': ['Securities'],
                                      'deprecated': False,
                                      'internal': False,
                                      'supports_format': True},
                'securities.history': {'action': 'securities.history',
                                       'category': 'securities',
                                       'operation': 'history',
                                       'summary': 'Get price history',
                                       'description': 'Historical prices for securities. Requires TepiloraCode(s).',
                                       'methodology_doc': 'methodology/data.md#price-history',
                                       'params': [{'name': 'identifiers',
                                                   'type': 'list',
                                                   'required': True,
                                                   'description': 'List of TepiloraCodes'},
                                                  {'name': 'start_date',
                                                   'type': 'string',
                                                   'required': False,
                                                   'description': 'Start date (YYYY-MM-DD)'},
                                                  {'name': 'end_date',
                                                   'type': 'string',
                                                   'required': False,
                                                   'description': 'End date (YYYY-MM-DD)'},
                                                  {'name': 'limit',
                                                   'type': 'int',
                                                   'required': False,
                                                   'description': 'Maximum results',
                                                   'default': 5000},
                                                  {'name': 'pivot',
                                                   'type': 'bool',
                                                   'required': False,
                                                   'description': 'Pivot format (dates as rows, TCs as columns)',
                                                   'default': False},
                                                  {'name': 'format',
                                                   'type': 'string',
                                                   'required': False,
                                                   'description': 'Output format: dict|df|arrow|parquet',
                                                   'default': 'dict'}],
                                       'required_params': ['identifiers'],
                                       'optional_params': ['start_date', 'end_date', 'limit', 'pivot', 'format'],
                                       'credits': 1,
                                       'tags': ['Securities', 'History'],
                                       'deprecated': False,
                                       'internal': False,
                                       'supports_format': True},
                'securities.lookup': {'action': 'securities.lookup',
                                      'category': 'securities',
                                      'operation': 'lookup',
                                      'summary': 'Lookup security by identifier',
                                      'description': 'Direct lookup by ISIN, TepiloraCode, or ticker.',
                                      'methodology_doc': '',
                                      'params': [{'name': 'identifier',
                                                  'type': 'string',
                                                  'required': True,
                                                  'description': 'TepiloraCode or ISIN'}],
                                      'required_params': ['identifier'],
                                      'optional_params': [],
                                      'credits': 1,
                                      'tags': ['Securities'],
                                      'deprecated': False,
                                      'internal': False,
                                      'supports_format': False},
                'securities.mifid': {'action': 'securities.mifid',
                                     'category': 'securities',
                                     'operation': 'mifid',
                                     'summary': 'Get MiFID II data',
                                     'description': 'MiFID II classification and risk data.',
                                     'methodology_doc': '',
                                     'params': [{'name': 'identifiers',
                                                 'type': 'list',
                                                 'required': True,
                                                 'description': 'List of TepiloraCodes'},
                                                {'name': 'format',
                                                 'type': 'string',
                                                 'required': False,
                                                 'description': 'Output format: dict|df|arrow|parquet',
                                                 'default': 'dict'}],
                                     'required_params': ['identifiers'],
                                     'optional_params': ['format'],
                                     'credits': 1,
                                     'tags': ['Securities', 'Regulatory'],
                                     'deprecated': False,
                                     'internal': False,
                                     'supports_format': True},
                'securities.rels': {'action': 'securities.rels',
                                    'category': 'securities',
                                    'operation': 'rels',
                                    'summary': 'Get related securities',
                                    'description': 'Related securities (same index, same issuer, etc.).',
                                    'methodology_doc': '',
                                    'params': [{'name': 'identifier',
                                                'type': 'string',
                                                'required': True,
                                                'description': 'TepiloraCode or ISIN'},
                                               {'name': 'format',
                                                'type': 'string',
                                                'required': False,
                                                'description': 'Output format: dict|df|arrow|parquet',
                                                'default': 'dict'}],
                                    'required_params': ['identifier'],
                                    'optional_params': ['format'],
                                    'credits': 1,
                                    'tags': ['Securities'],
                                    'deprecated': False,
                                    'internal': False,
                                    'supports_format': True},
                'securities.screen': {'action': 'securities.screen',
                                      'category': 'securities',
                                      'operation': 'screen',
                                      'summary': 'Screen securities',
                                      'description': 'Batch screening by analytics metrics.',
                                      'methodology_doc': 'methodology/screening.md',
                                      'params': [{'name': 'universe',
                                                  'type': 'dict',
                                                  'required': False,
                                                  'description': 'Universe filters'},
                                                 {'name': 'query_name',
                                                  'type': 'string',
                                                  'required': False,
                                                  'description': 'Saved query name'},
                                                 {'name': 'criteria',
                                                  'type': 'dict',
                                                  'required': False,
                                                  'description': 'Metric criteria'},
                                                 {'name': 'rank_by',
                                                  'type': 'string',
                                                  'required': False,
                                                  'description': 'Ranking metric'},
                                                 {'name': 'limit',
                                                  'type': 'int',
                                                  'required': False,
                                                  'description': 'Maximum results',
                                                  'default': 50},
                                                 {'name': 'format',
                                                  'type': 'string',
                                                  'required': False,
                                                  'description': 'Output format: dict|df|arrow|parquet',
                                                  'default': 'dict'}],
                                      'required_params': [],
                                      'optional_params': ['universe',
                                                          'query_name',
                                                          'criteria',
                                                          'rank_by',
                                                          'limit',
                                                          'format'],
                                      'credits': 1,
                                      'tags': ['Securities', 'Screening'],
                                      'deprecated': False,
                                      'internal': False,
                                      'supports_format': True},
                'securities.search': {'action': 'securities.search',
                                      'category': 'securities',
                                      'operation': 'search',
                                      'summary': 'Search securities',
                                      'description': 'Full-text search with filters and facets. Results include '
                                                     'TepiloraRating, TER, AUM. Sort is page-local.',
                                      'methodology_doc': '',
                                      'params': [{'name': 'query',
                                                  'type': 'string',
                                                  'required': False,
                                                  'description': 'Search query',
                                                  'default': ''},
                                                 {'name': 'filters',
                                                  'type': 'dict',
                                                  'required': False,
                                                  'description': 'Field filters'},
                                                 {'name': 'limit',
                                                  'type': 'int',
                                                  'required': False,
                                                  'description': 'Maximum results',
                                                  'default': 50},
                                                 {'name': 'offset',
                                                  'type': 'int',
                                                  'required': False,
                                                  'description': 'Pagination offset',
                                                  'default': 0},
                                                 {'name': 'include_facets',
                                                  'type': 'bool',
                                                  'required': False,
                                                  'description': 'Include aggregations',
                                                  'default': False},
                                                 {'name': 'sort',
                                                  'type': 'string',
                                                  'required': False,
                                                  'description': 'Sort field: TepiloraRating, TER, AUM, Name'},
                                                 {'name': 'order',
                                                  'type': 'string',
                                                  'required': False,
                                                  'description': 'Sort order: asc, desc (default per field)'},
                                                 {'name': 'group_by',
                                                  'type': 'string',
                                                  'required': False,
                                                  'description': 'Deduplicate by field (TepiloraParentId). Keeps one '
                                                                 'per group.'},
                                                 {'name': 'preferred_currency',
                                                  'type': 'string',
                                                  'required': False,
                                                  'description': 'When group_by active, prefer share class with this '
                                                                 'currency (e.g. EUR)'},
                                                 {'name': 'format',
                                                  'type': 'string',
                                                  'required': False,
                                                  'description': 'Output format: dict|df|arrow|parquet',
                                                  'default': 'dict'}],
                                      'required_params': [],
                                      'optional_params': ['query',
                                                          'filters',
                                                          'limit',
                                                          'offset',
                                                          'include_facets',
                                                          'sort',
                                                          'order',
                                                          'group_by',
                                                          'preferred_currency',
                                                          'format'],
                                      'credits': 1,
                                      'tags': ['Securities', 'Search'],
                                      'deprecated': False,
                                      'internal': False,
                                      'supports_format': True},
                'stocks.compare': {'action': 'stocks.compare',
                                   'category': 'stocks',
                                   'operation': 'compare',
                                   'summary': 'Compare stocks',
                                   'description': 'Compare multiple stocks.',
                                   'methodology_doc': '',
                                   'params': [{'name': 'identifiers',
                                               'type': 'list',
                                               'required': True,
                                               'description': 'List of TepiloraCodes'},
                                              {'name': 'metrics',
                                               'type': 'list',
                                               'required': False,
                                               'description': 'Metrics to compare'},
                                              {'name': 'format',
                                               'type': 'string',
                                               'required': False,
                                               'description': 'Output format: dict|df|arrow|parquet',
                                               'default': 'dict'}],
                                   'required_params': ['identifiers'],
                                   'optional_params': ['metrics', 'format'],
                                   'credits': 1,
                                   'tags': ['Stocks'],
                                   'deprecated': False,
                                   'internal': False,
                                   'supports_format': True},
                'stocks.dividends': {'action': 'stocks.dividends',
                                     'category': 'stocks',
                                     'operation': 'dividends',
                                     'summary': 'Dividend data',
                                     'description': 'Dividend history and yield.',
                                     'methodology_doc': '',
                                     'params': [{'name': 'identifier',
                                                 'type': 'string',
                                                 'required': True,
                                                 'description': 'TepiloraCode or ISIN'},
                                                {'name': 'format',
                                                 'type': 'string',
                                                 'required': False,
                                                 'description': 'Output format: dict|df|arrow|parquet',
                                                 'default': 'dict'}],
                                     'required_params': ['identifier'],
                                     'optional_params': ['format'],
                                     'credits': 1,
                                     'tags': ['Stocks', 'Fundamentals'],
                                     'deprecated': False,
                                     'internal': False,
                                     'supports_format': True},
                'stocks.indicators': {'action': 'stocks.indicators',
                                      'category': 'stocks',
                                      'operation': 'indicators',
                                      'summary': 'List indicators',
                                      'description': 'List available technical indicators.',
                                      'methodology_doc': '',
                                      'params': [],
                                      'required_params': [],
                                      'optional_params': [],
                                      'credits': 1,
                                      'tags': ['Stocks'],
                                      'deprecated': False,
                                      'internal': False,
                                      'supports_format': False},
                'stocks.momentum': {'action': 'stocks.momentum',
                                    'category': 'stocks',
                                    'operation': 'momentum',
                                    'summary': 'Momentum analysis',
                                    'description': 'Calculate momentum indicators.',
                                    'methodology_doc': '',
                                    'params': [{'name': 'identifier',
                                                'type': 'string',
                                                'required': False,
                                                'description': 'TepiloraCode or ISIN'},
                                               {'name': 'prices',
                                                'type': 'dict',
                                                'required': False,
                                                'description': 'User-provided prices'},
                                               {'name': 'start_date',
                                                'type': 'string',
                                                'required': False,
                                                'description': 'Start date (YYYY-MM-DD)'},
                                               {'name': 'end_date',
                                                'type': 'string',
                                                'required': False,
                                                'description': 'End date (YYYY-MM-DD)'},
                                               {'name': 'format',
                                                'type': 'string',
                                                'required': False,
                                                'description': 'Output format: dict|df|arrow|parquet',
                                                'default': 'dict'}],
                                    'required_params': [],
                                    'optional_params': ['identifier', 'prices', 'start_date', 'end_date', 'format'],
                                    'credits': 1,
                                    'tags': ['Stocks', 'Technical'],
                                    'deprecated': False,
                                    'internal': False,
                                    'supports_format': True},
                'stocks.peers': {'action': 'stocks.peers',
                                 'category': 'stocks',
                                 'operation': 'peers',
                                 'summary': 'Get peer stocks',
                                 'description': 'Find peer companies.',
                                 'methodology_doc': '',
                                 'params': [{'name': 'identifier',
                                             'type': 'string',
                                             'required': True,
                                             'description': 'TepiloraCode or ISIN'},
                                            {'name': 'limit',
                                             'type': 'int',
                                             'required': False,
                                             'description': 'Maximum results',
                                             'default': 20},
                                            {'name': 'format',
                                             'type': 'string',
                                             'required': False,
                                             'description': 'Output format: dict|df|arrow|parquet',
                                             'default': 'dict'}],
                                 'required_params': ['identifier'],
                                 'optional_params': ['limit', 'format'],
                                 'credits': 1,
                                 'tags': ['Stocks'],
                                 'deprecated': False,
                                 'internal': False,
                                 'supports_format': True},
                'stocks.screen': {'action': 'stocks.screen',
                                  'category': 'stocks',
                                  'operation': 'screen',
                                  'summary': 'Screen stocks',
                                  'description': 'Screen stocks by technical criteria.',
                                  'methodology_doc': '',
                                  'params': [{'name': 'universe',
                                              'type': 'dict',
                                              'required': False,
                                              'description': 'Universe filters'},
                                             {'name': 'criteria',
                                              'type': 'dict',
                                              'required': False,
                                              'description': 'Screening criteria'},
                                             {'name': 'limit',
                                              'type': 'int',
                                              'required': False,
                                              'description': 'Maximum results',
                                              'default': 50},
                                             {'name': 'format',
                                              'type': 'string',
                                              'required': False,
                                              'description': 'Output format: dict|df|arrow|parquet',
                                              'default': 'dict'}],
                                  'required_params': [],
                                  'optional_params': ['universe', 'criteria', 'limit', 'format'],
                                  'credits': 1,
                                  'tags': ['Stocks', 'Screening'],
                                  'deprecated': False,
                                  'internal': False,
                                  'supports_format': True},
                'stocks.signals': {'action': 'stocks.signals',
                                   'category': 'stocks',
                                   'operation': 'signals',
                                   'summary': 'Trading signals',
                                   'description': 'Generate trading signals.',
                                   'methodology_doc': '',
                                   'params': [{'name': 'identifier',
                                               'type': 'string',
                                               'required': False,
                                               'description': 'TepiloraCode or ISIN'},
                                              {'name': 'prices',
                                               'type': 'dict',
                                               'required': False,
                                               'description': 'User-provided prices'},
                                              {'name': 'strategy',
                                               'type': 'string',
                                               'required': False,
                                               'description': 'Signal strategy'},
                                              {'name': 'format',
                                               'type': 'string',
                                               'required': False,
                                               'description': 'Output format: dict|df|arrow|parquet',
                                               'default': 'dict'}],
                                   'required_params': [],
                                   'optional_params': ['identifier', 'prices', 'strategy', 'format'],
                                   'credits': 1,
                                   'tags': ['Stocks', 'Technical'],
                                   'deprecated': False,
                                   'internal': False,
                                   'supports_format': True},
                'stocks.technicals': {'action': 'stocks.technicals',
                                      'category': 'stocks',
                                      'operation': 'technicals',
                                      'summary': 'Technical indicators',
                                      'description': 'Calculate technical indicators (SMA, RSI, MACD, etc.).',
                                      'methodology_doc': '',
                                      'params': [{'name': 'identifier',
                                                  'type': 'string',
                                                  'required': False,
                                                  'description': 'TepiloraCode or ISIN'},
                                                 {'name': 'prices',
                                                  'type': 'dict',
                                                  'required': False,
                                                  'description': 'User-provided prices'},
                                                 {'name': 'indicators',
                                                  'type': 'list',
                                                  'required': False,
                                                  'description': 'Indicators to calculate'},
                                                 {'name': 'start_date',
                                                  'type': 'string',
                                                  'required': False,
                                                  'description': 'Start date (YYYY-MM-DD)'},
                                                 {'name': 'end_date',
                                                  'type': 'string',
                                                  'required': False,
                                                  'description': 'End date (YYYY-MM-DD)'},
                                                 {'name': 'format',
                                                  'type': 'string',
                                                  'required': False,
                                                  'description': 'Output format: dict|df|arrow|parquet',
                                                  'default': 'dict'}],
                                      'required_params': [],
                                      'optional_params': ['identifier',
                                                          'prices',
                                                          'indicators',
                                                          'start_date',
                                                          'end_date',
                                                          'format'],
                                      'credits': 1,
                                      'tags': ['Stocks', 'Technical'],
                                      'deprecated': False,
                                      'internal': False,
                                      'supports_format': True},
                'stocks.valuation': {'action': 'stocks.valuation',
                                     'category': 'stocks',
                                     'operation': 'valuation',
                                     'summary': 'Valuation metrics',
                                     'description': 'PE, PB, EV/EBITDA, etc.',
                                     'methodology_doc': '',
                                     'params': [{'name': 'identifier',
                                                 'type': 'string',
                                                 'required': True,
                                                 'description': 'TepiloraCode or ISIN'},
                                                {'name': 'format',
                                                 'type': 'string',
                                                 'required': False,
                                                 'description': 'Output format: dict|df|arrow|parquet',
                                                 'default': 'dict'}],
                                     'required_params': ['identifier'],
                                     'optional_params': ['format'],
                                     'credits': 1,
                                     'tags': ['Stocks', 'Fundamentals'],
                                     'deprecated': False,
                                     'internal': False,
                                     'supports_format': True},
                'workflows.list': {'action': 'workflows.list',
                                   'category': 'workflows',
                                   'operation': 'list',
                                   'summary': 'List available bridge functions',
                                   'description': '',
                                   'methodology_doc': '',
                                   'params': [{'name': 'source',
                                               'type': 'string',
                                               'required': False,
                                               'description': 'Filter by source module'},
                                              {'name': 'target',
                                               'type': 'string',
                                               'required': False,
                                               'description': 'Filter by target module'}],
                                   'required_params': [],
                                   'optional_params': ['source', 'target'],
                                   'credits': 1,
                                   'tags': ['workflows'],
                                   'deprecated': False,
                                   'internal': False,
                                   'supports_format': False},
                'workflows.map': {'action': 'workflows.map',
                                  'category': 'workflows',
                                  'operation': 'map',
                                  'summary': 'Transform data between modules',
                                  'description': 'Map output from one module to input format of another. Set '
                                                 'execute=true to also run the target operation.',
                                  'methodology_doc': '',
                                  'params': [{'name': 'bridge',
                                              'type': 'string',
                                              'required': True,
                                              'description': 'Bridge function name'},
                                             {'name': 'source_data',
                                              'type': 'dict',
                                              'required': True,
                                              'description': 'Output data from source operation'},
                                             {'name': 'target_params',
                                              'type': 'dict',
                                              'required': False,
                                              'description': 'Additional params for target'},
                                             {'name': 'execute',
                                              'type': 'bool',
                                              'required': False,
                                              'description': 'If true, execute target operation',
                                              'default': False},
                                             {'name': 'target_action',
                                              'type': 'string',
                                              'required': False,
                                              'description': 'Explicit target action (required when execute=true and '
                                                             'bridge target has wildcard)'}],
                                  'required_params': ['bridge', 'source_data'],
                                  'optional_params': ['target_params', 'execute', 'target_action'],
                                  'credits': 1,
                                  'tags': ['workflows'],
                                  'deprecated': False,
                                  'internal': False,
                                  'supports_format': False}},
 'by_category': {'alerts': ['ack', 'create', 'delete', 'evaluate', 'get', 'history', 'list', 'run', 'update'],
                 'alternatives': ['cash_flow',
                                  'create',
                                  'delete',
                                  'get',
                                  'list',
                                  'nav_update',
                                  'performance',
                                  'summary',
                                  'update'],
                 'analytics': ['annual_returns',
                               'annual_volatility',
                               'average_drawdown',
                               'batch',
                               'best_period',
                               'burke_ratio',
                               'capture_ratio',
                               'cumulative_performance',
                               'downside_capture',
                               'downside_deviation',
                               'drawdown',
                               'drawdown_duration',
                               'egarch_volatility',
                               'factor_attribution',
                               'factor_regression',
                               'gain_loss_ratio',
                               'garch_forecast',
                               'garch_volatility',
                               'hurst_exponent',
                               'info',
                               'list',
                               'log_returns',
                               'max_drawdown',
                               'momentum',
                               'monthly_returns',
                               'monthly_volatility',
                               'omega_ratio',
                               'pain_index',
                               'profit_factor',
                               'rate_of_change',
                               'relative_strength',
                               'returns',
                               'rolling_alpha',
                               'rolling_autocorrelation',
                               'rolling_beta',
                               'rolling_beta_timing',
                               'rolling_cagr',
                               'rolling_calmar',
                               'rolling_correlation',
                               'rolling_covariance',
                               'rolling_cvar',
                               'rolling_downside_beta',
                               'rolling_factor_regression',
                               'rolling_garch',
                               'rolling_information_ratio',
                               'rolling_kurtosis',
                               'rolling_r_squared',
                               'rolling_regression',
                               'rolling_residuals',
                               'rolling_sharpe',
                               'rolling_skewness',
                               'rolling_sortino',
                               'rolling_treynor',
                               'rolling_upside_beta',
                               'rolling_var',
                               'rolling_variance',
                               'rolling_volatility',
                               'semi_deviation',
                               'semi_variance',
                               'sterling_ratio',
                               'tail_ratio',
                               'tracking_error',
                               'tracking_error_volatility',
                               'ulcer_index',
                               'upside_capture',
                               'upside_deviation',
                               'win_rate',
                               'worst_period'],
                 'asset_allocation': ['backtest',
                                      'compare',
                                      'decompose',
                                      'drift',
                                      'frontier',
                                      'optimize',
                                      'risk_profile',
                                      'stress',
                                      'suggest_securities',
                                      'validate'],
                 'audit': ['history', 'query'],
                 'billing': ['aggregate',
                             'calculate',
                             'record_create',
                             'record_list',
                             'schedule_create',
                             'schedule_delete',
                             'schedule_get',
                             'schedule_list',
                             'schedule_update',
                             'simulate'],
                 'bonds': ['analyze',
                           'curve',
                           'ladder',
                           'lookup',
                           'maturity_profile',
                           'metrics',
                           'portfolio',
                           'screen',
                           'spread'],
                 'clients': ['assign_portfolio',
                             'create',
                             'delete',
                             'get',
                             'list',
                             'portfolios',
                             'unassign_portfolio',
                             'update'],
                 'data': ['security'],
                 'documents': ['capabilities', 'classify', 'parse', 'types'],
                 'esg': ['compare', 'get', 'portfolio', 'scores', 'screen', 'summary'],
                 'exports': ['export', 'formats'],
                 'factors': ['get',
                             'list',
                             'loading',
                             'portfolio_exposure',
                             'risk_model',
                             'rolling_covariance',
                             'scenario',
                             'status'],
                 'fh': ['financials', 'history', 'info', 'latest', 'load', 'metrics', 'quality'],
                 'macro': ['calendar', 'countries', 'history', 'indicators', 'latest', 'search'],
                 'news': ['details', 'facets', 'latest', 'search', 'trending', 'trending_compare', 'trending_history'],
                 'options': ['greeks', 'iv', 'payoff', 'price', 'pricing', 'strategies', 'strategy'],
                 'portfolio': ['attribution',
                               'compare',
                               'contribution',
                               'costs',
                               'create',
                               'delete',
                               'drift',
                               'exposure',
                               'get',
                               'list',
                               'optimize',
                               'rebalance',
                               'returns',
                               'share',
                               'shares',
                               'stress',
                               'tearsheet',
                               'unshare',
                               'update'],
                 'profiling': ['archive',
                               'check_suitability',
                               'convert_answers',
                               'create_profile',
                               'get_current',
                               'get_profile',
                               'list',
                               'questionnaire',
                               'update',
                               'validate_answers'],
                 'publications': ['by_source', 'details', 'facets', 'latest', 'search'],
                 'queries': ['copy', 'delete', 'edit', 'execute', 'get', 'list', 'preview', 'save'],
                 'search': ['global'],
                 'securities': ['breakdowns',
                                'description',
                                'details',
                                'facets',
                                'fees',
                                'filter',
                                'history',
                                'lookup',
                                'mifid',
                                'rels',
                                'screen',
                                'search'],
                 'stocks': ['compare',
                            'dividends',
                            'indicators',
                            'momentum',
                            'peers',
                            'screen',
                            'signals',
                            'technicals',
                            'valuation'],
                 'workflows': ['list', 'map']},
 'stats': {'total_operations': 239,
           'categories': 25,
           'operations_by_category': {'alerts': 9,
                                      'alternatives': 9,
                                      'analytics': 68,
                                      'asset_allocation': 10,
                                      'audit': 2,
                                      'billing': 10,
                                      'bonds': 9,
                                      'clients': 8,
                                      'data': 1,
                                      'documents': 4,
                                      'esg': 6,
                                      'exports': 2,
                                      'factors': 8,
                                      'fh': 7,
                                      'macro': 6,
                                      'news': 7,
                                      'options': 7,
                                      'portfolio': 19,
                                      'profiling': 10,
                                      'publications': 5,
                                      'queries': 8,
                                      'search': 1,
                                      'securities': 12,
                                      'stocks': 9,
                                      'workflows': 2}}}
