Class: Google::Cloud::CommerceProducer::V1beta::PrivateOffer::SingleProductOffer

Inherits:
Object
  • Object
show all
Extended by:
Protobuf::MessageExts::ClassMethods
Includes:
Protobuf::MessageExts
Defined in:
proto_docs/google/cloud/commerceproducer/v1beta/private_offer.rb

Overview

Configurations for the offer that is associated with a single product.

Defined Under Namespace

Classes: ContractValue, CustomIntervalPrice, Feature, Installment, PriceModel, RevenueShare, StandardIntervalPrice

Instance Attribute Summary collapse

Instance Attribute Details

#amended_private_offer::String

Returns Optional. An existing private offer that will be superseded by this offer. Unless the private offer is for a product type that supports multiple active orders, an amendment private offer must be transacted if and only if the destination customer billing account already contains an active order for the same product. The offer to be superseded must be the offer associated with an active order.

Amendments generally fall into one of two scenarios:

  1. Active Order / Ended Offer: The term of the amended offer has ended but it is still associated with an active order. The new offer must amend the ended private offer.
  2. Active Order / Active Offer: The term of the amended offer is still active and the associated order is active. Similar to above, the new offer must amend the currently active offer (unless "multiple active orders" are supported).

If this is set, then the base_standard_offer parent service must match the parent service of the base_standard_offer in the amended_private_offer.

Active Term Restrictions: If the term of the amended private offer has NOT ended, then the following compatibility rules apply:

  • Price Model Compatibility:
    • Flat Fee (with or without usage) offers can amend Flat Fee offers.
    • Usage-only or CUD offers can amend usage-only offers.
    • Commitment-based offers must amend offers of the same price model subtype (e.g., "additional usage at list price" vs "all usage discounted").
  • Billing Frequency Compatibility: Determined by standard_interval or custom_interval_price.
    • If the amended offer has a custom billing frequency, the new offer must also have a custom frequency.
    • If the amended offer has a standard frequency (Monthly, Quarterly, or Yearly), the new offer must maintain the same frequency or transition to a custom frequency.
    • Switching between different standard frequencies (e.g., Monthly to Quarterly) is not supported.
    • For Monthly frequency, switching between MONTHLY_PRORATED and MONTHLY_NOT_PRORATED is supported, unless the offer's term.end_policy is MATCH_AMENDED_OFFER.
    • For usage-only offers, there are no billing frequency restrictions.

Other criteria for offer amendment are detailed elsewhere.

Note: The following fields are mutually exclusive: amended_private_offer, amended_standard_offer. If a field in that set is populated, all other fields in the set will automatically be cleared.

Returns:

  • (::String)

    Optional. An existing private offer that will be superseded by this offer. Unless the private offer is for a product type that supports multiple active orders, an amendment private offer must be transacted if and only if the destination customer billing account already contains an active order for the same product. The offer to be superseded must be the offer associated with an active order.

    Amendments generally fall into one of two scenarios:

    1. Active Order / Ended Offer: The term of the amended offer has ended but it is still associated with an active order. The new offer must amend the ended private offer.
    2. Active Order / Active Offer: The term of the amended offer is still active and the associated order is active. Similar to above, the new offer must amend the currently active offer (unless "multiple active orders" are supported).

    If this is set, then the base_standard_offer parent service must match the parent service of the base_standard_offer in the amended_private_offer.

    Active Term Restrictions: If the term of the amended private offer has NOT ended, then the following compatibility rules apply:

    • Price Model Compatibility:
      • Flat Fee (with or without usage) offers can amend Flat Fee offers.
      • Usage-only or CUD offers can amend usage-only offers.
      • Commitment-based offers must amend offers of the same price model subtype (e.g., "additional usage at list price" vs "all usage discounted").
    • Billing Frequency Compatibility: Determined by standard_interval or custom_interval_price.
      • If the amended offer has a custom billing frequency, the new offer must also have a custom frequency.
      • If the amended offer has a standard frequency (Monthly, Quarterly, or Yearly), the new offer must maintain the same frequency or transition to a custom frequency.
      • Switching between different standard frequencies (e.g., Monthly to Quarterly) is not supported.
      • For Monthly frequency, switching between MONTHLY_PRORATED and MONTHLY_NOT_PRORATED is supported, unless the offer's term.end_policy is MATCH_AMENDED_OFFER.
      • For usage-only offers, there are no billing frequency restrictions.

    Other criteria for offer amendment are detailed elsewhere.

    Note: The following fields are mutually exclusive: amended_private_offer, amended_standard_offer. If a field in that set is populated, all other fields in the set will automatically be cleared.



554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
# File 'proto_docs/google/cloud/commerceproducer/v1beta/private_offer.rb', line 554

class SingleProductOffer
  include ::Google::Protobuf::MessageExts
  extend ::Google::Protobuf::MessageExts::ClassMethods

  # Additional details used to describe customization of the service level.
  #
  # Features are used to distinguish service levels of the same product.
  # When a product has a single service level, all details can be contained
  # in the product documentation. When a product has multiple service levels,
  # each service level can be assigned a distinct set of features to
  # distinguish the key differences between the service levels.
  #
  # In addition to customizing pricing and other transaction details, a
  # private offer may include customization of partner-managed product
  # behavior. When this is the case, the details of the custom behavior are
  # described using features.
  # @!attribute [rw] display_name
  #   @return [::String]
  #     Optional. Human readable display text characterizing the feature.
  #     Should be sufficiently detailed to identify the feature, allowing
  #     features to be correlated across separate offers and service levels.
  #     Must be non-empty to publish the offer.
  #     The maximum allowed length is 128 characters.
  #     Allows characters from the following Unicode Property Classes:
  #     Letters, Numbers, Punctuation, Symbols, and Separators
  # @!attribute [rw] value
  #   @return [::String]
  #     Optional. Human readable display text reflecting the value of the
  #     feature. Used for variable features not captured by the display_name
  #     alone. The maximum allowed length is 3000 characters. Allows characters
  #     from the following Unicode Property Classes: Letters, Numbers,
  #     Punctuation, Symbols, and Separators
  class Feature
    include ::Google::Protobuf::MessageExts
    extend ::Google::Protobuf::MessageExts::ClassMethods
  end

  # The price model of the private offer.
  #
  # Private offers are referred to as having different kinds of price models
  # based on the combination of fields set in the price model. The following
  # terminology is used in documentation and other reference material.
  #
  # * Usage-based: the price model does not set `flat_fee`
  # * Usage-only: the price model sets only `usage`
  # * CUD (committed use discount): the price model sets `commitment`
  #     * Commitment discount with additional usage at list price:
  #       The price model sets `commitment` and not `usage`.
  #     * Commitment with all usage discounted: The price model sets
  #       `commitment` and `usage`.
  # * Flat fee: the price model sets only `flat_fee`
  # * Flat fee with usage: the price model sets `flat_fee` and `usage`
  #
  # See
  # https://docs.cloud.google.com/marketplace/docs/partners/offers/select-pricing-model#CUD
  # for the price models.
  # @!attribute [rw] flat_fee
  #   @return [::Google::Cloud::CommerceProducer::V1beta::PrivateOffer::SingleProductOffer::PriceModel::FlatFee]
  #     Optional. The price configurations for the flat fee subscription.
  #     Must be unset when the base standard offer's price model does not
  #     include subscription SKUs.
  #
  #     Note: The following fields are mutually exclusive: `flat_fee`, `commitment`. If a field in that set is populated, all other fields in the set will automatically be cleared.
  # @!attribute [rw] commitment
  #   @return [::Google::Cloud::CommerceProducer::V1beta::PrivateOffer::SingleProductOffer::PriceModel::Commitment]
  #     Optional. The price configurations for the commitment based
  #     subscription. Must be unset when the base standard offer's price
  #     model includes subscription SKUs.
  #
  #     Note: The following fields are mutually exclusive: `commitment`, `flat_fee`. If a field in that set is populated, all other fields in the set will automatically be cleared.
  # @!attribute [rw] usage
  #   @return [::Google::Cloud::CommerceProducer::V1beta::PrivateOffer::SingleProductOffer::PriceModel::Usage]
  #     Optional. The price configurations for the usage part.
  #     If this field is set, the `Commitment.discount_percent` must be unset.
  #     A private offer can apply a discount to all usage or to a usage
  #     commitment, but not both.
  #     Must be unset when the base standard offer's price model includes no
  #     usage SKUs.
  class PriceModel
    include ::Google::Protobuf::MessageExts
    extend ::Google::Protobuf::MessageExts::ClassMethods

    # The discount for a specific SKU.
    # @!attribute [rw] sku
    #   @return [::String]
    #     Optional. The name of a partner SKU from this API.
    #
    #     Must refer to a SKU in the price model of the base standard offer.
    #     Inclusion in the base price model can occur either directly or
    #     indirectly via inclusion in an included SkuGroup.
    #
    #     Currently, standard offer price models include only partner SKUs
    #     in the same project as the standard offer. This may change.
    #
    #     Format:
    #     projects/\\{project}/locations/\\{location}/services/\\{service}/skus/\\{sku}
    #
    #     Note: The following fields are mutually exclusive: `sku`, `cloud_billing_sku`. If a field in that set is populated, all other fields in the set will automatically be cleared.
    # @!attribute [rw] cloud_billing_sku
    #   @return [::String]
    #     Optional. The name of a Google SKU from the Cloud Billing API.
    #
    #     Used for partner products sold by Google, such as Premium Operating
    #     System Images sold for use in Compute Engine. This is not common.
    #     SKUs of this type are not present on this API and can instead be
    #     found on the Cloud Billing API or at https://cloud.google.com/skus.
    #
    #     Must refer to a SKU in the price model of the base standard offer.
    #     Google SKUs are always referenced in standard offers via SkuGroups.
    #
    #     Format: services/\\{service}/skus/\\{sku}
    #
    #     Note: The following fields are mutually exclusive: `cloud_billing_sku`, `sku`. If a field in that set is populated, all other fields in the set will automatically be cleared.
    # @!attribute [rw] discount_percent
    #   @return [::Google::Type::Decimal]
    #     Optional. The discount percent for the SKU.
    #     For example, `10` means a discount of 10%. If the original SKU
    #     price is $100/hour then the discounted price will be $90/hour.
    #
    #     Must be between 0 and 100 inclusive, with precision up to 2 decimal
    #     places. If this field is set, then the allowed pattern for 'value'
    #     is `^([0-9]{1,2}(\\.\\d{1,2})?|100(\\.0{1,2})?)$`.
    #
    #     Examples of valid values: "0", "100.0", "12.34", "40.0".
    #     Example of invalid values: ".3", "-1", "100.1", "12.345", "+12",
    #     and "".
    #     Must be present to publish the offer.
    class SkuDiscount
      include ::Google::Protobuf::MessageExts
      extend ::Google::Protobuf::MessageExts::ClassMethods
    end

    # The price for the usage SKUs.
    # @!attribute [rw] default_discount_percent
    #   @return [::Google::Type::Decimal]
    #     Optional. The default discount percent for usage SKUs.
    #     An unset default discount percent is equivalent to 0 (no discount).
    #
    #     Must be between 0 and 100 inclusive, with precision up to 2 decimal
    #     places. If this field is set, then the allowed pattern for 'value'
    #     is `^([0-9]{1,2}(\\.\\d{1,2})?|100(\\.0{1,2})?)$`.
    #     Examples of valid values: "0", "100.0", "12.34", "40.0".
    #     Example of invalid values: ".3", "-1", "100.1", "12.345", "+12", "".
    # @!attribute [rw] sku_discounts
    #   @return [::Array<::Google::Cloud::CommerceProducer::V1beta::PrivateOffer::SingleProductOffer::PriceModel::SkuDiscount>]
    #     Optional. The discounts for the specific SKUs that override the
    #     `default_discount_percent`.
    class Usage
      include ::Google::Protobuf::MessageExts
      extend ::Google::Protobuf::MessageExts::ClassMethods
    end

    # The price configurations for the flat fee subscriptions.
    # @!attribute [rw] flat_fee_override
    #   @return [::Google::Type::Money]
    #     Optional. Flat fee overriding the default flat fee in the base
    #     standard offer. Value cannot be negative. The currency must be "USD"
    #     and precision is limited to cents. Must be present to publish the
    #     offer, if the parent message is set. The maximum allowed value is
    #     1,000,000,000 USD.
    class FlatFee
      include ::Google::Protobuf::MessageExts
      extend ::Google::Protobuf::MessageExts::ClassMethods
    end

    # The price configurations for the commitment based subscriptions.
    # @!attribute [rw] commitment_amount
    #   @return [::Google::Type::Money]
    #     Optional. The commitment balance that the customer will receive.
    #     Value cannot be negative.
    #     The currency must be "USD" and precision is limited to cents.
    #     Must be present to publish the offer, if the parent message is set.
    #     The maximum allowed value is 1,000,000,000 USD.
    #
    #     If the current offer amends a private offer where the term has not
    #     ended, and if the field
    #     `single_product_offer.standard_interval_price.price_model.commitment.commitment_amount`
    #     is set on both the current offer and the amended private offer, then
    #     the commitment amount must be equal or higher on the current offer,
    #     compared to the amended private offer.
    # @!attribute [rw] discount_percent
    #   @return [::Google::Type::Decimal]
    #     Optional. The discount percent on `commitment_amount`.
    #
    #     For example, `10` means a discount of 10%. If the original
    #     `commitment_amount` is $100 then the discounted amount will be $90.
    #     The customer is charged $90 and receives $100 in credits.
    #
    #     All reported usage will be charged at the standard price.
    #     If this field is set, the `price_model.usage` must be unset. A
    #     private offer can apply a discount to all usage or to a usage
    #     commitment, but not both.
    #
    #     Must be between 0 and 100 inclusive, with precision up to 2 decimal
    #     places. If this field is set, then the allowed pattern for 'value'
    #     is `^([0-9]{1,2}(\\.\\d{1,2})?|100(\\.0{1,2})?)$`.
    #     Examples of valid values: "0", "100.0", "12.34", "40.0".
    #     Example of invalid values: ".3", "-1", "100.1", "12.345", "+12", "".
    #
    #     Must be present to publish the offer.
    # @!attribute [rw] additional_credit
    #   @return [::Google::Type::Money]
    #     Optional. Additional credit granted to the customer.
    #     Additional credits are only supported for custom interval offers.
    #     Equivalent behavior can be achieved for standard interval offers by
    #     varying the `commitment_amount` and `discount_percent`.
    #
    #     Value cannot be negative.
    #     The currency must be "USD" and precision is limited to cents.
    #     The maximum allowed value is 1,000,000 USD.
    # @!attribute [rw] discard_previous_credit_balance
    #   @return [::Boolean]
    #     Optional. Whether to discard the previous credit balance when the
    #     associated installment starts. If not set, the previous credit
    #     balance will be rolled over to the current installment.
    #
    #     If there are no previous installments, then the value of this field
    #     will not matter - since it has no effect when no credits exist.
    class Commitment
      include ::Google::Protobuf::MessageExts
      extend ::Google::Protobuf::MessageExts::ClassMethods
    end
  end

  # Price configurations for offers with standard intervals.
  # @!attribute [rw] standard_interval
  #   @return [::Google::Cloud::CommerceProducer::V1beta::PrivateOffer::SingleProductOffer::StandardIntervalPrice::StandardInterval]
  #     Optional. The standard interval of the offer.
  #     Must be present to publish unless the price model is usage-only.
  # @!attribute [rw] price_model
  #   @return [::Google::Cloud::CommerceProducer::V1beta::PrivateOffer::SingleProductOffer::PriceModel]
  #     Optional. The price model of the offer.
  #     Must be present to publish the offer.
  class StandardIntervalPrice
    include ::Google::Protobuf::MessageExts
    extend ::Google::Protobuf::MessageExts::ClassMethods

    # The options for offers with standard intervals.
    module StandardInterval
      # The private offer does not have an interval.
      # If this is set, then the offer is "usage-only".
      # Field `term.duration_months` must be positive.
      STANDARD_INTERVAL_UNSPECIFIED = 0

      # The schedule of the monthly postpay offers.
      # This type of offer has "Monthly" billing frequency (see
      # https://docs.cloud.google.com/marketplace/docs/partners/offers/select-payment-schedule).
      # No longer supported as of May 2024. Cannot be used to publish
      # new offers.
      MONTHLY_POSTPAY = 1

      # Monthly installments with proration.
      # This type of offer has "Monthly" billing frequency (see
      # https://docs.cloud.google.com/marketplace/docs/partners/offers/select-payment-schedule).
      # For example, if the offer starts on 04/15, and the offer duration is
      # 3 months, the following installments will be created:
      # # 1: from 04/15 to 05/01, at the prorated price for April.
      #
      # # 2: from 05/01 to 06/01, at the full monthly price for May.
      #
      # # 3: from 06/01 to 07/01, at the full monthly price for June.
      #
      # # 4: from 07/01 to 07/15, at the prorated price for July.
      #
      # All dates represent the start of that day in the America/Los_Angeles
      # time zone.
      #
      # If this is set:
      #
      # * The `PriceModel.subscription` oneof must be set.
      # * Field `term.duration_months` must be positive.
      MONTHLY_PRORATED = 2

      # Monthly installments without proration.
      # This type of offer has "Monthly" billing frequency (see
      # https://docs.cloud.google.com/marketplace/docs/partners/offers/select-payment-schedule).
      # For example, if the offer starts on 04/15, and the offer duration is
      # 3 months, the following installments will be created:
      # # 1: from 04/15 to 05/15, at the full monthly price.
      #
      # # 2: from 05/15 to 06/15, at the full monthly price.
      #
      # # 3: from 06/15 to 07/15, at the full monthly price.
      #
      # All dates represent the start of that day in the America/Los_Angeles
      # time zone.
      #
      # If this is set:
      #
      # * The `PriceModel.subscription` oneof must be set.
      # * Field `term.duration_months` must be positive.
      MONTHLY_NOT_PRORATED = 3

      # Quarterly installments which are not prorated.
      # This type of offer has "Quarterly" billing frequency (see
      # https://docs.cloud.google.com/marketplace/docs/partners/offers/select-payment-schedule).
      # For example, if the offer starts on 01/15, and the offer duration is
      # 3 quarters, the following installments will be created:
      # # 1: from 01/15 to 04/15, at the full quarterly price.
      #
      # # 2: from 04/15 to 07/15, at the full quarterly price.
      #
      # # 3: from 07/15 to 10/15, at the full quarterly price.
      #
      # All dates represent the start of that day in the America/Los_Angeles
      # time zone.
      #
      # If this is set:
      #
      # * The `PriceModel.subscription` oneof must be set.
      # * Field `term.duration_months` must be positive.
      QUARTERLY_NOT_PRORATED = 4

      # Yearly installments which are not prorated.
      # This type of offer has "Yearly" billing frequency (see
      # https://docs.cloud.google.com/marketplace/docs/partners/offers/select-payment-schedule).
      # For example, if the offer starts on 01/15/2025, and the offer
      # duration is 3 years, the following installments will be created:
      # # 1: from 01/15/2025 to 01/15/2026, at the full yearly price.
      #
      # # 2: from 01/15/2026 to 01/15/2027, at the full yearly price.
      #
      # # 3: from 01/15/2027 to 01/15/2028, at the full yearly price.
      #
      # All dates represent the start of that day in the America/Los_Angeles
      # time zone.
      #
      # If this is set:
      #
      # * The `PriceModel.subscription` oneof must be set.
      # * Field `term.duration_months` must be positive.
      YEARLY_NOT_PRORATED = 5
    end
  end

  # An installment of the offer.
  # @!attribute [rw] start_time
  #   @return [::Google::Type::DateTime]
  #     Optional. The start time of the installment.
  #     Each installment must have a unique start time with one exception:
  #     When the `term.start_policy` of the offer's term is `IMMEDIATE`,
  #     the `start_time` of the first installment must be unset.
  #     The actual start time is not recorded in the offer and instead is
  #     determined by the time the resulting order became active.
  #
  #     When the `term.start_policy` of the offer's term is
  #     `SCHEDULED_START_TIME`, then the first installment's `start_time` must
  #     match `term.scheduled_start_time`.
  #
  #     If the `term.end_policy` of the offer's term is `SCHEDULED_END_TIME`,
  #     then installment `start_time` must be before `term.scheduled_end_time`.
  #     If it's `AFTER_DURATION`, then installment `start_time` must be before
  #     the time calculated by adding the `term.duration_months` to
  #     the start time of the offer.
  #
  #     The `start_time` of the installments cannot be before the
  #     `accept_deadline_time` of the offer.
  #
  #     Installment start times must be in strictly increasing chronological
  #     order.
  # @!attribute [rw] price_model
  #   @return [::Google::Cloud::CommerceProducer::V1beta::PrivateOffer::SingleProductOffer::PriceModel]
  #     Optional. The price model of the installment.
  #     All installments must have the same form of price model.
  class Installment
    include ::Google::Protobuf::MessageExts
    extend ::Google::Protobuf::MessageExts::ClassMethods
  end

  # Price configurations for offers with custom intervals.
  # @!attribute [rw] installments
  #   @return [::Array<::Google::Cloud::CommerceProducer::V1beta::PrivateOffer::SingleProductOffer::Installment>]
  #     Optional. The installments that make up the installment timeline.
  #     All installments must have the same form of price model (e.g.
  #     all commitment, or all flat fee). A subscription must be present
  #     under the price model for every installment.
  #
  #     Must contain at least one installment to publish the offer.
  class CustomIntervalPrice
    include ::Google::Protobuf::MessageExts
    extend ::Google::Protobuf::MessageExts::ClassMethods
  end

  # The contract value of the offer.
  # @!attribute [r] total_contract_value
  #   @return [::Google::Type::Money]
  #     Output only. The total contract value of the offer.
  #     This will be set for all non-draft private offers, as long as
  #     'PRIVATE_OFFER_VIEW_FULL' is requested. For DRAFT private offers,
  #     this will be populated only when the end user's billing account is
  #     set and when the pricing and term configuration is sufficiently
  #     complete to allow for a calculation.
  class ContractValue
    include ::Google::Protobuf::MessageExts
    extend ::Google::Protobuf::MessageExts::ClassMethods
  end

  # Revenue Share information for a Private Offer.
  # For more details about the revenue share, including how the value is
  # determined, see
  # https://docs.cloud.google.com/marketplace/docs/partners/revenue-share-scenarios.
  #
  # Not included for `PRIVATE_OFFER_VIEW_BASIC`, or for DRAFT private offers.
  #
  # For non-draft private offers, these fields are populated based on the
  # following:
  #
  # * Offers published after April 20, 2025 will always have revenue
  #   share fields populated.
  # * Offers published on or before April 20, 2025 will only have revenue
  #   share fields populated if they were associated with an active,
  #   unexpired order on that date.
  # @!attribute [r] current_term_vendor_net_revenue_percent
  #   @return [::Google::Type::Decimal]
  #     Output only. The revenue share currently in effect.
  #
  #     The range of the value is between 0 and 100. For example, 80
  #     means the Vendor's current term revenue share is 80%. The vendor
  #     will keep 80% of the revenue.
  #     .
  # @!attribute [r] renewal_term_vendor_net_revenue_percent
  #   @return [::Google::Type::Decimal]
  #     Output only. The expected revenue share for the renewal term.
  #     Not included if the offer does not have renewal terms.
  #
  #     The range of the value is between 0 and 100. For example, 80
  #     means the Vendor's current term revenue share is 80%. The vendor
  #     will keep 80% of the revenue after renewal.
  #     .
  class RevenueShare
    include ::Google::Protobuf::MessageExts
    extend ::Google::Protobuf::MessageExts::ClassMethods
  end
end

#amended_standard_offer::String

Returns Optional. An existing standard offer that will be superseded by this offer. An amendment private offer must be transacted if the destination customer billing account already contains an active order for the same product, and otherwise cannot be transacted. The offer to be superseded must be the offer associated with the active order.

If this is set, then the base_standard_offer must contain the same parent service as the parent service of the amended_standard_offer. The price model of this offer must be compatible with the price model of the amended_standard_offer:

  • Flat Fee, or Flat Fee with usage offers can amend Flat Fee or Flat Fee with usage standard offers.
  • Usage-only offers, or CUD offers can amend usage-only standard offers.

Other criteria for offer amendment are detailed elsewhere.

Note: The following fields are mutually exclusive: amended_standard_offer, amended_private_offer. If a field in that set is populated, all other fields in the set will automatically be cleared.

Returns:

  • (::String)

    Optional. An existing standard offer that will be superseded by this offer. An amendment private offer must be transacted if the destination customer billing account already contains an active order for the same product, and otherwise cannot be transacted. The offer to be superseded must be the offer associated with the active order.

    If this is set, then the base_standard_offer must contain the same parent service as the parent service of the amended_standard_offer. The price model of this offer must be compatible with the price model of the amended_standard_offer:

    • Flat Fee, or Flat Fee with usage offers can amend Flat Fee or Flat Fee with usage standard offers.
    • Usage-only offers, or CUD offers can amend usage-only standard offers.

    Other criteria for offer amendment are detailed elsewhere.

    Note: The following fields are mutually exclusive: amended_standard_offer, amended_private_offer. If a field in that set is populated, all other fields in the set will automatically be cleared.



554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
# File 'proto_docs/google/cloud/commerceproducer/v1beta/private_offer.rb', line 554

class SingleProductOffer
  include ::Google::Protobuf::MessageExts
  extend ::Google::Protobuf::MessageExts::ClassMethods

  # Additional details used to describe customization of the service level.
  #
  # Features are used to distinguish service levels of the same product.
  # When a product has a single service level, all details can be contained
  # in the product documentation. When a product has multiple service levels,
  # each service level can be assigned a distinct set of features to
  # distinguish the key differences between the service levels.
  #
  # In addition to customizing pricing and other transaction details, a
  # private offer may include customization of partner-managed product
  # behavior. When this is the case, the details of the custom behavior are
  # described using features.
  # @!attribute [rw] display_name
  #   @return [::String]
  #     Optional. Human readable display text characterizing the feature.
  #     Should be sufficiently detailed to identify the feature, allowing
  #     features to be correlated across separate offers and service levels.
  #     Must be non-empty to publish the offer.
  #     The maximum allowed length is 128 characters.
  #     Allows characters from the following Unicode Property Classes:
  #     Letters, Numbers, Punctuation, Symbols, and Separators
  # @!attribute [rw] value
  #   @return [::String]
  #     Optional. Human readable display text reflecting the value of the
  #     feature. Used for variable features not captured by the display_name
  #     alone. The maximum allowed length is 3000 characters. Allows characters
  #     from the following Unicode Property Classes: Letters, Numbers,
  #     Punctuation, Symbols, and Separators
  class Feature
    include ::Google::Protobuf::MessageExts
    extend ::Google::Protobuf::MessageExts::ClassMethods
  end

  # The price model of the private offer.
  #
  # Private offers are referred to as having different kinds of price models
  # based on the combination of fields set in the price model. The following
  # terminology is used in documentation and other reference material.
  #
  # * Usage-based: the price model does not set `flat_fee`
  # * Usage-only: the price model sets only `usage`
  # * CUD (committed use discount): the price model sets `commitment`
  #     * Commitment discount with additional usage at list price:
  #       The price model sets `commitment` and not `usage`.
  #     * Commitment with all usage discounted: The price model sets
  #       `commitment` and `usage`.
  # * Flat fee: the price model sets only `flat_fee`
  # * Flat fee with usage: the price model sets `flat_fee` and `usage`
  #
  # See
  # https://docs.cloud.google.com/marketplace/docs/partners/offers/select-pricing-model#CUD
  # for the price models.
  # @!attribute [rw] flat_fee
  #   @return [::Google::Cloud::CommerceProducer::V1beta::PrivateOffer::SingleProductOffer::PriceModel::FlatFee]
  #     Optional. The price configurations for the flat fee subscription.
  #     Must be unset when the base standard offer's price model does not
  #     include subscription SKUs.
  #
  #     Note: The following fields are mutually exclusive: `flat_fee`, `commitment`. If a field in that set is populated, all other fields in the set will automatically be cleared.
  # @!attribute [rw] commitment
  #   @return [::Google::Cloud::CommerceProducer::V1beta::PrivateOffer::SingleProductOffer::PriceModel::Commitment]
  #     Optional. The price configurations for the commitment based
  #     subscription. Must be unset when the base standard offer's price
  #     model includes subscription SKUs.
  #
  #     Note: The following fields are mutually exclusive: `commitment`, `flat_fee`. If a field in that set is populated, all other fields in the set will automatically be cleared.
  # @!attribute [rw] usage
  #   @return [::Google::Cloud::CommerceProducer::V1beta::PrivateOffer::SingleProductOffer::PriceModel::Usage]
  #     Optional. The price configurations for the usage part.
  #     If this field is set, the `Commitment.discount_percent` must be unset.
  #     A private offer can apply a discount to all usage or to a usage
  #     commitment, but not both.
  #     Must be unset when the base standard offer's price model includes no
  #     usage SKUs.
  class PriceModel
    include ::Google::Protobuf::MessageExts
    extend ::Google::Protobuf::MessageExts::ClassMethods

    # The discount for a specific SKU.
    # @!attribute [rw] sku
    #   @return [::String]
    #     Optional. The name of a partner SKU from this API.
    #
    #     Must refer to a SKU in the price model of the base standard offer.
    #     Inclusion in the base price model can occur either directly or
    #     indirectly via inclusion in an included SkuGroup.
    #
    #     Currently, standard offer price models include only partner SKUs
    #     in the same project as the standard offer. This may change.
    #
    #     Format:
    #     projects/\\{project}/locations/\\{location}/services/\\{service}/skus/\\{sku}
    #
    #     Note: The following fields are mutually exclusive: `sku`, `cloud_billing_sku`. If a field in that set is populated, all other fields in the set will automatically be cleared.
    # @!attribute [rw] cloud_billing_sku
    #   @return [::String]
    #     Optional. The name of a Google SKU from the Cloud Billing API.
    #
    #     Used for partner products sold by Google, such as Premium Operating
    #     System Images sold for use in Compute Engine. This is not common.
    #     SKUs of this type are not present on this API and can instead be
    #     found on the Cloud Billing API or at https://cloud.google.com/skus.
    #
    #     Must refer to a SKU in the price model of the base standard offer.
    #     Google SKUs are always referenced in standard offers via SkuGroups.
    #
    #     Format: services/\\{service}/skus/\\{sku}
    #
    #     Note: The following fields are mutually exclusive: `cloud_billing_sku`, `sku`. If a field in that set is populated, all other fields in the set will automatically be cleared.
    # @!attribute [rw] discount_percent
    #   @return [::Google::Type::Decimal]
    #     Optional. The discount percent for the SKU.
    #     For example, `10` means a discount of 10%. If the original SKU
    #     price is $100/hour then the discounted price will be $90/hour.
    #
    #     Must be between 0 and 100 inclusive, with precision up to 2 decimal
    #     places. If this field is set, then the allowed pattern for 'value'
    #     is `^([0-9]{1,2}(\\.\\d{1,2})?|100(\\.0{1,2})?)$`.
    #
    #     Examples of valid values: "0", "100.0", "12.34", "40.0".
    #     Example of invalid values: ".3", "-1", "100.1", "12.345", "+12",
    #     and "".
    #     Must be present to publish the offer.
    class SkuDiscount
      include ::Google::Protobuf::MessageExts
      extend ::Google::Protobuf::MessageExts::ClassMethods
    end

    # The price for the usage SKUs.
    # @!attribute [rw] default_discount_percent
    #   @return [::Google::Type::Decimal]
    #     Optional. The default discount percent for usage SKUs.
    #     An unset default discount percent is equivalent to 0 (no discount).
    #
    #     Must be between 0 and 100 inclusive, with precision up to 2 decimal
    #     places. If this field is set, then the allowed pattern for 'value'
    #     is `^([0-9]{1,2}(\\.\\d{1,2})?|100(\\.0{1,2})?)$`.
    #     Examples of valid values: "0", "100.0", "12.34", "40.0".
    #     Example of invalid values: ".3", "-1", "100.1", "12.345", "+12", "".
    # @!attribute [rw] sku_discounts
    #   @return [::Array<::Google::Cloud::CommerceProducer::V1beta::PrivateOffer::SingleProductOffer::PriceModel::SkuDiscount>]
    #     Optional. The discounts for the specific SKUs that override the
    #     `default_discount_percent`.
    class Usage
      include ::Google::Protobuf::MessageExts
      extend ::Google::Protobuf::MessageExts::ClassMethods
    end

    # The price configurations for the flat fee subscriptions.
    # @!attribute [rw] flat_fee_override
    #   @return [::Google::Type::Money]
    #     Optional. Flat fee overriding the default flat fee in the base
    #     standard offer. Value cannot be negative. The currency must be "USD"
    #     and precision is limited to cents. Must be present to publish the
    #     offer, if the parent message is set. The maximum allowed value is
    #     1,000,000,000 USD.
    class FlatFee
      include ::Google::Protobuf::MessageExts
      extend ::Google::Protobuf::MessageExts::ClassMethods
    end

    # The price configurations for the commitment based subscriptions.
    # @!attribute [rw] commitment_amount
    #   @return [::Google::Type::Money]
    #     Optional. The commitment balance that the customer will receive.
    #     Value cannot be negative.
    #     The currency must be "USD" and precision is limited to cents.
    #     Must be present to publish the offer, if the parent message is set.
    #     The maximum allowed value is 1,000,000,000 USD.
    #
    #     If the current offer amends a private offer where the term has not
    #     ended, and if the field
    #     `single_product_offer.standard_interval_price.price_model.commitment.commitment_amount`
    #     is set on both the current offer and the amended private offer, then
    #     the commitment amount must be equal or higher on the current offer,
    #     compared to the amended private offer.
    # @!attribute [rw] discount_percent
    #   @return [::Google::Type::Decimal]
    #     Optional. The discount percent on `commitment_amount`.
    #
    #     For example, `10` means a discount of 10%. If the original
    #     `commitment_amount` is $100 then the discounted amount will be $90.
    #     The customer is charged $90 and receives $100 in credits.
    #
    #     All reported usage will be charged at the standard price.
    #     If this field is set, the `price_model.usage` must be unset. A
    #     private offer can apply a discount to all usage or to a usage
    #     commitment, but not both.
    #
    #     Must be between 0 and 100 inclusive, with precision up to 2 decimal
    #     places. If this field is set, then the allowed pattern for 'value'
    #     is `^([0-9]{1,2}(\\.\\d{1,2})?|100(\\.0{1,2})?)$`.
    #     Examples of valid values: "0", "100.0", "12.34", "40.0".
    #     Example of invalid values: ".3", "-1", "100.1", "12.345", "+12", "".
    #
    #     Must be present to publish the offer.
    # @!attribute [rw] additional_credit
    #   @return [::Google::Type::Money]
    #     Optional. Additional credit granted to the customer.
    #     Additional credits are only supported for custom interval offers.
    #     Equivalent behavior can be achieved for standard interval offers by
    #     varying the `commitment_amount` and `discount_percent`.
    #
    #     Value cannot be negative.
    #     The currency must be "USD" and precision is limited to cents.
    #     The maximum allowed value is 1,000,000 USD.
    # @!attribute [rw] discard_previous_credit_balance
    #   @return [::Boolean]
    #     Optional. Whether to discard the previous credit balance when the
    #     associated installment starts. If not set, the previous credit
    #     balance will be rolled over to the current installment.
    #
    #     If there are no previous installments, then the value of this field
    #     will not matter - since it has no effect when no credits exist.
    class Commitment
      include ::Google::Protobuf::MessageExts
      extend ::Google::Protobuf::MessageExts::ClassMethods
    end
  end

  # Price configurations for offers with standard intervals.
  # @!attribute [rw] standard_interval
  #   @return [::Google::Cloud::CommerceProducer::V1beta::PrivateOffer::SingleProductOffer::StandardIntervalPrice::StandardInterval]
  #     Optional. The standard interval of the offer.
  #     Must be present to publish unless the price model is usage-only.
  # @!attribute [rw] price_model
  #   @return [::Google::Cloud::CommerceProducer::V1beta::PrivateOffer::SingleProductOffer::PriceModel]
  #     Optional. The price model of the offer.
  #     Must be present to publish the offer.
  class StandardIntervalPrice
    include ::Google::Protobuf::MessageExts
    extend ::Google::Protobuf::MessageExts::ClassMethods

    # The options for offers with standard intervals.
    module StandardInterval
      # The private offer does not have an interval.
      # If this is set, then the offer is "usage-only".
      # Field `term.duration_months` must be positive.
      STANDARD_INTERVAL_UNSPECIFIED = 0

      # The schedule of the monthly postpay offers.
      # This type of offer has "Monthly" billing frequency (see
      # https://docs.cloud.google.com/marketplace/docs/partners/offers/select-payment-schedule).
      # No longer supported as of May 2024. Cannot be used to publish
      # new offers.
      MONTHLY_POSTPAY = 1

      # Monthly installments with proration.
      # This type of offer has "Monthly" billing frequency (see
      # https://docs.cloud.google.com/marketplace/docs/partners/offers/select-payment-schedule).
      # For example, if the offer starts on 04/15, and the offer duration is
      # 3 months, the following installments will be created:
      # # 1: from 04/15 to 05/01, at the prorated price for April.
      #
      # # 2: from 05/01 to 06/01, at the full monthly price for May.
      #
      # # 3: from 06/01 to 07/01, at the full monthly price for June.
      #
      # # 4: from 07/01 to 07/15, at the prorated price for July.
      #
      # All dates represent the start of that day in the America/Los_Angeles
      # time zone.
      #
      # If this is set:
      #
      # * The `PriceModel.subscription` oneof must be set.
      # * Field `term.duration_months` must be positive.
      MONTHLY_PRORATED = 2

      # Monthly installments without proration.
      # This type of offer has "Monthly" billing frequency (see
      # https://docs.cloud.google.com/marketplace/docs/partners/offers/select-payment-schedule).
      # For example, if the offer starts on 04/15, and the offer duration is
      # 3 months, the following installments will be created:
      # # 1: from 04/15 to 05/15, at the full monthly price.
      #
      # # 2: from 05/15 to 06/15, at the full monthly price.
      #
      # # 3: from 06/15 to 07/15, at the full monthly price.
      #
      # All dates represent the start of that day in the America/Los_Angeles
      # time zone.
      #
      # If this is set:
      #
      # * The `PriceModel.subscription` oneof must be set.
      # * Field `term.duration_months` must be positive.
      MONTHLY_NOT_PRORATED = 3

      # Quarterly installments which are not prorated.
      # This type of offer has "Quarterly" billing frequency (see
      # https://docs.cloud.google.com/marketplace/docs/partners/offers/select-payment-schedule).
      # For example, if the offer starts on 01/15, and the offer duration is
      # 3 quarters, the following installments will be created:
      # # 1: from 01/15 to 04/15, at the full quarterly price.
      #
      # # 2: from 04/15 to 07/15, at the full quarterly price.
      #
      # # 3: from 07/15 to 10/15, at the full quarterly price.
      #
      # All dates represent the start of that day in the America/Los_Angeles
      # time zone.
      #
      # If this is set:
      #
      # * The `PriceModel.subscription` oneof must be set.
      # * Field `term.duration_months` must be positive.
      QUARTERLY_NOT_PRORATED = 4

      # Yearly installments which are not prorated.
      # This type of offer has "Yearly" billing frequency (see
      # https://docs.cloud.google.com/marketplace/docs/partners/offers/select-payment-schedule).
      # For example, if the offer starts on 01/15/2025, and the offer
      # duration is 3 years, the following installments will be created:
      # # 1: from 01/15/2025 to 01/15/2026, at the full yearly price.
      #
      # # 2: from 01/15/2026 to 01/15/2027, at the full yearly price.
      #
      # # 3: from 01/15/2027 to 01/15/2028, at the full yearly price.
      #
      # All dates represent the start of that day in the America/Los_Angeles
      # time zone.
      #
      # If this is set:
      #
      # * The `PriceModel.subscription` oneof must be set.
      # * Field `term.duration_months` must be positive.
      YEARLY_NOT_PRORATED = 5
    end
  end

  # An installment of the offer.
  # @!attribute [rw] start_time
  #   @return [::Google::Type::DateTime]
  #     Optional. The start time of the installment.
  #     Each installment must have a unique start time with one exception:
  #     When the `term.start_policy` of the offer's term is `IMMEDIATE`,
  #     the `start_time` of the first installment must be unset.
  #     The actual start time is not recorded in the offer and instead is
  #     determined by the time the resulting order became active.
  #
  #     When the `term.start_policy` of the offer's term is
  #     `SCHEDULED_START_TIME`, then the first installment's `start_time` must
  #     match `term.scheduled_start_time`.
  #
  #     If the `term.end_policy` of the offer's term is `SCHEDULED_END_TIME`,
  #     then installment `start_time` must be before `term.scheduled_end_time`.
  #     If it's `AFTER_DURATION`, then installment `start_time` must be before
  #     the time calculated by adding the `term.duration_months` to
  #     the start time of the offer.
  #
  #     The `start_time` of the installments cannot be before the
  #     `accept_deadline_time` of the offer.
  #
  #     Installment start times must be in strictly increasing chronological
  #     order.
  # @!attribute [rw] price_model
  #   @return [::Google::Cloud::CommerceProducer::V1beta::PrivateOffer::SingleProductOffer::PriceModel]
  #     Optional. The price model of the installment.
  #     All installments must have the same form of price model.
  class Installment
    include ::Google::Protobuf::MessageExts
    extend ::Google::Protobuf::MessageExts::ClassMethods
  end

  # Price configurations for offers with custom intervals.
  # @!attribute [rw] installments
  #   @return [::Array<::Google::Cloud::CommerceProducer::V1beta::PrivateOffer::SingleProductOffer::Installment>]
  #     Optional. The installments that make up the installment timeline.
  #     All installments must have the same form of price model (e.g.
  #     all commitment, or all flat fee). A subscription must be present
  #     under the price model for every installment.
  #
  #     Must contain at least one installment to publish the offer.
  class CustomIntervalPrice
    include ::Google::Protobuf::MessageExts
    extend ::Google::Protobuf::MessageExts::ClassMethods
  end

  # The contract value of the offer.
  # @!attribute [r] total_contract_value
  #   @return [::Google::Type::Money]
  #     Output only. The total contract value of the offer.
  #     This will be set for all non-draft private offers, as long as
  #     'PRIVATE_OFFER_VIEW_FULL' is requested. For DRAFT private offers,
  #     this will be populated only when the end user's billing account is
  #     set and when the pricing and term configuration is sufficiently
  #     complete to allow for a calculation.
  class ContractValue
    include ::Google::Protobuf::MessageExts
    extend ::Google::Protobuf::MessageExts::ClassMethods
  end

  # Revenue Share information for a Private Offer.
  # For more details about the revenue share, including how the value is
  # determined, see
  # https://docs.cloud.google.com/marketplace/docs/partners/revenue-share-scenarios.
  #
  # Not included for `PRIVATE_OFFER_VIEW_BASIC`, or for DRAFT private offers.
  #
  # For non-draft private offers, these fields are populated based on the
  # following:
  #
  # * Offers published after April 20, 2025 will always have revenue
  #   share fields populated.
  # * Offers published on or before April 20, 2025 will only have revenue
  #   share fields populated if they were associated with an active,
  #   unexpired order on that date.
  # @!attribute [r] current_term_vendor_net_revenue_percent
  #   @return [::Google::Type::Decimal]
  #     Output only. The revenue share currently in effect.
  #
  #     The range of the value is between 0 and 100. For example, 80
  #     means the Vendor's current term revenue share is 80%. The vendor
  #     will keep 80% of the revenue.
  #     .
  # @!attribute [r] renewal_term_vendor_net_revenue_percent
  #   @return [::Google::Type::Decimal]
  #     Output only. The expected revenue share for the renewal term.
  #     Not included if the offer does not have renewal terms.
  #
  #     The range of the value is between 0 and 100. For example, 80
  #     means the Vendor's current term revenue share is 80%. The vendor
  #     will keep 80% of the revenue after renewal.
  #     .
  class RevenueShare
    include ::Google::Protobuf::MessageExts
    extend ::Google::Protobuf::MessageExts::ClassMethods
  end
end

#base_standard_offer::String

Returns Optional. The StandardOffer this PrivateOffer is based on. Must be in the same project as the private offer, and must be effective at the time of publishing. Must be present to publish the offer.

Format: projects/{project}/locations/{location}/services/{service}/standardOffers/{standard_offer}.

Returns:

  • (::String)

    Optional. The StandardOffer this PrivateOffer is based on. Must be in the same project as the private offer, and must be effective at the time of publishing. Must be present to publish the offer.

    Format: projects/{project}/locations/{location}/services/{service}/standardOffers/{standard_offer}



554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
# File 'proto_docs/google/cloud/commerceproducer/v1beta/private_offer.rb', line 554

class SingleProductOffer
  include ::Google::Protobuf::MessageExts
  extend ::Google::Protobuf::MessageExts::ClassMethods

  # Additional details used to describe customization of the service level.
  #
  # Features are used to distinguish service levels of the same product.
  # When a product has a single service level, all details can be contained
  # in the product documentation. When a product has multiple service levels,
  # each service level can be assigned a distinct set of features to
  # distinguish the key differences between the service levels.
  #
  # In addition to customizing pricing and other transaction details, a
  # private offer may include customization of partner-managed product
  # behavior. When this is the case, the details of the custom behavior are
  # described using features.
  # @!attribute [rw] display_name
  #   @return [::String]
  #     Optional. Human readable display text characterizing the feature.
  #     Should be sufficiently detailed to identify the feature, allowing
  #     features to be correlated across separate offers and service levels.
  #     Must be non-empty to publish the offer.
  #     The maximum allowed length is 128 characters.
  #     Allows characters from the following Unicode Property Classes:
  #     Letters, Numbers, Punctuation, Symbols, and Separators
  # @!attribute [rw] value
  #   @return [::String]
  #     Optional. Human readable display text reflecting the value of the
  #     feature. Used for variable features not captured by the display_name
  #     alone. The maximum allowed length is 3000 characters. Allows characters
  #     from the following Unicode Property Classes: Letters, Numbers,
  #     Punctuation, Symbols, and Separators
  class Feature
    include ::Google::Protobuf::MessageExts
    extend ::Google::Protobuf::MessageExts::ClassMethods
  end

  # The price model of the private offer.
  #
  # Private offers are referred to as having different kinds of price models
  # based on the combination of fields set in the price model. The following
  # terminology is used in documentation and other reference material.
  #
  # * Usage-based: the price model does not set `flat_fee`
  # * Usage-only: the price model sets only `usage`
  # * CUD (committed use discount): the price model sets `commitment`
  #     * Commitment discount with additional usage at list price:
  #       The price model sets `commitment` and not `usage`.
  #     * Commitment with all usage discounted: The price model sets
  #       `commitment` and `usage`.
  # * Flat fee: the price model sets only `flat_fee`
  # * Flat fee with usage: the price model sets `flat_fee` and `usage`
  #
  # See
  # https://docs.cloud.google.com/marketplace/docs/partners/offers/select-pricing-model#CUD
  # for the price models.
  # @!attribute [rw] flat_fee
  #   @return [::Google::Cloud::CommerceProducer::V1beta::PrivateOffer::SingleProductOffer::PriceModel::FlatFee]
  #     Optional. The price configurations for the flat fee subscription.
  #     Must be unset when the base standard offer's price model does not
  #     include subscription SKUs.
  #
  #     Note: The following fields are mutually exclusive: `flat_fee`, `commitment`. If a field in that set is populated, all other fields in the set will automatically be cleared.
  # @!attribute [rw] commitment
  #   @return [::Google::Cloud::CommerceProducer::V1beta::PrivateOffer::SingleProductOffer::PriceModel::Commitment]
  #     Optional. The price configurations for the commitment based
  #     subscription. Must be unset when the base standard offer's price
  #     model includes subscription SKUs.
  #
  #     Note: The following fields are mutually exclusive: `commitment`, `flat_fee`. If a field in that set is populated, all other fields in the set will automatically be cleared.
  # @!attribute [rw] usage
  #   @return [::Google::Cloud::CommerceProducer::V1beta::PrivateOffer::SingleProductOffer::PriceModel::Usage]
  #     Optional. The price configurations for the usage part.
  #     If this field is set, the `Commitment.discount_percent` must be unset.
  #     A private offer can apply a discount to all usage or to a usage
  #     commitment, but not both.
  #     Must be unset when the base standard offer's price model includes no
  #     usage SKUs.
  class PriceModel
    include ::Google::Protobuf::MessageExts
    extend ::Google::Protobuf::MessageExts::ClassMethods

    # The discount for a specific SKU.
    # @!attribute [rw] sku
    #   @return [::String]
    #     Optional. The name of a partner SKU from this API.
    #
    #     Must refer to a SKU in the price model of the base standard offer.
    #     Inclusion in the base price model can occur either directly or
    #     indirectly via inclusion in an included SkuGroup.
    #
    #     Currently, standard offer price models include only partner SKUs
    #     in the same project as the standard offer. This may change.
    #
    #     Format:
    #     projects/\\{project}/locations/\\{location}/services/\\{service}/skus/\\{sku}
    #
    #     Note: The following fields are mutually exclusive: `sku`, `cloud_billing_sku`. If a field in that set is populated, all other fields in the set will automatically be cleared.
    # @!attribute [rw] cloud_billing_sku
    #   @return [::String]
    #     Optional. The name of a Google SKU from the Cloud Billing API.
    #
    #     Used for partner products sold by Google, such as Premium Operating
    #     System Images sold for use in Compute Engine. This is not common.
    #     SKUs of this type are not present on this API and can instead be
    #     found on the Cloud Billing API or at https://cloud.google.com/skus.
    #
    #     Must refer to a SKU in the price model of the base standard offer.
    #     Google SKUs are always referenced in standard offers via SkuGroups.
    #
    #     Format: services/\\{service}/skus/\\{sku}
    #
    #     Note: The following fields are mutually exclusive: `cloud_billing_sku`, `sku`. If a field in that set is populated, all other fields in the set will automatically be cleared.
    # @!attribute [rw] discount_percent
    #   @return [::Google::Type::Decimal]
    #     Optional. The discount percent for the SKU.
    #     For example, `10` means a discount of 10%. If the original SKU
    #     price is $100/hour then the discounted price will be $90/hour.
    #
    #     Must be between 0 and 100 inclusive, with precision up to 2 decimal
    #     places. If this field is set, then the allowed pattern for 'value'
    #     is `^([0-9]{1,2}(\\.\\d{1,2})?|100(\\.0{1,2})?)$`.
    #
    #     Examples of valid values: "0", "100.0", "12.34", "40.0".
    #     Example of invalid values: ".3", "-1", "100.1", "12.345", "+12",
    #     and "".
    #     Must be present to publish the offer.
    class SkuDiscount
      include ::Google::Protobuf::MessageExts
      extend ::Google::Protobuf::MessageExts::ClassMethods
    end

    # The price for the usage SKUs.
    # @!attribute [rw] default_discount_percent
    #   @return [::Google::Type::Decimal]
    #     Optional. The default discount percent for usage SKUs.
    #     An unset default discount percent is equivalent to 0 (no discount).
    #
    #     Must be between 0 and 100 inclusive, with precision up to 2 decimal
    #     places. If this field is set, then the allowed pattern for 'value'
    #     is `^([0-9]{1,2}(\\.\\d{1,2})?|100(\\.0{1,2})?)$`.
    #     Examples of valid values: "0", "100.0", "12.34", "40.0".
    #     Example of invalid values: ".3", "-1", "100.1", "12.345", "+12", "".
    # @!attribute [rw] sku_discounts
    #   @return [::Array<::Google::Cloud::CommerceProducer::V1beta::PrivateOffer::SingleProductOffer::PriceModel::SkuDiscount>]
    #     Optional. The discounts for the specific SKUs that override the
    #     `default_discount_percent`.
    class Usage
      include ::Google::Protobuf::MessageExts
      extend ::Google::Protobuf::MessageExts::ClassMethods
    end

    # The price configurations for the flat fee subscriptions.
    # @!attribute [rw] flat_fee_override
    #   @return [::Google::Type::Money]
    #     Optional. Flat fee overriding the default flat fee in the base
    #     standard offer. Value cannot be negative. The currency must be "USD"
    #     and precision is limited to cents. Must be present to publish the
    #     offer, if the parent message is set. The maximum allowed value is
    #     1,000,000,000 USD.
    class FlatFee
      include ::Google::Protobuf::MessageExts
      extend ::Google::Protobuf::MessageExts::ClassMethods
    end

    # The price configurations for the commitment based subscriptions.
    # @!attribute [rw] commitment_amount
    #   @return [::Google::Type::Money]
    #     Optional. The commitment balance that the customer will receive.
    #     Value cannot be negative.
    #     The currency must be "USD" and precision is limited to cents.
    #     Must be present to publish the offer, if the parent message is set.
    #     The maximum allowed value is 1,000,000,000 USD.
    #
    #     If the current offer amends a private offer where the term has not
    #     ended, and if the field
    #     `single_product_offer.standard_interval_price.price_model.commitment.commitment_amount`
    #     is set on both the current offer and the amended private offer, then
    #     the commitment amount must be equal or higher on the current offer,
    #     compared to the amended private offer.
    # @!attribute [rw] discount_percent
    #   @return [::Google::Type::Decimal]
    #     Optional. The discount percent on `commitment_amount`.
    #
    #     For example, `10` means a discount of 10%. If the original
    #     `commitment_amount` is $100 then the discounted amount will be $90.
    #     The customer is charged $90 and receives $100 in credits.
    #
    #     All reported usage will be charged at the standard price.
    #     If this field is set, the `price_model.usage` must be unset. A
    #     private offer can apply a discount to all usage or to a usage
    #     commitment, but not both.
    #
    #     Must be between 0 and 100 inclusive, with precision up to 2 decimal
    #     places. If this field is set, then the allowed pattern for 'value'
    #     is `^([0-9]{1,2}(\\.\\d{1,2})?|100(\\.0{1,2})?)$`.
    #     Examples of valid values: "0", "100.0", "12.34", "40.0".
    #     Example of invalid values: ".3", "-1", "100.1", "12.345", "+12", "".
    #
    #     Must be present to publish the offer.
    # @!attribute [rw] additional_credit
    #   @return [::Google::Type::Money]
    #     Optional. Additional credit granted to the customer.
    #     Additional credits are only supported for custom interval offers.
    #     Equivalent behavior can be achieved for standard interval offers by
    #     varying the `commitment_amount` and `discount_percent`.
    #
    #     Value cannot be negative.
    #     The currency must be "USD" and precision is limited to cents.
    #     The maximum allowed value is 1,000,000 USD.
    # @!attribute [rw] discard_previous_credit_balance
    #   @return [::Boolean]
    #     Optional. Whether to discard the previous credit balance when the
    #     associated installment starts. If not set, the previous credit
    #     balance will be rolled over to the current installment.
    #
    #     If there are no previous installments, then the value of this field
    #     will not matter - since it has no effect when no credits exist.
    class Commitment
      include ::Google::Protobuf::MessageExts
      extend ::Google::Protobuf::MessageExts::ClassMethods
    end
  end

  # Price configurations for offers with standard intervals.
  # @!attribute [rw] standard_interval
  #   @return [::Google::Cloud::CommerceProducer::V1beta::PrivateOffer::SingleProductOffer::StandardIntervalPrice::StandardInterval]
  #     Optional. The standard interval of the offer.
  #     Must be present to publish unless the price model is usage-only.
  # @!attribute [rw] price_model
  #   @return [::Google::Cloud::CommerceProducer::V1beta::PrivateOffer::SingleProductOffer::PriceModel]
  #     Optional. The price model of the offer.
  #     Must be present to publish the offer.
  class StandardIntervalPrice
    include ::Google::Protobuf::MessageExts
    extend ::Google::Protobuf::MessageExts::ClassMethods

    # The options for offers with standard intervals.
    module StandardInterval
      # The private offer does not have an interval.
      # If this is set, then the offer is "usage-only".
      # Field `term.duration_months` must be positive.
      STANDARD_INTERVAL_UNSPECIFIED = 0

      # The schedule of the monthly postpay offers.
      # This type of offer has "Monthly" billing frequency (see
      # https://docs.cloud.google.com/marketplace/docs/partners/offers/select-payment-schedule).
      # No longer supported as of May 2024. Cannot be used to publish
      # new offers.
      MONTHLY_POSTPAY = 1

      # Monthly installments with proration.
      # This type of offer has "Monthly" billing frequency (see
      # https://docs.cloud.google.com/marketplace/docs/partners/offers/select-payment-schedule).
      # For example, if the offer starts on 04/15, and the offer duration is
      # 3 months, the following installments will be created:
      # # 1: from 04/15 to 05/01, at the prorated price for April.
      #
      # # 2: from 05/01 to 06/01, at the full monthly price for May.
      #
      # # 3: from 06/01 to 07/01, at the full monthly price for June.
      #
      # # 4: from 07/01 to 07/15, at the prorated price for July.
      #
      # All dates represent the start of that day in the America/Los_Angeles
      # time zone.
      #
      # If this is set:
      #
      # * The `PriceModel.subscription` oneof must be set.
      # * Field `term.duration_months` must be positive.
      MONTHLY_PRORATED = 2

      # Monthly installments without proration.
      # This type of offer has "Monthly" billing frequency (see
      # https://docs.cloud.google.com/marketplace/docs/partners/offers/select-payment-schedule).
      # For example, if the offer starts on 04/15, and the offer duration is
      # 3 months, the following installments will be created:
      # # 1: from 04/15 to 05/15, at the full monthly price.
      #
      # # 2: from 05/15 to 06/15, at the full monthly price.
      #
      # # 3: from 06/15 to 07/15, at the full monthly price.
      #
      # All dates represent the start of that day in the America/Los_Angeles
      # time zone.
      #
      # If this is set:
      #
      # * The `PriceModel.subscription` oneof must be set.
      # * Field `term.duration_months` must be positive.
      MONTHLY_NOT_PRORATED = 3

      # Quarterly installments which are not prorated.
      # This type of offer has "Quarterly" billing frequency (see
      # https://docs.cloud.google.com/marketplace/docs/partners/offers/select-payment-schedule).
      # For example, if the offer starts on 01/15, and the offer duration is
      # 3 quarters, the following installments will be created:
      # # 1: from 01/15 to 04/15, at the full quarterly price.
      #
      # # 2: from 04/15 to 07/15, at the full quarterly price.
      #
      # # 3: from 07/15 to 10/15, at the full quarterly price.
      #
      # All dates represent the start of that day in the America/Los_Angeles
      # time zone.
      #
      # If this is set:
      #
      # * The `PriceModel.subscription` oneof must be set.
      # * Field `term.duration_months` must be positive.
      QUARTERLY_NOT_PRORATED = 4

      # Yearly installments which are not prorated.
      # This type of offer has "Yearly" billing frequency (see
      # https://docs.cloud.google.com/marketplace/docs/partners/offers/select-payment-schedule).
      # For example, if the offer starts on 01/15/2025, and the offer
      # duration is 3 years, the following installments will be created:
      # # 1: from 01/15/2025 to 01/15/2026, at the full yearly price.
      #
      # # 2: from 01/15/2026 to 01/15/2027, at the full yearly price.
      #
      # # 3: from 01/15/2027 to 01/15/2028, at the full yearly price.
      #
      # All dates represent the start of that day in the America/Los_Angeles
      # time zone.
      #
      # If this is set:
      #
      # * The `PriceModel.subscription` oneof must be set.
      # * Field `term.duration_months` must be positive.
      YEARLY_NOT_PRORATED = 5
    end
  end

  # An installment of the offer.
  # @!attribute [rw] start_time
  #   @return [::Google::Type::DateTime]
  #     Optional. The start time of the installment.
  #     Each installment must have a unique start time with one exception:
  #     When the `term.start_policy` of the offer's term is `IMMEDIATE`,
  #     the `start_time` of the first installment must be unset.
  #     The actual start time is not recorded in the offer and instead is
  #     determined by the time the resulting order became active.
  #
  #     When the `term.start_policy` of the offer's term is
  #     `SCHEDULED_START_TIME`, then the first installment's `start_time` must
  #     match `term.scheduled_start_time`.
  #
  #     If the `term.end_policy` of the offer's term is `SCHEDULED_END_TIME`,
  #     then installment `start_time` must be before `term.scheduled_end_time`.
  #     If it's `AFTER_DURATION`, then installment `start_time` must be before
  #     the time calculated by adding the `term.duration_months` to
  #     the start time of the offer.
  #
  #     The `start_time` of the installments cannot be before the
  #     `accept_deadline_time` of the offer.
  #
  #     Installment start times must be in strictly increasing chronological
  #     order.
  # @!attribute [rw] price_model
  #   @return [::Google::Cloud::CommerceProducer::V1beta::PrivateOffer::SingleProductOffer::PriceModel]
  #     Optional. The price model of the installment.
  #     All installments must have the same form of price model.
  class Installment
    include ::Google::Protobuf::MessageExts
    extend ::Google::Protobuf::MessageExts::ClassMethods
  end

  # Price configurations for offers with custom intervals.
  # @!attribute [rw] installments
  #   @return [::Array<::Google::Cloud::CommerceProducer::V1beta::PrivateOffer::SingleProductOffer::Installment>]
  #     Optional. The installments that make up the installment timeline.
  #     All installments must have the same form of price model (e.g.
  #     all commitment, or all flat fee). A subscription must be present
  #     under the price model for every installment.
  #
  #     Must contain at least one installment to publish the offer.
  class CustomIntervalPrice
    include ::Google::Protobuf::MessageExts
    extend ::Google::Protobuf::MessageExts::ClassMethods
  end

  # The contract value of the offer.
  # @!attribute [r] total_contract_value
  #   @return [::Google::Type::Money]
  #     Output only. The total contract value of the offer.
  #     This will be set for all non-draft private offers, as long as
  #     'PRIVATE_OFFER_VIEW_FULL' is requested. For DRAFT private offers,
  #     this will be populated only when the end user's billing account is
  #     set and when the pricing and term configuration is sufficiently
  #     complete to allow for a calculation.
  class ContractValue
    include ::Google::Protobuf::MessageExts
    extend ::Google::Protobuf::MessageExts::ClassMethods
  end

  # Revenue Share information for a Private Offer.
  # For more details about the revenue share, including how the value is
  # determined, see
  # https://docs.cloud.google.com/marketplace/docs/partners/revenue-share-scenarios.
  #
  # Not included for `PRIVATE_OFFER_VIEW_BASIC`, or for DRAFT private offers.
  #
  # For non-draft private offers, these fields are populated based on the
  # following:
  #
  # * Offers published after April 20, 2025 will always have revenue
  #   share fields populated.
  # * Offers published on or before April 20, 2025 will only have revenue
  #   share fields populated if they were associated with an active,
  #   unexpired order on that date.
  # @!attribute [r] current_term_vendor_net_revenue_percent
  #   @return [::Google::Type::Decimal]
  #     Output only. The revenue share currently in effect.
  #
  #     The range of the value is between 0 and 100. For example, 80
  #     means the Vendor's current term revenue share is 80%. The vendor
  #     will keep 80% of the revenue.
  #     .
  # @!attribute [r] renewal_term_vendor_net_revenue_percent
  #   @return [::Google::Type::Decimal]
  #     Output only. The expected revenue share for the renewal term.
  #     Not included if the offer does not have renewal terms.
  #
  #     The range of the value is between 0 and 100. For example, 80
  #     means the Vendor's current term revenue share is 80%. The vendor
  #     will keep 80% of the revenue after renewal.
  #     .
  class RevenueShare
    include ::Google::Protobuf::MessageExts
    extend ::Google::Protobuf::MessageExts::ClassMethods
  end
end

#contract_value::Google::Cloud::CommerceProducer::V1beta::PrivateOffer::SingleProductOffer::ContractValue (readonly)

Returns Output only. Contract value of the offer. Not included for PRIVATE_OFFER_VIEW_BASIC.

Returns:



554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
# File 'proto_docs/google/cloud/commerceproducer/v1beta/private_offer.rb', line 554

class SingleProductOffer
  include ::Google::Protobuf::MessageExts
  extend ::Google::Protobuf::MessageExts::ClassMethods

  # Additional details used to describe customization of the service level.
  #
  # Features are used to distinguish service levels of the same product.
  # When a product has a single service level, all details can be contained
  # in the product documentation. When a product has multiple service levels,
  # each service level can be assigned a distinct set of features to
  # distinguish the key differences between the service levels.
  #
  # In addition to customizing pricing and other transaction details, a
  # private offer may include customization of partner-managed product
  # behavior. When this is the case, the details of the custom behavior are
  # described using features.
  # @!attribute [rw] display_name
  #   @return [::String]
  #     Optional. Human readable display text characterizing the feature.
  #     Should be sufficiently detailed to identify the feature, allowing
  #     features to be correlated across separate offers and service levels.
  #     Must be non-empty to publish the offer.
  #     The maximum allowed length is 128 characters.
  #     Allows characters from the following Unicode Property Classes:
  #     Letters, Numbers, Punctuation, Symbols, and Separators
  # @!attribute [rw] value
  #   @return [::String]
  #     Optional. Human readable display text reflecting the value of the
  #     feature. Used for variable features not captured by the display_name
  #     alone. The maximum allowed length is 3000 characters. Allows characters
  #     from the following Unicode Property Classes: Letters, Numbers,
  #     Punctuation, Symbols, and Separators
  class Feature
    include ::Google::Protobuf::MessageExts
    extend ::Google::Protobuf::MessageExts::ClassMethods
  end

  # The price model of the private offer.
  #
  # Private offers are referred to as having different kinds of price models
  # based on the combination of fields set in the price model. The following
  # terminology is used in documentation and other reference material.
  #
  # * Usage-based: the price model does not set `flat_fee`
  # * Usage-only: the price model sets only `usage`
  # * CUD (committed use discount): the price model sets `commitment`
  #     * Commitment discount with additional usage at list price:
  #       The price model sets `commitment` and not `usage`.
  #     * Commitment with all usage discounted: The price model sets
  #       `commitment` and `usage`.
  # * Flat fee: the price model sets only `flat_fee`
  # * Flat fee with usage: the price model sets `flat_fee` and `usage`
  #
  # See
  # https://docs.cloud.google.com/marketplace/docs/partners/offers/select-pricing-model#CUD
  # for the price models.
  # @!attribute [rw] flat_fee
  #   @return [::Google::Cloud::CommerceProducer::V1beta::PrivateOffer::SingleProductOffer::PriceModel::FlatFee]
  #     Optional. The price configurations for the flat fee subscription.
  #     Must be unset when the base standard offer's price model does not
  #     include subscription SKUs.
  #
  #     Note: The following fields are mutually exclusive: `flat_fee`, `commitment`. If a field in that set is populated, all other fields in the set will automatically be cleared.
  # @!attribute [rw] commitment
  #   @return [::Google::Cloud::CommerceProducer::V1beta::PrivateOffer::SingleProductOffer::PriceModel::Commitment]
  #     Optional. The price configurations for the commitment based
  #     subscription. Must be unset when the base standard offer's price
  #     model includes subscription SKUs.
  #
  #     Note: The following fields are mutually exclusive: `commitment`, `flat_fee`. If a field in that set is populated, all other fields in the set will automatically be cleared.
  # @!attribute [rw] usage
  #   @return [::Google::Cloud::CommerceProducer::V1beta::PrivateOffer::SingleProductOffer::PriceModel::Usage]
  #     Optional. The price configurations for the usage part.
  #     If this field is set, the `Commitment.discount_percent` must be unset.
  #     A private offer can apply a discount to all usage or to a usage
  #     commitment, but not both.
  #     Must be unset when the base standard offer's price model includes no
  #     usage SKUs.
  class PriceModel
    include ::Google::Protobuf::MessageExts
    extend ::Google::Protobuf::MessageExts::ClassMethods

    # The discount for a specific SKU.
    # @!attribute [rw] sku
    #   @return [::String]
    #     Optional. The name of a partner SKU from this API.
    #
    #     Must refer to a SKU in the price model of the base standard offer.
    #     Inclusion in the base price model can occur either directly or
    #     indirectly via inclusion in an included SkuGroup.
    #
    #     Currently, standard offer price models include only partner SKUs
    #     in the same project as the standard offer. This may change.
    #
    #     Format:
    #     projects/\\{project}/locations/\\{location}/services/\\{service}/skus/\\{sku}
    #
    #     Note: The following fields are mutually exclusive: `sku`, `cloud_billing_sku`. If a field in that set is populated, all other fields in the set will automatically be cleared.
    # @!attribute [rw] cloud_billing_sku
    #   @return [::String]
    #     Optional. The name of a Google SKU from the Cloud Billing API.
    #
    #     Used for partner products sold by Google, such as Premium Operating
    #     System Images sold for use in Compute Engine. This is not common.
    #     SKUs of this type are not present on this API and can instead be
    #     found on the Cloud Billing API or at https://cloud.google.com/skus.
    #
    #     Must refer to a SKU in the price model of the base standard offer.
    #     Google SKUs are always referenced in standard offers via SkuGroups.
    #
    #     Format: services/\\{service}/skus/\\{sku}
    #
    #     Note: The following fields are mutually exclusive: `cloud_billing_sku`, `sku`. If a field in that set is populated, all other fields in the set will automatically be cleared.
    # @!attribute [rw] discount_percent
    #   @return [::Google::Type::Decimal]
    #     Optional. The discount percent for the SKU.
    #     For example, `10` means a discount of 10%. If the original SKU
    #     price is $100/hour then the discounted price will be $90/hour.
    #
    #     Must be between 0 and 100 inclusive, with precision up to 2 decimal
    #     places. If this field is set, then the allowed pattern for 'value'
    #     is `^([0-9]{1,2}(\\.\\d{1,2})?|100(\\.0{1,2})?)$`.
    #
    #     Examples of valid values: "0", "100.0", "12.34", "40.0".
    #     Example of invalid values: ".3", "-1", "100.1", "12.345", "+12",
    #     and "".
    #     Must be present to publish the offer.
    class SkuDiscount
      include ::Google::Protobuf::MessageExts
      extend ::Google::Protobuf::MessageExts::ClassMethods
    end

    # The price for the usage SKUs.
    # @!attribute [rw] default_discount_percent
    #   @return [::Google::Type::Decimal]
    #     Optional. The default discount percent for usage SKUs.
    #     An unset default discount percent is equivalent to 0 (no discount).
    #
    #     Must be between 0 and 100 inclusive, with precision up to 2 decimal
    #     places. If this field is set, then the allowed pattern for 'value'
    #     is `^([0-9]{1,2}(\\.\\d{1,2})?|100(\\.0{1,2})?)$`.
    #     Examples of valid values: "0", "100.0", "12.34", "40.0".
    #     Example of invalid values: ".3", "-1", "100.1", "12.345", "+12", "".
    # @!attribute [rw] sku_discounts
    #   @return [::Array<::Google::Cloud::CommerceProducer::V1beta::PrivateOffer::SingleProductOffer::PriceModel::SkuDiscount>]
    #     Optional. The discounts for the specific SKUs that override the
    #     `default_discount_percent`.
    class Usage
      include ::Google::Protobuf::MessageExts
      extend ::Google::Protobuf::MessageExts::ClassMethods
    end

    # The price configurations for the flat fee subscriptions.
    # @!attribute [rw] flat_fee_override
    #   @return [::Google::Type::Money]
    #     Optional. Flat fee overriding the default flat fee in the base
    #     standard offer. Value cannot be negative. The currency must be "USD"
    #     and precision is limited to cents. Must be present to publish the
    #     offer, if the parent message is set. The maximum allowed value is
    #     1,000,000,000 USD.
    class FlatFee
      include ::Google::Protobuf::MessageExts
      extend ::Google::Protobuf::MessageExts::ClassMethods
    end

    # The price configurations for the commitment based subscriptions.
    # @!attribute [rw] commitment_amount
    #   @return [::Google::Type::Money]
    #     Optional. The commitment balance that the customer will receive.
    #     Value cannot be negative.
    #     The currency must be "USD" and precision is limited to cents.
    #     Must be present to publish the offer, if the parent message is set.
    #     The maximum allowed value is 1,000,000,000 USD.
    #
    #     If the current offer amends a private offer where the term has not
    #     ended, and if the field
    #     `single_product_offer.standard_interval_price.price_model.commitment.commitment_amount`
    #     is set on both the current offer and the amended private offer, then
    #     the commitment amount must be equal or higher on the current offer,
    #     compared to the amended private offer.
    # @!attribute [rw] discount_percent
    #   @return [::Google::Type::Decimal]
    #     Optional. The discount percent on `commitment_amount`.
    #
    #     For example, `10` means a discount of 10%. If the original
    #     `commitment_amount` is $100 then the discounted amount will be $90.
    #     The customer is charged $90 and receives $100 in credits.
    #
    #     All reported usage will be charged at the standard price.
    #     If this field is set, the `price_model.usage` must be unset. A
    #     private offer can apply a discount to all usage or to a usage
    #     commitment, but not both.
    #
    #     Must be between 0 and 100 inclusive, with precision up to 2 decimal
    #     places. If this field is set, then the allowed pattern for 'value'
    #     is `^([0-9]{1,2}(\\.\\d{1,2})?|100(\\.0{1,2})?)$`.
    #     Examples of valid values: "0", "100.0", "12.34", "40.0".
    #     Example of invalid values: ".3", "-1", "100.1", "12.345", "+12", "".
    #
    #     Must be present to publish the offer.
    # @!attribute [rw] additional_credit
    #   @return [::Google::Type::Money]
    #     Optional. Additional credit granted to the customer.
    #     Additional credits are only supported for custom interval offers.
    #     Equivalent behavior can be achieved for standard interval offers by
    #     varying the `commitment_amount` and `discount_percent`.
    #
    #     Value cannot be negative.
    #     The currency must be "USD" and precision is limited to cents.
    #     The maximum allowed value is 1,000,000 USD.
    # @!attribute [rw] discard_previous_credit_balance
    #   @return [::Boolean]
    #     Optional. Whether to discard the previous credit balance when the
    #     associated installment starts. If not set, the previous credit
    #     balance will be rolled over to the current installment.
    #
    #     If there are no previous installments, then the value of this field
    #     will not matter - since it has no effect when no credits exist.
    class Commitment
      include ::Google::Protobuf::MessageExts
      extend ::Google::Protobuf::MessageExts::ClassMethods
    end
  end

  # Price configurations for offers with standard intervals.
  # @!attribute [rw] standard_interval
  #   @return [::Google::Cloud::CommerceProducer::V1beta::PrivateOffer::SingleProductOffer::StandardIntervalPrice::StandardInterval]
  #     Optional. The standard interval of the offer.
  #     Must be present to publish unless the price model is usage-only.
  # @!attribute [rw] price_model
  #   @return [::Google::Cloud::CommerceProducer::V1beta::PrivateOffer::SingleProductOffer::PriceModel]
  #     Optional. The price model of the offer.
  #     Must be present to publish the offer.
  class StandardIntervalPrice
    include ::Google::Protobuf::MessageExts
    extend ::Google::Protobuf::MessageExts::ClassMethods

    # The options for offers with standard intervals.
    module StandardInterval
      # The private offer does not have an interval.
      # If this is set, then the offer is "usage-only".
      # Field `term.duration_months` must be positive.
      STANDARD_INTERVAL_UNSPECIFIED = 0

      # The schedule of the monthly postpay offers.
      # This type of offer has "Monthly" billing frequency (see
      # https://docs.cloud.google.com/marketplace/docs/partners/offers/select-payment-schedule).
      # No longer supported as of May 2024. Cannot be used to publish
      # new offers.
      MONTHLY_POSTPAY = 1

      # Monthly installments with proration.
      # This type of offer has "Monthly" billing frequency (see
      # https://docs.cloud.google.com/marketplace/docs/partners/offers/select-payment-schedule).
      # For example, if the offer starts on 04/15, and the offer duration is
      # 3 months, the following installments will be created:
      # # 1: from 04/15 to 05/01, at the prorated price for April.
      #
      # # 2: from 05/01 to 06/01, at the full monthly price for May.
      #
      # # 3: from 06/01 to 07/01, at the full monthly price for June.
      #
      # # 4: from 07/01 to 07/15, at the prorated price for July.
      #
      # All dates represent the start of that day in the America/Los_Angeles
      # time zone.
      #
      # If this is set:
      #
      # * The `PriceModel.subscription` oneof must be set.
      # * Field `term.duration_months` must be positive.
      MONTHLY_PRORATED = 2

      # Monthly installments without proration.
      # This type of offer has "Monthly" billing frequency (see
      # https://docs.cloud.google.com/marketplace/docs/partners/offers/select-payment-schedule).
      # For example, if the offer starts on 04/15, and the offer duration is
      # 3 months, the following installments will be created:
      # # 1: from 04/15 to 05/15, at the full monthly price.
      #
      # # 2: from 05/15 to 06/15, at the full monthly price.
      #
      # # 3: from 06/15 to 07/15, at the full monthly price.
      #
      # All dates represent the start of that day in the America/Los_Angeles
      # time zone.
      #
      # If this is set:
      #
      # * The `PriceModel.subscription` oneof must be set.
      # * Field `term.duration_months` must be positive.
      MONTHLY_NOT_PRORATED = 3

      # Quarterly installments which are not prorated.
      # This type of offer has "Quarterly" billing frequency (see
      # https://docs.cloud.google.com/marketplace/docs/partners/offers/select-payment-schedule).
      # For example, if the offer starts on 01/15, and the offer duration is
      # 3 quarters, the following installments will be created:
      # # 1: from 01/15 to 04/15, at the full quarterly price.
      #
      # # 2: from 04/15 to 07/15, at the full quarterly price.
      #
      # # 3: from 07/15 to 10/15, at the full quarterly price.
      #
      # All dates represent the start of that day in the America/Los_Angeles
      # time zone.
      #
      # If this is set:
      #
      # * The `PriceModel.subscription` oneof must be set.
      # * Field `term.duration_months` must be positive.
      QUARTERLY_NOT_PRORATED = 4

      # Yearly installments which are not prorated.
      # This type of offer has "Yearly" billing frequency (see
      # https://docs.cloud.google.com/marketplace/docs/partners/offers/select-payment-schedule).
      # For example, if the offer starts on 01/15/2025, and the offer
      # duration is 3 years, the following installments will be created:
      # # 1: from 01/15/2025 to 01/15/2026, at the full yearly price.
      #
      # # 2: from 01/15/2026 to 01/15/2027, at the full yearly price.
      #
      # # 3: from 01/15/2027 to 01/15/2028, at the full yearly price.
      #
      # All dates represent the start of that day in the America/Los_Angeles
      # time zone.
      #
      # If this is set:
      #
      # * The `PriceModel.subscription` oneof must be set.
      # * Field `term.duration_months` must be positive.
      YEARLY_NOT_PRORATED = 5
    end
  end

  # An installment of the offer.
  # @!attribute [rw] start_time
  #   @return [::Google::Type::DateTime]
  #     Optional. The start time of the installment.
  #     Each installment must have a unique start time with one exception:
  #     When the `term.start_policy` of the offer's term is `IMMEDIATE`,
  #     the `start_time` of the first installment must be unset.
  #     The actual start time is not recorded in the offer and instead is
  #     determined by the time the resulting order became active.
  #
  #     When the `term.start_policy` of the offer's term is
  #     `SCHEDULED_START_TIME`, then the first installment's `start_time` must
  #     match `term.scheduled_start_time`.
  #
  #     If the `term.end_policy` of the offer's term is `SCHEDULED_END_TIME`,
  #     then installment `start_time` must be before `term.scheduled_end_time`.
  #     If it's `AFTER_DURATION`, then installment `start_time` must be before
  #     the time calculated by adding the `term.duration_months` to
  #     the start time of the offer.
  #
  #     The `start_time` of the installments cannot be before the
  #     `accept_deadline_time` of the offer.
  #
  #     Installment start times must be in strictly increasing chronological
  #     order.
  # @!attribute [rw] price_model
  #   @return [::Google::Cloud::CommerceProducer::V1beta::PrivateOffer::SingleProductOffer::PriceModel]
  #     Optional. The price model of the installment.
  #     All installments must have the same form of price model.
  class Installment
    include ::Google::Protobuf::MessageExts
    extend ::Google::Protobuf::MessageExts::ClassMethods
  end

  # Price configurations for offers with custom intervals.
  # @!attribute [rw] installments
  #   @return [::Array<::Google::Cloud::CommerceProducer::V1beta::PrivateOffer::SingleProductOffer::Installment>]
  #     Optional. The installments that make up the installment timeline.
  #     All installments must have the same form of price model (e.g.
  #     all commitment, or all flat fee). A subscription must be present
  #     under the price model for every installment.
  #
  #     Must contain at least one installment to publish the offer.
  class CustomIntervalPrice
    include ::Google::Protobuf::MessageExts
    extend ::Google::Protobuf::MessageExts::ClassMethods
  end

  # The contract value of the offer.
  # @!attribute [r] total_contract_value
  #   @return [::Google::Type::Money]
  #     Output only. The total contract value of the offer.
  #     This will be set for all non-draft private offers, as long as
  #     'PRIVATE_OFFER_VIEW_FULL' is requested. For DRAFT private offers,
  #     this will be populated only when the end user's billing account is
  #     set and when the pricing and term configuration is sufficiently
  #     complete to allow for a calculation.
  class ContractValue
    include ::Google::Protobuf::MessageExts
    extend ::Google::Protobuf::MessageExts::ClassMethods
  end

  # Revenue Share information for a Private Offer.
  # For more details about the revenue share, including how the value is
  # determined, see
  # https://docs.cloud.google.com/marketplace/docs/partners/revenue-share-scenarios.
  #
  # Not included for `PRIVATE_OFFER_VIEW_BASIC`, or for DRAFT private offers.
  #
  # For non-draft private offers, these fields are populated based on the
  # following:
  #
  # * Offers published after April 20, 2025 will always have revenue
  #   share fields populated.
  # * Offers published on or before April 20, 2025 will only have revenue
  #   share fields populated if they were associated with an active,
  #   unexpired order on that date.
  # @!attribute [r] current_term_vendor_net_revenue_percent
  #   @return [::Google::Type::Decimal]
  #     Output only. The revenue share currently in effect.
  #
  #     The range of the value is between 0 and 100. For example, 80
  #     means the Vendor's current term revenue share is 80%. The vendor
  #     will keep 80% of the revenue.
  #     .
  # @!attribute [r] renewal_term_vendor_net_revenue_percent
  #   @return [::Google::Type::Decimal]
  #     Output only. The expected revenue share for the renewal term.
  #     Not included if the offer does not have renewal terms.
  #
  #     The range of the value is between 0 and 100. For example, 80
  #     means the Vendor's current term revenue share is 80%. The vendor
  #     will keep 80% of the revenue after renewal.
  #     .
  class RevenueShare
    include ::Google::Protobuf::MessageExts
    extend ::Google::Protobuf::MessageExts::ClassMethods
  end
end

#custom_interval_price::Google::Cloud::CommerceProducer::V1beta::PrivateOffer::SingleProductOffer::CustomIntervalPrice

Returns Optional. Price configurations for offers with custom intervals. Custom interval corresponds to "custom billing frequency", see https://docs.cloud.google.com/marketplace/docs/partners/offers/select-payment-schedule. A price must be set when publishing the offer.

Note: The following fields are mutually exclusive: custom_interval_price, standard_interval_price. If a field in that set is populated, all other fields in the set will automatically be cleared.

Returns:



554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
# File 'proto_docs/google/cloud/commerceproducer/v1beta/private_offer.rb', line 554

class SingleProductOffer
  include ::Google::Protobuf::MessageExts
  extend ::Google::Protobuf::MessageExts::ClassMethods

  # Additional details used to describe customization of the service level.
  #
  # Features are used to distinguish service levels of the same product.
  # When a product has a single service level, all details can be contained
  # in the product documentation. When a product has multiple service levels,
  # each service level can be assigned a distinct set of features to
  # distinguish the key differences between the service levels.
  #
  # In addition to customizing pricing and other transaction details, a
  # private offer may include customization of partner-managed product
  # behavior. When this is the case, the details of the custom behavior are
  # described using features.
  # @!attribute [rw] display_name
  #   @return [::String]
  #     Optional. Human readable display text characterizing the feature.
  #     Should be sufficiently detailed to identify the feature, allowing
  #     features to be correlated across separate offers and service levels.
  #     Must be non-empty to publish the offer.
  #     The maximum allowed length is 128 characters.
  #     Allows characters from the following Unicode Property Classes:
  #     Letters, Numbers, Punctuation, Symbols, and Separators
  # @!attribute [rw] value
  #   @return [::String]
  #     Optional. Human readable display text reflecting the value of the
  #     feature. Used for variable features not captured by the display_name
  #     alone. The maximum allowed length is 3000 characters. Allows characters
  #     from the following Unicode Property Classes: Letters, Numbers,
  #     Punctuation, Symbols, and Separators
  class Feature
    include ::Google::Protobuf::MessageExts
    extend ::Google::Protobuf::MessageExts::ClassMethods
  end

  # The price model of the private offer.
  #
  # Private offers are referred to as having different kinds of price models
  # based on the combination of fields set in the price model. The following
  # terminology is used in documentation and other reference material.
  #
  # * Usage-based: the price model does not set `flat_fee`
  # * Usage-only: the price model sets only `usage`
  # * CUD (committed use discount): the price model sets `commitment`
  #     * Commitment discount with additional usage at list price:
  #       The price model sets `commitment` and not `usage`.
  #     * Commitment with all usage discounted: The price model sets
  #       `commitment` and `usage`.
  # * Flat fee: the price model sets only `flat_fee`
  # * Flat fee with usage: the price model sets `flat_fee` and `usage`
  #
  # See
  # https://docs.cloud.google.com/marketplace/docs/partners/offers/select-pricing-model#CUD
  # for the price models.
  # @!attribute [rw] flat_fee
  #   @return [::Google::Cloud::CommerceProducer::V1beta::PrivateOffer::SingleProductOffer::PriceModel::FlatFee]
  #     Optional. The price configurations for the flat fee subscription.
  #     Must be unset when the base standard offer's price model does not
  #     include subscription SKUs.
  #
  #     Note: The following fields are mutually exclusive: `flat_fee`, `commitment`. If a field in that set is populated, all other fields in the set will automatically be cleared.
  # @!attribute [rw] commitment
  #   @return [::Google::Cloud::CommerceProducer::V1beta::PrivateOffer::SingleProductOffer::PriceModel::Commitment]
  #     Optional. The price configurations for the commitment based
  #     subscription. Must be unset when the base standard offer's price
  #     model includes subscription SKUs.
  #
  #     Note: The following fields are mutually exclusive: `commitment`, `flat_fee`. If a field in that set is populated, all other fields in the set will automatically be cleared.
  # @!attribute [rw] usage
  #   @return [::Google::Cloud::CommerceProducer::V1beta::PrivateOffer::SingleProductOffer::PriceModel::Usage]
  #     Optional. The price configurations for the usage part.
  #     If this field is set, the `Commitment.discount_percent` must be unset.
  #     A private offer can apply a discount to all usage or to a usage
  #     commitment, but not both.
  #     Must be unset when the base standard offer's price model includes no
  #     usage SKUs.
  class PriceModel
    include ::Google::Protobuf::MessageExts
    extend ::Google::Protobuf::MessageExts::ClassMethods

    # The discount for a specific SKU.
    # @!attribute [rw] sku
    #   @return [::String]
    #     Optional. The name of a partner SKU from this API.
    #
    #     Must refer to a SKU in the price model of the base standard offer.
    #     Inclusion in the base price model can occur either directly or
    #     indirectly via inclusion in an included SkuGroup.
    #
    #     Currently, standard offer price models include only partner SKUs
    #     in the same project as the standard offer. This may change.
    #
    #     Format:
    #     projects/\\{project}/locations/\\{location}/services/\\{service}/skus/\\{sku}
    #
    #     Note: The following fields are mutually exclusive: `sku`, `cloud_billing_sku`. If a field in that set is populated, all other fields in the set will automatically be cleared.
    # @!attribute [rw] cloud_billing_sku
    #   @return [::String]
    #     Optional. The name of a Google SKU from the Cloud Billing API.
    #
    #     Used for partner products sold by Google, such as Premium Operating
    #     System Images sold for use in Compute Engine. This is not common.
    #     SKUs of this type are not present on this API and can instead be
    #     found on the Cloud Billing API or at https://cloud.google.com/skus.
    #
    #     Must refer to a SKU in the price model of the base standard offer.
    #     Google SKUs are always referenced in standard offers via SkuGroups.
    #
    #     Format: services/\\{service}/skus/\\{sku}
    #
    #     Note: The following fields are mutually exclusive: `cloud_billing_sku`, `sku`. If a field in that set is populated, all other fields in the set will automatically be cleared.
    # @!attribute [rw] discount_percent
    #   @return [::Google::Type::Decimal]
    #     Optional. The discount percent for the SKU.
    #     For example, `10` means a discount of 10%. If the original SKU
    #     price is $100/hour then the discounted price will be $90/hour.
    #
    #     Must be between 0 and 100 inclusive, with precision up to 2 decimal
    #     places. If this field is set, then the allowed pattern for 'value'
    #     is `^([0-9]{1,2}(\\.\\d{1,2})?|100(\\.0{1,2})?)$`.
    #
    #     Examples of valid values: "0", "100.0", "12.34", "40.0".
    #     Example of invalid values: ".3", "-1", "100.1", "12.345", "+12",
    #     and "".
    #     Must be present to publish the offer.
    class SkuDiscount
      include ::Google::Protobuf::MessageExts
      extend ::Google::Protobuf::MessageExts::ClassMethods
    end

    # The price for the usage SKUs.
    # @!attribute [rw] default_discount_percent
    #   @return [::Google::Type::Decimal]
    #     Optional. The default discount percent for usage SKUs.
    #     An unset default discount percent is equivalent to 0 (no discount).
    #
    #     Must be between 0 and 100 inclusive, with precision up to 2 decimal
    #     places. If this field is set, then the allowed pattern for 'value'
    #     is `^([0-9]{1,2}(\\.\\d{1,2})?|100(\\.0{1,2})?)$`.
    #     Examples of valid values: "0", "100.0", "12.34", "40.0".
    #     Example of invalid values: ".3", "-1", "100.1", "12.345", "+12", "".
    # @!attribute [rw] sku_discounts
    #   @return [::Array<::Google::Cloud::CommerceProducer::V1beta::PrivateOffer::SingleProductOffer::PriceModel::SkuDiscount>]
    #     Optional. The discounts for the specific SKUs that override the
    #     `default_discount_percent`.
    class Usage
      include ::Google::Protobuf::MessageExts
      extend ::Google::Protobuf::MessageExts::ClassMethods
    end

    # The price configurations for the flat fee subscriptions.
    # @!attribute [rw] flat_fee_override
    #   @return [::Google::Type::Money]
    #     Optional. Flat fee overriding the default flat fee in the base
    #     standard offer. Value cannot be negative. The currency must be "USD"
    #     and precision is limited to cents. Must be present to publish the
    #     offer, if the parent message is set. The maximum allowed value is
    #     1,000,000,000 USD.
    class FlatFee
      include ::Google::Protobuf::MessageExts
      extend ::Google::Protobuf::MessageExts::ClassMethods
    end

    # The price configurations for the commitment based subscriptions.
    # @!attribute [rw] commitment_amount
    #   @return [::Google::Type::Money]
    #     Optional. The commitment balance that the customer will receive.
    #     Value cannot be negative.
    #     The currency must be "USD" and precision is limited to cents.
    #     Must be present to publish the offer, if the parent message is set.
    #     The maximum allowed value is 1,000,000,000 USD.
    #
    #     If the current offer amends a private offer where the term has not
    #     ended, and if the field
    #     `single_product_offer.standard_interval_price.price_model.commitment.commitment_amount`
    #     is set on both the current offer and the amended private offer, then
    #     the commitment amount must be equal or higher on the current offer,
    #     compared to the amended private offer.
    # @!attribute [rw] discount_percent
    #   @return [::Google::Type::Decimal]
    #     Optional. The discount percent on `commitment_amount`.
    #
    #     For example, `10` means a discount of 10%. If the original
    #     `commitment_amount` is $100 then the discounted amount will be $90.
    #     The customer is charged $90 and receives $100 in credits.
    #
    #     All reported usage will be charged at the standard price.
    #     If this field is set, the `price_model.usage` must be unset. A
    #     private offer can apply a discount to all usage or to a usage
    #     commitment, but not both.
    #
    #     Must be between 0 and 100 inclusive, with precision up to 2 decimal
    #     places. If this field is set, then the allowed pattern for 'value'
    #     is `^([0-9]{1,2}(\\.\\d{1,2})?|100(\\.0{1,2})?)$`.
    #     Examples of valid values: "0", "100.0", "12.34", "40.0".
    #     Example of invalid values: ".3", "-1", "100.1", "12.345", "+12", "".
    #
    #     Must be present to publish the offer.
    # @!attribute [rw] additional_credit
    #   @return [::Google::Type::Money]
    #     Optional. Additional credit granted to the customer.
    #     Additional credits are only supported for custom interval offers.
    #     Equivalent behavior can be achieved for standard interval offers by
    #     varying the `commitment_amount` and `discount_percent`.
    #
    #     Value cannot be negative.
    #     The currency must be "USD" and precision is limited to cents.
    #     The maximum allowed value is 1,000,000 USD.
    # @!attribute [rw] discard_previous_credit_balance
    #   @return [::Boolean]
    #     Optional. Whether to discard the previous credit balance when the
    #     associated installment starts. If not set, the previous credit
    #     balance will be rolled over to the current installment.
    #
    #     If there are no previous installments, then the value of this field
    #     will not matter - since it has no effect when no credits exist.
    class Commitment
      include ::Google::Protobuf::MessageExts
      extend ::Google::Protobuf::MessageExts::ClassMethods
    end
  end

  # Price configurations for offers with standard intervals.
  # @!attribute [rw] standard_interval
  #   @return [::Google::Cloud::CommerceProducer::V1beta::PrivateOffer::SingleProductOffer::StandardIntervalPrice::StandardInterval]
  #     Optional. The standard interval of the offer.
  #     Must be present to publish unless the price model is usage-only.
  # @!attribute [rw] price_model
  #   @return [::Google::Cloud::CommerceProducer::V1beta::PrivateOffer::SingleProductOffer::PriceModel]
  #     Optional. The price model of the offer.
  #     Must be present to publish the offer.
  class StandardIntervalPrice
    include ::Google::Protobuf::MessageExts
    extend ::Google::Protobuf::MessageExts::ClassMethods

    # The options for offers with standard intervals.
    module StandardInterval
      # The private offer does not have an interval.
      # If this is set, then the offer is "usage-only".
      # Field `term.duration_months` must be positive.
      STANDARD_INTERVAL_UNSPECIFIED = 0

      # The schedule of the monthly postpay offers.
      # This type of offer has "Monthly" billing frequency (see
      # https://docs.cloud.google.com/marketplace/docs/partners/offers/select-payment-schedule).
      # No longer supported as of May 2024. Cannot be used to publish
      # new offers.
      MONTHLY_POSTPAY = 1

      # Monthly installments with proration.
      # This type of offer has "Monthly" billing frequency (see
      # https://docs.cloud.google.com/marketplace/docs/partners/offers/select-payment-schedule).
      # For example, if the offer starts on 04/15, and the offer duration is
      # 3 months, the following installments will be created:
      # # 1: from 04/15 to 05/01, at the prorated price for April.
      #
      # # 2: from 05/01 to 06/01, at the full monthly price for May.
      #
      # # 3: from 06/01 to 07/01, at the full monthly price for June.
      #
      # # 4: from 07/01 to 07/15, at the prorated price for July.
      #
      # All dates represent the start of that day in the America/Los_Angeles
      # time zone.
      #
      # If this is set:
      #
      # * The `PriceModel.subscription` oneof must be set.
      # * Field `term.duration_months` must be positive.
      MONTHLY_PRORATED = 2

      # Monthly installments without proration.
      # This type of offer has "Monthly" billing frequency (see
      # https://docs.cloud.google.com/marketplace/docs/partners/offers/select-payment-schedule).
      # For example, if the offer starts on 04/15, and the offer duration is
      # 3 months, the following installments will be created:
      # # 1: from 04/15 to 05/15, at the full monthly price.
      #
      # # 2: from 05/15 to 06/15, at the full monthly price.
      #
      # # 3: from 06/15 to 07/15, at the full monthly price.
      #
      # All dates represent the start of that day in the America/Los_Angeles
      # time zone.
      #
      # If this is set:
      #
      # * The `PriceModel.subscription` oneof must be set.
      # * Field `term.duration_months` must be positive.
      MONTHLY_NOT_PRORATED = 3

      # Quarterly installments which are not prorated.
      # This type of offer has "Quarterly" billing frequency (see
      # https://docs.cloud.google.com/marketplace/docs/partners/offers/select-payment-schedule).
      # For example, if the offer starts on 01/15, and the offer duration is
      # 3 quarters, the following installments will be created:
      # # 1: from 01/15 to 04/15, at the full quarterly price.
      #
      # # 2: from 04/15 to 07/15, at the full quarterly price.
      #
      # # 3: from 07/15 to 10/15, at the full quarterly price.
      #
      # All dates represent the start of that day in the America/Los_Angeles
      # time zone.
      #
      # If this is set:
      #
      # * The `PriceModel.subscription` oneof must be set.
      # * Field `term.duration_months` must be positive.
      QUARTERLY_NOT_PRORATED = 4

      # Yearly installments which are not prorated.
      # This type of offer has "Yearly" billing frequency (see
      # https://docs.cloud.google.com/marketplace/docs/partners/offers/select-payment-schedule).
      # For example, if the offer starts on 01/15/2025, and the offer
      # duration is 3 years, the following installments will be created:
      # # 1: from 01/15/2025 to 01/15/2026, at the full yearly price.
      #
      # # 2: from 01/15/2026 to 01/15/2027, at the full yearly price.
      #
      # # 3: from 01/15/2027 to 01/15/2028, at the full yearly price.
      #
      # All dates represent the start of that day in the America/Los_Angeles
      # time zone.
      #
      # If this is set:
      #
      # * The `PriceModel.subscription` oneof must be set.
      # * Field `term.duration_months` must be positive.
      YEARLY_NOT_PRORATED = 5
    end
  end

  # An installment of the offer.
  # @!attribute [rw] start_time
  #   @return [::Google::Type::DateTime]
  #     Optional. The start time of the installment.
  #     Each installment must have a unique start time with one exception:
  #     When the `term.start_policy` of the offer's term is `IMMEDIATE`,
  #     the `start_time` of the first installment must be unset.
  #     The actual start time is not recorded in the offer and instead is
  #     determined by the time the resulting order became active.
  #
  #     When the `term.start_policy` of the offer's term is
  #     `SCHEDULED_START_TIME`, then the first installment's `start_time` must
  #     match `term.scheduled_start_time`.
  #
  #     If the `term.end_policy` of the offer's term is `SCHEDULED_END_TIME`,
  #     then installment `start_time` must be before `term.scheduled_end_time`.
  #     If it's `AFTER_DURATION`, then installment `start_time` must be before
  #     the time calculated by adding the `term.duration_months` to
  #     the start time of the offer.
  #
  #     The `start_time` of the installments cannot be before the
  #     `accept_deadline_time` of the offer.
  #
  #     Installment start times must be in strictly increasing chronological
  #     order.
  # @!attribute [rw] price_model
  #   @return [::Google::Cloud::CommerceProducer::V1beta::PrivateOffer::SingleProductOffer::PriceModel]
  #     Optional. The price model of the installment.
  #     All installments must have the same form of price model.
  class Installment
    include ::Google::Protobuf::MessageExts
    extend ::Google::Protobuf::MessageExts::ClassMethods
  end

  # Price configurations for offers with custom intervals.
  # @!attribute [rw] installments
  #   @return [::Array<::Google::Cloud::CommerceProducer::V1beta::PrivateOffer::SingleProductOffer::Installment>]
  #     Optional. The installments that make up the installment timeline.
  #     All installments must have the same form of price model (e.g.
  #     all commitment, or all flat fee). A subscription must be present
  #     under the price model for every installment.
  #
  #     Must contain at least one installment to publish the offer.
  class CustomIntervalPrice
    include ::Google::Protobuf::MessageExts
    extend ::Google::Protobuf::MessageExts::ClassMethods
  end

  # The contract value of the offer.
  # @!attribute [r] total_contract_value
  #   @return [::Google::Type::Money]
  #     Output only. The total contract value of the offer.
  #     This will be set for all non-draft private offers, as long as
  #     'PRIVATE_OFFER_VIEW_FULL' is requested. For DRAFT private offers,
  #     this will be populated only when the end user's billing account is
  #     set and when the pricing and term configuration is sufficiently
  #     complete to allow for a calculation.
  class ContractValue
    include ::Google::Protobuf::MessageExts
    extend ::Google::Protobuf::MessageExts::ClassMethods
  end

  # Revenue Share information for a Private Offer.
  # For more details about the revenue share, including how the value is
  # determined, see
  # https://docs.cloud.google.com/marketplace/docs/partners/revenue-share-scenarios.
  #
  # Not included for `PRIVATE_OFFER_VIEW_BASIC`, or for DRAFT private offers.
  #
  # For non-draft private offers, these fields are populated based on the
  # following:
  #
  # * Offers published after April 20, 2025 will always have revenue
  #   share fields populated.
  # * Offers published on or before April 20, 2025 will only have revenue
  #   share fields populated if they were associated with an active,
  #   unexpired order on that date.
  # @!attribute [r] current_term_vendor_net_revenue_percent
  #   @return [::Google::Type::Decimal]
  #     Output only. The revenue share currently in effect.
  #
  #     The range of the value is between 0 and 100. For example, 80
  #     means the Vendor's current term revenue share is 80%. The vendor
  #     will keep 80% of the revenue.
  #     .
  # @!attribute [r] renewal_term_vendor_net_revenue_percent
  #   @return [::Google::Type::Decimal]
  #     Output only. The expected revenue share for the renewal term.
  #     Not included if the offer does not have renewal terms.
  #
  #     The range of the value is between 0 and 100. For example, 80
  #     means the Vendor's current term revenue share is 80%. The vendor
  #     will keep 80% of the revenue after renewal.
  #     .
  class RevenueShare
    include ::Google::Protobuf::MessageExts
    extend ::Google::Protobuf::MessageExts::ClassMethods
  end
end

#effective_installment_timeline::Array<::Google::Cloud::CommerceProducer::V1beta::PrivateOffer::SingleProductOffer::Installment> (readonly)

Returns Output only. The effective installment timeline of the offer. Not included for PRIVATE_OFFER_VIEW_BASIC. Included for PRIVATE_OFFER_VIEW_FULL if all necessary information is available to generate the timeline, and if the offer has 'standard_interval_price' of 'MONTHLY_PRORATED', 'MONTHLY_NOT_PRORATED', 'QUARTERLY_NOT_PRORATED', or 'YEARLY_NOT_PRORATED'.

Returns:

  • (::Array<::Google::Cloud::CommerceProducer::V1beta::PrivateOffer::SingleProductOffer::Installment>)

    Output only. The effective installment timeline of the offer. Not included for PRIVATE_OFFER_VIEW_BASIC. Included for PRIVATE_OFFER_VIEW_FULL if all necessary information is available to generate the timeline, and if the offer has 'standard_interval_price' of 'MONTHLY_PRORATED', 'MONTHLY_NOT_PRORATED', 'QUARTERLY_NOT_PRORATED', or 'YEARLY_NOT_PRORATED'.



554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
# File 'proto_docs/google/cloud/commerceproducer/v1beta/private_offer.rb', line 554

class SingleProductOffer
  include ::Google::Protobuf::MessageExts
  extend ::Google::Protobuf::MessageExts::ClassMethods

  # Additional details used to describe customization of the service level.
  #
  # Features are used to distinguish service levels of the same product.
  # When a product has a single service level, all details can be contained
  # in the product documentation. When a product has multiple service levels,
  # each service level can be assigned a distinct set of features to
  # distinguish the key differences between the service levels.
  #
  # In addition to customizing pricing and other transaction details, a
  # private offer may include customization of partner-managed product
  # behavior. When this is the case, the details of the custom behavior are
  # described using features.
  # @!attribute [rw] display_name
  #   @return [::String]
  #     Optional. Human readable display text characterizing the feature.
  #     Should be sufficiently detailed to identify the feature, allowing
  #     features to be correlated across separate offers and service levels.
  #     Must be non-empty to publish the offer.
  #     The maximum allowed length is 128 characters.
  #     Allows characters from the following Unicode Property Classes:
  #     Letters, Numbers, Punctuation, Symbols, and Separators
  # @!attribute [rw] value
  #   @return [::String]
  #     Optional. Human readable display text reflecting the value of the
  #     feature. Used for variable features not captured by the display_name
  #     alone. The maximum allowed length is 3000 characters. Allows characters
  #     from the following Unicode Property Classes: Letters, Numbers,
  #     Punctuation, Symbols, and Separators
  class Feature
    include ::Google::Protobuf::MessageExts
    extend ::Google::Protobuf::MessageExts::ClassMethods
  end

  # The price model of the private offer.
  #
  # Private offers are referred to as having different kinds of price models
  # based on the combination of fields set in the price model. The following
  # terminology is used in documentation and other reference material.
  #
  # * Usage-based: the price model does not set `flat_fee`
  # * Usage-only: the price model sets only `usage`
  # * CUD (committed use discount): the price model sets `commitment`
  #     * Commitment discount with additional usage at list price:
  #       The price model sets `commitment` and not `usage`.
  #     * Commitment with all usage discounted: The price model sets
  #       `commitment` and `usage`.
  # * Flat fee: the price model sets only `flat_fee`
  # * Flat fee with usage: the price model sets `flat_fee` and `usage`
  #
  # See
  # https://docs.cloud.google.com/marketplace/docs/partners/offers/select-pricing-model#CUD
  # for the price models.
  # @!attribute [rw] flat_fee
  #   @return [::Google::Cloud::CommerceProducer::V1beta::PrivateOffer::SingleProductOffer::PriceModel::FlatFee]
  #     Optional. The price configurations for the flat fee subscription.
  #     Must be unset when the base standard offer's price model does not
  #     include subscription SKUs.
  #
  #     Note: The following fields are mutually exclusive: `flat_fee`, `commitment`. If a field in that set is populated, all other fields in the set will automatically be cleared.
  # @!attribute [rw] commitment
  #   @return [::Google::Cloud::CommerceProducer::V1beta::PrivateOffer::SingleProductOffer::PriceModel::Commitment]
  #     Optional. The price configurations for the commitment based
  #     subscription. Must be unset when the base standard offer's price
  #     model includes subscription SKUs.
  #
  #     Note: The following fields are mutually exclusive: `commitment`, `flat_fee`. If a field in that set is populated, all other fields in the set will automatically be cleared.
  # @!attribute [rw] usage
  #   @return [::Google::Cloud::CommerceProducer::V1beta::PrivateOffer::SingleProductOffer::PriceModel::Usage]
  #     Optional. The price configurations for the usage part.
  #     If this field is set, the `Commitment.discount_percent` must be unset.
  #     A private offer can apply a discount to all usage or to a usage
  #     commitment, but not both.
  #     Must be unset when the base standard offer's price model includes no
  #     usage SKUs.
  class PriceModel
    include ::Google::Protobuf::MessageExts
    extend ::Google::Protobuf::MessageExts::ClassMethods

    # The discount for a specific SKU.
    # @!attribute [rw] sku
    #   @return [::String]
    #     Optional. The name of a partner SKU from this API.
    #
    #     Must refer to a SKU in the price model of the base standard offer.
    #     Inclusion in the base price model can occur either directly or
    #     indirectly via inclusion in an included SkuGroup.
    #
    #     Currently, standard offer price models include only partner SKUs
    #     in the same project as the standard offer. This may change.
    #
    #     Format:
    #     projects/\\{project}/locations/\\{location}/services/\\{service}/skus/\\{sku}
    #
    #     Note: The following fields are mutually exclusive: `sku`, `cloud_billing_sku`. If a field in that set is populated, all other fields in the set will automatically be cleared.
    # @!attribute [rw] cloud_billing_sku
    #   @return [::String]
    #     Optional. The name of a Google SKU from the Cloud Billing API.
    #
    #     Used for partner products sold by Google, such as Premium Operating
    #     System Images sold for use in Compute Engine. This is not common.
    #     SKUs of this type are not present on this API and can instead be
    #     found on the Cloud Billing API or at https://cloud.google.com/skus.
    #
    #     Must refer to a SKU in the price model of the base standard offer.
    #     Google SKUs are always referenced in standard offers via SkuGroups.
    #
    #     Format: services/\\{service}/skus/\\{sku}
    #
    #     Note: The following fields are mutually exclusive: `cloud_billing_sku`, `sku`. If a field in that set is populated, all other fields in the set will automatically be cleared.
    # @!attribute [rw] discount_percent
    #   @return [::Google::Type::Decimal]
    #     Optional. The discount percent for the SKU.
    #     For example, `10` means a discount of 10%. If the original SKU
    #     price is $100/hour then the discounted price will be $90/hour.
    #
    #     Must be between 0 and 100 inclusive, with precision up to 2 decimal
    #     places. If this field is set, then the allowed pattern for 'value'
    #     is `^([0-9]{1,2}(\\.\\d{1,2})?|100(\\.0{1,2})?)$`.
    #
    #     Examples of valid values: "0", "100.0", "12.34", "40.0".
    #     Example of invalid values: ".3", "-1", "100.1", "12.345", "+12",
    #     and "".
    #     Must be present to publish the offer.
    class SkuDiscount
      include ::Google::Protobuf::MessageExts
      extend ::Google::Protobuf::MessageExts::ClassMethods
    end

    # The price for the usage SKUs.
    # @!attribute [rw] default_discount_percent
    #   @return [::Google::Type::Decimal]
    #     Optional. The default discount percent for usage SKUs.
    #     An unset default discount percent is equivalent to 0 (no discount).
    #
    #     Must be between 0 and 100 inclusive, with precision up to 2 decimal
    #     places. If this field is set, then the allowed pattern for 'value'
    #     is `^([0-9]{1,2}(\\.\\d{1,2})?|100(\\.0{1,2})?)$`.
    #     Examples of valid values: "0", "100.0", "12.34", "40.0".
    #     Example of invalid values: ".3", "-1", "100.1", "12.345", "+12", "".
    # @!attribute [rw] sku_discounts
    #   @return [::Array<::Google::Cloud::CommerceProducer::V1beta::PrivateOffer::SingleProductOffer::PriceModel::SkuDiscount>]
    #     Optional. The discounts for the specific SKUs that override the
    #     `default_discount_percent`.
    class Usage
      include ::Google::Protobuf::MessageExts
      extend ::Google::Protobuf::MessageExts::ClassMethods
    end

    # The price configurations for the flat fee subscriptions.
    # @!attribute [rw] flat_fee_override
    #   @return [::Google::Type::Money]
    #     Optional. Flat fee overriding the default flat fee in the base
    #     standard offer. Value cannot be negative. The currency must be "USD"
    #     and precision is limited to cents. Must be present to publish the
    #     offer, if the parent message is set. The maximum allowed value is
    #     1,000,000,000 USD.
    class FlatFee
      include ::Google::Protobuf::MessageExts
      extend ::Google::Protobuf::MessageExts::ClassMethods
    end

    # The price configurations for the commitment based subscriptions.
    # @!attribute [rw] commitment_amount
    #   @return [::Google::Type::Money]
    #     Optional. The commitment balance that the customer will receive.
    #     Value cannot be negative.
    #     The currency must be "USD" and precision is limited to cents.
    #     Must be present to publish the offer, if the parent message is set.
    #     The maximum allowed value is 1,000,000,000 USD.
    #
    #     If the current offer amends a private offer where the term has not
    #     ended, and if the field
    #     `single_product_offer.standard_interval_price.price_model.commitment.commitment_amount`
    #     is set on both the current offer and the amended private offer, then
    #     the commitment amount must be equal or higher on the current offer,
    #     compared to the amended private offer.
    # @!attribute [rw] discount_percent
    #   @return [::Google::Type::Decimal]
    #     Optional. The discount percent on `commitment_amount`.
    #
    #     For example, `10` means a discount of 10%. If the original
    #     `commitment_amount` is $100 then the discounted amount will be $90.
    #     The customer is charged $90 and receives $100 in credits.
    #
    #     All reported usage will be charged at the standard price.
    #     If this field is set, the `price_model.usage` must be unset. A
    #     private offer can apply a discount to all usage or to a usage
    #     commitment, but not both.
    #
    #     Must be between 0 and 100 inclusive, with precision up to 2 decimal
    #     places. If this field is set, then the allowed pattern for 'value'
    #     is `^([0-9]{1,2}(\\.\\d{1,2})?|100(\\.0{1,2})?)$`.
    #     Examples of valid values: "0", "100.0", "12.34", "40.0".
    #     Example of invalid values: ".3", "-1", "100.1", "12.345", "+12", "".
    #
    #     Must be present to publish the offer.
    # @!attribute [rw] additional_credit
    #   @return [::Google::Type::Money]
    #     Optional. Additional credit granted to the customer.
    #     Additional credits are only supported for custom interval offers.
    #     Equivalent behavior can be achieved for standard interval offers by
    #     varying the `commitment_amount` and `discount_percent`.
    #
    #     Value cannot be negative.
    #     The currency must be "USD" and precision is limited to cents.
    #     The maximum allowed value is 1,000,000 USD.
    # @!attribute [rw] discard_previous_credit_balance
    #   @return [::Boolean]
    #     Optional. Whether to discard the previous credit balance when the
    #     associated installment starts. If not set, the previous credit
    #     balance will be rolled over to the current installment.
    #
    #     If there are no previous installments, then the value of this field
    #     will not matter - since it has no effect when no credits exist.
    class Commitment
      include ::Google::Protobuf::MessageExts
      extend ::Google::Protobuf::MessageExts::ClassMethods
    end
  end

  # Price configurations for offers with standard intervals.
  # @!attribute [rw] standard_interval
  #   @return [::Google::Cloud::CommerceProducer::V1beta::PrivateOffer::SingleProductOffer::StandardIntervalPrice::StandardInterval]
  #     Optional. The standard interval of the offer.
  #     Must be present to publish unless the price model is usage-only.
  # @!attribute [rw] price_model
  #   @return [::Google::Cloud::CommerceProducer::V1beta::PrivateOffer::SingleProductOffer::PriceModel]
  #     Optional. The price model of the offer.
  #     Must be present to publish the offer.
  class StandardIntervalPrice
    include ::Google::Protobuf::MessageExts
    extend ::Google::Protobuf::MessageExts::ClassMethods

    # The options for offers with standard intervals.
    module StandardInterval
      # The private offer does not have an interval.
      # If this is set, then the offer is "usage-only".
      # Field `term.duration_months` must be positive.
      STANDARD_INTERVAL_UNSPECIFIED = 0

      # The schedule of the monthly postpay offers.
      # This type of offer has "Monthly" billing frequency (see
      # https://docs.cloud.google.com/marketplace/docs/partners/offers/select-payment-schedule).
      # No longer supported as of May 2024. Cannot be used to publish
      # new offers.
      MONTHLY_POSTPAY = 1

      # Monthly installments with proration.
      # This type of offer has "Monthly" billing frequency (see
      # https://docs.cloud.google.com/marketplace/docs/partners/offers/select-payment-schedule).
      # For example, if the offer starts on 04/15, and the offer duration is
      # 3 months, the following installments will be created:
      # # 1: from 04/15 to 05/01, at the prorated price for April.
      #
      # # 2: from 05/01 to 06/01, at the full monthly price for May.
      #
      # # 3: from 06/01 to 07/01, at the full monthly price for June.
      #
      # # 4: from 07/01 to 07/15, at the prorated price for July.
      #
      # All dates represent the start of that day in the America/Los_Angeles
      # time zone.
      #
      # If this is set:
      #
      # * The `PriceModel.subscription` oneof must be set.
      # * Field `term.duration_months` must be positive.
      MONTHLY_PRORATED = 2

      # Monthly installments without proration.
      # This type of offer has "Monthly" billing frequency (see
      # https://docs.cloud.google.com/marketplace/docs/partners/offers/select-payment-schedule).
      # For example, if the offer starts on 04/15, and the offer duration is
      # 3 months, the following installments will be created:
      # # 1: from 04/15 to 05/15, at the full monthly price.
      #
      # # 2: from 05/15 to 06/15, at the full monthly price.
      #
      # # 3: from 06/15 to 07/15, at the full monthly price.
      #
      # All dates represent the start of that day in the America/Los_Angeles
      # time zone.
      #
      # If this is set:
      #
      # * The `PriceModel.subscription` oneof must be set.
      # * Field `term.duration_months` must be positive.
      MONTHLY_NOT_PRORATED = 3

      # Quarterly installments which are not prorated.
      # This type of offer has "Quarterly" billing frequency (see
      # https://docs.cloud.google.com/marketplace/docs/partners/offers/select-payment-schedule).
      # For example, if the offer starts on 01/15, and the offer duration is
      # 3 quarters, the following installments will be created:
      # # 1: from 01/15 to 04/15, at the full quarterly price.
      #
      # # 2: from 04/15 to 07/15, at the full quarterly price.
      #
      # # 3: from 07/15 to 10/15, at the full quarterly price.
      #
      # All dates represent the start of that day in the America/Los_Angeles
      # time zone.
      #
      # If this is set:
      #
      # * The `PriceModel.subscription` oneof must be set.
      # * Field `term.duration_months` must be positive.
      QUARTERLY_NOT_PRORATED = 4

      # Yearly installments which are not prorated.
      # This type of offer has "Yearly" billing frequency (see
      # https://docs.cloud.google.com/marketplace/docs/partners/offers/select-payment-schedule).
      # For example, if the offer starts on 01/15/2025, and the offer
      # duration is 3 years, the following installments will be created:
      # # 1: from 01/15/2025 to 01/15/2026, at the full yearly price.
      #
      # # 2: from 01/15/2026 to 01/15/2027, at the full yearly price.
      #
      # # 3: from 01/15/2027 to 01/15/2028, at the full yearly price.
      #
      # All dates represent the start of that day in the America/Los_Angeles
      # time zone.
      #
      # If this is set:
      #
      # * The `PriceModel.subscription` oneof must be set.
      # * Field `term.duration_months` must be positive.
      YEARLY_NOT_PRORATED = 5
    end
  end

  # An installment of the offer.
  # @!attribute [rw] start_time
  #   @return [::Google::Type::DateTime]
  #     Optional. The start time of the installment.
  #     Each installment must have a unique start time with one exception:
  #     When the `term.start_policy` of the offer's term is `IMMEDIATE`,
  #     the `start_time` of the first installment must be unset.
  #     The actual start time is not recorded in the offer and instead is
  #     determined by the time the resulting order became active.
  #
  #     When the `term.start_policy` of the offer's term is
  #     `SCHEDULED_START_TIME`, then the first installment's `start_time` must
  #     match `term.scheduled_start_time`.
  #
  #     If the `term.end_policy` of the offer's term is `SCHEDULED_END_TIME`,
  #     then installment `start_time` must be before `term.scheduled_end_time`.
  #     If it's `AFTER_DURATION`, then installment `start_time` must be before
  #     the time calculated by adding the `term.duration_months` to
  #     the start time of the offer.
  #
  #     The `start_time` of the installments cannot be before the
  #     `accept_deadline_time` of the offer.
  #
  #     Installment start times must be in strictly increasing chronological
  #     order.
  # @!attribute [rw] price_model
  #   @return [::Google::Cloud::CommerceProducer::V1beta::PrivateOffer::SingleProductOffer::PriceModel]
  #     Optional. The price model of the installment.
  #     All installments must have the same form of price model.
  class Installment
    include ::Google::Protobuf::MessageExts
    extend ::Google::Protobuf::MessageExts::ClassMethods
  end

  # Price configurations for offers with custom intervals.
  # @!attribute [rw] installments
  #   @return [::Array<::Google::Cloud::CommerceProducer::V1beta::PrivateOffer::SingleProductOffer::Installment>]
  #     Optional. The installments that make up the installment timeline.
  #     All installments must have the same form of price model (e.g.
  #     all commitment, or all flat fee). A subscription must be present
  #     under the price model for every installment.
  #
  #     Must contain at least one installment to publish the offer.
  class CustomIntervalPrice
    include ::Google::Protobuf::MessageExts
    extend ::Google::Protobuf::MessageExts::ClassMethods
  end

  # The contract value of the offer.
  # @!attribute [r] total_contract_value
  #   @return [::Google::Type::Money]
  #     Output only. The total contract value of the offer.
  #     This will be set for all non-draft private offers, as long as
  #     'PRIVATE_OFFER_VIEW_FULL' is requested. For DRAFT private offers,
  #     this will be populated only when the end user's billing account is
  #     set and when the pricing and term configuration is sufficiently
  #     complete to allow for a calculation.
  class ContractValue
    include ::Google::Protobuf::MessageExts
    extend ::Google::Protobuf::MessageExts::ClassMethods
  end

  # Revenue Share information for a Private Offer.
  # For more details about the revenue share, including how the value is
  # determined, see
  # https://docs.cloud.google.com/marketplace/docs/partners/revenue-share-scenarios.
  #
  # Not included for `PRIVATE_OFFER_VIEW_BASIC`, or for DRAFT private offers.
  #
  # For non-draft private offers, these fields are populated based on the
  # following:
  #
  # * Offers published after April 20, 2025 will always have revenue
  #   share fields populated.
  # * Offers published on or before April 20, 2025 will only have revenue
  #   share fields populated if they were associated with an active,
  #   unexpired order on that date.
  # @!attribute [r] current_term_vendor_net_revenue_percent
  #   @return [::Google::Type::Decimal]
  #     Output only. The revenue share currently in effect.
  #
  #     The range of the value is between 0 and 100. For example, 80
  #     means the Vendor's current term revenue share is 80%. The vendor
  #     will keep 80% of the revenue.
  #     .
  # @!attribute [r] renewal_term_vendor_net_revenue_percent
  #   @return [::Google::Type::Decimal]
  #     Output only. The expected revenue share for the renewal term.
  #     Not included if the offer does not have renewal terms.
  #
  #     The range of the value is between 0 and 100. For example, 80
  #     means the Vendor's current term revenue share is 80%. The vendor
  #     will keep 80% of the revenue after renewal.
  #     .
  class RevenueShare
    include ::Google::Protobuf::MessageExts
    extend ::Google::Protobuf::MessageExts::ClassMethods
  end
end

#features::Array<::Google::Cloud::CommerceProducer::V1beta::PrivateOffer::SingleProductOffer::Feature>

Returns Optional. The custom product features to display for this offer. Feature display_name values must be unique to publish the offer. The set of features specified here should generally include all features included in the base service level, with optionally customized values, but is not required to match exactly and may include additional features.

Returns:

  • (::Array<::Google::Cloud::CommerceProducer::V1beta::PrivateOffer::SingleProductOffer::Feature>)

    Optional. The custom product features to display for this offer. Feature display_name values must be unique to publish the offer. The set of features specified here should generally include all features included in the base service level, with optionally customized values, but is not required to match exactly and may include additional features.



554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
# File 'proto_docs/google/cloud/commerceproducer/v1beta/private_offer.rb', line 554

class SingleProductOffer
  include ::Google::Protobuf::MessageExts
  extend ::Google::Protobuf::MessageExts::ClassMethods

  # Additional details used to describe customization of the service level.
  #
  # Features are used to distinguish service levels of the same product.
  # When a product has a single service level, all details can be contained
  # in the product documentation. When a product has multiple service levels,
  # each service level can be assigned a distinct set of features to
  # distinguish the key differences between the service levels.
  #
  # In addition to customizing pricing and other transaction details, a
  # private offer may include customization of partner-managed product
  # behavior. When this is the case, the details of the custom behavior are
  # described using features.
  # @!attribute [rw] display_name
  #   @return [::String]
  #     Optional. Human readable display text characterizing the feature.
  #     Should be sufficiently detailed to identify the feature, allowing
  #     features to be correlated across separate offers and service levels.
  #     Must be non-empty to publish the offer.
  #     The maximum allowed length is 128 characters.
  #     Allows characters from the following Unicode Property Classes:
  #     Letters, Numbers, Punctuation, Symbols, and Separators
  # @!attribute [rw] value
  #   @return [::String]
  #     Optional. Human readable display text reflecting the value of the
  #     feature. Used for variable features not captured by the display_name
  #     alone. The maximum allowed length is 3000 characters. Allows characters
  #     from the following Unicode Property Classes: Letters, Numbers,
  #     Punctuation, Symbols, and Separators
  class Feature
    include ::Google::Protobuf::MessageExts
    extend ::Google::Protobuf::MessageExts::ClassMethods
  end

  # The price model of the private offer.
  #
  # Private offers are referred to as having different kinds of price models
  # based on the combination of fields set in the price model. The following
  # terminology is used in documentation and other reference material.
  #
  # * Usage-based: the price model does not set `flat_fee`
  # * Usage-only: the price model sets only `usage`
  # * CUD (committed use discount): the price model sets `commitment`
  #     * Commitment discount with additional usage at list price:
  #       The price model sets `commitment` and not `usage`.
  #     * Commitment with all usage discounted: The price model sets
  #       `commitment` and `usage`.
  # * Flat fee: the price model sets only `flat_fee`
  # * Flat fee with usage: the price model sets `flat_fee` and `usage`
  #
  # See
  # https://docs.cloud.google.com/marketplace/docs/partners/offers/select-pricing-model#CUD
  # for the price models.
  # @!attribute [rw] flat_fee
  #   @return [::Google::Cloud::CommerceProducer::V1beta::PrivateOffer::SingleProductOffer::PriceModel::FlatFee]
  #     Optional. The price configurations for the flat fee subscription.
  #     Must be unset when the base standard offer's price model does not
  #     include subscription SKUs.
  #
  #     Note: The following fields are mutually exclusive: `flat_fee`, `commitment`. If a field in that set is populated, all other fields in the set will automatically be cleared.
  # @!attribute [rw] commitment
  #   @return [::Google::Cloud::CommerceProducer::V1beta::PrivateOffer::SingleProductOffer::PriceModel::Commitment]
  #     Optional. The price configurations for the commitment based
  #     subscription. Must be unset when the base standard offer's price
  #     model includes subscription SKUs.
  #
  #     Note: The following fields are mutually exclusive: `commitment`, `flat_fee`. If a field in that set is populated, all other fields in the set will automatically be cleared.
  # @!attribute [rw] usage
  #   @return [::Google::Cloud::CommerceProducer::V1beta::PrivateOffer::SingleProductOffer::PriceModel::Usage]
  #     Optional. The price configurations for the usage part.
  #     If this field is set, the `Commitment.discount_percent` must be unset.
  #     A private offer can apply a discount to all usage or to a usage
  #     commitment, but not both.
  #     Must be unset when the base standard offer's price model includes no
  #     usage SKUs.
  class PriceModel
    include ::Google::Protobuf::MessageExts
    extend ::Google::Protobuf::MessageExts::ClassMethods

    # The discount for a specific SKU.
    # @!attribute [rw] sku
    #   @return [::String]
    #     Optional. The name of a partner SKU from this API.
    #
    #     Must refer to a SKU in the price model of the base standard offer.
    #     Inclusion in the base price model can occur either directly or
    #     indirectly via inclusion in an included SkuGroup.
    #
    #     Currently, standard offer price models include only partner SKUs
    #     in the same project as the standard offer. This may change.
    #
    #     Format:
    #     projects/\\{project}/locations/\\{location}/services/\\{service}/skus/\\{sku}
    #
    #     Note: The following fields are mutually exclusive: `sku`, `cloud_billing_sku`. If a field in that set is populated, all other fields in the set will automatically be cleared.
    # @!attribute [rw] cloud_billing_sku
    #   @return [::String]
    #     Optional. The name of a Google SKU from the Cloud Billing API.
    #
    #     Used for partner products sold by Google, such as Premium Operating
    #     System Images sold for use in Compute Engine. This is not common.
    #     SKUs of this type are not present on this API and can instead be
    #     found on the Cloud Billing API or at https://cloud.google.com/skus.
    #
    #     Must refer to a SKU in the price model of the base standard offer.
    #     Google SKUs are always referenced in standard offers via SkuGroups.
    #
    #     Format: services/\\{service}/skus/\\{sku}
    #
    #     Note: The following fields are mutually exclusive: `cloud_billing_sku`, `sku`. If a field in that set is populated, all other fields in the set will automatically be cleared.
    # @!attribute [rw] discount_percent
    #   @return [::Google::Type::Decimal]
    #     Optional. The discount percent for the SKU.
    #     For example, `10` means a discount of 10%. If the original SKU
    #     price is $100/hour then the discounted price will be $90/hour.
    #
    #     Must be between 0 and 100 inclusive, with precision up to 2 decimal
    #     places. If this field is set, then the allowed pattern for 'value'
    #     is `^([0-9]{1,2}(\\.\\d{1,2})?|100(\\.0{1,2})?)$`.
    #
    #     Examples of valid values: "0", "100.0", "12.34", "40.0".
    #     Example of invalid values: ".3", "-1", "100.1", "12.345", "+12",
    #     and "".
    #     Must be present to publish the offer.
    class SkuDiscount
      include ::Google::Protobuf::MessageExts
      extend ::Google::Protobuf::MessageExts::ClassMethods
    end

    # The price for the usage SKUs.
    # @!attribute [rw] default_discount_percent
    #   @return [::Google::Type::Decimal]
    #     Optional. The default discount percent for usage SKUs.
    #     An unset default discount percent is equivalent to 0 (no discount).
    #
    #     Must be between 0 and 100 inclusive, with precision up to 2 decimal
    #     places. If this field is set, then the allowed pattern for 'value'
    #     is `^([0-9]{1,2}(\\.\\d{1,2})?|100(\\.0{1,2})?)$`.
    #     Examples of valid values: "0", "100.0", "12.34", "40.0".
    #     Example of invalid values: ".3", "-1", "100.1", "12.345", "+12", "".
    # @!attribute [rw] sku_discounts
    #   @return [::Array<::Google::Cloud::CommerceProducer::V1beta::PrivateOffer::SingleProductOffer::PriceModel::SkuDiscount>]
    #     Optional. The discounts for the specific SKUs that override the
    #     `default_discount_percent`.
    class Usage
      include ::Google::Protobuf::MessageExts
      extend ::Google::Protobuf::MessageExts::ClassMethods
    end

    # The price configurations for the flat fee subscriptions.
    # @!attribute [rw] flat_fee_override
    #   @return [::Google::Type::Money]
    #     Optional. Flat fee overriding the default flat fee in the base
    #     standard offer. Value cannot be negative. The currency must be "USD"
    #     and precision is limited to cents. Must be present to publish the
    #     offer, if the parent message is set. The maximum allowed value is
    #     1,000,000,000 USD.
    class FlatFee
      include ::Google::Protobuf::MessageExts
      extend ::Google::Protobuf::MessageExts::ClassMethods
    end

    # The price configurations for the commitment based subscriptions.
    # @!attribute [rw] commitment_amount
    #   @return [::Google::Type::Money]
    #     Optional. The commitment balance that the customer will receive.
    #     Value cannot be negative.
    #     The currency must be "USD" and precision is limited to cents.
    #     Must be present to publish the offer, if the parent message is set.
    #     The maximum allowed value is 1,000,000,000 USD.
    #
    #     If the current offer amends a private offer where the term has not
    #     ended, and if the field
    #     `single_product_offer.standard_interval_price.price_model.commitment.commitment_amount`
    #     is set on both the current offer and the amended private offer, then
    #     the commitment amount must be equal or higher on the current offer,
    #     compared to the amended private offer.
    # @!attribute [rw] discount_percent
    #   @return [::Google::Type::Decimal]
    #     Optional. The discount percent on `commitment_amount`.
    #
    #     For example, `10` means a discount of 10%. If the original
    #     `commitment_amount` is $100 then the discounted amount will be $90.
    #     The customer is charged $90 and receives $100 in credits.
    #
    #     All reported usage will be charged at the standard price.
    #     If this field is set, the `price_model.usage` must be unset. A
    #     private offer can apply a discount to all usage or to a usage
    #     commitment, but not both.
    #
    #     Must be between 0 and 100 inclusive, with precision up to 2 decimal
    #     places. If this field is set, then the allowed pattern for 'value'
    #     is `^([0-9]{1,2}(\\.\\d{1,2})?|100(\\.0{1,2})?)$`.
    #     Examples of valid values: "0", "100.0", "12.34", "40.0".
    #     Example of invalid values: ".3", "-1", "100.1", "12.345", "+12", "".
    #
    #     Must be present to publish the offer.
    # @!attribute [rw] additional_credit
    #   @return [::Google::Type::Money]
    #     Optional. Additional credit granted to the customer.
    #     Additional credits are only supported for custom interval offers.
    #     Equivalent behavior can be achieved for standard interval offers by
    #     varying the `commitment_amount` and `discount_percent`.
    #
    #     Value cannot be negative.
    #     The currency must be "USD" and precision is limited to cents.
    #     The maximum allowed value is 1,000,000 USD.
    # @!attribute [rw] discard_previous_credit_balance
    #   @return [::Boolean]
    #     Optional. Whether to discard the previous credit balance when the
    #     associated installment starts. If not set, the previous credit
    #     balance will be rolled over to the current installment.
    #
    #     If there are no previous installments, then the value of this field
    #     will not matter - since it has no effect when no credits exist.
    class Commitment
      include ::Google::Protobuf::MessageExts
      extend ::Google::Protobuf::MessageExts::ClassMethods
    end
  end

  # Price configurations for offers with standard intervals.
  # @!attribute [rw] standard_interval
  #   @return [::Google::Cloud::CommerceProducer::V1beta::PrivateOffer::SingleProductOffer::StandardIntervalPrice::StandardInterval]
  #     Optional. The standard interval of the offer.
  #     Must be present to publish unless the price model is usage-only.
  # @!attribute [rw] price_model
  #   @return [::Google::Cloud::CommerceProducer::V1beta::PrivateOffer::SingleProductOffer::PriceModel]
  #     Optional. The price model of the offer.
  #     Must be present to publish the offer.
  class StandardIntervalPrice
    include ::Google::Protobuf::MessageExts
    extend ::Google::Protobuf::MessageExts::ClassMethods

    # The options for offers with standard intervals.
    module StandardInterval
      # The private offer does not have an interval.
      # If this is set, then the offer is "usage-only".
      # Field `term.duration_months` must be positive.
      STANDARD_INTERVAL_UNSPECIFIED = 0

      # The schedule of the monthly postpay offers.
      # This type of offer has "Monthly" billing frequency (see
      # https://docs.cloud.google.com/marketplace/docs/partners/offers/select-payment-schedule).
      # No longer supported as of May 2024. Cannot be used to publish
      # new offers.
      MONTHLY_POSTPAY = 1

      # Monthly installments with proration.
      # This type of offer has "Monthly" billing frequency (see
      # https://docs.cloud.google.com/marketplace/docs/partners/offers/select-payment-schedule).
      # For example, if the offer starts on 04/15, and the offer duration is
      # 3 months, the following installments will be created:
      # # 1: from 04/15 to 05/01, at the prorated price for April.
      #
      # # 2: from 05/01 to 06/01, at the full monthly price for May.
      #
      # # 3: from 06/01 to 07/01, at the full monthly price for June.
      #
      # # 4: from 07/01 to 07/15, at the prorated price for July.
      #
      # All dates represent the start of that day in the America/Los_Angeles
      # time zone.
      #
      # If this is set:
      #
      # * The `PriceModel.subscription` oneof must be set.
      # * Field `term.duration_months` must be positive.
      MONTHLY_PRORATED = 2

      # Monthly installments without proration.
      # This type of offer has "Monthly" billing frequency (see
      # https://docs.cloud.google.com/marketplace/docs/partners/offers/select-payment-schedule).
      # For example, if the offer starts on 04/15, and the offer duration is
      # 3 months, the following installments will be created:
      # # 1: from 04/15 to 05/15, at the full monthly price.
      #
      # # 2: from 05/15 to 06/15, at the full monthly price.
      #
      # # 3: from 06/15 to 07/15, at the full monthly price.
      #
      # All dates represent the start of that day in the America/Los_Angeles
      # time zone.
      #
      # If this is set:
      #
      # * The `PriceModel.subscription` oneof must be set.
      # * Field `term.duration_months` must be positive.
      MONTHLY_NOT_PRORATED = 3

      # Quarterly installments which are not prorated.
      # This type of offer has "Quarterly" billing frequency (see
      # https://docs.cloud.google.com/marketplace/docs/partners/offers/select-payment-schedule).
      # For example, if the offer starts on 01/15, and the offer duration is
      # 3 quarters, the following installments will be created:
      # # 1: from 01/15 to 04/15, at the full quarterly price.
      #
      # # 2: from 04/15 to 07/15, at the full quarterly price.
      #
      # # 3: from 07/15 to 10/15, at the full quarterly price.
      #
      # All dates represent the start of that day in the America/Los_Angeles
      # time zone.
      #
      # If this is set:
      #
      # * The `PriceModel.subscription` oneof must be set.
      # * Field `term.duration_months` must be positive.
      QUARTERLY_NOT_PRORATED = 4

      # Yearly installments which are not prorated.
      # This type of offer has "Yearly" billing frequency (see
      # https://docs.cloud.google.com/marketplace/docs/partners/offers/select-payment-schedule).
      # For example, if the offer starts on 01/15/2025, and the offer
      # duration is 3 years, the following installments will be created:
      # # 1: from 01/15/2025 to 01/15/2026, at the full yearly price.
      #
      # # 2: from 01/15/2026 to 01/15/2027, at the full yearly price.
      #
      # # 3: from 01/15/2027 to 01/15/2028, at the full yearly price.
      #
      # All dates represent the start of that day in the America/Los_Angeles
      # time zone.
      #
      # If this is set:
      #
      # * The `PriceModel.subscription` oneof must be set.
      # * Field `term.duration_months` must be positive.
      YEARLY_NOT_PRORATED = 5
    end
  end

  # An installment of the offer.
  # @!attribute [rw] start_time
  #   @return [::Google::Type::DateTime]
  #     Optional. The start time of the installment.
  #     Each installment must have a unique start time with one exception:
  #     When the `term.start_policy` of the offer's term is `IMMEDIATE`,
  #     the `start_time` of the first installment must be unset.
  #     The actual start time is not recorded in the offer and instead is
  #     determined by the time the resulting order became active.
  #
  #     When the `term.start_policy` of the offer's term is
  #     `SCHEDULED_START_TIME`, then the first installment's `start_time` must
  #     match `term.scheduled_start_time`.
  #
  #     If the `term.end_policy` of the offer's term is `SCHEDULED_END_TIME`,
  #     then installment `start_time` must be before `term.scheduled_end_time`.
  #     If it's `AFTER_DURATION`, then installment `start_time` must be before
  #     the time calculated by adding the `term.duration_months` to
  #     the start time of the offer.
  #
  #     The `start_time` of the installments cannot be before the
  #     `accept_deadline_time` of the offer.
  #
  #     Installment start times must be in strictly increasing chronological
  #     order.
  # @!attribute [rw] price_model
  #   @return [::Google::Cloud::CommerceProducer::V1beta::PrivateOffer::SingleProductOffer::PriceModel]
  #     Optional. The price model of the installment.
  #     All installments must have the same form of price model.
  class Installment
    include ::Google::Protobuf::MessageExts
    extend ::Google::Protobuf::MessageExts::ClassMethods
  end

  # Price configurations for offers with custom intervals.
  # @!attribute [rw] installments
  #   @return [::Array<::Google::Cloud::CommerceProducer::V1beta::PrivateOffer::SingleProductOffer::Installment>]
  #     Optional. The installments that make up the installment timeline.
  #     All installments must have the same form of price model (e.g.
  #     all commitment, or all flat fee). A subscription must be present
  #     under the price model for every installment.
  #
  #     Must contain at least one installment to publish the offer.
  class CustomIntervalPrice
    include ::Google::Protobuf::MessageExts
    extend ::Google::Protobuf::MessageExts::ClassMethods
  end

  # The contract value of the offer.
  # @!attribute [r] total_contract_value
  #   @return [::Google::Type::Money]
  #     Output only. The total contract value of the offer.
  #     This will be set for all non-draft private offers, as long as
  #     'PRIVATE_OFFER_VIEW_FULL' is requested. For DRAFT private offers,
  #     this will be populated only when the end user's billing account is
  #     set and when the pricing and term configuration is sufficiently
  #     complete to allow for a calculation.
  class ContractValue
    include ::Google::Protobuf::MessageExts
    extend ::Google::Protobuf::MessageExts::ClassMethods
  end

  # Revenue Share information for a Private Offer.
  # For more details about the revenue share, including how the value is
  # determined, see
  # https://docs.cloud.google.com/marketplace/docs/partners/revenue-share-scenarios.
  #
  # Not included for `PRIVATE_OFFER_VIEW_BASIC`, or for DRAFT private offers.
  #
  # For non-draft private offers, these fields are populated based on the
  # following:
  #
  # * Offers published after April 20, 2025 will always have revenue
  #   share fields populated.
  # * Offers published on or before April 20, 2025 will only have revenue
  #   share fields populated if they were associated with an active,
  #   unexpired order on that date.
  # @!attribute [r] current_term_vendor_net_revenue_percent
  #   @return [::Google::Type::Decimal]
  #     Output only. The revenue share currently in effect.
  #
  #     The range of the value is between 0 and 100. For example, 80
  #     means the Vendor's current term revenue share is 80%. The vendor
  #     will keep 80% of the revenue.
  #     .
  # @!attribute [r] renewal_term_vendor_net_revenue_percent
  #   @return [::Google::Type::Decimal]
  #     Output only. The expected revenue share for the renewal term.
  #     Not included if the offer does not have renewal terms.
  #
  #     The range of the value is between 0 and 100. For example, 80
  #     means the Vendor's current term revenue share is 80%. The vendor
  #     will keep 80% of the revenue after renewal.
  #     .
  class RevenueShare
    include ::Google::Protobuf::MessageExts
    extend ::Google::Protobuf::MessageExts::ClassMethods
  end
end

#reseller_private_offer_plan_id::String (readonly)

Returns Output only. Present for offers created by a reseller from a reseller private offer plan (RPOP). When set, contains the ID of the originating RPOP. Not included for PRIVATE_OFFER_VIEW_BASIC.

Returns:

  • (::String)

    Output only. Present for offers created by a reseller from a reseller private offer plan (RPOP). When set, contains the ID of the originating RPOP. Not included for PRIVATE_OFFER_VIEW_BASIC.



554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
# File 'proto_docs/google/cloud/commerceproducer/v1beta/private_offer.rb', line 554

class SingleProductOffer
  include ::Google::Protobuf::MessageExts
  extend ::Google::Protobuf::MessageExts::ClassMethods

  # Additional details used to describe customization of the service level.
  #
  # Features are used to distinguish service levels of the same product.
  # When a product has a single service level, all details can be contained
  # in the product documentation. When a product has multiple service levels,
  # each service level can be assigned a distinct set of features to
  # distinguish the key differences between the service levels.
  #
  # In addition to customizing pricing and other transaction details, a
  # private offer may include customization of partner-managed product
  # behavior. When this is the case, the details of the custom behavior are
  # described using features.
  # @!attribute [rw] display_name
  #   @return [::String]
  #     Optional. Human readable display text characterizing the feature.
  #     Should be sufficiently detailed to identify the feature, allowing
  #     features to be correlated across separate offers and service levels.
  #     Must be non-empty to publish the offer.
  #     The maximum allowed length is 128 characters.
  #     Allows characters from the following Unicode Property Classes:
  #     Letters, Numbers, Punctuation, Symbols, and Separators
  # @!attribute [rw] value
  #   @return [::String]
  #     Optional. Human readable display text reflecting the value of the
  #     feature. Used for variable features not captured by the display_name
  #     alone. The maximum allowed length is 3000 characters. Allows characters
  #     from the following Unicode Property Classes: Letters, Numbers,
  #     Punctuation, Symbols, and Separators
  class Feature
    include ::Google::Protobuf::MessageExts
    extend ::Google::Protobuf::MessageExts::ClassMethods
  end

  # The price model of the private offer.
  #
  # Private offers are referred to as having different kinds of price models
  # based on the combination of fields set in the price model. The following
  # terminology is used in documentation and other reference material.
  #
  # * Usage-based: the price model does not set `flat_fee`
  # * Usage-only: the price model sets only `usage`
  # * CUD (committed use discount): the price model sets `commitment`
  #     * Commitment discount with additional usage at list price:
  #       The price model sets `commitment` and not `usage`.
  #     * Commitment with all usage discounted: The price model sets
  #       `commitment` and `usage`.
  # * Flat fee: the price model sets only `flat_fee`
  # * Flat fee with usage: the price model sets `flat_fee` and `usage`
  #
  # See
  # https://docs.cloud.google.com/marketplace/docs/partners/offers/select-pricing-model#CUD
  # for the price models.
  # @!attribute [rw] flat_fee
  #   @return [::Google::Cloud::CommerceProducer::V1beta::PrivateOffer::SingleProductOffer::PriceModel::FlatFee]
  #     Optional. The price configurations for the flat fee subscription.
  #     Must be unset when the base standard offer's price model does not
  #     include subscription SKUs.
  #
  #     Note: The following fields are mutually exclusive: `flat_fee`, `commitment`. If a field in that set is populated, all other fields in the set will automatically be cleared.
  # @!attribute [rw] commitment
  #   @return [::Google::Cloud::CommerceProducer::V1beta::PrivateOffer::SingleProductOffer::PriceModel::Commitment]
  #     Optional. The price configurations for the commitment based
  #     subscription. Must be unset when the base standard offer's price
  #     model includes subscription SKUs.
  #
  #     Note: The following fields are mutually exclusive: `commitment`, `flat_fee`. If a field in that set is populated, all other fields in the set will automatically be cleared.
  # @!attribute [rw] usage
  #   @return [::Google::Cloud::CommerceProducer::V1beta::PrivateOffer::SingleProductOffer::PriceModel::Usage]
  #     Optional. The price configurations for the usage part.
  #     If this field is set, the `Commitment.discount_percent` must be unset.
  #     A private offer can apply a discount to all usage or to a usage
  #     commitment, but not both.
  #     Must be unset when the base standard offer's price model includes no
  #     usage SKUs.
  class PriceModel
    include ::Google::Protobuf::MessageExts
    extend ::Google::Protobuf::MessageExts::ClassMethods

    # The discount for a specific SKU.
    # @!attribute [rw] sku
    #   @return [::String]
    #     Optional. The name of a partner SKU from this API.
    #
    #     Must refer to a SKU in the price model of the base standard offer.
    #     Inclusion in the base price model can occur either directly or
    #     indirectly via inclusion in an included SkuGroup.
    #
    #     Currently, standard offer price models include only partner SKUs
    #     in the same project as the standard offer. This may change.
    #
    #     Format:
    #     projects/\\{project}/locations/\\{location}/services/\\{service}/skus/\\{sku}
    #
    #     Note: The following fields are mutually exclusive: `sku`, `cloud_billing_sku`. If a field in that set is populated, all other fields in the set will automatically be cleared.
    # @!attribute [rw] cloud_billing_sku
    #   @return [::String]
    #     Optional. The name of a Google SKU from the Cloud Billing API.
    #
    #     Used for partner products sold by Google, such as Premium Operating
    #     System Images sold for use in Compute Engine. This is not common.
    #     SKUs of this type are not present on this API and can instead be
    #     found on the Cloud Billing API or at https://cloud.google.com/skus.
    #
    #     Must refer to a SKU in the price model of the base standard offer.
    #     Google SKUs are always referenced in standard offers via SkuGroups.
    #
    #     Format: services/\\{service}/skus/\\{sku}
    #
    #     Note: The following fields are mutually exclusive: `cloud_billing_sku`, `sku`. If a field in that set is populated, all other fields in the set will automatically be cleared.
    # @!attribute [rw] discount_percent
    #   @return [::Google::Type::Decimal]
    #     Optional. The discount percent for the SKU.
    #     For example, `10` means a discount of 10%. If the original SKU
    #     price is $100/hour then the discounted price will be $90/hour.
    #
    #     Must be between 0 and 100 inclusive, with precision up to 2 decimal
    #     places. If this field is set, then the allowed pattern for 'value'
    #     is `^([0-9]{1,2}(\\.\\d{1,2})?|100(\\.0{1,2})?)$`.
    #
    #     Examples of valid values: "0", "100.0", "12.34", "40.0".
    #     Example of invalid values: ".3", "-1", "100.1", "12.345", "+12",
    #     and "".
    #     Must be present to publish the offer.
    class SkuDiscount
      include ::Google::Protobuf::MessageExts
      extend ::Google::Protobuf::MessageExts::ClassMethods
    end

    # The price for the usage SKUs.
    # @!attribute [rw] default_discount_percent
    #   @return [::Google::Type::Decimal]
    #     Optional. The default discount percent for usage SKUs.
    #     An unset default discount percent is equivalent to 0 (no discount).
    #
    #     Must be between 0 and 100 inclusive, with precision up to 2 decimal
    #     places. If this field is set, then the allowed pattern for 'value'
    #     is `^([0-9]{1,2}(\\.\\d{1,2})?|100(\\.0{1,2})?)$`.
    #     Examples of valid values: "0", "100.0", "12.34", "40.0".
    #     Example of invalid values: ".3", "-1", "100.1", "12.345", "+12", "".
    # @!attribute [rw] sku_discounts
    #   @return [::Array<::Google::Cloud::CommerceProducer::V1beta::PrivateOffer::SingleProductOffer::PriceModel::SkuDiscount>]
    #     Optional. The discounts for the specific SKUs that override the
    #     `default_discount_percent`.
    class Usage
      include ::Google::Protobuf::MessageExts
      extend ::Google::Protobuf::MessageExts::ClassMethods
    end

    # The price configurations for the flat fee subscriptions.
    # @!attribute [rw] flat_fee_override
    #   @return [::Google::Type::Money]
    #     Optional. Flat fee overriding the default flat fee in the base
    #     standard offer. Value cannot be negative. The currency must be "USD"
    #     and precision is limited to cents. Must be present to publish the
    #     offer, if the parent message is set. The maximum allowed value is
    #     1,000,000,000 USD.
    class FlatFee
      include ::Google::Protobuf::MessageExts
      extend ::Google::Protobuf::MessageExts::ClassMethods
    end

    # The price configurations for the commitment based subscriptions.
    # @!attribute [rw] commitment_amount
    #   @return [::Google::Type::Money]
    #     Optional. The commitment balance that the customer will receive.
    #     Value cannot be negative.
    #     The currency must be "USD" and precision is limited to cents.
    #     Must be present to publish the offer, if the parent message is set.
    #     The maximum allowed value is 1,000,000,000 USD.
    #
    #     If the current offer amends a private offer where the term has not
    #     ended, and if the field
    #     `single_product_offer.standard_interval_price.price_model.commitment.commitment_amount`
    #     is set on both the current offer and the amended private offer, then
    #     the commitment amount must be equal or higher on the current offer,
    #     compared to the amended private offer.
    # @!attribute [rw] discount_percent
    #   @return [::Google::Type::Decimal]
    #     Optional. The discount percent on `commitment_amount`.
    #
    #     For example, `10` means a discount of 10%. If the original
    #     `commitment_amount` is $100 then the discounted amount will be $90.
    #     The customer is charged $90 and receives $100 in credits.
    #
    #     All reported usage will be charged at the standard price.
    #     If this field is set, the `price_model.usage` must be unset. A
    #     private offer can apply a discount to all usage or to a usage
    #     commitment, but not both.
    #
    #     Must be between 0 and 100 inclusive, with precision up to 2 decimal
    #     places. If this field is set, then the allowed pattern for 'value'
    #     is `^([0-9]{1,2}(\\.\\d{1,2})?|100(\\.0{1,2})?)$`.
    #     Examples of valid values: "0", "100.0", "12.34", "40.0".
    #     Example of invalid values: ".3", "-1", "100.1", "12.345", "+12", "".
    #
    #     Must be present to publish the offer.
    # @!attribute [rw] additional_credit
    #   @return [::Google::Type::Money]
    #     Optional. Additional credit granted to the customer.
    #     Additional credits are only supported for custom interval offers.
    #     Equivalent behavior can be achieved for standard interval offers by
    #     varying the `commitment_amount` and `discount_percent`.
    #
    #     Value cannot be negative.
    #     The currency must be "USD" and precision is limited to cents.
    #     The maximum allowed value is 1,000,000 USD.
    # @!attribute [rw] discard_previous_credit_balance
    #   @return [::Boolean]
    #     Optional. Whether to discard the previous credit balance when the
    #     associated installment starts. If not set, the previous credit
    #     balance will be rolled over to the current installment.
    #
    #     If there are no previous installments, then the value of this field
    #     will not matter - since it has no effect when no credits exist.
    class Commitment
      include ::Google::Protobuf::MessageExts
      extend ::Google::Protobuf::MessageExts::ClassMethods
    end
  end

  # Price configurations for offers with standard intervals.
  # @!attribute [rw] standard_interval
  #   @return [::Google::Cloud::CommerceProducer::V1beta::PrivateOffer::SingleProductOffer::StandardIntervalPrice::StandardInterval]
  #     Optional. The standard interval of the offer.
  #     Must be present to publish unless the price model is usage-only.
  # @!attribute [rw] price_model
  #   @return [::Google::Cloud::CommerceProducer::V1beta::PrivateOffer::SingleProductOffer::PriceModel]
  #     Optional. The price model of the offer.
  #     Must be present to publish the offer.
  class StandardIntervalPrice
    include ::Google::Protobuf::MessageExts
    extend ::Google::Protobuf::MessageExts::ClassMethods

    # The options for offers with standard intervals.
    module StandardInterval
      # The private offer does not have an interval.
      # If this is set, then the offer is "usage-only".
      # Field `term.duration_months` must be positive.
      STANDARD_INTERVAL_UNSPECIFIED = 0

      # The schedule of the monthly postpay offers.
      # This type of offer has "Monthly" billing frequency (see
      # https://docs.cloud.google.com/marketplace/docs/partners/offers/select-payment-schedule).
      # No longer supported as of May 2024. Cannot be used to publish
      # new offers.
      MONTHLY_POSTPAY = 1

      # Monthly installments with proration.
      # This type of offer has "Monthly" billing frequency (see
      # https://docs.cloud.google.com/marketplace/docs/partners/offers/select-payment-schedule).
      # For example, if the offer starts on 04/15, and the offer duration is
      # 3 months, the following installments will be created:
      # # 1: from 04/15 to 05/01, at the prorated price for April.
      #
      # # 2: from 05/01 to 06/01, at the full monthly price for May.
      #
      # # 3: from 06/01 to 07/01, at the full monthly price for June.
      #
      # # 4: from 07/01 to 07/15, at the prorated price for July.
      #
      # All dates represent the start of that day in the America/Los_Angeles
      # time zone.
      #
      # If this is set:
      #
      # * The `PriceModel.subscription` oneof must be set.
      # * Field `term.duration_months` must be positive.
      MONTHLY_PRORATED = 2

      # Monthly installments without proration.
      # This type of offer has "Monthly" billing frequency (see
      # https://docs.cloud.google.com/marketplace/docs/partners/offers/select-payment-schedule).
      # For example, if the offer starts on 04/15, and the offer duration is
      # 3 months, the following installments will be created:
      # # 1: from 04/15 to 05/15, at the full monthly price.
      #
      # # 2: from 05/15 to 06/15, at the full monthly price.
      #
      # # 3: from 06/15 to 07/15, at the full monthly price.
      #
      # All dates represent the start of that day in the America/Los_Angeles
      # time zone.
      #
      # If this is set:
      #
      # * The `PriceModel.subscription` oneof must be set.
      # * Field `term.duration_months` must be positive.
      MONTHLY_NOT_PRORATED = 3

      # Quarterly installments which are not prorated.
      # This type of offer has "Quarterly" billing frequency (see
      # https://docs.cloud.google.com/marketplace/docs/partners/offers/select-payment-schedule).
      # For example, if the offer starts on 01/15, and the offer duration is
      # 3 quarters, the following installments will be created:
      # # 1: from 01/15 to 04/15, at the full quarterly price.
      #
      # # 2: from 04/15 to 07/15, at the full quarterly price.
      #
      # # 3: from 07/15 to 10/15, at the full quarterly price.
      #
      # All dates represent the start of that day in the America/Los_Angeles
      # time zone.
      #
      # If this is set:
      #
      # * The `PriceModel.subscription` oneof must be set.
      # * Field `term.duration_months` must be positive.
      QUARTERLY_NOT_PRORATED = 4

      # Yearly installments which are not prorated.
      # This type of offer has "Yearly" billing frequency (see
      # https://docs.cloud.google.com/marketplace/docs/partners/offers/select-payment-schedule).
      # For example, if the offer starts on 01/15/2025, and the offer
      # duration is 3 years, the following installments will be created:
      # # 1: from 01/15/2025 to 01/15/2026, at the full yearly price.
      #
      # # 2: from 01/15/2026 to 01/15/2027, at the full yearly price.
      #
      # # 3: from 01/15/2027 to 01/15/2028, at the full yearly price.
      #
      # All dates represent the start of that day in the America/Los_Angeles
      # time zone.
      #
      # If this is set:
      #
      # * The `PriceModel.subscription` oneof must be set.
      # * Field `term.duration_months` must be positive.
      YEARLY_NOT_PRORATED = 5
    end
  end

  # An installment of the offer.
  # @!attribute [rw] start_time
  #   @return [::Google::Type::DateTime]
  #     Optional. The start time of the installment.
  #     Each installment must have a unique start time with one exception:
  #     When the `term.start_policy` of the offer's term is `IMMEDIATE`,
  #     the `start_time` of the first installment must be unset.
  #     The actual start time is not recorded in the offer and instead is
  #     determined by the time the resulting order became active.
  #
  #     When the `term.start_policy` of the offer's term is
  #     `SCHEDULED_START_TIME`, then the first installment's `start_time` must
  #     match `term.scheduled_start_time`.
  #
  #     If the `term.end_policy` of the offer's term is `SCHEDULED_END_TIME`,
  #     then installment `start_time` must be before `term.scheduled_end_time`.
  #     If it's `AFTER_DURATION`, then installment `start_time` must be before
  #     the time calculated by adding the `term.duration_months` to
  #     the start time of the offer.
  #
  #     The `start_time` of the installments cannot be before the
  #     `accept_deadline_time` of the offer.
  #
  #     Installment start times must be in strictly increasing chronological
  #     order.
  # @!attribute [rw] price_model
  #   @return [::Google::Cloud::CommerceProducer::V1beta::PrivateOffer::SingleProductOffer::PriceModel]
  #     Optional. The price model of the installment.
  #     All installments must have the same form of price model.
  class Installment
    include ::Google::Protobuf::MessageExts
    extend ::Google::Protobuf::MessageExts::ClassMethods
  end

  # Price configurations for offers with custom intervals.
  # @!attribute [rw] installments
  #   @return [::Array<::Google::Cloud::CommerceProducer::V1beta::PrivateOffer::SingleProductOffer::Installment>]
  #     Optional. The installments that make up the installment timeline.
  #     All installments must have the same form of price model (e.g.
  #     all commitment, or all flat fee). A subscription must be present
  #     under the price model for every installment.
  #
  #     Must contain at least one installment to publish the offer.
  class CustomIntervalPrice
    include ::Google::Protobuf::MessageExts
    extend ::Google::Protobuf::MessageExts::ClassMethods
  end

  # The contract value of the offer.
  # @!attribute [r] total_contract_value
  #   @return [::Google::Type::Money]
  #     Output only. The total contract value of the offer.
  #     This will be set for all non-draft private offers, as long as
  #     'PRIVATE_OFFER_VIEW_FULL' is requested. For DRAFT private offers,
  #     this will be populated only when the end user's billing account is
  #     set and when the pricing and term configuration is sufficiently
  #     complete to allow for a calculation.
  class ContractValue
    include ::Google::Protobuf::MessageExts
    extend ::Google::Protobuf::MessageExts::ClassMethods
  end

  # Revenue Share information for a Private Offer.
  # For more details about the revenue share, including how the value is
  # determined, see
  # https://docs.cloud.google.com/marketplace/docs/partners/revenue-share-scenarios.
  #
  # Not included for `PRIVATE_OFFER_VIEW_BASIC`, or for DRAFT private offers.
  #
  # For non-draft private offers, these fields are populated based on the
  # following:
  #
  # * Offers published after April 20, 2025 will always have revenue
  #   share fields populated.
  # * Offers published on or before April 20, 2025 will only have revenue
  #   share fields populated if they were associated with an active,
  #   unexpired order on that date.
  # @!attribute [r] current_term_vendor_net_revenue_percent
  #   @return [::Google::Type::Decimal]
  #     Output only. The revenue share currently in effect.
  #
  #     The range of the value is between 0 and 100. For example, 80
  #     means the Vendor's current term revenue share is 80%. The vendor
  #     will keep 80% of the revenue.
  #     .
  # @!attribute [r] renewal_term_vendor_net_revenue_percent
  #   @return [::Google::Type::Decimal]
  #     Output only. The expected revenue share for the renewal term.
  #     Not included if the offer does not have renewal terms.
  #
  #     The range of the value is between 0 and 100. For example, 80
  #     means the Vendor's current term revenue share is 80%. The vendor
  #     will keep 80% of the revenue after renewal.
  #     .
  class RevenueShare
    include ::Google::Protobuf::MessageExts
    extend ::Google::Protobuf::MessageExts::ClassMethods
  end
end

#revenue_share::Google::Cloud::CommerceProducer::V1beta::PrivateOffer::SingleProductOffer::RevenueShare (readonly)

Returns Output only. Revenue share information for this Private Offer. Not included for PRIVATE_OFFER_VIEW_BASIC.

Returns:



554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
# File 'proto_docs/google/cloud/commerceproducer/v1beta/private_offer.rb', line 554

class SingleProductOffer
  include ::Google::Protobuf::MessageExts
  extend ::Google::Protobuf::MessageExts::ClassMethods

  # Additional details used to describe customization of the service level.
  #
  # Features are used to distinguish service levels of the same product.
  # When a product has a single service level, all details can be contained
  # in the product documentation. When a product has multiple service levels,
  # each service level can be assigned a distinct set of features to
  # distinguish the key differences between the service levels.
  #
  # In addition to customizing pricing and other transaction details, a
  # private offer may include customization of partner-managed product
  # behavior. When this is the case, the details of the custom behavior are
  # described using features.
  # @!attribute [rw] display_name
  #   @return [::String]
  #     Optional. Human readable display text characterizing the feature.
  #     Should be sufficiently detailed to identify the feature, allowing
  #     features to be correlated across separate offers and service levels.
  #     Must be non-empty to publish the offer.
  #     The maximum allowed length is 128 characters.
  #     Allows characters from the following Unicode Property Classes:
  #     Letters, Numbers, Punctuation, Symbols, and Separators
  # @!attribute [rw] value
  #   @return [::String]
  #     Optional. Human readable display text reflecting the value of the
  #     feature. Used for variable features not captured by the display_name
  #     alone. The maximum allowed length is 3000 characters. Allows characters
  #     from the following Unicode Property Classes: Letters, Numbers,
  #     Punctuation, Symbols, and Separators
  class Feature
    include ::Google::Protobuf::MessageExts
    extend ::Google::Protobuf::MessageExts::ClassMethods
  end

  # The price model of the private offer.
  #
  # Private offers are referred to as having different kinds of price models
  # based on the combination of fields set in the price model. The following
  # terminology is used in documentation and other reference material.
  #
  # * Usage-based: the price model does not set `flat_fee`
  # * Usage-only: the price model sets only `usage`
  # * CUD (committed use discount): the price model sets `commitment`
  #     * Commitment discount with additional usage at list price:
  #       The price model sets `commitment` and not `usage`.
  #     * Commitment with all usage discounted: The price model sets
  #       `commitment` and `usage`.
  # * Flat fee: the price model sets only `flat_fee`
  # * Flat fee with usage: the price model sets `flat_fee` and `usage`
  #
  # See
  # https://docs.cloud.google.com/marketplace/docs/partners/offers/select-pricing-model#CUD
  # for the price models.
  # @!attribute [rw] flat_fee
  #   @return [::Google::Cloud::CommerceProducer::V1beta::PrivateOffer::SingleProductOffer::PriceModel::FlatFee]
  #     Optional. The price configurations for the flat fee subscription.
  #     Must be unset when the base standard offer's price model does not
  #     include subscription SKUs.
  #
  #     Note: The following fields are mutually exclusive: `flat_fee`, `commitment`. If a field in that set is populated, all other fields in the set will automatically be cleared.
  # @!attribute [rw] commitment
  #   @return [::Google::Cloud::CommerceProducer::V1beta::PrivateOffer::SingleProductOffer::PriceModel::Commitment]
  #     Optional. The price configurations for the commitment based
  #     subscription. Must be unset when the base standard offer's price
  #     model includes subscription SKUs.
  #
  #     Note: The following fields are mutually exclusive: `commitment`, `flat_fee`. If a field in that set is populated, all other fields in the set will automatically be cleared.
  # @!attribute [rw] usage
  #   @return [::Google::Cloud::CommerceProducer::V1beta::PrivateOffer::SingleProductOffer::PriceModel::Usage]
  #     Optional. The price configurations for the usage part.
  #     If this field is set, the `Commitment.discount_percent` must be unset.
  #     A private offer can apply a discount to all usage or to a usage
  #     commitment, but not both.
  #     Must be unset when the base standard offer's price model includes no
  #     usage SKUs.
  class PriceModel
    include ::Google::Protobuf::MessageExts
    extend ::Google::Protobuf::MessageExts::ClassMethods

    # The discount for a specific SKU.
    # @!attribute [rw] sku
    #   @return [::String]
    #     Optional. The name of a partner SKU from this API.
    #
    #     Must refer to a SKU in the price model of the base standard offer.
    #     Inclusion in the base price model can occur either directly or
    #     indirectly via inclusion in an included SkuGroup.
    #
    #     Currently, standard offer price models include only partner SKUs
    #     in the same project as the standard offer. This may change.
    #
    #     Format:
    #     projects/\\{project}/locations/\\{location}/services/\\{service}/skus/\\{sku}
    #
    #     Note: The following fields are mutually exclusive: `sku`, `cloud_billing_sku`. If a field in that set is populated, all other fields in the set will automatically be cleared.
    # @!attribute [rw] cloud_billing_sku
    #   @return [::String]
    #     Optional. The name of a Google SKU from the Cloud Billing API.
    #
    #     Used for partner products sold by Google, such as Premium Operating
    #     System Images sold for use in Compute Engine. This is not common.
    #     SKUs of this type are not present on this API and can instead be
    #     found on the Cloud Billing API or at https://cloud.google.com/skus.
    #
    #     Must refer to a SKU in the price model of the base standard offer.
    #     Google SKUs are always referenced in standard offers via SkuGroups.
    #
    #     Format: services/\\{service}/skus/\\{sku}
    #
    #     Note: The following fields are mutually exclusive: `cloud_billing_sku`, `sku`. If a field in that set is populated, all other fields in the set will automatically be cleared.
    # @!attribute [rw] discount_percent
    #   @return [::Google::Type::Decimal]
    #     Optional. The discount percent for the SKU.
    #     For example, `10` means a discount of 10%. If the original SKU
    #     price is $100/hour then the discounted price will be $90/hour.
    #
    #     Must be between 0 and 100 inclusive, with precision up to 2 decimal
    #     places. If this field is set, then the allowed pattern for 'value'
    #     is `^([0-9]{1,2}(\\.\\d{1,2})?|100(\\.0{1,2})?)$`.
    #
    #     Examples of valid values: "0", "100.0", "12.34", "40.0".
    #     Example of invalid values: ".3", "-1", "100.1", "12.345", "+12",
    #     and "".
    #     Must be present to publish the offer.
    class SkuDiscount
      include ::Google::Protobuf::MessageExts
      extend ::Google::Protobuf::MessageExts::ClassMethods
    end

    # The price for the usage SKUs.
    # @!attribute [rw] default_discount_percent
    #   @return [::Google::Type::Decimal]
    #     Optional. The default discount percent for usage SKUs.
    #     An unset default discount percent is equivalent to 0 (no discount).
    #
    #     Must be between 0 and 100 inclusive, with precision up to 2 decimal
    #     places. If this field is set, then the allowed pattern for 'value'
    #     is `^([0-9]{1,2}(\\.\\d{1,2})?|100(\\.0{1,2})?)$`.
    #     Examples of valid values: "0", "100.0", "12.34", "40.0".
    #     Example of invalid values: ".3", "-1", "100.1", "12.345", "+12", "".
    # @!attribute [rw] sku_discounts
    #   @return [::Array<::Google::Cloud::CommerceProducer::V1beta::PrivateOffer::SingleProductOffer::PriceModel::SkuDiscount>]
    #     Optional. The discounts for the specific SKUs that override the
    #     `default_discount_percent`.
    class Usage
      include ::Google::Protobuf::MessageExts
      extend ::Google::Protobuf::MessageExts::ClassMethods
    end

    # The price configurations for the flat fee subscriptions.
    # @!attribute [rw] flat_fee_override
    #   @return [::Google::Type::Money]
    #     Optional. Flat fee overriding the default flat fee in the base
    #     standard offer. Value cannot be negative. The currency must be "USD"
    #     and precision is limited to cents. Must be present to publish the
    #     offer, if the parent message is set. The maximum allowed value is
    #     1,000,000,000 USD.
    class FlatFee
      include ::Google::Protobuf::MessageExts
      extend ::Google::Protobuf::MessageExts::ClassMethods
    end

    # The price configurations for the commitment based subscriptions.
    # @!attribute [rw] commitment_amount
    #   @return [::Google::Type::Money]
    #     Optional. The commitment balance that the customer will receive.
    #     Value cannot be negative.
    #     The currency must be "USD" and precision is limited to cents.
    #     Must be present to publish the offer, if the parent message is set.
    #     The maximum allowed value is 1,000,000,000 USD.
    #
    #     If the current offer amends a private offer where the term has not
    #     ended, and if the field
    #     `single_product_offer.standard_interval_price.price_model.commitment.commitment_amount`
    #     is set on both the current offer and the amended private offer, then
    #     the commitment amount must be equal or higher on the current offer,
    #     compared to the amended private offer.
    # @!attribute [rw] discount_percent
    #   @return [::Google::Type::Decimal]
    #     Optional. The discount percent on `commitment_amount`.
    #
    #     For example, `10` means a discount of 10%. If the original
    #     `commitment_amount` is $100 then the discounted amount will be $90.
    #     The customer is charged $90 and receives $100 in credits.
    #
    #     All reported usage will be charged at the standard price.
    #     If this field is set, the `price_model.usage` must be unset. A
    #     private offer can apply a discount to all usage or to a usage
    #     commitment, but not both.
    #
    #     Must be between 0 and 100 inclusive, with precision up to 2 decimal
    #     places. If this field is set, then the allowed pattern for 'value'
    #     is `^([0-9]{1,2}(\\.\\d{1,2})?|100(\\.0{1,2})?)$`.
    #     Examples of valid values: "0", "100.0", "12.34", "40.0".
    #     Example of invalid values: ".3", "-1", "100.1", "12.345", "+12", "".
    #
    #     Must be present to publish the offer.
    # @!attribute [rw] additional_credit
    #   @return [::Google::Type::Money]
    #     Optional. Additional credit granted to the customer.
    #     Additional credits are only supported for custom interval offers.
    #     Equivalent behavior can be achieved for standard interval offers by
    #     varying the `commitment_amount` and `discount_percent`.
    #
    #     Value cannot be negative.
    #     The currency must be "USD" and precision is limited to cents.
    #     The maximum allowed value is 1,000,000 USD.
    # @!attribute [rw] discard_previous_credit_balance
    #   @return [::Boolean]
    #     Optional. Whether to discard the previous credit balance when the
    #     associated installment starts. If not set, the previous credit
    #     balance will be rolled over to the current installment.
    #
    #     If there are no previous installments, then the value of this field
    #     will not matter - since it has no effect when no credits exist.
    class Commitment
      include ::Google::Protobuf::MessageExts
      extend ::Google::Protobuf::MessageExts::ClassMethods
    end
  end

  # Price configurations for offers with standard intervals.
  # @!attribute [rw] standard_interval
  #   @return [::Google::Cloud::CommerceProducer::V1beta::PrivateOffer::SingleProductOffer::StandardIntervalPrice::StandardInterval]
  #     Optional. The standard interval of the offer.
  #     Must be present to publish unless the price model is usage-only.
  # @!attribute [rw] price_model
  #   @return [::Google::Cloud::CommerceProducer::V1beta::PrivateOffer::SingleProductOffer::PriceModel]
  #     Optional. The price model of the offer.
  #     Must be present to publish the offer.
  class StandardIntervalPrice
    include ::Google::Protobuf::MessageExts
    extend ::Google::Protobuf::MessageExts::ClassMethods

    # The options for offers with standard intervals.
    module StandardInterval
      # The private offer does not have an interval.
      # If this is set, then the offer is "usage-only".
      # Field `term.duration_months` must be positive.
      STANDARD_INTERVAL_UNSPECIFIED = 0

      # The schedule of the monthly postpay offers.
      # This type of offer has "Monthly" billing frequency (see
      # https://docs.cloud.google.com/marketplace/docs/partners/offers/select-payment-schedule).
      # No longer supported as of May 2024. Cannot be used to publish
      # new offers.
      MONTHLY_POSTPAY = 1

      # Monthly installments with proration.
      # This type of offer has "Monthly" billing frequency (see
      # https://docs.cloud.google.com/marketplace/docs/partners/offers/select-payment-schedule).
      # For example, if the offer starts on 04/15, and the offer duration is
      # 3 months, the following installments will be created:
      # # 1: from 04/15 to 05/01, at the prorated price for April.
      #
      # # 2: from 05/01 to 06/01, at the full monthly price for May.
      #
      # # 3: from 06/01 to 07/01, at the full monthly price for June.
      #
      # # 4: from 07/01 to 07/15, at the prorated price for July.
      #
      # All dates represent the start of that day in the America/Los_Angeles
      # time zone.
      #
      # If this is set:
      #
      # * The `PriceModel.subscription` oneof must be set.
      # * Field `term.duration_months` must be positive.
      MONTHLY_PRORATED = 2

      # Monthly installments without proration.
      # This type of offer has "Monthly" billing frequency (see
      # https://docs.cloud.google.com/marketplace/docs/partners/offers/select-payment-schedule).
      # For example, if the offer starts on 04/15, and the offer duration is
      # 3 months, the following installments will be created:
      # # 1: from 04/15 to 05/15, at the full monthly price.
      #
      # # 2: from 05/15 to 06/15, at the full monthly price.
      #
      # # 3: from 06/15 to 07/15, at the full monthly price.
      #
      # All dates represent the start of that day in the America/Los_Angeles
      # time zone.
      #
      # If this is set:
      #
      # * The `PriceModel.subscription` oneof must be set.
      # * Field `term.duration_months` must be positive.
      MONTHLY_NOT_PRORATED = 3

      # Quarterly installments which are not prorated.
      # This type of offer has "Quarterly" billing frequency (see
      # https://docs.cloud.google.com/marketplace/docs/partners/offers/select-payment-schedule).
      # For example, if the offer starts on 01/15, and the offer duration is
      # 3 quarters, the following installments will be created:
      # # 1: from 01/15 to 04/15, at the full quarterly price.
      #
      # # 2: from 04/15 to 07/15, at the full quarterly price.
      #
      # # 3: from 07/15 to 10/15, at the full quarterly price.
      #
      # All dates represent the start of that day in the America/Los_Angeles
      # time zone.
      #
      # If this is set:
      #
      # * The `PriceModel.subscription` oneof must be set.
      # * Field `term.duration_months` must be positive.
      QUARTERLY_NOT_PRORATED = 4

      # Yearly installments which are not prorated.
      # This type of offer has "Yearly" billing frequency (see
      # https://docs.cloud.google.com/marketplace/docs/partners/offers/select-payment-schedule).
      # For example, if the offer starts on 01/15/2025, and the offer
      # duration is 3 years, the following installments will be created:
      # # 1: from 01/15/2025 to 01/15/2026, at the full yearly price.
      #
      # # 2: from 01/15/2026 to 01/15/2027, at the full yearly price.
      #
      # # 3: from 01/15/2027 to 01/15/2028, at the full yearly price.
      #
      # All dates represent the start of that day in the America/Los_Angeles
      # time zone.
      #
      # If this is set:
      #
      # * The `PriceModel.subscription` oneof must be set.
      # * Field `term.duration_months` must be positive.
      YEARLY_NOT_PRORATED = 5
    end
  end

  # An installment of the offer.
  # @!attribute [rw] start_time
  #   @return [::Google::Type::DateTime]
  #     Optional. The start time of the installment.
  #     Each installment must have a unique start time with one exception:
  #     When the `term.start_policy` of the offer's term is `IMMEDIATE`,
  #     the `start_time` of the first installment must be unset.
  #     The actual start time is not recorded in the offer and instead is
  #     determined by the time the resulting order became active.
  #
  #     When the `term.start_policy` of the offer's term is
  #     `SCHEDULED_START_TIME`, then the first installment's `start_time` must
  #     match `term.scheduled_start_time`.
  #
  #     If the `term.end_policy` of the offer's term is `SCHEDULED_END_TIME`,
  #     then installment `start_time` must be before `term.scheduled_end_time`.
  #     If it's `AFTER_DURATION`, then installment `start_time` must be before
  #     the time calculated by adding the `term.duration_months` to
  #     the start time of the offer.
  #
  #     The `start_time` of the installments cannot be before the
  #     `accept_deadline_time` of the offer.
  #
  #     Installment start times must be in strictly increasing chronological
  #     order.
  # @!attribute [rw] price_model
  #   @return [::Google::Cloud::CommerceProducer::V1beta::PrivateOffer::SingleProductOffer::PriceModel]
  #     Optional. The price model of the installment.
  #     All installments must have the same form of price model.
  class Installment
    include ::Google::Protobuf::MessageExts
    extend ::Google::Protobuf::MessageExts::ClassMethods
  end

  # Price configurations for offers with custom intervals.
  # @!attribute [rw] installments
  #   @return [::Array<::Google::Cloud::CommerceProducer::V1beta::PrivateOffer::SingleProductOffer::Installment>]
  #     Optional. The installments that make up the installment timeline.
  #     All installments must have the same form of price model (e.g.
  #     all commitment, or all flat fee). A subscription must be present
  #     under the price model for every installment.
  #
  #     Must contain at least one installment to publish the offer.
  class CustomIntervalPrice
    include ::Google::Protobuf::MessageExts
    extend ::Google::Protobuf::MessageExts::ClassMethods
  end

  # The contract value of the offer.
  # @!attribute [r] total_contract_value
  #   @return [::Google::Type::Money]
  #     Output only. The total contract value of the offer.
  #     This will be set for all non-draft private offers, as long as
  #     'PRIVATE_OFFER_VIEW_FULL' is requested. For DRAFT private offers,
  #     this will be populated only when the end user's billing account is
  #     set and when the pricing and term configuration is sufficiently
  #     complete to allow for a calculation.
  class ContractValue
    include ::Google::Protobuf::MessageExts
    extend ::Google::Protobuf::MessageExts::ClassMethods
  end

  # Revenue Share information for a Private Offer.
  # For more details about the revenue share, including how the value is
  # determined, see
  # https://docs.cloud.google.com/marketplace/docs/partners/revenue-share-scenarios.
  #
  # Not included for `PRIVATE_OFFER_VIEW_BASIC`, or for DRAFT private offers.
  #
  # For non-draft private offers, these fields are populated based on the
  # following:
  #
  # * Offers published after April 20, 2025 will always have revenue
  #   share fields populated.
  # * Offers published on or before April 20, 2025 will only have revenue
  #   share fields populated if they were associated with an active,
  #   unexpired order on that date.
  # @!attribute [r] current_term_vendor_net_revenue_percent
  #   @return [::Google::Type::Decimal]
  #     Output only. The revenue share currently in effect.
  #
  #     The range of the value is between 0 and 100. For example, 80
  #     means the Vendor's current term revenue share is 80%. The vendor
  #     will keep 80% of the revenue.
  #     .
  # @!attribute [r] renewal_term_vendor_net_revenue_percent
  #   @return [::Google::Type::Decimal]
  #     Output only. The expected revenue share for the renewal term.
  #     Not included if the offer does not have renewal terms.
  #
  #     The range of the value is between 0 and 100. For example, 80
  #     means the Vendor's current term revenue share is 80%. The vendor
  #     will keep 80% of the revenue after renewal.
  #     .
  class RevenueShare
    include ::Google::Protobuf::MessageExts
    extend ::Google::Protobuf::MessageExts::ClassMethods
  end
end

#service_level::String (readonly)

Returns Output only. The service level (also known as the 'plan') of the base standard offer. The value is populated at publish time from the base standard offer.

Returns:

  • (::String)

    Output only. The service level (also known as the 'plan') of the base standard offer. The value is populated at publish time from the base standard offer.



554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
# File 'proto_docs/google/cloud/commerceproducer/v1beta/private_offer.rb', line 554

class SingleProductOffer
  include ::Google::Protobuf::MessageExts
  extend ::Google::Protobuf::MessageExts::ClassMethods

  # Additional details used to describe customization of the service level.
  #
  # Features are used to distinguish service levels of the same product.
  # When a product has a single service level, all details can be contained
  # in the product documentation. When a product has multiple service levels,
  # each service level can be assigned a distinct set of features to
  # distinguish the key differences between the service levels.
  #
  # In addition to customizing pricing and other transaction details, a
  # private offer may include customization of partner-managed product
  # behavior. When this is the case, the details of the custom behavior are
  # described using features.
  # @!attribute [rw] display_name
  #   @return [::String]
  #     Optional. Human readable display text characterizing the feature.
  #     Should be sufficiently detailed to identify the feature, allowing
  #     features to be correlated across separate offers and service levels.
  #     Must be non-empty to publish the offer.
  #     The maximum allowed length is 128 characters.
  #     Allows characters from the following Unicode Property Classes:
  #     Letters, Numbers, Punctuation, Symbols, and Separators
  # @!attribute [rw] value
  #   @return [::String]
  #     Optional. Human readable display text reflecting the value of the
  #     feature. Used for variable features not captured by the display_name
  #     alone. The maximum allowed length is 3000 characters. Allows characters
  #     from the following Unicode Property Classes: Letters, Numbers,
  #     Punctuation, Symbols, and Separators
  class Feature
    include ::Google::Protobuf::MessageExts
    extend ::Google::Protobuf::MessageExts::ClassMethods
  end

  # The price model of the private offer.
  #
  # Private offers are referred to as having different kinds of price models
  # based on the combination of fields set in the price model. The following
  # terminology is used in documentation and other reference material.
  #
  # * Usage-based: the price model does not set `flat_fee`
  # * Usage-only: the price model sets only `usage`
  # * CUD (committed use discount): the price model sets `commitment`
  #     * Commitment discount with additional usage at list price:
  #       The price model sets `commitment` and not `usage`.
  #     * Commitment with all usage discounted: The price model sets
  #       `commitment` and `usage`.
  # * Flat fee: the price model sets only `flat_fee`
  # * Flat fee with usage: the price model sets `flat_fee` and `usage`
  #
  # See
  # https://docs.cloud.google.com/marketplace/docs/partners/offers/select-pricing-model#CUD
  # for the price models.
  # @!attribute [rw] flat_fee
  #   @return [::Google::Cloud::CommerceProducer::V1beta::PrivateOffer::SingleProductOffer::PriceModel::FlatFee]
  #     Optional. The price configurations for the flat fee subscription.
  #     Must be unset when the base standard offer's price model does not
  #     include subscription SKUs.
  #
  #     Note: The following fields are mutually exclusive: `flat_fee`, `commitment`. If a field in that set is populated, all other fields in the set will automatically be cleared.
  # @!attribute [rw] commitment
  #   @return [::Google::Cloud::CommerceProducer::V1beta::PrivateOffer::SingleProductOffer::PriceModel::Commitment]
  #     Optional. The price configurations for the commitment based
  #     subscription. Must be unset when the base standard offer's price
  #     model includes subscription SKUs.
  #
  #     Note: The following fields are mutually exclusive: `commitment`, `flat_fee`. If a field in that set is populated, all other fields in the set will automatically be cleared.
  # @!attribute [rw] usage
  #   @return [::Google::Cloud::CommerceProducer::V1beta::PrivateOffer::SingleProductOffer::PriceModel::Usage]
  #     Optional. The price configurations for the usage part.
  #     If this field is set, the `Commitment.discount_percent` must be unset.
  #     A private offer can apply a discount to all usage or to a usage
  #     commitment, but not both.
  #     Must be unset when the base standard offer's price model includes no
  #     usage SKUs.
  class PriceModel
    include ::Google::Protobuf::MessageExts
    extend ::Google::Protobuf::MessageExts::ClassMethods

    # The discount for a specific SKU.
    # @!attribute [rw] sku
    #   @return [::String]
    #     Optional. The name of a partner SKU from this API.
    #
    #     Must refer to a SKU in the price model of the base standard offer.
    #     Inclusion in the base price model can occur either directly or
    #     indirectly via inclusion in an included SkuGroup.
    #
    #     Currently, standard offer price models include only partner SKUs
    #     in the same project as the standard offer. This may change.
    #
    #     Format:
    #     projects/\\{project}/locations/\\{location}/services/\\{service}/skus/\\{sku}
    #
    #     Note: The following fields are mutually exclusive: `sku`, `cloud_billing_sku`. If a field in that set is populated, all other fields in the set will automatically be cleared.
    # @!attribute [rw] cloud_billing_sku
    #   @return [::String]
    #     Optional. The name of a Google SKU from the Cloud Billing API.
    #
    #     Used for partner products sold by Google, such as Premium Operating
    #     System Images sold for use in Compute Engine. This is not common.
    #     SKUs of this type are not present on this API and can instead be
    #     found on the Cloud Billing API or at https://cloud.google.com/skus.
    #
    #     Must refer to a SKU in the price model of the base standard offer.
    #     Google SKUs are always referenced in standard offers via SkuGroups.
    #
    #     Format: services/\\{service}/skus/\\{sku}
    #
    #     Note: The following fields are mutually exclusive: `cloud_billing_sku`, `sku`. If a field in that set is populated, all other fields in the set will automatically be cleared.
    # @!attribute [rw] discount_percent
    #   @return [::Google::Type::Decimal]
    #     Optional. The discount percent for the SKU.
    #     For example, `10` means a discount of 10%. If the original SKU
    #     price is $100/hour then the discounted price will be $90/hour.
    #
    #     Must be between 0 and 100 inclusive, with precision up to 2 decimal
    #     places. If this field is set, then the allowed pattern for 'value'
    #     is `^([0-9]{1,2}(\\.\\d{1,2})?|100(\\.0{1,2})?)$`.
    #
    #     Examples of valid values: "0", "100.0", "12.34", "40.0".
    #     Example of invalid values: ".3", "-1", "100.1", "12.345", "+12",
    #     and "".
    #     Must be present to publish the offer.
    class SkuDiscount
      include ::Google::Protobuf::MessageExts
      extend ::Google::Protobuf::MessageExts::ClassMethods
    end

    # The price for the usage SKUs.
    # @!attribute [rw] default_discount_percent
    #   @return [::Google::Type::Decimal]
    #     Optional. The default discount percent for usage SKUs.
    #     An unset default discount percent is equivalent to 0 (no discount).
    #
    #     Must be between 0 and 100 inclusive, with precision up to 2 decimal
    #     places. If this field is set, then the allowed pattern for 'value'
    #     is `^([0-9]{1,2}(\\.\\d{1,2})?|100(\\.0{1,2})?)$`.
    #     Examples of valid values: "0", "100.0", "12.34", "40.0".
    #     Example of invalid values: ".3", "-1", "100.1", "12.345", "+12", "".
    # @!attribute [rw] sku_discounts
    #   @return [::Array<::Google::Cloud::CommerceProducer::V1beta::PrivateOffer::SingleProductOffer::PriceModel::SkuDiscount>]
    #     Optional. The discounts for the specific SKUs that override the
    #     `default_discount_percent`.
    class Usage
      include ::Google::Protobuf::MessageExts
      extend ::Google::Protobuf::MessageExts::ClassMethods
    end

    # The price configurations for the flat fee subscriptions.
    # @!attribute [rw] flat_fee_override
    #   @return [::Google::Type::Money]
    #     Optional. Flat fee overriding the default flat fee in the base
    #     standard offer. Value cannot be negative. The currency must be "USD"
    #     and precision is limited to cents. Must be present to publish the
    #     offer, if the parent message is set. The maximum allowed value is
    #     1,000,000,000 USD.
    class FlatFee
      include ::Google::Protobuf::MessageExts
      extend ::Google::Protobuf::MessageExts::ClassMethods
    end

    # The price configurations for the commitment based subscriptions.
    # @!attribute [rw] commitment_amount
    #   @return [::Google::Type::Money]
    #     Optional. The commitment balance that the customer will receive.
    #     Value cannot be negative.
    #     The currency must be "USD" and precision is limited to cents.
    #     Must be present to publish the offer, if the parent message is set.
    #     The maximum allowed value is 1,000,000,000 USD.
    #
    #     If the current offer amends a private offer where the term has not
    #     ended, and if the field
    #     `single_product_offer.standard_interval_price.price_model.commitment.commitment_amount`
    #     is set on both the current offer and the amended private offer, then
    #     the commitment amount must be equal or higher on the current offer,
    #     compared to the amended private offer.
    # @!attribute [rw] discount_percent
    #   @return [::Google::Type::Decimal]
    #     Optional. The discount percent on `commitment_amount`.
    #
    #     For example, `10` means a discount of 10%. If the original
    #     `commitment_amount` is $100 then the discounted amount will be $90.
    #     The customer is charged $90 and receives $100 in credits.
    #
    #     All reported usage will be charged at the standard price.
    #     If this field is set, the `price_model.usage` must be unset. A
    #     private offer can apply a discount to all usage or to a usage
    #     commitment, but not both.
    #
    #     Must be between 0 and 100 inclusive, with precision up to 2 decimal
    #     places. If this field is set, then the allowed pattern for 'value'
    #     is `^([0-9]{1,2}(\\.\\d{1,2})?|100(\\.0{1,2})?)$`.
    #     Examples of valid values: "0", "100.0", "12.34", "40.0".
    #     Example of invalid values: ".3", "-1", "100.1", "12.345", "+12", "".
    #
    #     Must be present to publish the offer.
    # @!attribute [rw] additional_credit
    #   @return [::Google::Type::Money]
    #     Optional. Additional credit granted to the customer.
    #     Additional credits are only supported for custom interval offers.
    #     Equivalent behavior can be achieved for standard interval offers by
    #     varying the `commitment_amount` and `discount_percent`.
    #
    #     Value cannot be negative.
    #     The currency must be "USD" and precision is limited to cents.
    #     The maximum allowed value is 1,000,000 USD.
    # @!attribute [rw] discard_previous_credit_balance
    #   @return [::Boolean]
    #     Optional. Whether to discard the previous credit balance when the
    #     associated installment starts. If not set, the previous credit
    #     balance will be rolled over to the current installment.
    #
    #     If there are no previous installments, then the value of this field
    #     will not matter - since it has no effect when no credits exist.
    class Commitment
      include ::Google::Protobuf::MessageExts
      extend ::Google::Protobuf::MessageExts::ClassMethods
    end
  end

  # Price configurations for offers with standard intervals.
  # @!attribute [rw] standard_interval
  #   @return [::Google::Cloud::CommerceProducer::V1beta::PrivateOffer::SingleProductOffer::StandardIntervalPrice::StandardInterval]
  #     Optional. The standard interval of the offer.
  #     Must be present to publish unless the price model is usage-only.
  # @!attribute [rw] price_model
  #   @return [::Google::Cloud::CommerceProducer::V1beta::PrivateOffer::SingleProductOffer::PriceModel]
  #     Optional. The price model of the offer.
  #     Must be present to publish the offer.
  class StandardIntervalPrice
    include ::Google::Protobuf::MessageExts
    extend ::Google::Protobuf::MessageExts::ClassMethods

    # The options for offers with standard intervals.
    module StandardInterval
      # The private offer does not have an interval.
      # If this is set, then the offer is "usage-only".
      # Field `term.duration_months` must be positive.
      STANDARD_INTERVAL_UNSPECIFIED = 0

      # The schedule of the monthly postpay offers.
      # This type of offer has "Monthly" billing frequency (see
      # https://docs.cloud.google.com/marketplace/docs/partners/offers/select-payment-schedule).
      # No longer supported as of May 2024. Cannot be used to publish
      # new offers.
      MONTHLY_POSTPAY = 1

      # Monthly installments with proration.
      # This type of offer has "Monthly" billing frequency (see
      # https://docs.cloud.google.com/marketplace/docs/partners/offers/select-payment-schedule).
      # For example, if the offer starts on 04/15, and the offer duration is
      # 3 months, the following installments will be created:
      # # 1: from 04/15 to 05/01, at the prorated price for April.
      #
      # # 2: from 05/01 to 06/01, at the full monthly price for May.
      #
      # # 3: from 06/01 to 07/01, at the full monthly price for June.
      #
      # # 4: from 07/01 to 07/15, at the prorated price for July.
      #
      # All dates represent the start of that day in the America/Los_Angeles
      # time zone.
      #
      # If this is set:
      #
      # * The `PriceModel.subscription` oneof must be set.
      # * Field `term.duration_months` must be positive.
      MONTHLY_PRORATED = 2

      # Monthly installments without proration.
      # This type of offer has "Monthly" billing frequency (see
      # https://docs.cloud.google.com/marketplace/docs/partners/offers/select-payment-schedule).
      # For example, if the offer starts on 04/15, and the offer duration is
      # 3 months, the following installments will be created:
      # # 1: from 04/15 to 05/15, at the full monthly price.
      #
      # # 2: from 05/15 to 06/15, at the full monthly price.
      #
      # # 3: from 06/15 to 07/15, at the full monthly price.
      #
      # All dates represent the start of that day in the America/Los_Angeles
      # time zone.
      #
      # If this is set:
      #
      # * The `PriceModel.subscription` oneof must be set.
      # * Field `term.duration_months` must be positive.
      MONTHLY_NOT_PRORATED = 3

      # Quarterly installments which are not prorated.
      # This type of offer has "Quarterly" billing frequency (see
      # https://docs.cloud.google.com/marketplace/docs/partners/offers/select-payment-schedule).
      # For example, if the offer starts on 01/15, and the offer duration is
      # 3 quarters, the following installments will be created:
      # # 1: from 01/15 to 04/15, at the full quarterly price.
      #
      # # 2: from 04/15 to 07/15, at the full quarterly price.
      #
      # # 3: from 07/15 to 10/15, at the full quarterly price.
      #
      # All dates represent the start of that day in the America/Los_Angeles
      # time zone.
      #
      # If this is set:
      #
      # * The `PriceModel.subscription` oneof must be set.
      # * Field `term.duration_months` must be positive.
      QUARTERLY_NOT_PRORATED = 4

      # Yearly installments which are not prorated.
      # This type of offer has "Yearly" billing frequency (see
      # https://docs.cloud.google.com/marketplace/docs/partners/offers/select-payment-schedule).
      # For example, if the offer starts on 01/15/2025, and the offer
      # duration is 3 years, the following installments will be created:
      # # 1: from 01/15/2025 to 01/15/2026, at the full yearly price.
      #
      # # 2: from 01/15/2026 to 01/15/2027, at the full yearly price.
      #
      # # 3: from 01/15/2027 to 01/15/2028, at the full yearly price.
      #
      # All dates represent the start of that day in the America/Los_Angeles
      # time zone.
      #
      # If this is set:
      #
      # * The `PriceModel.subscription` oneof must be set.
      # * Field `term.duration_months` must be positive.
      YEARLY_NOT_PRORATED = 5
    end
  end

  # An installment of the offer.
  # @!attribute [rw] start_time
  #   @return [::Google::Type::DateTime]
  #     Optional. The start time of the installment.
  #     Each installment must have a unique start time with one exception:
  #     When the `term.start_policy` of the offer's term is `IMMEDIATE`,
  #     the `start_time` of the first installment must be unset.
  #     The actual start time is not recorded in the offer and instead is
  #     determined by the time the resulting order became active.
  #
  #     When the `term.start_policy` of the offer's term is
  #     `SCHEDULED_START_TIME`, then the first installment's `start_time` must
  #     match `term.scheduled_start_time`.
  #
  #     If the `term.end_policy` of the offer's term is `SCHEDULED_END_TIME`,
  #     then installment `start_time` must be before `term.scheduled_end_time`.
  #     If it's `AFTER_DURATION`, then installment `start_time` must be before
  #     the time calculated by adding the `term.duration_months` to
  #     the start time of the offer.
  #
  #     The `start_time` of the installments cannot be before the
  #     `accept_deadline_time` of the offer.
  #
  #     Installment start times must be in strictly increasing chronological
  #     order.
  # @!attribute [rw] price_model
  #   @return [::Google::Cloud::CommerceProducer::V1beta::PrivateOffer::SingleProductOffer::PriceModel]
  #     Optional. The price model of the installment.
  #     All installments must have the same form of price model.
  class Installment
    include ::Google::Protobuf::MessageExts
    extend ::Google::Protobuf::MessageExts::ClassMethods
  end

  # Price configurations for offers with custom intervals.
  # @!attribute [rw] installments
  #   @return [::Array<::Google::Cloud::CommerceProducer::V1beta::PrivateOffer::SingleProductOffer::Installment>]
  #     Optional. The installments that make up the installment timeline.
  #     All installments must have the same form of price model (e.g.
  #     all commitment, or all flat fee). A subscription must be present
  #     under the price model for every installment.
  #
  #     Must contain at least one installment to publish the offer.
  class CustomIntervalPrice
    include ::Google::Protobuf::MessageExts
    extend ::Google::Protobuf::MessageExts::ClassMethods
  end

  # The contract value of the offer.
  # @!attribute [r] total_contract_value
  #   @return [::Google::Type::Money]
  #     Output only. The total contract value of the offer.
  #     This will be set for all non-draft private offers, as long as
  #     'PRIVATE_OFFER_VIEW_FULL' is requested. For DRAFT private offers,
  #     this will be populated only when the end user's billing account is
  #     set and when the pricing and term configuration is sufficiently
  #     complete to allow for a calculation.
  class ContractValue
    include ::Google::Protobuf::MessageExts
    extend ::Google::Protobuf::MessageExts::ClassMethods
  end

  # Revenue Share information for a Private Offer.
  # For more details about the revenue share, including how the value is
  # determined, see
  # https://docs.cloud.google.com/marketplace/docs/partners/revenue-share-scenarios.
  #
  # Not included for `PRIVATE_OFFER_VIEW_BASIC`, or for DRAFT private offers.
  #
  # For non-draft private offers, these fields are populated based on the
  # following:
  #
  # * Offers published after April 20, 2025 will always have revenue
  #   share fields populated.
  # * Offers published on or before April 20, 2025 will only have revenue
  #   share fields populated if they were associated with an active,
  #   unexpired order on that date.
  # @!attribute [r] current_term_vendor_net_revenue_percent
  #   @return [::Google::Type::Decimal]
  #     Output only. The revenue share currently in effect.
  #
  #     The range of the value is between 0 and 100. For example, 80
  #     means the Vendor's current term revenue share is 80%. The vendor
  #     will keep 80% of the revenue.
  #     .
  # @!attribute [r] renewal_term_vendor_net_revenue_percent
  #   @return [::Google::Type::Decimal]
  #     Output only. The expected revenue share for the renewal term.
  #     Not included if the offer does not have renewal terms.
  #
  #     The range of the value is between 0 and 100. For example, 80
  #     means the Vendor's current term revenue share is 80%. The vendor
  #     will keep 80% of the revenue after renewal.
  #     .
  class RevenueShare
    include ::Google::Protobuf::MessageExts
    extend ::Google::Protobuf::MessageExts::ClassMethods
  end
end

#standard_interval_price::Google::Cloud::CommerceProducer::V1beta::PrivateOffer::SingleProductOffer::StandardIntervalPrice

Returns Optional. Price configurations for offers with standard intervals. A price must be set when publishing the offer.

Note: The following fields are mutually exclusive: standard_interval_price, custom_interval_price. If a field in that set is populated, all other fields in the set will automatically be cleared.

Returns:



554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
# File 'proto_docs/google/cloud/commerceproducer/v1beta/private_offer.rb', line 554

class SingleProductOffer
  include ::Google::Protobuf::MessageExts
  extend ::Google::Protobuf::MessageExts::ClassMethods

  # Additional details used to describe customization of the service level.
  #
  # Features are used to distinguish service levels of the same product.
  # When a product has a single service level, all details can be contained
  # in the product documentation. When a product has multiple service levels,
  # each service level can be assigned a distinct set of features to
  # distinguish the key differences between the service levels.
  #
  # In addition to customizing pricing and other transaction details, a
  # private offer may include customization of partner-managed product
  # behavior. When this is the case, the details of the custom behavior are
  # described using features.
  # @!attribute [rw] display_name
  #   @return [::String]
  #     Optional. Human readable display text characterizing the feature.
  #     Should be sufficiently detailed to identify the feature, allowing
  #     features to be correlated across separate offers and service levels.
  #     Must be non-empty to publish the offer.
  #     The maximum allowed length is 128 characters.
  #     Allows characters from the following Unicode Property Classes:
  #     Letters, Numbers, Punctuation, Symbols, and Separators
  # @!attribute [rw] value
  #   @return [::String]
  #     Optional. Human readable display text reflecting the value of the
  #     feature. Used for variable features not captured by the display_name
  #     alone. The maximum allowed length is 3000 characters. Allows characters
  #     from the following Unicode Property Classes: Letters, Numbers,
  #     Punctuation, Symbols, and Separators
  class Feature
    include ::Google::Protobuf::MessageExts
    extend ::Google::Protobuf::MessageExts::ClassMethods
  end

  # The price model of the private offer.
  #
  # Private offers are referred to as having different kinds of price models
  # based on the combination of fields set in the price model. The following
  # terminology is used in documentation and other reference material.
  #
  # * Usage-based: the price model does not set `flat_fee`
  # * Usage-only: the price model sets only `usage`
  # * CUD (committed use discount): the price model sets `commitment`
  #     * Commitment discount with additional usage at list price:
  #       The price model sets `commitment` and not `usage`.
  #     * Commitment with all usage discounted: The price model sets
  #       `commitment` and `usage`.
  # * Flat fee: the price model sets only `flat_fee`
  # * Flat fee with usage: the price model sets `flat_fee` and `usage`
  #
  # See
  # https://docs.cloud.google.com/marketplace/docs/partners/offers/select-pricing-model#CUD
  # for the price models.
  # @!attribute [rw] flat_fee
  #   @return [::Google::Cloud::CommerceProducer::V1beta::PrivateOffer::SingleProductOffer::PriceModel::FlatFee]
  #     Optional. The price configurations for the flat fee subscription.
  #     Must be unset when the base standard offer's price model does not
  #     include subscription SKUs.
  #
  #     Note: The following fields are mutually exclusive: `flat_fee`, `commitment`. If a field in that set is populated, all other fields in the set will automatically be cleared.
  # @!attribute [rw] commitment
  #   @return [::Google::Cloud::CommerceProducer::V1beta::PrivateOffer::SingleProductOffer::PriceModel::Commitment]
  #     Optional. The price configurations for the commitment based
  #     subscription. Must be unset when the base standard offer's price
  #     model includes subscription SKUs.
  #
  #     Note: The following fields are mutually exclusive: `commitment`, `flat_fee`. If a field in that set is populated, all other fields in the set will automatically be cleared.
  # @!attribute [rw] usage
  #   @return [::Google::Cloud::CommerceProducer::V1beta::PrivateOffer::SingleProductOffer::PriceModel::Usage]
  #     Optional. The price configurations for the usage part.
  #     If this field is set, the `Commitment.discount_percent` must be unset.
  #     A private offer can apply a discount to all usage or to a usage
  #     commitment, but not both.
  #     Must be unset when the base standard offer's price model includes no
  #     usage SKUs.
  class PriceModel
    include ::Google::Protobuf::MessageExts
    extend ::Google::Protobuf::MessageExts::ClassMethods

    # The discount for a specific SKU.
    # @!attribute [rw] sku
    #   @return [::String]
    #     Optional. The name of a partner SKU from this API.
    #
    #     Must refer to a SKU in the price model of the base standard offer.
    #     Inclusion in the base price model can occur either directly or
    #     indirectly via inclusion in an included SkuGroup.
    #
    #     Currently, standard offer price models include only partner SKUs
    #     in the same project as the standard offer. This may change.
    #
    #     Format:
    #     projects/\\{project}/locations/\\{location}/services/\\{service}/skus/\\{sku}
    #
    #     Note: The following fields are mutually exclusive: `sku`, `cloud_billing_sku`. If a field in that set is populated, all other fields in the set will automatically be cleared.
    # @!attribute [rw] cloud_billing_sku
    #   @return [::String]
    #     Optional. The name of a Google SKU from the Cloud Billing API.
    #
    #     Used for partner products sold by Google, such as Premium Operating
    #     System Images sold for use in Compute Engine. This is not common.
    #     SKUs of this type are not present on this API and can instead be
    #     found on the Cloud Billing API or at https://cloud.google.com/skus.
    #
    #     Must refer to a SKU in the price model of the base standard offer.
    #     Google SKUs are always referenced in standard offers via SkuGroups.
    #
    #     Format: services/\\{service}/skus/\\{sku}
    #
    #     Note: The following fields are mutually exclusive: `cloud_billing_sku`, `sku`. If a field in that set is populated, all other fields in the set will automatically be cleared.
    # @!attribute [rw] discount_percent
    #   @return [::Google::Type::Decimal]
    #     Optional. The discount percent for the SKU.
    #     For example, `10` means a discount of 10%. If the original SKU
    #     price is $100/hour then the discounted price will be $90/hour.
    #
    #     Must be between 0 and 100 inclusive, with precision up to 2 decimal
    #     places. If this field is set, then the allowed pattern for 'value'
    #     is `^([0-9]{1,2}(\\.\\d{1,2})?|100(\\.0{1,2})?)$`.
    #
    #     Examples of valid values: "0", "100.0", "12.34", "40.0".
    #     Example of invalid values: ".3", "-1", "100.1", "12.345", "+12",
    #     and "".
    #     Must be present to publish the offer.
    class SkuDiscount
      include ::Google::Protobuf::MessageExts
      extend ::Google::Protobuf::MessageExts::ClassMethods
    end

    # The price for the usage SKUs.
    # @!attribute [rw] default_discount_percent
    #   @return [::Google::Type::Decimal]
    #     Optional. The default discount percent for usage SKUs.
    #     An unset default discount percent is equivalent to 0 (no discount).
    #
    #     Must be between 0 and 100 inclusive, with precision up to 2 decimal
    #     places. If this field is set, then the allowed pattern for 'value'
    #     is `^([0-9]{1,2}(\\.\\d{1,2})?|100(\\.0{1,2})?)$`.
    #     Examples of valid values: "0", "100.0", "12.34", "40.0".
    #     Example of invalid values: ".3", "-1", "100.1", "12.345", "+12", "".
    # @!attribute [rw] sku_discounts
    #   @return [::Array<::Google::Cloud::CommerceProducer::V1beta::PrivateOffer::SingleProductOffer::PriceModel::SkuDiscount>]
    #     Optional. The discounts for the specific SKUs that override the
    #     `default_discount_percent`.
    class Usage
      include ::Google::Protobuf::MessageExts
      extend ::Google::Protobuf::MessageExts::ClassMethods
    end

    # The price configurations for the flat fee subscriptions.
    # @!attribute [rw] flat_fee_override
    #   @return [::Google::Type::Money]
    #     Optional. Flat fee overriding the default flat fee in the base
    #     standard offer. Value cannot be negative. The currency must be "USD"
    #     and precision is limited to cents. Must be present to publish the
    #     offer, if the parent message is set. The maximum allowed value is
    #     1,000,000,000 USD.
    class FlatFee
      include ::Google::Protobuf::MessageExts
      extend ::Google::Protobuf::MessageExts::ClassMethods
    end

    # The price configurations for the commitment based subscriptions.
    # @!attribute [rw] commitment_amount
    #   @return [::Google::Type::Money]
    #     Optional. The commitment balance that the customer will receive.
    #     Value cannot be negative.
    #     The currency must be "USD" and precision is limited to cents.
    #     Must be present to publish the offer, if the parent message is set.
    #     The maximum allowed value is 1,000,000,000 USD.
    #
    #     If the current offer amends a private offer where the term has not
    #     ended, and if the field
    #     `single_product_offer.standard_interval_price.price_model.commitment.commitment_amount`
    #     is set on both the current offer and the amended private offer, then
    #     the commitment amount must be equal or higher on the current offer,
    #     compared to the amended private offer.
    # @!attribute [rw] discount_percent
    #   @return [::Google::Type::Decimal]
    #     Optional. The discount percent on `commitment_amount`.
    #
    #     For example, `10` means a discount of 10%. If the original
    #     `commitment_amount` is $100 then the discounted amount will be $90.
    #     The customer is charged $90 and receives $100 in credits.
    #
    #     All reported usage will be charged at the standard price.
    #     If this field is set, the `price_model.usage` must be unset. A
    #     private offer can apply a discount to all usage or to a usage
    #     commitment, but not both.
    #
    #     Must be between 0 and 100 inclusive, with precision up to 2 decimal
    #     places. If this field is set, then the allowed pattern for 'value'
    #     is `^([0-9]{1,2}(\\.\\d{1,2})?|100(\\.0{1,2})?)$`.
    #     Examples of valid values: "0", "100.0", "12.34", "40.0".
    #     Example of invalid values: ".3", "-1", "100.1", "12.345", "+12", "".
    #
    #     Must be present to publish the offer.
    # @!attribute [rw] additional_credit
    #   @return [::Google::Type::Money]
    #     Optional. Additional credit granted to the customer.
    #     Additional credits are only supported for custom interval offers.
    #     Equivalent behavior can be achieved for standard interval offers by
    #     varying the `commitment_amount` and `discount_percent`.
    #
    #     Value cannot be negative.
    #     The currency must be "USD" and precision is limited to cents.
    #     The maximum allowed value is 1,000,000 USD.
    # @!attribute [rw] discard_previous_credit_balance
    #   @return [::Boolean]
    #     Optional. Whether to discard the previous credit balance when the
    #     associated installment starts. If not set, the previous credit
    #     balance will be rolled over to the current installment.
    #
    #     If there are no previous installments, then the value of this field
    #     will not matter - since it has no effect when no credits exist.
    class Commitment
      include ::Google::Protobuf::MessageExts
      extend ::Google::Protobuf::MessageExts::ClassMethods
    end
  end

  # Price configurations for offers with standard intervals.
  # @!attribute [rw] standard_interval
  #   @return [::Google::Cloud::CommerceProducer::V1beta::PrivateOffer::SingleProductOffer::StandardIntervalPrice::StandardInterval]
  #     Optional. The standard interval of the offer.
  #     Must be present to publish unless the price model is usage-only.
  # @!attribute [rw] price_model
  #   @return [::Google::Cloud::CommerceProducer::V1beta::PrivateOffer::SingleProductOffer::PriceModel]
  #     Optional. The price model of the offer.
  #     Must be present to publish the offer.
  class StandardIntervalPrice
    include ::Google::Protobuf::MessageExts
    extend ::Google::Protobuf::MessageExts::ClassMethods

    # The options for offers with standard intervals.
    module StandardInterval
      # The private offer does not have an interval.
      # If this is set, then the offer is "usage-only".
      # Field `term.duration_months` must be positive.
      STANDARD_INTERVAL_UNSPECIFIED = 0

      # The schedule of the monthly postpay offers.
      # This type of offer has "Monthly" billing frequency (see
      # https://docs.cloud.google.com/marketplace/docs/partners/offers/select-payment-schedule).
      # No longer supported as of May 2024. Cannot be used to publish
      # new offers.
      MONTHLY_POSTPAY = 1

      # Monthly installments with proration.
      # This type of offer has "Monthly" billing frequency (see
      # https://docs.cloud.google.com/marketplace/docs/partners/offers/select-payment-schedule).
      # For example, if the offer starts on 04/15, and the offer duration is
      # 3 months, the following installments will be created:
      # # 1: from 04/15 to 05/01, at the prorated price for April.
      #
      # # 2: from 05/01 to 06/01, at the full monthly price for May.
      #
      # # 3: from 06/01 to 07/01, at the full monthly price for June.
      #
      # # 4: from 07/01 to 07/15, at the prorated price for July.
      #
      # All dates represent the start of that day in the America/Los_Angeles
      # time zone.
      #
      # If this is set:
      #
      # * The `PriceModel.subscription` oneof must be set.
      # * Field `term.duration_months` must be positive.
      MONTHLY_PRORATED = 2

      # Monthly installments without proration.
      # This type of offer has "Monthly" billing frequency (see
      # https://docs.cloud.google.com/marketplace/docs/partners/offers/select-payment-schedule).
      # For example, if the offer starts on 04/15, and the offer duration is
      # 3 months, the following installments will be created:
      # # 1: from 04/15 to 05/15, at the full monthly price.
      #
      # # 2: from 05/15 to 06/15, at the full monthly price.
      #
      # # 3: from 06/15 to 07/15, at the full monthly price.
      #
      # All dates represent the start of that day in the America/Los_Angeles
      # time zone.
      #
      # If this is set:
      #
      # * The `PriceModel.subscription` oneof must be set.
      # * Field `term.duration_months` must be positive.
      MONTHLY_NOT_PRORATED = 3

      # Quarterly installments which are not prorated.
      # This type of offer has "Quarterly" billing frequency (see
      # https://docs.cloud.google.com/marketplace/docs/partners/offers/select-payment-schedule).
      # For example, if the offer starts on 01/15, and the offer duration is
      # 3 quarters, the following installments will be created:
      # # 1: from 01/15 to 04/15, at the full quarterly price.
      #
      # # 2: from 04/15 to 07/15, at the full quarterly price.
      #
      # # 3: from 07/15 to 10/15, at the full quarterly price.
      #
      # All dates represent the start of that day in the America/Los_Angeles
      # time zone.
      #
      # If this is set:
      #
      # * The `PriceModel.subscription` oneof must be set.
      # * Field `term.duration_months` must be positive.
      QUARTERLY_NOT_PRORATED = 4

      # Yearly installments which are not prorated.
      # This type of offer has "Yearly" billing frequency (see
      # https://docs.cloud.google.com/marketplace/docs/partners/offers/select-payment-schedule).
      # For example, if the offer starts on 01/15/2025, and the offer
      # duration is 3 years, the following installments will be created:
      # # 1: from 01/15/2025 to 01/15/2026, at the full yearly price.
      #
      # # 2: from 01/15/2026 to 01/15/2027, at the full yearly price.
      #
      # # 3: from 01/15/2027 to 01/15/2028, at the full yearly price.
      #
      # All dates represent the start of that day in the America/Los_Angeles
      # time zone.
      #
      # If this is set:
      #
      # * The `PriceModel.subscription` oneof must be set.
      # * Field `term.duration_months` must be positive.
      YEARLY_NOT_PRORATED = 5
    end
  end

  # An installment of the offer.
  # @!attribute [rw] start_time
  #   @return [::Google::Type::DateTime]
  #     Optional. The start time of the installment.
  #     Each installment must have a unique start time with one exception:
  #     When the `term.start_policy` of the offer's term is `IMMEDIATE`,
  #     the `start_time` of the first installment must be unset.
  #     The actual start time is not recorded in the offer and instead is
  #     determined by the time the resulting order became active.
  #
  #     When the `term.start_policy` of the offer's term is
  #     `SCHEDULED_START_TIME`, then the first installment's `start_time` must
  #     match `term.scheduled_start_time`.
  #
  #     If the `term.end_policy` of the offer's term is `SCHEDULED_END_TIME`,
  #     then installment `start_time` must be before `term.scheduled_end_time`.
  #     If it's `AFTER_DURATION`, then installment `start_time` must be before
  #     the time calculated by adding the `term.duration_months` to
  #     the start time of the offer.
  #
  #     The `start_time` of the installments cannot be before the
  #     `accept_deadline_time` of the offer.
  #
  #     Installment start times must be in strictly increasing chronological
  #     order.
  # @!attribute [rw] price_model
  #   @return [::Google::Cloud::CommerceProducer::V1beta::PrivateOffer::SingleProductOffer::PriceModel]
  #     Optional. The price model of the installment.
  #     All installments must have the same form of price model.
  class Installment
    include ::Google::Protobuf::MessageExts
    extend ::Google::Protobuf::MessageExts::ClassMethods
  end

  # Price configurations for offers with custom intervals.
  # @!attribute [rw] installments
  #   @return [::Array<::Google::Cloud::CommerceProducer::V1beta::PrivateOffer::SingleProductOffer::Installment>]
  #     Optional. The installments that make up the installment timeline.
  #     All installments must have the same form of price model (e.g.
  #     all commitment, or all flat fee). A subscription must be present
  #     under the price model for every installment.
  #
  #     Must contain at least one installment to publish the offer.
  class CustomIntervalPrice
    include ::Google::Protobuf::MessageExts
    extend ::Google::Protobuf::MessageExts::ClassMethods
  end

  # The contract value of the offer.
  # @!attribute [r] total_contract_value
  #   @return [::Google::Type::Money]
  #     Output only. The total contract value of the offer.
  #     This will be set for all non-draft private offers, as long as
  #     'PRIVATE_OFFER_VIEW_FULL' is requested. For DRAFT private offers,
  #     this will be populated only when the end user's billing account is
  #     set and when the pricing and term configuration is sufficiently
  #     complete to allow for a calculation.
  class ContractValue
    include ::Google::Protobuf::MessageExts
    extend ::Google::Protobuf::MessageExts::ClassMethods
  end

  # Revenue Share information for a Private Offer.
  # For more details about the revenue share, including how the value is
  # determined, see
  # https://docs.cloud.google.com/marketplace/docs/partners/revenue-share-scenarios.
  #
  # Not included for `PRIVATE_OFFER_VIEW_BASIC`, or for DRAFT private offers.
  #
  # For non-draft private offers, these fields are populated based on the
  # following:
  #
  # * Offers published after April 20, 2025 will always have revenue
  #   share fields populated.
  # * Offers published on or before April 20, 2025 will only have revenue
  #   share fields populated if they were associated with an active,
  #   unexpired order on that date.
  # @!attribute [r] current_term_vendor_net_revenue_percent
  #   @return [::Google::Type::Decimal]
  #     Output only. The revenue share currently in effect.
  #
  #     The range of the value is between 0 and 100. For example, 80
  #     means the Vendor's current term revenue share is 80%. The vendor
  #     will keep 80% of the revenue.
  #     .
  # @!attribute [r] renewal_term_vendor_net_revenue_percent
  #   @return [::Google::Type::Decimal]
  #     Output only. The expected revenue share for the renewal term.
  #     Not included if the offer does not have renewal terms.
  #
  #     The range of the value is between 0 and 100. For example, 80
  #     means the Vendor's current term revenue share is 80%. The vendor
  #     will keep 80% of the revenue after renewal.
  #     .
  class RevenueShare
    include ::Google::Protobuf::MessageExts
    extend ::Google::Protobuf::MessageExts::ClassMethods
  end
end