"""指数成分 Repository Protocol(B1)。""" from __future__ import annotations from collections.abc import Sequence from datetime import date from typing import Protocol from app.domain.entities.index import IndexWeight class IndexConstituentRepository(Protocol): def upsert_many(self, rows: Sequence[IndexWeight]) -> int: ... def members_at(self, index_code: str, as_of: date) -> set[str]: """as_of 当日成分:取 <=as_of 最近一期快照的股票集合(历史成分语义)。""" def latest_date(self, index_code: str) -> date | None: ...