"""
@generated by mypy-protobuf.  Do not edit manually!
isort:skip_file
"""

import abc
import collections.abc
import grpc
import grpc.aio
import typing
import yandex.cloud.billing.usage_records.v1.consumption_core_service_pb2

_T = typing.TypeVar("_T")

class _MaybeAsyncIterator(collections.abc.AsyncIterator[_T], collections.abc.Iterator[_T], metaclass=abc.ABCMeta): ...

class _ServicerContext(grpc.ServicerContext, grpc.aio.ServicerContext):  # type: ignore[misc, type-arg]
    ...

class ConsumptionCoreServiceStub:
    """Service for detailed consumption and usage reporting.

    The ConsumptionCoreService provides a comprehensive set of methods for retrieving detailed
    usage and billing information for different entities within a billing account hierarchy.
    Each method offers aggregated data for specific entity types (a billing account, clouds,
    folders, services, SKUs, resources, or labels) with support for various filtering options
    and aggregation periods. Note that each request targets a single billing account.

    All methods in this service follow the same three-level response structure:
    1. Overall totals for the entire request period (cost, credits, expense)
    2. Entity-level totals - summary data for each entity of the requested type
    3. Time series data - periodic breakdown for each entity according to the specified aggregation period
       (controlled by the aggregation_period request parameter: day/week/month/quarter/year)

    These methods help customers and internal teams analyze usage patterns, track expenses,
    monitor resource consumption, and generate detailed billing reports. The service
    supports filtering by entity IDs, date ranges, labels, and other parameters to provide
    targeted insights into cloud resource usage.

    Required permissions:
    All methods in this service require one of the following permissions on the specified billing account:
    - `billing.accounts.getReport`

    Rate limits:
    This API is limited to 1 request per minute per IP address.
    """

    def __init__(self, channel: typing.Union[grpc.Channel, grpc.aio.Channel]) -> None: ...
    GetBillingAccountUsageReport: grpc.UnaryUnaryMultiCallable[
        yandex.cloud.billing.usage_records.v1.consumption_core_service_pb2.UsageReportRequest,
        yandex.cloud.billing.usage_records.v1.consumption_core_service_pb2.BillingAccountUsageReportResponse,
    ]
    """Returns aggregated usage report for a single specified billing account,
    optionally filtered by clouds, folders, SKUs, labels, and period granularity.

    This method provides a comprehensive view of all usage and costs for a specific
    billing account, with options to filter data by various entity types and to aggregate
    results at different time granularities (daily, monthly, etc.).

    Implementation details:
    - The report includes the total cost, applied credits (monetary grants, volume incentives, committed use discounts, and free credits), and final expense
    - Results can be filtered by cloud IDs, folder IDs, service IDs, SKU IDs, resource IDs, or labels
    - All applicable filters from the request will be applied (with AND logic between different filter types)
    - Time-based data is grouped according to the specified aggregation period

    Error handling:
    - Returns INVALID_ARGUMENT if the request parameters fail validation
    - Returns UNAUTHENTICATED if the user is not authenticated or the billing account does not exist
    - Returns PERMISSION_DENIED if the user lacks required permissions
    - Returns INTERNAL for internal server errors
    """

    GetCloudUsageReport: grpc.UnaryUnaryMultiCallable[
        yandex.cloud.billing.usage_records.v1.consumption_core_service_pb2.UsageReportRequest,
        yandex.cloud.billing.usage_records.v1.consumption_core_service_pb2.CloudUsageReportResponse,
    ]
    """Returns aggregated usage report for the specified clouds
    under the specified billing account.

    This method provides detailed usage and cost information grouped by clouds
    within the specified billing account. The data can be filtered by various
    entity types and aggregated at different time granularities.

    Implementation details:
    - Results are organized by cloud, with each cloud's usage, costs, and credits detailed
    - If cloud_ids are specified, only data for those clouds is included (using OR logic)
    - When no cloud_ids are specified, data for all clouds under the billing account is returned
    - Other filters (folder_ids, service_ids, sku_ids, resource_ids, labels) are always applied if present
    - Hierarchical data structure allows analyzing costs across the organization's cloud resources

    Error handling:
    - Returns INVALID_ARGUMENT if the request parameters fail validation
    - Returns UNAUTHENTICATED if the user is not authenticated or the billing account does not exist
    - Returns PERMISSION_DENIED if the user lacks required permissions
    - Returns INTERNAL for internal server errors
    """

    GetFolderUsageReport: grpc.UnaryUnaryMultiCallable[
        yandex.cloud.billing.usage_records.v1.consumption_core_service_pb2.UsageReportRequest,
        yandex.cloud.billing.usage_records.v1.consumption_core_service_pb2.FolderUsageReportResponse,
    ]
    """Returns aggregated usage report for the specified folders
    under the specified billing account.

    This method provides detailed usage and cost information grouped by folders
    within the specified billing account. The data can be filtered by various
    entity types and aggregated at different time granularities.

    Implementation details:
    - Results are organized by folder, with each folder's usage, costs, and credits detailed
    - If folder_ids are specified, only data for those folders is included (using OR logic)
    - When no folder_ids are specified, data for all folders under the billing account is returned
    - Other filters (cloud_ids, service_ids, sku_ids, resource_ids, labels) are always applied if present
    - Provides visibility into costs at the project/folder level within your organization

    Error handling:
    - Returns INVALID_ARGUMENT if the request parameters fail validation
    - Returns UNAUTHENTICATED if the user is not authenticated or the billing account does not exist
    - Returns PERMISSION_DENIED if the user lacks required permissions
    - Returns INTERNAL for internal server errors

    Required permissions:
    - `billing.accounts.getReport` on the specified billing account
    """

    GetServiceUsageReport: grpc.UnaryUnaryMultiCallable[
        yandex.cloud.billing.usage_records.v1.consumption_core_service_pb2.UsageReportRequest,
        yandex.cloud.billing.usage_records.v1.consumption_core_service_pb2.ServiceUsageReportResponse,
    ]
    """Returns aggregated usage report for the specified services
    under the specified billing account.

    This method provides detailed usage and cost information grouped by services
    within the specified billing account. Services represent broad product categories
    (like Compute, Storage, AI, etc.) that contain multiple SKUs. The data can be
    filtered by various entity types and aggregated at different time granularities.

    Implementation details:
    - Results are organized by service, with each service's usage, costs, and credits detailed
    - If service_ids are specified, only data for those services is included (using OR logic)
    - When no service_ids are specified, data for all services under the billing account is returned
    - Other filters (cloud_ids, folder_ids, sku_ids, resource_ids, labels) are always applied if present
    - Service data includes the service name and description
    - Helps identify which cloud services are driving your overall costs

    Error handling:
    - Returns INVALID_ARGUMENT if the request parameters fail validation
    - Returns UNAUTHENTICATED if the user is not authenticated or the billing account does not exist
    - Returns PERMISSION_DENIED if the user lacks required permissions
    - Returns INTERNAL for internal server errors
    """

    GetSKUUsageReport: grpc.UnaryUnaryMultiCallable[
        yandex.cloud.billing.usage_records.v1.consumption_core_service_pb2.UsageReportRequest,
        yandex.cloud.billing.usage_records.v1.consumption_core_service_pb2.SKUUsageReportResponse,
    ]
    """Returns aggregated usage report by SKU (Stock Keeping Unit)
    under the specified billing account.

    This method provides detailed usage and cost information grouped by SKUs
    within the specified billing account. SKUs are specific billable product offerings
    (such as specific VM types, disk types, or AI models) that belong to a parent service.
    The data can be filtered by various entity types and aggregated at different time granularities.

    Implementation details:
    - Results are organized by SKU, with each SKU's usage, costs, and credits detailed
    - If sku_ids are specified, only data for those SKUs is included (using OR logic)
    - When no sku_ids are specified, data for all SKUs under the billing account is returned
    - Other filters (cloud_ids, folder_ids, service_ids, resource_ids, labels) are always applied if present
    - SKU data includes pricing quantity, unit of measurement, and translated display names
    - Provides the most granular view of which specific product offerings are generating costs

    Error handling:
    - Returns INVALID_ARGUMENT if the request parameters fail validation
    - Returns UNAUTHENTICATED if the user is not authenticated or the billing account does not exist
    - Returns PERMISSION_DENIED if the user lacks required permissions
    - Returns INTERNAL for internal server errors
    """

    GetResourceUsageReport: grpc.UnaryUnaryMultiCallable[
        yandex.cloud.billing.usage_records.v1.consumption_core_service_pb2.UsageReportRequest,
        yandex.cloud.billing.usage_records.v1.consumption_core_service_pb2.ResourceUsageReportResponse,
    ]
    """Returns aggregated usage report by individual resource
    under the specified billing account.

    This method provides detailed usage and cost information grouped by individual resources
    within the specified billing account. The data can be filtered by various
    entity types and aggregated at different time granularities.

    Implementation details:
    - Results are organized by resource, with each resource's usage, costs, and credits detailed
    - If resource_ids are specified, only data for those resources is included (using OR logic)
    - When no resource_ids are specified, data for all resources under the billing account is returned
    - Other filters (cloud_ids, folder_ids, service_ids, sku_ids, labels) are always applied if present
    - This provides the most granular view of costs as it breaks down to the individual resource level
    - Enables precise cost analysis at the individual resource instance level (specific VMs, disks, etc.)

    Error handling:
    - Returns INVALID_ARGUMENT if the request parameters fail validation
    - Returns UNAUTHENTICATED if the user is not authenticated or the billing account does not exist
    - Returns PERMISSION_DENIED if the user lacks required permissions
    - Returns INTERNAL for internal server errors
    """

    GetLabelKeyUsageReport: grpc.UnaryUnaryMultiCallable[
        yandex.cloud.billing.usage_records.v1.consumption_core_service_pb2.UsageReportRequest,
        yandex.cloud.billing.usage_records.v1.consumption_core_service_pb2.LabelKeyUsageReportResponse,
    ]
    """Returns aggregated usage report by label keys and values
    under the specified billing account.

    This method provides detailed usage and cost information grouped by label key-value pairs
    within the specified billing account. Labels are user-defined metadata tags attached to resources
    (such as VMs, disks, etc.) in the form of key-value pairs (e.g., "env:prod", "region:us-west").
    The data can be filtered by various entity types and aggregated at different time granularities.

    Implementation details:
    - Results are organized by label key-value pairs, with usage, costs, and credits detailed for each
    - If labels filter is specified, only data for matching labels is included
    - Other filters (cloud_ids, folder_ids, service_ids, sku_ids, resource_ids) are always applied if present
    - Resources can have multiple labels attached (e.g., a VM might have "env:prod", "team:finance", "region:us")
    - If a resource has multiple labels at the same point in time, the usage and cost metrics are reported for each label separately.
      In other words, the same resource's cost is **duplicated** across its labels rather than split. For example,
      if a VM costs 90 units and has 3 labels, the report will show 90 units for each label, not 30 units per label.
    - This allows for custom business dimensions analysis based on resource tagging
    - Usage data is aggregated for all resources that share the same label
    - Particularly useful for cost allocation and chargeback across business units, environments, or projects

    Error handling:
    - Returns INVALID_ARGUMENT if the request parameters fail validation
    - Returns UNAUTHENTICATED if the user is not authenticated or the billing account does not exist
    - Returns PERMISSION_DENIED if the user lacks required permissions
    - Returns INTERNAL for internal server errors
    """

class ConsumptionCoreServiceAsyncStub:
    """Service for detailed consumption and usage reporting.

    The ConsumptionCoreService provides a comprehensive set of methods for retrieving detailed
    usage and billing information for different entities within a billing account hierarchy.
    Each method offers aggregated data for specific entity types (a billing account, clouds,
    folders, services, SKUs, resources, or labels) with support for various filtering options
    and aggregation periods. Note that each request targets a single billing account.

    All methods in this service follow the same three-level response structure:
    1. Overall totals for the entire request period (cost, credits, expense)
    2. Entity-level totals - summary data for each entity of the requested type
    3. Time series data - periodic breakdown for each entity according to the specified aggregation period
       (controlled by the aggregation_period request parameter: day/week/month/quarter/year)

    These methods help customers and internal teams analyze usage patterns, track expenses,
    monitor resource consumption, and generate detailed billing reports. The service
    supports filtering by entity IDs, date ranges, labels, and other parameters to provide
    targeted insights into cloud resource usage.

    Required permissions:
    All methods in this service require one of the following permissions on the specified billing account:
    - `billing.accounts.getReport`

    Rate limits:
    This API is limited to 1 request per minute per IP address.
    """

    GetBillingAccountUsageReport: grpc.aio.UnaryUnaryMultiCallable[
        yandex.cloud.billing.usage_records.v1.consumption_core_service_pb2.UsageReportRequest,
        yandex.cloud.billing.usage_records.v1.consumption_core_service_pb2.BillingAccountUsageReportResponse,
    ]
    """Returns aggregated usage report for a single specified billing account,
    optionally filtered by clouds, folders, SKUs, labels, and period granularity.

    This method provides a comprehensive view of all usage and costs for a specific
    billing account, with options to filter data by various entity types and to aggregate
    results at different time granularities (daily, monthly, etc.).

    Implementation details:
    - The report includes the total cost, applied credits (monetary grants, volume incentives, committed use discounts, and free credits), and final expense
    - Results can be filtered by cloud IDs, folder IDs, service IDs, SKU IDs, resource IDs, or labels
    - All applicable filters from the request will be applied (with AND logic between different filter types)
    - Time-based data is grouped according to the specified aggregation period

    Error handling:
    - Returns INVALID_ARGUMENT if the request parameters fail validation
    - Returns UNAUTHENTICATED if the user is not authenticated or the billing account does not exist
    - Returns PERMISSION_DENIED if the user lacks required permissions
    - Returns INTERNAL for internal server errors
    """

    GetCloudUsageReport: grpc.aio.UnaryUnaryMultiCallable[
        yandex.cloud.billing.usage_records.v1.consumption_core_service_pb2.UsageReportRequest,
        yandex.cloud.billing.usage_records.v1.consumption_core_service_pb2.CloudUsageReportResponse,
    ]
    """Returns aggregated usage report for the specified clouds
    under the specified billing account.

    This method provides detailed usage and cost information grouped by clouds
    within the specified billing account. The data can be filtered by various
    entity types and aggregated at different time granularities.

    Implementation details:
    - Results are organized by cloud, with each cloud's usage, costs, and credits detailed
    - If cloud_ids are specified, only data for those clouds is included (using OR logic)
    - When no cloud_ids are specified, data for all clouds under the billing account is returned
    - Other filters (folder_ids, service_ids, sku_ids, resource_ids, labels) are always applied if present
    - Hierarchical data structure allows analyzing costs across the organization's cloud resources

    Error handling:
    - Returns INVALID_ARGUMENT if the request parameters fail validation
    - Returns UNAUTHENTICATED if the user is not authenticated or the billing account does not exist
    - Returns PERMISSION_DENIED if the user lacks required permissions
    - Returns INTERNAL for internal server errors
    """

    GetFolderUsageReport: grpc.aio.UnaryUnaryMultiCallable[
        yandex.cloud.billing.usage_records.v1.consumption_core_service_pb2.UsageReportRequest,
        yandex.cloud.billing.usage_records.v1.consumption_core_service_pb2.FolderUsageReportResponse,
    ]
    """Returns aggregated usage report for the specified folders
    under the specified billing account.

    This method provides detailed usage and cost information grouped by folders
    within the specified billing account. The data can be filtered by various
    entity types and aggregated at different time granularities.

    Implementation details:
    - Results are organized by folder, with each folder's usage, costs, and credits detailed
    - If folder_ids are specified, only data for those folders is included (using OR logic)
    - When no folder_ids are specified, data for all folders under the billing account is returned
    - Other filters (cloud_ids, service_ids, sku_ids, resource_ids, labels) are always applied if present
    - Provides visibility into costs at the project/folder level within your organization

    Error handling:
    - Returns INVALID_ARGUMENT if the request parameters fail validation
    - Returns UNAUTHENTICATED if the user is not authenticated or the billing account does not exist
    - Returns PERMISSION_DENIED if the user lacks required permissions
    - Returns INTERNAL for internal server errors

    Required permissions:
    - `billing.accounts.getReport` on the specified billing account
    """

    GetServiceUsageReport: grpc.aio.UnaryUnaryMultiCallable[
        yandex.cloud.billing.usage_records.v1.consumption_core_service_pb2.UsageReportRequest,
        yandex.cloud.billing.usage_records.v1.consumption_core_service_pb2.ServiceUsageReportResponse,
    ]
    """Returns aggregated usage report for the specified services
    under the specified billing account.

    This method provides detailed usage and cost information grouped by services
    within the specified billing account. Services represent broad product categories
    (like Compute, Storage, AI, etc.) that contain multiple SKUs. The data can be
    filtered by various entity types and aggregated at different time granularities.

    Implementation details:
    - Results are organized by service, with each service's usage, costs, and credits detailed
    - If service_ids are specified, only data for those services is included (using OR logic)
    - When no service_ids are specified, data for all services under the billing account is returned
    - Other filters (cloud_ids, folder_ids, sku_ids, resource_ids, labels) are always applied if present
    - Service data includes the service name and description
    - Helps identify which cloud services are driving your overall costs

    Error handling:
    - Returns INVALID_ARGUMENT if the request parameters fail validation
    - Returns UNAUTHENTICATED if the user is not authenticated or the billing account does not exist
    - Returns PERMISSION_DENIED if the user lacks required permissions
    - Returns INTERNAL for internal server errors
    """

    GetSKUUsageReport: grpc.aio.UnaryUnaryMultiCallable[
        yandex.cloud.billing.usage_records.v1.consumption_core_service_pb2.UsageReportRequest,
        yandex.cloud.billing.usage_records.v1.consumption_core_service_pb2.SKUUsageReportResponse,
    ]
    """Returns aggregated usage report by SKU (Stock Keeping Unit)
    under the specified billing account.

    This method provides detailed usage and cost information grouped by SKUs
    within the specified billing account. SKUs are specific billable product offerings
    (such as specific VM types, disk types, or AI models) that belong to a parent service.
    The data can be filtered by various entity types and aggregated at different time granularities.

    Implementation details:
    - Results are organized by SKU, with each SKU's usage, costs, and credits detailed
    - If sku_ids are specified, only data for those SKUs is included (using OR logic)
    - When no sku_ids are specified, data for all SKUs under the billing account is returned
    - Other filters (cloud_ids, folder_ids, service_ids, resource_ids, labels) are always applied if present
    - SKU data includes pricing quantity, unit of measurement, and translated display names
    - Provides the most granular view of which specific product offerings are generating costs

    Error handling:
    - Returns INVALID_ARGUMENT if the request parameters fail validation
    - Returns UNAUTHENTICATED if the user is not authenticated or the billing account does not exist
    - Returns PERMISSION_DENIED if the user lacks required permissions
    - Returns INTERNAL for internal server errors
    """

    GetResourceUsageReport: grpc.aio.UnaryUnaryMultiCallable[
        yandex.cloud.billing.usage_records.v1.consumption_core_service_pb2.UsageReportRequest,
        yandex.cloud.billing.usage_records.v1.consumption_core_service_pb2.ResourceUsageReportResponse,
    ]
    """Returns aggregated usage report by individual resource
    under the specified billing account.

    This method provides detailed usage and cost information grouped by individual resources
    within the specified billing account. The data can be filtered by various
    entity types and aggregated at different time granularities.

    Implementation details:
    - Results are organized by resource, with each resource's usage, costs, and credits detailed
    - If resource_ids are specified, only data for those resources is included (using OR logic)
    - When no resource_ids are specified, data for all resources under the billing account is returned
    - Other filters (cloud_ids, folder_ids, service_ids, sku_ids, labels) are always applied if present
    - This provides the most granular view of costs as it breaks down to the individual resource level
    - Enables precise cost analysis at the individual resource instance level (specific VMs, disks, etc.)

    Error handling:
    - Returns INVALID_ARGUMENT if the request parameters fail validation
    - Returns UNAUTHENTICATED if the user is not authenticated or the billing account does not exist
    - Returns PERMISSION_DENIED if the user lacks required permissions
    - Returns INTERNAL for internal server errors
    """

    GetLabelKeyUsageReport: grpc.aio.UnaryUnaryMultiCallable[
        yandex.cloud.billing.usage_records.v1.consumption_core_service_pb2.UsageReportRequest,
        yandex.cloud.billing.usage_records.v1.consumption_core_service_pb2.LabelKeyUsageReportResponse,
    ]
    """Returns aggregated usage report by label keys and values
    under the specified billing account.

    This method provides detailed usage and cost information grouped by label key-value pairs
    within the specified billing account. Labels are user-defined metadata tags attached to resources
    (such as VMs, disks, etc.) in the form of key-value pairs (e.g., "env:prod", "region:us-west").
    The data can be filtered by various entity types and aggregated at different time granularities.

    Implementation details:
    - Results are organized by label key-value pairs, with usage, costs, and credits detailed for each
    - If labels filter is specified, only data for matching labels is included
    - Other filters (cloud_ids, folder_ids, service_ids, sku_ids, resource_ids) are always applied if present
    - Resources can have multiple labels attached (e.g., a VM might have "env:prod", "team:finance", "region:us")
    - If a resource has multiple labels at the same point in time, the usage and cost metrics are reported for each label separately.
      In other words, the same resource's cost is **duplicated** across its labels rather than split. For example,
      if a VM costs 90 units and has 3 labels, the report will show 90 units for each label, not 30 units per label.
    - This allows for custom business dimensions analysis based on resource tagging
    - Usage data is aggregated for all resources that share the same label
    - Particularly useful for cost allocation and chargeback across business units, environments, or projects

    Error handling:
    - Returns INVALID_ARGUMENT if the request parameters fail validation
    - Returns UNAUTHENTICATED if the user is not authenticated or the billing account does not exist
    - Returns PERMISSION_DENIED if the user lacks required permissions
    - Returns INTERNAL for internal server errors
    """

class ConsumptionCoreServiceServicer(metaclass=abc.ABCMeta):
    """Service for detailed consumption and usage reporting.

    The ConsumptionCoreService provides a comprehensive set of methods for retrieving detailed
    usage and billing information for different entities within a billing account hierarchy.
    Each method offers aggregated data for specific entity types (a billing account, clouds,
    folders, services, SKUs, resources, or labels) with support for various filtering options
    and aggregation periods. Note that each request targets a single billing account.

    All methods in this service follow the same three-level response structure:
    1. Overall totals for the entire request period (cost, credits, expense)
    2. Entity-level totals - summary data for each entity of the requested type
    3. Time series data - periodic breakdown for each entity according to the specified aggregation period
       (controlled by the aggregation_period request parameter: day/week/month/quarter/year)

    These methods help customers and internal teams analyze usage patterns, track expenses,
    monitor resource consumption, and generate detailed billing reports. The service
    supports filtering by entity IDs, date ranges, labels, and other parameters to provide
    targeted insights into cloud resource usage.

    Required permissions:
    All methods in this service require one of the following permissions on the specified billing account:
    - `billing.accounts.getReport`

    Rate limits:
    This API is limited to 1 request per minute per IP address.
    """

    @abc.abstractmethod
    def GetBillingAccountUsageReport(
        self,
        request: yandex.cloud.billing.usage_records.v1.consumption_core_service_pb2.UsageReportRequest,
        context: _ServicerContext,
    ) -> typing.Union[yandex.cloud.billing.usage_records.v1.consumption_core_service_pb2.BillingAccountUsageReportResponse, collections.abc.Awaitable[yandex.cloud.billing.usage_records.v1.consumption_core_service_pb2.BillingAccountUsageReportResponse]]:
        """Returns aggregated usage report for a single specified billing account,
        optionally filtered by clouds, folders, SKUs, labels, and period granularity.

        This method provides a comprehensive view of all usage and costs for a specific
        billing account, with options to filter data by various entity types and to aggregate
        results at different time granularities (daily, monthly, etc.).

        Implementation details:
        - The report includes the total cost, applied credits (monetary grants, volume incentives, committed use discounts, and free credits), and final expense
        - Results can be filtered by cloud IDs, folder IDs, service IDs, SKU IDs, resource IDs, or labels
        - All applicable filters from the request will be applied (with AND logic between different filter types)
        - Time-based data is grouped according to the specified aggregation period

        Error handling:
        - Returns INVALID_ARGUMENT if the request parameters fail validation
        - Returns UNAUTHENTICATED if the user is not authenticated or the billing account does not exist
        - Returns PERMISSION_DENIED if the user lacks required permissions
        - Returns INTERNAL for internal server errors
        """

    @abc.abstractmethod
    def GetCloudUsageReport(
        self,
        request: yandex.cloud.billing.usage_records.v1.consumption_core_service_pb2.UsageReportRequest,
        context: _ServicerContext,
    ) -> typing.Union[yandex.cloud.billing.usage_records.v1.consumption_core_service_pb2.CloudUsageReportResponse, collections.abc.Awaitable[yandex.cloud.billing.usage_records.v1.consumption_core_service_pb2.CloudUsageReportResponse]]:
        """Returns aggregated usage report for the specified clouds
        under the specified billing account.

        This method provides detailed usage and cost information grouped by clouds
        within the specified billing account. The data can be filtered by various
        entity types and aggregated at different time granularities.

        Implementation details:
        - Results are organized by cloud, with each cloud's usage, costs, and credits detailed
        - If cloud_ids are specified, only data for those clouds is included (using OR logic)
        - When no cloud_ids are specified, data for all clouds under the billing account is returned
        - Other filters (folder_ids, service_ids, sku_ids, resource_ids, labels) are always applied if present
        - Hierarchical data structure allows analyzing costs across the organization's cloud resources

        Error handling:
        - Returns INVALID_ARGUMENT if the request parameters fail validation
        - Returns UNAUTHENTICATED if the user is not authenticated or the billing account does not exist
        - Returns PERMISSION_DENIED if the user lacks required permissions
        - Returns INTERNAL for internal server errors
        """

    @abc.abstractmethod
    def GetFolderUsageReport(
        self,
        request: yandex.cloud.billing.usage_records.v1.consumption_core_service_pb2.UsageReportRequest,
        context: _ServicerContext,
    ) -> typing.Union[yandex.cloud.billing.usage_records.v1.consumption_core_service_pb2.FolderUsageReportResponse, collections.abc.Awaitable[yandex.cloud.billing.usage_records.v1.consumption_core_service_pb2.FolderUsageReportResponse]]:
        """Returns aggregated usage report for the specified folders
        under the specified billing account.

        This method provides detailed usage and cost information grouped by folders
        within the specified billing account. The data can be filtered by various
        entity types and aggregated at different time granularities.

        Implementation details:
        - Results are organized by folder, with each folder's usage, costs, and credits detailed
        - If folder_ids are specified, only data for those folders is included (using OR logic)
        - When no folder_ids are specified, data for all folders under the billing account is returned
        - Other filters (cloud_ids, service_ids, sku_ids, resource_ids, labels) are always applied if present
        - Provides visibility into costs at the project/folder level within your organization

        Error handling:
        - Returns INVALID_ARGUMENT if the request parameters fail validation
        - Returns UNAUTHENTICATED if the user is not authenticated or the billing account does not exist
        - Returns PERMISSION_DENIED if the user lacks required permissions
        - Returns INTERNAL for internal server errors

        Required permissions:
        - `billing.accounts.getReport` on the specified billing account
        """

    @abc.abstractmethod
    def GetServiceUsageReport(
        self,
        request: yandex.cloud.billing.usage_records.v1.consumption_core_service_pb2.UsageReportRequest,
        context: _ServicerContext,
    ) -> typing.Union[yandex.cloud.billing.usage_records.v1.consumption_core_service_pb2.ServiceUsageReportResponse, collections.abc.Awaitable[yandex.cloud.billing.usage_records.v1.consumption_core_service_pb2.ServiceUsageReportResponse]]:
        """Returns aggregated usage report for the specified services
        under the specified billing account.

        This method provides detailed usage and cost information grouped by services
        within the specified billing account. Services represent broad product categories
        (like Compute, Storage, AI, etc.) that contain multiple SKUs. The data can be
        filtered by various entity types and aggregated at different time granularities.

        Implementation details:
        - Results are organized by service, with each service's usage, costs, and credits detailed
        - If service_ids are specified, only data for those services is included (using OR logic)
        - When no service_ids are specified, data for all services under the billing account is returned
        - Other filters (cloud_ids, folder_ids, sku_ids, resource_ids, labels) are always applied if present
        - Service data includes the service name and description
        - Helps identify which cloud services are driving your overall costs

        Error handling:
        - Returns INVALID_ARGUMENT if the request parameters fail validation
        - Returns UNAUTHENTICATED if the user is not authenticated or the billing account does not exist
        - Returns PERMISSION_DENIED if the user lacks required permissions
        - Returns INTERNAL for internal server errors
        """

    @abc.abstractmethod
    def GetSKUUsageReport(
        self,
        request: yandex.cloud.billing.usage_records.v1.consumption_core_service_pb2.UsageReportRequest,
        context: _ServicerContext,
    ) -> typing.Union[yandex.cloud.billing.usage_records.v1.consumption_core_service_pb2.SKUUsageReportResponse, collections.abc.Awaitable[yandex.cloud.billing.usage_records.v1.consumption_core_service_pb2.SKUUsageReportResponse]]:
        """Returns aggregated usage report by SKU (Stock Keeping Unit)
        under the specified billing account.

        This method provides detailed usage and cost information grouped by SKUs
        within the specified billing account. SKUs are specific billable product offerings
        (such as specific VM types, disk types, or AI models) that belong to a parent service.
        The data can be filtered by various entity types and aggregated at different time granularities.

        Implementation details:
        - Results are organized by SKU, with each SKU's usage, costs, and credits detailed
        - If sku_ids are specified, only data for those SKUs is included (using OR logic)
        - When no sku_ids are specified, data for all SKUs under the billing account is returned
        - Other filters (cloud_ids, folder_ids, service_ids, resource_ids, labels) are always applied if present
        - SKU data includes pricing quantity, unit of measurement, and translated display names
        - Provides the most granular view of which specific product offerings are generating costs

        Error handling:
        - Returns INVALID_ARGUMENT if the request parameters fail validation
        - Returns UNAUTHENTICATED if the user is not authenticated or the billing account does not exist
        - Returns PERMISSION_DENIED if the user lacks required permissions
        - Returns INTERNAL for internal server errors
        """

    @abc.abstractmethod
    def GetResourceUsageReport(
        self,
        request: yandex.cloud.billing.usage_records.v1.consumption_core_service_pb2.UsageReportRequest,
        context: _ServicerContext,
    ) -> typing.Union[yandex.cloud.billing.usage_records.v1.consumption_core_service_pb2.ResourceUsageReportResponse, collections.abc.Awaitable[yandex.cloud.billing.usage_records.v1.consumption_core_service_pb2.ResourceUsageReportResponse]]:
        """Returns aggregated usage report by individual resource
        under the specified billing account.

        This method provides detailed usage and cost information grouped by individual resources
        within the specified billing account. The data can be filtered by various
        entity types and aggregated at different time granularities.

        Implementation details:
        - Results are organized by resource, with each resource's usage, costs, and credits detailed
        - If resource_ids are specified, only data for those resources is included (using OR logic)
        - When no resource_ids are specified, data for all resources under the billing account is returned
        - Other filters (cloud_ids, folder_ids, service_ids, sku_ids, labels) are always applied if present
        - This provides the most granular view of costs as it breaks down to the individual resource level
        - Enables precise cost analysis at the individual resource instance level (specific VMs, disks, etc.)

        Error handling:
        - Returns INVALID_ARGUMENT if the request parameters fail validation
        - Returns UNAUTHENTICATED if the user is not authenticated or the billing account does not exist
        - Returns PERMISSION_DENIED if the user lacks required permissions
        - Returns INTERNAL for internal server errors
        """

    @abc.abstractmethod
    def GetLabelKeyUsageReport(
        self,
        request: yandex.cloud.billing.usage_records.v1.consumption_core_service_pb2.UsageReportRequest,
        context: _ServicerContext,
    ) -> typing.Union[yandex.cloud.billing.usage_records.v1.consumption_core_service_pb2.LabelKeyUsageReportResponse, collections.abc.Awaitable[yandex.cloud.billing.usage_records.v1.consumption_core_service_pb2.LabelKeyUsageReportResponse]]:
        """Returns aggregated usage report by label keys and values
        under the specified billing account.

        This method provides detailed usage and cost information grouped by label key-value pairs
        within the specified billing account. Labels are user-defined metadata tags attached to resources
        (such as VMs, disks, etc.) in the form of key-value pairs (e.g., "env:prod", "region:us-west").
        The data can be filtered by various entity types and aggregated at different time granularities.

        Implementation details:
        - Results are organized by label key-value pairs, with usage, costs, and credits detailed for each
        - If labels filter is specified, only data for matching labels is included
        - Other filters (cloud_ids, folder_ids, service_ids, sku_ids, resource_ids) are always applied if present
        - Resources can have multiple labels attached (e.g., a VM might have "env:prod", "team:finance", "region:us")
        - If a resource has multiple labels at the same point in time, the usage and cost metrics are reported for each label separately.
          In other words, the same resource's cost is **duplicated** across its labels rather than split. For example,
          if a VM costs 90 units and has 3 labels, the report will show 90 units for each label, not 30 units per label.
        - This allows for custom business dimensions analysis based on resource tagging
        - Usage data is aggregated for all resources that share the same label
        - Particularly useful for cost allocation and chargeback across business units, environments, or projects

        Error handling:
        - Returns INVALID_ARGUMENT if the request parameters fail validation
        - Returns UNAUTHENTICATED if the user is not authenticated or the billing account does not exist
        - Returns PERMISSION_DENIED if the user lacks required permissions
        - Returns INTERNAL for internal server errors
        """

def add_ConsumptionCoreServiceServicer_to_server(servicer: ConsumptionCoreServiceServicer, server: typing.Union[grpc.Server, grpc.aio.Server]) -> None: ...
