@powerhousedao/service-offering 1.0.0-dev.4 → 1.0.0-dev.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (235) hide show
  1. package/dist/document-models/facet/v1/actions.d.ts +3 -1
  2. package/dist/document-models/facet/v1/actions.d.ts.map +1 -1
  3. package/dist/document-models/facet/v1/gen/controller.d.ts +4 -0
  4. package/dist/document-models/facet/v1/gen/controller.d.ts.map +1 -0
  5. package/dist/document-models/facet/v1/gen/controller.js +3 -0
  6. package/dist/document-models/facet/v1/gen/document-model.d.ts.map +1 -1
  7. package/dist/document-models/facet/v1/gen/document-model.js +31 -7
  8. package/dist/document-models/facet/v1/gen/document-schema.d.ts +6 -6
  9. package/dist/document-models/facet/v1/gen/index.d.ts +1 -0
  10. package/dist/document-models/facet/v1/gen/index.d.ts.map +1 -1
  11. package/dist/document-models/facet/v1/gen/index.js +1 -0
  12. package/dist/document-models/facet/v1/gen/option-management/error.d.ts +27 -1
  13. package/dist/document-models/facet/v1/gen/option-management/error.d.ts.map +1 -1
  14. package/dist/document-models/facet/v1/gen/option-management/error.js +23 -1
  15. package/dist/document-models/facet/v1/gen/ph-factories.js +2 -2
  16. package/dist/document-models/facet/v1/gen/schema/types.d.ts +2 -2
  17. package/dist/document-models/facet/v1/gen/schema/types.d.ts.map +1 -1
  18. package/dist/document-models/facet/v1/gen/schema/zod.js +2 -2
  19. package/dist/document-models/facet/v1/gen/utils.js +2 -2
  20. package/dist/document-models/facet/v1/module.d.ts +1 -1
  21. package/dist/document-models/facet/v1/module.d.ts.map +1 -1
  22. package/dist/document-models/facet/v1/module.js +4 -1
  23. package/dist/document-models/resource-instance/v1/actions.d.ts +4 -1
  24. package/dist/document-models/resource-instance/v1/actions.d.ts.map +1 -1
  25. package/dist/document-models/resource-instance/v1/gen/configuration-management/error.d.ts +34 -1
  26. package/dist/document-models/resource-instance/v1/gen/configuration-management/error.d.ts.map +1 -1
  27. package/dist/document-models/resource-instance/v1/gen/configuration-management/error.js +32 -1
  28. package/dist/document-models/resource-instance/v1/gen/controller.d.ts +4 -0
  29. package/dist/document-models/resource-instance/v1/gen/controller.d.ts.map +1 -0
  30. package/dist/document-models/resource-instance/v1/gen/controller.js +3 -0
  31. package/dist/document-models/resource-instance/v1/gen/document-model.d.ts.map +1 -1
  32. package/dist/document-models/resource-instance/v1/gen/document-model.js +222 -70
  33. package/dist/document-models/resource-instance/v1/gen/document-schema.d.ts +0 -6
  34. package/dist/document-models/resource-instance/v1/gen/document-schema.d.ts.map +1 -1
  35. package/dist/document-models/resource-instance/v1/gen/index.d.ts +1 -0
  36. package/dist/document-models/resource-instance/v1/gen/index.d.ts.map +1 -1
  37. package/dist/document-models/resource-instance/v1/gen/index.js +1 -0
  38. package/dist/document-models/resource-instance/v1/gen/instance-management/actions.d.ts +6 -2
  39. package/dist/document-models/resource-instance/v1/gen/instance-management/actions.d.ts.map +1 -1
  40. package/dist/document-models/resource-instance/v1/gen/instance-management/creators.d.ts +3 -2
  41. package/dist/document-models/resource-instance/v1/gen/instance-management/creators.d.ts.map +1 -1
  42. package/dist/document-models/resource-instance/v1/gen/instance-management/creators.js +2 -1
  43. package/dist/document-models/resource-instance/v1/gen/instance-management/error.d.ts +98 -1
  44. package/dist/document-models/resource-instance/v1/gen/instance-management/error.d.ts.map +1 -1
  45. package/dist/document-models/resource-instance/v1/gen/instance-management/error.js +112 -1
  46. package/dist/document-models/resource-instance/v1/gen/instance-management/operations.d.ts +2 -1
  47. package/dist/document-models/resource-instance/v1/gen/instance-management/operations.d.ts.map +1 -1
  48. package/dist/document-models/resource-instance/v1/gen/ph-factories.d.ts.map +1 -1
  49. package/dist/document-models/resource-instance/v1/gen/ph-factories.js +0 -2
  50. package/dist/document-models/resource-instance/v1/gen/reducer.d.ts.map +1 -1
  51. package/dist/document-models/resource-instance/v1/gen/reducer.js +6 -1
  52. package/dist/document-models/resource-instance/v1/gen/schema/types.d.ts +3 -3
  53. package/dist/document-models/resource-instance/v1/gen/schema/types.d.ts.map +1 -1
  54. package/dist/document-models/resource-instance/v1/gen/schema/zod.d.ts +2 -1
  55. package/dist/document-models/resource-instance/v1/gen/schema/zod.d.ts.map +1 -1
  56. package/dist/document-models/resource-instance/v1/gen/schema/zod.js +5 -3
  57. package/dist/document-models/resource-instance/v1/gen/utils.d.ts.map +1 -1
  58. package/dist/document-models/resource-instance/v1/gen/utils.js +0 -2
  59. package/dist/document-models/resource-instance/v1/module.d.ts +1 -1
  60. package/dist/document-models/resource-instance/v1/module.d.ts.map +1 -1
  61. package/dist/document-models/resource-instance/v1/module.js +4 -1
  62. package/dist/document-models/resource-instance/v1/src/reducers/configuration-management.d.ts.map +1 -1
  63. package/dist/document-models/resource-instance/v1/src/reducers/configuration-management.js +57 -53
  64. package/dist/document-models/resource-instance/v1/src/reducers/instance-management.d.ts.map +1 -1
  65. package/dist/document-models/resource-instance/v1/src/reducers/instance-management.js +57 -21
  66. package/dist/document-models/resource-instance/v1/tests/instance-management.test.js +11 -1
  67. package/dist/document-models/resource-template/v1/actions.d.ts +3 -1
  68. package/dist/document-models/resource-template/v1/actions.d.ts.map +1 -1
  69. package/dist/document-models/resource-template/v1/gen/audience-management/error.d.ts +20 -1
  70. package/dist/document-models/resource-template/v1/gen/audience-management/error.d.ts.map +1 -1
  71. package/dist/document-models/resource-template/v1/gen/audience-management/error.js +16 -1
  72. package/dist/document-models/resource-template/v1/gen/controller.d.ts +4 -0
  73. package/dist/document-models/resource-template/v1/gen/controller.d.ts.map +1 -0
  74. package/dist/document-models/resource-template/v1/gen/controller.js +3 -0
  75. package/dist/document-models/resource-template/v1/gen/document-model.d.ts.map +1 -1
  76. package/dist/document-models/resource-template/v1/gen/document-model.js +207 -89
  77. package/dist/document-models/resource-template/v1/gen/document-schema.d.ts +12 -12
  78. package/dist/document-models/resource-template/v1/gen/facet-targeting/error.d.ts +27 -1
  79. package/dist/document-models/resource-template/v1/gen/facet-targeting/error.d.ts.map +1 -1
  80. package/dist/document-models/resource-template/v1/gen/facet-targeting/error.js +23 -1
  81. package/dist/document-models/resource-template/v1/gen/index.d.ts +1 -0
  82. package/dist/document-models/resource-template/v1/gen/index.d.ts.map +1 -1
  83. package/dist/document-models/resource-template/v1/gen/index.js +1 -0
  84. package/dist/document-models/resource-template/v1/gen/option-group-management/error.d.ts +27 -1
  85. package/dist/document-models/resource-template/v1/gen/option-group-management/error.d.ts.map +1 -1
  86. package/dist/document-models/resource-template/v1/gen/option-group-management/error.js +23 -1
  87. package/dist/document-models/resource-template/v1/gen/ph-factories.js +3 -3
  88. package/dist/document-models/resource-template/v1/gen/schema/types.d.ts +4 -4
  89. package/dist/document-models/resource-template/v1/gen/schema/types.d.ts.map +1 -1
  90. package/dist/document-models/resource-template/v1/gen/schema/zod.js +4 -4
  91. package/dist/document-models/resource-template/v1/gen/service-management/error.d.ts +51 -1
  92. package/dist/document-models/resource-template/v1/gen/service-management/error.d.ts.map +1 -1
  93. package/dist/document-models/resource-template/v1/gen/service-management/error.js +49 -1
  94. package/dist/document-models/resource-template/v1/gen/utils.js +3 -3
  95. package/dist/document-models/resource-template/v1/module.d.ts +1 -1
  96. package/dist/document-models/resource-template/v1/module.d.ts.map +1 -1
  97. package/dist/document-models/resource-template/v1/module.js +4 -1
  98. package/dist/document-models/resource-template/v1/src/reducers/option-group-management.d.ts.map +1 -1
  99. package/dist/document-models/resource-template/v1/src/reducers/option-group-management.js +2 -21
  100. package/dist/document-models/service-offering/v1/actions.d.ts +3 -1
  101. package/dist/document-models/service-offering/v1/actions.d.ts.map +1 -1
  102. package/dist/document-models/service-offering/v1/gen/controller.d.ts +4 -0
  103. package/dist/document-models/service-offering/v1/gen/controller.d.ts.map +1 -0
  104. package/dist/document-models/service-offering/v1/gen/controller.js +3 -0
  105. package/dist/document-models/service-offering/v1/gen/document-model.d.ts.map +1 -1
  106. package/dist/document-models/service-offering/v1/gen/document-model.js +421 -199
  107. package/dist/document-models/service-offering/v1/gen/document-schema.d.ts +9 -9
  108. package/dist/document-models/service-offering/v1/gen/index.d.ts +1 -0
  109. package/dist/document-models/service-offering/v1/gen/index.d.ts.map +1 -1
  110. package/dist/document-models/service-offering/v1/gen/index.js +1 -0
  111. package/dist/document-models/service-offering/v1/gen/offering/error.d.ts +41 -1
  112. package/dist/document-models/service-offering/v1/gen/offering/error.d.ts.map +1 -1
  113. package/dist/document-models/service-offering/v1/gen/offering/error.js +37 -1
  114. package/dist/document-models/service-offering/v1/gen/option-groups/error.d.ts +55 -1
  115. package/dist/document-models/service-offering/v1/gen/option-groups/error.d.ts.map +1 -1
  116. package/dist/document-models/service-offering/v1/gen/option-groups/error.js +53 -1
  117. package/dist/document-models/service-offering/v1/gen/ph-factories.js +3 -3
  118. package/dist/document-models/service-offering/v1/gen/schema/types.d.ts +134 -61
  119. package/dist/document-models/service-offering/v1/gen/schema/types.d.ts.map +1 -1
  120. package/dist/document-models/service-offering/v1/gen/schema/zod.d.ts +35 -10
  121. package/dist/document-models/service-offering/v1/gen/schema/zod.d.ts.map +1 -1
  122. package/dist/document-models/service-offering/v1/gen/schema/zod.js +182 -64
  123. package/dist/document-models/service-offering/v1/gen/services/error.d.ts +20 -1
  124. package/dist/document-models/service-offering/v1/gen/services/error.d.ts.map +1 -1
  125. package/dist/document-models/service-offering/v1/gen/services/error.js +16 -1
  126. package/dist/document-models/service-offering/v1/gen/tiers/error.d.ts +100 -1
  127. package/dist/document-models/service-offering/v1/gen/tiers/error.d.ts.map +1 -1
  128. package/dist/document-models/service-offering/v1/gen/tiers/error.js +106 -1
  129. package/dist/document-models/service-offering/v1/gen/utils.js +4 -4
  130. package/dist/document-models/service-offering/v1/module.d.ts +1 -1
  131. package/dist/document-models/service-offering/v1/module.d.ts.map +1 -1
  132. package/dist/document-models/service-offering/v1/module.js +4 -1
  133. package/dist/document-models/service-offering/v1/src/reducers/offering.d.ts.map +1 -1
  134. package/dist/document-models/service-offering/v1/src/reducers/offering.js +20 -12
  135. package/dist/document-models/service-offering/v1/src/reducers/option-groups.d.ts.map +1 -1
  136. package/dist/document-models/service-offering/v1/src/reducers/option-groups.js +157 -39
  137. package/dist/document-models/service-offering/v1/src/reducers/services.d.ts.map +1 -1
  138. package/dist/document-models/service-offering/v1/src/reducers/services.js +17 -14
  139. package/dist/document-models/service-offering/v1/src/reducers/tiers.d.ts.map +1 -1
  140. package/dist/document-models/service-offering/v1/src/reducers/tiers.js +111 -78
  141. package/dist/document-models/service-offering/v1/src/utils.d.ts +60 -1
  142. package/dist/document-models/service-offering/v1/src/utils.d.ts.map +1 -1
  143. package/dist/document-models/service-offering/v1/src/utils.js +173 -1
  144. package/dist/document-models/service-offering/v1/tests/option-groups.test.js +1 -1
  145. package/dist/document-models/service-offering/v1/utils.d.ts +3 -0
  146. package/dist/document-models/service-offering/v1/utils.d.ts.map +1 -1
  147. package/dist/document-models/subscription-instance/v1/actions.d.ts +3 -1
  148. package/dist/document-models/subscription-instance/v1/actions.d.ts.map +1 -1
  149. package/dist/document-models/subscription-instance/v1/gen/controller.d.ts +4 -0
  150. package/dist/document-models/subscription-instance/v1/gen/controller.d.ts.map +1 -0
  151. package/dist/document-models/subscription-instance/v1/gen/controller.js +3 -0
  152. package/dist/document-models/subscription-instance/v1/gen/document-model.d.ts.map +1 -1
  153. package/dist/document-models/subscription-instance/v1/gen/document-model.js +488 -246
  154. package/dist/document-models/subscription-instance/v1/gen/document-schema.d.ts +3 -3
  155. package/dist/document-models/subscription-instance/v1/gen/index.d.ts +1 -0
  156. package/dist/document-models/subscription-instance/v1/gen/index.d.ts.map +1 -1
  157. package/dist/document-models/subscription-instance/v1/gen/index.js +1 -0
  158. package/dist/document-models/subscription-instance/v1/gen/metrics/error.d.ts +73 -1
  159. package/dist/document-models/subscription-instance/v1/gen/metrics/error.d.ts.map +1 -1
  160. package/dist/document-models/subscription-instance/v1/gen/metrics/error.js +86 -1
  161. package/dist/document-models/subscription-instance/v1/gen/ph-factories.js +1 -1
  162. package/dist/document-models/subscription-instance/v1/gen/schema/types.d.ts +199 -82
  163. package/dist/document-models/subscription-instance/v1/gen/schema/types.d.ts.map +1 -1
  164. package/dist/document-models/subscription-instance/v1/gen/schema/zod.d.ts +22 -12
  165. package/dist/document-models/subscription-instance/v1/gen/schema/zod.d.ts.map +1 -1
  166. package/dist/document-models/subscription-instance/v1/gen/schema/zod.js +230 -84
  167. package/dist/document-models/subscription-instance/v1/gen/service/error.d.ts +62 -1
  168. package/dist/document-models/subscription-instance/v1/gen/service/error.d.ts.map +1 -1
  169. package/dist/document-models/subscription-instance/v1/gen/service/error.js +60 -1
  170. package/dist/document-models/subscription-instance/v1/gen/service-group/error.d.ts +39 -1
  171. package/dist/document-models/subscription-instance/v1/gen/service-group/error.d.ts.map +1 -1
  172. package/dist/document-models/subscription-instance/v1/gen/service-group/error.js +39 -1
  173. package/dist/document-models/subscription-instance/v1/gen/subscription/error.d.ts +55 -1
  174. package/dist/document-models/subscription-instance/v1/gen/subscription/error.d.ts.map +1 -1
  175. package/dist/document-models/subscription-instance/v1/gen/subscription/error.js +51 -1
  176. package/dist/document-models/subscription-instance/v1/gen/utils.js +2 -2
  177. package/dist/document-models/subscription-instance/v1/module.d.ts +1 -1
  178. package/dist/document-models/subscription-instance/v1/module.d.ts.map +1 -1
  179. package/dist/document-models/subscription-instance/v1/module.js +4 -1
  180. package/dist/document-models/subscription-instance/v1/src/reducers/customer.d.ts.map +1 -1
  181. package/dist/document-models/subscription-instance/v1/src/reducers/customer.js +1 -0
  182. package/dist/document-models/subscription-instance/v1/src/reducers/metrics.d.ts.map +1 -1
  183. package/dist/document-models/subscription-instance/v1/src/reducers/metrics.js +70 -45
  184. package/dist/document-models/subscription-instance/v1/src/reducers/service-group.d.ts.map +1 -1
  185. package/dist/document-models/subscription-instance/v1/src/reducers/service-group.js +108 -30
  186. package/dist/document-models/subscription-instance/v1/src/reducers/service.d.ts.map +1 -1
  187. package/dist/document-models/subscription-instance/v1/src/reducers/service.js +108 -39
  188. package/dist/document-models/subscription-instance/v1/src/reducers/subscription.d.ts.map +1 -1
  189. package/dist/document-models/subscription-instance/v1/src/reducers/subscription.js +193 -35
  190. package/dist/editors/resource-instance-editor/editor.d.ts.map +1 -1
  191. package/dist/editors/resource-instance-editor/editor.js +13 -3
  192. package/dist/editors/service-offering-editor/components/ResourceTemplateSelector.d.ts.map +1 -1
  193. package/dist/editors/service-offering-editor/components/ResourceTemplateSelector.js +4 -2
  194. package/dist/editors/service-offering-editor/components/ServiceCatalog.d.ts.map +1 -1
  195. package/dist/editors/service-offering-editor/components/ServiceCatalog.js +189 -32
  196. package/dist/editors/service-offering-editor/components/TheMatrix.d.ts +1 -1
  197. package/dist/editors/service-offering-editor/components/TheMatrix.d.ts.map +1 -1
  198. package/dist/editors/service-offering-editor/components/TheMatrix.js +295 -140
  199. package/dist/editors/service-offering-editor/components/TierDefinition.d.ts.map +1 -1
  200. package/dist/editors/service-offering-editor/components/TierDefinition.js +2 -0
  201. package/dist/editors/service-offering-editor/components/TierPricingOptionsPanel.js +3 -3
  202. package/dist/editors/service-offering-editor/components/pricing-utils.d.ts.map +1 -1
  203. package/dist/editors/service-offering-editor/components/pricing-utils.js +26 -7
  204. package/dist/editors/subscription-instance-editor/components/BillingPanel.d.ts.map +1 -1
  205. package/dist/editors/subscription-instance-editor/components/BillingPanel.js +4 -4
  206. package/dist/editors/subscription-instance-editor/components/CustomerInfo.d.ts.map +1 -1
  207. package/dist/editors/subscription-instance-editor/components/CustomerInfo.js +3 -2
  208. package/dist/editors/subscription-instance-editor/components/ImportServiceConfigButton.d.ts +3 -0
  209. package/dist/editors/subscription-instance-editor/components/ImportServiceConfigButton.d.ts.map +1 -1
  210. package/dist/editors/subscription-instance-editor/components/ImportServiceConfigButton.js +12 -0
  211. package/dist/editors/subscription-instance-editor/components/MetricActions.d.ts.map +1 -1
  212. package/dist/editors/subscription-instance-editor/components/MetricActions.js +4 -2
  213. package/dist/editors/subscription-instance-editor/components/MockDataButton.d.ts.map +1 -1
  214. package/dist/editors/subscription-instance-editor/components/MockDataButton.js +214 -2
  215. package/dist/editors/subscription-instance-editor/components/OperatorNotes.js +1 -1
  216. package/dist/editors/subscription-instance-editor/components/ServicesPanel.d.ts.map +1 -1
  217. package/dist/editors/subscription-instance-editor/components/ServicesPanel.js +9 -20
  218. package/dist/editors/subscription-instance-editor/components/SubscriptionActions.d.ts.map +1 -1
  219. package/dist/editors/subscription-instance-editor/components/SubscriptionActions.js +8 -9
  220. package/dist/editors/subscription-instance-editor/components/SubscriptionHeader.d.ts.map +1 -1
  221. package/dist/editors/subscription-instance-editor/components/SubscriptionHeader.js +1 -1
  222. package/dist/editors/subscription-instance-editor/components/billing-utils.d.ts +14 -6
  223. package/dist/editors/subscription-instance-editor/components/billing-utils.d.ts.map +1 -1
  224. package/dist/editors/subscription-instance-editor/components/billing-utils.js +19 -23
  225. package/dist/editors/subscription-instance-editor/components/mapOfferingToSubscription.d.ts +16 -2
  226. package/dist/editors/subscription-instance-editor/components/mapOfferingToSubscription.d.ts.map +1 -1
  227. package/dist/editors/subscription-instance-editor/components/mapOfferingToSubscription.js +155 -6
  228. package/dist/powerhouse.manifest.json +29 -3
  229. package/dist/style.css +14 -0
  230. package/dist/subgraphs/resources-services/resolvers.d.ts +1 -1
  231. package/dist/subgraphs/resources-services/resolvers.d.ts.map +1 -1
  232. package/dist/subgraphs/resources-services/resolvers.js +273 -158
  233. package/dist/subgraphs/resources-services/schema.d.ts.map +1 -1
  234. package/dist/subgraphs/resources-services/schema.js +107 -41
  235. package/package.json +22 -18
@@ -1,3 +1,4 @@
1
+ import { UpdateTierNotFoundError, UpdateTierPricingNotFoundError, DeleteTierNotFoundError, AddServiceLevelTierNotFoundError, UpdateServiceLevelTierNotFoundError, UpdateServiceLevelNotFoundError, RemoveServiceLevelTierNotFoundError, AddUsageLimitTierNotFoundError, UpdateUsageLimitTierNotFoundError, UpdateUsageLimitNotFoundError, RemoveUsageLimitTierNotFoundError, SetTierDefaultBillingCycleTierNotFoundError, SetTierBillingCycleDiscountsTierNotFoundError, SetTierPricingModeTierNotFoundError, } from "../../gen/tiers/error.js";
1
2
  export const serviceOfferingTiersOperations = {
2
3
  addTierOperation(state, action) {
3
4
  state.tiers.push({
@@ -5,8 +6,11 @@ export const serviceOfferingTiersOperations = {
5
6
  name: action.input.name,
6
7
  description: action.input.description || null,
7
8
  isCustomPricing: action.input.isCustomPricing || false,
8
- pricingMode: "FIXED",
9
- pricing: null,
9
+ pricingMode: null,
10
+ pricing: {
11
+ amount: action.input.amount || null,
12
+ currency: action.input.currency,
13
+ },
10
14
  defaultBillingCycle: null,
11
15
  billingCycleDiscounts: [],
12
16
  serviceLevels: [],
@@ -16,135 +20,164 @@ export const serviceOfferingTiersOperations = {
16
20
  },
17
21
  updateTierOperation(state, action) {
18
22
  const tier = state.tiers.find((t) => t.id === action.input.id);
19
- if (tier) {
20
- if (action.input.name)
21
- tier.name = action.input.name;
22
- if (action.input.description !== undefined)
23
- tier.description = action.input.description || null;
24
- if (action.input.isCustomPricing !== undefined &&
25
- action.input.isCustomPricing !== null)
26
- tier.isCustomPricing = action.input.isCustomPricing;
23
+ if (!tier) {
24
+ throw new UpdateTierNotFoundError(`Tier with ID ${action.input.id} not found`);
27
25
  }
26
+ if (action.input.name)
27
+ tier.name = action.input.name;
28
+ if (action.input.description !== undefined)
29
+ tier.description = action.input.description || null;
30
+ if (action.input.isCustomPricing !== undefined &&
31
+ action.input.isCustomPricing !== null)
32
+ tier.isCustomPricing = action.input.isCustomPricing;
28
33
  state.lastModified = action.input.lastModified;
29
34
  },
30
35
  updateTierPricingOperation(state, action) {
31
36
  const tier = state.tiers.find((t) => t.id === action.input.tierId);
32
- if (tier) {
33
- if (!tier.pricing) {
34
- tier.pricing = {
35
- amount: action.input.amount,
36
- currency: action.input.currency,
37
- };
38
- }
39
- else {
40
- tier.pricing.amount = action.input.amount;
41
- tier.pricing.currency = action.input.currency;
42
- }
37
+ if (!tier) {
38
+ throw new UpdateTierPricingNotFoundError(`Tier with ID ${action.input.tierId} not found`);
43
39
  }
40
+ if (action.input.amount !== undefined)
41
+ tier.pricing.amount = action.input.amount || null;
42
+ if (action.input.currency)
43
+ tier.pricing.currency = action.input.currency;
44
44
  state.lastModified = action.input.lastModified;
45
45
  },
46
46
  deleteTierOperation(state, action) {
47
47
  const index = state.tiers.findIndex((t) => t.id === action.input.id);
48
- if (index !== -1) {
49
- state.tiers.splice(index, 1);
48
+ if (index === -1) {
49
+ throw new DeleteTierNotFoundError(`Tier with ID ${action.input.id} not found`);
50
50
  }
51
+ state.tiers.splice(index, 1);
51
52
  state.lastModified = action.input.lastModified;
52
53
  },
53
54
  addServiceLevelOperation(state, action) {
54
55
  const tier = state.tiers.find((t) => t.id === action.input.tierId);
55
- if (tier) {
56
- tier.serviceLevels.push({
57
- id: action.input.id,
58
- serviceId: action.input.serviceId,
59
- level: action.input.level,
60
- description: action.input.description || null,
61
- });
56
+ if (!tier) {
57
+ throw new AddServiceLevelTierNotFoundError(`Tier with ID ${action.input.tierId} not found`);
62
58
  }
59
+ tier.serviceLevels.push({
60
+ id: action.input.serviceLevelId,
61
+ serviceId: action.input.serviceId,
62
+ level: action.input.level,
63
+ customValue: action.input.customValue || null,
64
+ optionGroupId: action.input.optionGroupId || null,
65
+ });
63
66
  state.lastModified = action.input.lastModified;
64
67
  },
65
68
  updateServiceLevelOperation(state, action) {
66
69
  const tier = state.tiers.find((t) => t.id === action.input.tierId);
67
- if (tier) {
68
- const sl = tier.serviceLevels.find((s) => s.id === action.input.id);
69
- if (sl) {
70
- if (action.input.level)
71
- sl.level = action.input.level;
72
- if (action.input.description !== undefined)
73
- sl.description = action.input.description || null;
74
- }
70
+ if (!tier) {
71
+ throw new UpdateServiceLevelTierNotFoundError(`Tier with ID ${action.input.tierId} not found`);
75
72
  }
73
+ const sl = tier.serviceLevels.find((s) => s.id === action.input.serviceLevelId);
74
+ if (!sl) {
75
+ throw new UpdateServiceLevelNotFoundError(`Service level with ID ${action.input.serviceLevelId} not found`);
76
+ }
77
+ if (action.input.level)
78
+ sl.level = action.input.level;
79
+ if (action.input.customValue !== undefined)
80
+ sl.customValue = action.input.customValue || null;
81
+ if (action.input.optionGroupId !== undefined)
82
+ sl.optionGroupId = action.input.optionGroupId || null;
76
83
  state.lastModified = action.input.lastModified;
77
84
  },
78
85
  removeServiceLevelOperation(state, action) {
79
86
  const tier = state.tiers.find((t) => t.id === action.input.tierId);
80
- if (tier) {
81
- const index = tier.serviceLevels.findIndex((s) => s.id === action.input.id);
82
- if (index !== -1) {
83
- tier.serviceLevels.splice(index, 1);
84
- }
87
+ if (!tier) {
88
+ throw new RemoveServiceLevelTierNotFoundError(`Tier with ID ${action.input.tierId} not found`);
89
+ }
90
+ const index = tier.serviceLevels.findIndex((s) => s.id === action.input.serviceLevelId);
91
+ if (index !== -1) {
92
+ tier.serviceLevels.splice(index, 1);
85
93
  }
86
94
  state.lastModified = action.input.lastModified;
87
95
  },
88
96
  addUsageLimitOperation(state, action) {
89
97
  const tier = state.tiers.find((t) => t.id === action.input.tierId);
90
- if (tier) {
91
- tier.usageLimits.push({
92
- id: action.input.id,
93
- name: action.input.name,
94
- limit: action.input.limit,
95
- unit: action.input.unit || null,
96
- });
98
+ if (!tier) {
99
+ throw new AddUsageLimitTierNotFoundError(`Tier with ID ${action.input.tierId} not found`);
97
100
  }
101
+ tier.usageLimits.push({
102
+ id: action.input.limitId,
103
+ serviceId: action.input.serviceId,
104
+ metric: action.input.metric,
105
+ unitName: action.input.unitName || null,
106
+ freeLimit: action.input.freeLimit || null,
107
+ paidLimit: action.input.paidLimit || null,
108
+ resetCycle: action.input.resetCycle || null,
109
+ notes: action.input.notes || null,
110
+ unitPrice: action.input.unitPrice || null,
111
+ unitPriceCurrency: action.input.unitPriceCurrency || null,
112
+ });
98
113
  state.lastModified = action.input.lastModified;
99
114
  },
100
115
  updateUsageLimitOperation(state, action) {
101
116
  const tier = state.tiers.find((t) => t.id === action.input.tierId);
102
- if (tier) {
103
- const ul = tier.usageLimits.find((u) => u.id === action.input.id);
104
- if (ul) {
105
- if (action.input.limit !== undefined && action.input.limit !== null)
106
- ul.limit = action.input.limit;
107
- if (action.input.name !== undefined && action.input.name !== null)
108
- ul.name = action.input.name;
109
- if (action.input.unit !== undefined)
110
- ul.unit = action.input.unit || null;
111
- }
117
+ if (!tier) {
118
+ throw new UpdateUsageLimitTierNotFoundError(`Tier with ID ${action.input.tierId} not found`);
112
119
  }
120
+ const ul = tier.usageLimits.find((u) => u.id === action.input.limitId);
121
+ if (!ul) {
122
+ throw new UpdateUsageLimitNotFoundError(`Usage limit with ID ${action.input.limitId} not found`);
123
+ }
124
+ if (action.input.metric)
125
+ ul.metric = action.input.metric;
126
+ if (action.input.unitName !== undefined)
127
+ ul.unitName = action.input.unitName || null;
128
+ if (action.input.freeLimit !== undefined)
129
+ ul.freeLimit = action.input.freeLimit || null;
130
+ if (action.input.paidLimit !== undefined)
131
+ ul.paidLimit = action.input.paidLimit || null;
132
+ if (action.input.resetCycle !== undefined)
133
+ ul.resetCycle = action.input.resetCycle || null;
134
+ if (action.input.notes !== undefined)
135
+ ul.notes = action.input.notes || null;
136
+ if (action.input.unitPrice !== undefined)
137
+ ul.unitPrice = action.input.unitPrice || null;
138
+ if (action.input.unitPriceCurrency !== undefined)
139
+ ul.unitPriceCurrency = action.input.unitPriceCurrency || null;
113
140
  state.lastModified = action.input.lastModified;
114
141
  },
115
142
  removeUsageLimitOperation(state, action) {
116
143
  const tier = state.tiers.find((t) => t.id === action.input.tierId);
117
- if (tier) {
118
- const index = tier.usageLimits.findIndex((u) => u.id === action.input.id);
119
- if (index !== -1) {
120
- tier.usageLimits.splice(index, 1);
121
- }
144
+ if (!tier) {
145
+ throw new RemoveUsageLimitTierNotFoundError(`Tier with ID ${action.input.tierId} not found`);
146
+ }
147
+ const index = tier.usageLimits.findIndex((u) => u.id === action.input.limitId);
148
+ if (index !== -1) {
149
+ tier.usageLimits.splice(index, 1);
122
150
  }
123
151
  state.lastModified = action.input.lastModified;
124
152
  },
125
- setTierPricingModeOperation(state, action) {
153
+ setTierDefaultBillingCycleOperation(state, action) {
126
154
  const tier = state.tiers.find((t) => t.id === action.input.tierId);
127
- if (tier) {
128
- tier.pricingMode = action.input.pricingMode;
155
+ if (!tier) {
156
+ throw new SetTierDefaultBillingCycleTierNotFoundError(`Tier with ID ${action.input.tierId} not found`);
129
157
  }
158
+ tier.defaultBillingCycle = action.input.defaultBillingCycle;
130
159
  state.lastModified = action.input.lastModified;
131
160
  },
132
- setTierDefaultBillingCycleOperation(state, action) {
161
+ setTierBillingCycleDiscountsOperation(state, action) {
133
162
  const tier = state.tiers.find((t) => t.id === action.input.tierId);
134
- if (tier) {
135
- tier.defaultBillingCycle = action.input.defaultBillingCycle;
163
+ if (!tier) {
164
+ throw new SetTierBillingCycleDiscountsTierNotFoundError(`Tier with ID ${action.input.tierId} not found`);
136
165
  }
166
+ tier.billingCycleDiscounts = action.input.discounts.map((d) => ({
167
+ billingCycle: d.billingCycle,
168
+ discountRule: {
169
+ discountType: d.discountRule.discountType,
170
+ discountValue: d.discountRule.discountValue,
171
+ },
172
+ }));
137
173
  state.lastModified = action.input.lastModified;
138
174
  },
139
- setTierBillingCycleDiscountsOperation(state, action) {
175
+ setTierPricingModeOperation(state, action) {
140
176
  const tier = state.tiers.find((t) => t.id === action.input.tierId);
141
- if (tier) {
142
- tier.billingCycleDiscounts = action.input.discounts.map((d) => ({
143
- cycle: d.cycle,
144
- discountType: d.discountType,
145
- discountValue: d.discountValue,
146
- }));
177
+ if (!tier) {
178
+ throw new SetTierPricingModeTierNotFoundError(`Tier with ID ${action.input.tierId} not found`);
147
179
  }
180
+ tier.pricingMode = action.input.pricingMode;
148
181
  state.lastModified = action.input.lastModified;
149
182
  },
150
183
  };
@@ -1,2 +1,61 @@
1
- export {};
1
+ import type { BillingCycle } from "../gen/schema/types.js";
2
+ import type { ServiceOfferingPHState } from "../gen/types.js";
3
+ export declare const BILLING_CYCLE_MONTHS: Record<BillingCycle, number>;
4
+ export interface DiscountBreakdown {
5
+ discountType: string;
6
+ discountValue: number;
7
+ originalAmount: number;
8
+ discountedAmount: number;
9
+ }
10
+ export interface SetupCostDiscountBreakdown {
11
+ originalAmount: number;
12
+ discountedAmount: number;
13
+ discountType: string;
14
+ discountValue: number;
15
+ }
16
+ export interface OptionGroupBreakdown {
17
+ optionGroupId: string;
18
+ optionGroupName: string;
19
+ effectiveBillingCycle: BillingCycle;
20
+ monthlyBase: number;
21
+ cycleAmount: number;
22
+ recurringAmount: number;
23
+ currency: string;
24
+ discount: DiscountBreakdown | null;
25
+ setupCost: number | null;
26
+ setupCostCurrency: string | null;
27
+ setupCostDiscount: SetupCostDiscountBreakdown | null;
28
+ }
29
+ export interface AddOnBreakdown {
30
+ optionGroupId: string;
31
+ optionGroupName: string;
32
+ selectedBillingCycle: BillingCycle;
33
+ monthlyBase: number;
34
+ cycleAmount: number;
35
+ recurringAmount: number;
36
+ currency: string;
37
+ discount: DiscountBreakdown | null;
38
+ setupCost: number | null;
39
+ setupCostCurrency: string | null;
40
+ }
41
+ export interface PriceBreakdownTotals {
42
+ grandRecurringTotal: number;
43
+ }
44
+ export interface PriceBreakdown {
45
+ tierCycleTotal: number;
46
+ tierCurrency: string;
47
+ tierMonthlyBase: number;
48
+ optionGroupBreakdowns: OptionGroupBreakdown[];
49
+ setupGroupBreakdowns: OptionGroupBreakdown[];
50
+ addOnBreakdowns: AddOnBreakdown[];
51
+ totals: PriceBreakdownTotals;
52
+ }
53
+ export interface UserSelection {
54
+ tierId: string;
55
+ billingCycle: BillingCycle;
56
+ optionGroupIds: string[];
57
+ groupBillingCycleOverrides?: Record<string, BillingCycle>;
58
+ addonBillingCycleOverrides?: Record<string, BillingCycle>;
59
+ }
60
+ export declare function getUserSelectionPriceBreakdown(state: ServiceOfferingPHState, selection: UserSelection): PriceBreakdown;
2
61
  //# sourceMappingURL=utils.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../../../document-models/service-offering/v1/src/utils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC"}
1
+ {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../../../document-models/service-offering/v1/src/utils.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,YAAY,EAGb,MAAM,wBAAwB,CAAC;AAChC,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,iBAAiB,CAAC;AAE9D,eAAO,MAAM,oBAAoB,EAAE,MAAM,CAAC,YAAY,EAAE,MAAM,CAM7D,CAAC;AAEF,MAAM,WAAW,iBAAiB;IAChC,YAAY,EAAE,MAAM,CAAC;IACrB,aAAa,EAAE,MAAM,CAAC;IACtB,cAAc,EAAE,MAAM,CAAC;IACvB,gBAAgB,EAAE,MAAM,CAAC;CAC1B;AAED,MAAM,WAAW,0BAA0B;IACzC,cAAc,EAAE,MAAM,CAAC;IACvB,gBAAgB,EAAE,MAAM,CAAC;IACzB,YAAY,EAAE,MAAM,CAAC;IACrB,aAAa,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,oBAAoB;IACnC,aAAa,EAAE,MAAM,CAAC;IACtB,eAAe,EAAE,MAAM,CAAC;IACxB,qBAAqB,EAAE,YAAY,CAAC;IACpC,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,eAAe,EAAE,MAAM,CAAC;IACxB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,iBAAiB,GAAG,IAAI,CAAC;IACnC,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,iBAAiB,EAAE,MAAM,GAAG,IAAI,CAAC;IACjC,iBAAiB,EAAE,0BAA0B,GAAG,IAAI,CAAC;CACtD;AAED,MAAM,WAAW,cAAc;IAC7B,aAAa,EAAE,MAAM,CAAC;IACtB,eAAe,EAAE,MAAM,CAAC;IACxB,oBAAoB,EAAE,YAAY,CAAC;IACnC,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,eAAe,EAAE,MAAM,CAAC;IACxB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,iBAAiB,GAAG,IAAI,CAAC;IACnC,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,iBAAiB,EAAE,MAAM,GAAG,IAAI,CAAC;CAClC;AAED,MAAM,WAAW,oBAAoB;IACnC,mBAAmB,EAAE,MAAM,CAAC;CAC7B;AAED,MAAM,WAAW,cAAc;IAC7B,cAAc,EAAE,MAAM,CAAC;IACvB,YAAY,EAAE,MAAM,CAAC;IACrB,eAAe,EAAE,MAAM,CAAC;IACxB,qBAAqB,EAAE,oBAAoB,EAAE,CAAC;IAC9C,oBAAoB,EAAE,oBAAoB,EAAE,CAAC;IAC7C,eAAe,EAAE,cAAc,EAAE,CAAC;IAClC,MAAM,EAAE,oBAAoB,CAAC;CAC9B;AAED,MAAM,WAAW,aAAa;IAC5B,MAAM,EAAE,MAAM,CAAC;IACf,YAAY,EAAE,YAAY,CAAC;IAC3B,cAAc,EAAE,MAAM,EAAE,CAAC;IACzB,0BAA0B,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;IAC1D,0BAA0B,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;CAC3D;AAyLD,wBAAgB,8BAA8B,CAC5C,KAAK,EAAE,sBAAsB,EAC7B,SAAS,EAAE,aAAa,GACvB,cAAc,CAmGhB"}
@@ -1 +1,173 @@
1
- export {};
1
+ export const BILLING_CYCLE_MONTHS = {
2
+ MONTHLY: 1,
3
+ QUARTERLY: 3,
4
+ SEMI_ANNUAL: 6,
5
+ ANNUAL: 12,
6
+ ONE_TIME: 0,
7
+ };
8
+ function emptyBreakdown(currency) {
9
+ return {
10
+ tierCycleTotal: 0,
11
+ tierCurrency: currency,
12
+ tierMonthlyBase: 0,
13
+ optionGroupBreakdowns: [],
14
+ setupGroupBreakdowns: [],
15
+ addOnBreakdowns: [],
16
+ totals: { grandRecurringTotal: 0 },
17
+ };
18
+ }
19
+ function applyDiscount(amount, rule) {
20
+ let discountedAmount;
21
+ if (rule.discountType === "PERCENTAGE") {
22
+ discountedAmount = amount * (1 - rule.discountValue / 100);
23
+ }
24
+ else {
25
+ discountedAmount = amount - rule.discountValue;
26
+ }
27
+ discountedAmount = Math.max(0, Math.round(discountedAmount * 100) / 100);
28
+ return {
29
+ discountedAmount,
30
+ discount: {
31
+ discountType: rule.discountType,
32
+ discountValue: rule.discountValue,
33
+ originalAmount: amount,
34
+ discountedAmount,
35
+ },
36
+ };
37
+ }
38
+ function resolveGroupPricing(group, tier, effectiveCycle, globalCurrency) {
39
+ const months = BILLING_CYCLE_MONTHS[effectiveCycle];
40
+ // Get pricing source: tier-dependent first, then standalone
41
+ const tierPricing = group.tierDependentPricing?.find((tp) => tp.tierId === tier.id);
42
+ const pricing = tierPricing?.recurringPricing ||
43
+ group.standalonePricing?.recurringPricing ||
44
+ [];
45
+ // Monthly base
46
+ const monthlyOption = pricing.find((p) => p.billingCycle === "MONTHLY");
47
+ const monthlyBase = monthlyOption?.amount ?? 0;
48
+ // Price for effective cycle
49
+ const cycleOption = pricing.find((p) => p.billingCycle === effectiveCycle);
50
+ const cycleAmount = cycleOption?.amount ?? monthlyBase * (months || 1);
51
+ let discount = null;
52
+ let recurringAmount = cycleAmount;
53
+ // Check for discount on the cycle option itself
54
+ const optionDiscount = cycleOption?.discount;
55
+ if (optionDiscount && optionDiscount.discountValue > 0) {
56
+ const result = applyDiscount(cycleAmount, optionDiscount);
57
+ recurringAmount = result.discountedAmount;
58
+ discount = result.discount;
59
+ }
60
+ // If no direct discount, check tier billing cycle discounts for inherited groups
61
+ if (!discount && group.discountMode === "INHERIT_TIER") {
62
+ const tierDiscount = tier.billingCycleDiscounts.find((d) => d.billingCycle === effectiveCycle);
63
+ if (tierDiscount && tierDiscount.discountRule.discountValue > 0) {
64
+ const result = applyDiscount(cycleAmount, tierDiscount.discountRule);
65
+ recurringAmount = result.discountedAmount;
66
+ discount = result.discount;
67
+ }
68
+ }
69
+ // Setup cost
70
+ const setupCostSource = tierPricing?.setupCost || group.standalonePricing?.setupCost;
71
+ const setupCost = setupCostSource?.amount ?? null;
72
+ const setupCostCurrency = setupCostSource?.currency ?? null;
73
+ let setupCostDiscount = null;
74
+ if (setupCostSource?.discount && setupCostSource.discount.discountValue > 0) {
75
+ const original = setupCostSource.amount;
76
+ const rule = setupCostSource.discount;
77
+ let discounted;
78
+ if (rule.discountType === "PERCENTAGE") {
79
+ discounted = original * (1 - rule.discountValue / 100);
80
+ }
81
+ else {
82
+ discounted = original - rule.discountValue;
83
+ }
84
+ discounted = Math.max(0, Math.round(discounted * 100) / 100);
85
+ setupCostDiscount = {
86
+ originalAmount: original,
87
+ discountedAmount: discounted,
88
+ discountType: rule.discountType,
89
+ discountValue: rule.discountValue,
90
+ };
91
+ }
92
+ const priceCurrency = cycleOption?.currency || monthlyOption?.currency || globalCurrency;
93
+ return {
94
+ monthlyBase,
95
+ cycleAmount,
96
+ recurringAmount,
97
+ currency: priceCurrency,
98
+ discount,
99
+ setupCost,
100
+ setupCostCurrency,
101
+ setupCostDiscount,
102
+ };
103
+ }
104
+ function computeGroupBreakdown(group, tier, globalBillingCycle, globalCurrency, overrides) {
105
+ const effectiveCycle = overrides?.[group.id] || globalBillingCycle;
106
+ const pricing = resolveGroupPricing(group, tier, effectiveCycle, globalCurrency);
107
+ return {
108
+ optionGroupId: group.id,
109
+ optionGroupName: group.name,
110
+ effectiveBillingCycle: effectiveCycle,
111
+ ...pricing,
112
+ };
113
+ }
114
+ function computeAddOnBreakdown(group, tier, globalBillingCycle, globalCurrency, overrides) {
115
+ const selectedCycle = overrides?.[group.id] || globalBillingCycle;
116
+ const pricing = resolveGroupPricing(group, tier, selectedCycle, globalCurrency);
117
+ return {
118
+ optionGroupId: group.id,
119
+ optionGroupName: group.name,
120
+ selectedBillingCycle: selectedCycle,
121
+ monthlyBase: pricing.monthlyBase,
122
+ cycleAmount: pricing.cycleAmount,
123
+ recurringAmount: pricing.recurringAmount,
124
+ currency: pricing.currency,
125
+ discount: pricing.discount,
126
+ setupCost: pricing.setupCost,
127
+ setupCostCurrency: pricing.setupCostCurrency,
128
+ };
129
+ }
130
+ export function getUserSelectionPriceBreakdown(state, selection) {
131
+ const { tierId, billingCycle, optionGroupIds, groupBillingCycleOverrides, addonBillingCycleOverrides, } = selection;
132
+ const globalState = state.global;
133
+ const tier = globalState.tiers.find((t) => t.id === tierId);
134
+ if (!tier) {
135
+ return emptyBreakdown("USD");
136
+ }
137
+ const currency = tier.pricing.currency || "USD";
138
+ const months = BILLING_CYCLE_MONTHS[billingCycle];
139
+ // Tier cycle total from tier pricing
140
+ const tierMonthlyAmount = tier.pricing.amount ?? 0;
141
+ const tierCycleTotal = tierMonthlyAmount * (months || 1);
142
+ // Sum of monthly base prices across all regular (non-setup, non-addon) option groups
143
+ const regularGroups = globalState.optionGroups.filter((g) => g.costType !== "SETUP" && !g.isAddOn);
144
+ const tierMonthlyBase = regularGroups.reduce((sum, group) => {
145
+ const tierPricing = group.tierDependentPricing?.find((tp) => tp.tierId === tierId);
146
+ const pricing = tierPricing?.recurringPricing ||
147
+ group.standalonePricing?.recurringPricing ||
148
+ [];
149
+ const monthlyOption = pricing.find((p) => p.billingCycle === "MONTHLY");
150
+ return sum + (monthlyOption?.amount ?? 0);
151
+ }, 0);
152
+ // Separate option groups by type
153
+ const setupGroups = globalState.optionGroups.filter((g) => g.costType === "SETUP");
154
+ const addonGroups = globalState.optionGroups.filter((g) => g.isAddOn && optionGroupIds.includes(g.id));
155
+ const optionGroupBreakdowns = regularGroups.map((group) => computeGroupBreakdown(group, tier, billingCycle, currency, groupBillingCycleOverrides));
156
+ const setupGroupBreakdowns = setupGroups.map((group) => computeGroupBreakdown(group, tier, billingCycle, currency, groupBillingCycleOverrides));
157
+ const addOnBreakdowns = addonGroups.map((group) => computeAddOnBreakdown(group, tier, billingCycle, currency, addonBillingCycleOverrides));
158
+ // Grand recurring total
159
+ const optionGroupRecurring = optionGroupBreakdowns.reduce((sum, b) => sum + b.recurringAmount, 0);
160
+ const addOnRecurring = addOnBreakdowns.reduce((sum, b) => sum + b.recurringAmount, 0);
161
+ const grandRecurringTotal = tierCycleTotal + optionGroupRecurring + addOnRecurring;
162
+ return {
163
+ tierCycleTotal,
164
+ tierCurrency: currency,
165
+ tierMonthlyBase,
166
+ optionGroupBreakdowns,
167
+ setupGroupBreakdowns,
168
+ addOnBreakdowns,
169
+ totals: {
170
+ grandRecurringTotal,
171
+ },
172
+ };
173
+ }
@@ -1,6 +1,6 @@
1
1
  import { generateMock } from "@powerhousedao/common/utils";
2
2
  import { describe, expect, it } from "vitest";
3
- import { reducer, utils, isServiceOfferingDocument, addOptionGroup, updateOptionGroup, deleteOptionGroup, setOptionGroupStandalonePricing, addOptionGroupTierPricing, updateOptionGroupTierPricing, removeOptionGroupTierPricing, setOptionGroupDiscountMode, AddOptionGroupInputSchema, UpdateOptionGroupInputSchema, DeleteOptionGroupInputSchema, SetOptionGroupStandalonePricingInputSchema, AddOptionGroupTierPricingInputSchema, UpdateOptionGroupTierPricingInputSchema, RemoveOptionGroupTierPricingInputSchema, SetOptionGroupDiscountModeInputSchema, } from "@powerhousedao/service-offering/document-models/service-offering/v1";
3
+ import { reducer, utils, isServiceOfferingDocument, addOptionGroup, updateOptionGroup, deleteOptionGroup, setOptionGroupStandalonePricing, AddOptionGroupInputSchema, UpdateOptionGroupInputSchema, DeleteOptionGroupInputSchema, SetOptionGroupStandalonePricingInputSchema, addOptionGroupTierPricing, updateOptionGroupTierPricing, removeOptionGroupTierPricing, setOptionGroupDiscountMode, AddOptionGroupTierPricingInputSchema, UpdateOptionGroupTierPricingInputSchema, RemoveOptionGroupTierPricingInputSchema, SetOptionGroupDiscountModeInputSchema, } from "@powerhousedao/service-offering/document-models/service-offering/v1";
4
4
  describe("OptionGroupsOperations", () => {
5
5
  it("should handle addOptionGroup operation", () => {
6
6
  const document = utils.createDocument();
@@ -1,6 +1,9 @@
1
1
  import type { ServiceOfferingPHState } from "./gen/types.js";
2
+ import * as customUtils from "./src/utils.js";
2
3
  /** Utils for the ServiceOffering document model */
3
4
  export declare const utils: {
5
+ getUserSelectionPriceBreakdown(state: ServiceOfferingPHState, selection: customUtils.UserSelection): customUtils.PriceBreakdown;
6
+ BILLING_CYCLE_MONTHS: Record<import("./gen/types.js").BillingCycle, number>;
4
7
  fileExtension: string;
5
8
  createState: import("document-model").CreateState<ServiceOfferingPHState>;
6
9
  createDocument: import("document-model").CreateDocument<ServiceOfferingPHState>;
@@ -1 +1 @@
1
- {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../../document-models/service-offering/v1/utils.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,gBAAgB,CAAC;AAI7D,mDAAmD;AACnD,eAAO,MAAM,KAAK;;;;;;;;;;CAGoC,CAAC"}
1
+ {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../../document-models/service-offering/v1/utils.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,gBAAgB,CAAC;AAE7D,OAAO,KAAK,WAAW,MAAM,gBAAgB,CAAC;AAE9C,mDAAmD;AACnD,eAAO,MAAM,KAAK;;;;;;;;;;;;CAGoC,CAAC"}
@@ -39,7 +39,9 @@ export declare const actions: {
39
39
  setAutoRenew: (input: import("./index.js").SetAutoRenewInput) => import("./index.js").SetAutoRenewAction;
40
40
  setRenewalDate: (input: import("./index.js").SetRenewalDateInput) => import("./index.js").SetRenewalDateAction;
41
41
  updateBillingProjection: (input: import("./index.js").UpdateBillingProjectionInput) => import("./index.js").UpdateBillingProjectionAction;
42
- setName: (name: string) => import("document-model").SetNameAction;
42
+ setName: (name: string | {
43
+ name: string;
44
+ }) => import("document-model").SetNameAction;
43
45
  undo: (count?: number, scope?: string) => import("document-model").UndoAction;
44
46
  redo: (count?: number, scope?: string) => import("document-model").RedoAction;
45
47
  prune: (start?: number, end?: number, scope?: string) => import("document-model").SchemaPruneAction;
@@ -1 +1 @@
1
- {"version":3,"file":"actions.d.ts","sourceRoot":"","sources":["../../../../document-models/subscription-instance/v1/actions.ts"],"names":[],"mappings":"AASA,0DAA0D;AAE1D,eAAO,MAAM,OAAO;sBAKX,gDACM;4BAEuK,sDAAiC;uBAAyF,iDAA4B;mBAA0L,6CAAwB;wBAAkL,kDAA6B;0BAAoM,oDAA+B;2BAA2M,qDAAgC;2BAA8M,qDAAgC;sBAA1rC,gDAA2B;yBAA6L,mDAA8B;wBAAqM,kDAA6B;6BAAwM,uDAAkC;6BAAuN,uDAAkC;iBAAzjB,2CAAsB;oBAAwK,8CAAyB;6BAA0L,uDAAkC;iCAA2N,2DAAyC;yBAAiO,mDAA8B;6BAA0M,uDAAkC;wBAAiN,kDAA6B;+BAAyM,yDAAuC;kCAAoO,4DAA0C;6BAA/uC,uDAAkC;0BAAkN,oDAA+B;+BAA+M,yDAAuC;2BAA4N,qDAAgC;wBAA0M,kDAA6B;kBAA2L,4CAAuB;yBAAgL,mDAA8B;yBAAqM,mDAA8B;gCAA4M,0DAAwC;wBAA4N,kDAA6B;2BAAqM,qDAAgC;yBAA4M,mDAA8B;qBAAkM,+CAA0B;uBAAwL,iDAA4B;mBAA0L,6CAAwB;qBAAgL,+CAA0B;8BAA+L,wDAAmC;;gBAAg4D,CAAC,eAAe,CAAC;gBAAkE,CAAC,eAAe,CAAC;iBAAmE,CAAC,aAAa,CAAC,eAAe,CAAC;;;;gBAAqS,CAAC;CADptO,CAAC"}
1
+ {"version":3,"file":"actions.d.ts","sourceRoot":"","sources":["../../../../document-models/subscription-instance/v1/actions.ts"],"names":[],"mappings":"AASA,0DAA0D;AAE1D,eAAO,MAAM,OAAO;sBAKX,gDACM;4BAEuK,sDAAiC;uBAAyF,iDAA4B;mBAA0L,6CAAwB;wBAAkL,kDAA6B;0BAAoM,oDAA+B;2BAA2M,qDAAgC;2BAA8M,qDAAgC;sBAA1rC,gDAA2B;yBAA6L,mDAA8B;wBAAqM,kDAA6B;6BAAwM,uDAAkC;6BAAuN,uDAAkC;iBAAzjB,2CAAsB;oBAAwK,8CAAyB;6BAA0L,uDAAkC;iCAA2N,2DAAyC;yBAAiO,mDAA8B;6BAA0M,uDAAkC;wBAAiN,kDAA6B;+BAAyM,yDAAuC;kCAAoO,4DAA0C;6BAA/uC,uDAAkC;0BAAkN,oDAA+B;+BAA+M,yDAAuC;2BAA4N,qDAAgC;wBAA0M,kDAA6B;kBAA2L,4CAAuB;yBAAgL,mDAA8B;yBAAqM,mDAA8B;gCAA4M,0DAAwC;wBAA4N,kDAA6B;2BAAqM,qDAAgC;yBAA4M,mDAA8B;qBAAkM,+CAA0B;uBAAwL,iDAA4B;mBAA0L,6CAAwB;qBAAgL,+CAA0B;8BAA+L,wDAAmC;;;;gBAAw7D,CAAC,eAAe,CAAC;gBAAkE,CAAC,eAAe,CAAC;iBAAmE,CAAC,aAAa,CAAC,eAAe,CAAC;;;;gBAAqS,CAAC;CAD5wO,CAAC"}
@@ -0,0 +1,4 @@
1
+ import { PHDocumentController } from "document-model/core";
2
+ import type { SubscriptionInstanceAction, SubscriptionInstancePHState } from "./types.js";
3
+ export declare const SubscriptionInstanceController: new (initialDocument?: import("document-model").PHDocument<SubscriptionInstancePHState> | undefined) => PHDocumentController<SubscriptionInstancePHState> & import("document-model/core").ActionMap<SubscriptionInstanceAction, PHDocumentController<SubscriptionInstancePHState>>;
4
+ //# sourceMappingURL=controller.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"controller.d.ts","sourceRoot":"","sources":["../../../../../document-models/subscription-instance/v1/gen/controller.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAE3D,OAAO,KAAK,EACV,0BAA0B,EAC1B,2BAA2B,EAC5B,MAAM,YAAY,CAAC;AAEpB,eAAO,MAAM,8BAA8B,oRAIlB,CAAC"}
@@ -0,0 +1,3 @@
1
+ import { PHDocumentController } from "document-model/core";
2
+ import { SubscriptionInstance } from "../module.js";
3
+ export const SubscriptionInstanceController = PHDocumentController.forDocumentModel(SubscriptionInstance);
@@ -1 +1 @@
1
- {"version":3,"file":"document-model.d.ts","sourceRoot":"","sources":["../../../../../document-models/subscription-instance/v1/gen/document-model.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,gBAAgB,CAAC;AAE/D,eAAO,MAAM,aAAa,EAAE,wBAkjB3B,CAAC"}
1
+ {"version":3,"file":"document-model.d.ts","sourceRoot":"","sources":["../../../../../document-models/subscription-instance/v1/gen/document-model.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,gBAAgB,CAAC;AAE/D,eAAO,MAAM,aAAa,EAAE,wBA6yB3B,CAAC"}