@dainamite/cpq 0.5.0 → 0.7.0

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 (368) hide show
  1. package/CHANGELOG.md +64 -0
  2. package/MIGRATION.md +74 -0
  3. package/dist/modules/cpq/acl.js +1 -0
  4. package/dist/modules/cpq/acl.js.map +2 -2
  5. package/dist/modules/cpq/api/_helpers/adjustmentCommandRoute.js +45 -0
  6. package/dist/modules/cpq/api/_helpers/adjustmentCommandRoute.js.map +7 -0
  7. package/dist/modules/cpq/api/_helpers/quoteMutationGuard.js +23 -0
  8. package/dist/modules/cpq/api/_helpers/quoteMutationGuard.js.map +7 -0
  9. package/dist/modules/cpq/api/_helpers/quoteRouteOpenApi.js +19 -0
  10. package/dist/modules/cpq/api/_helpers/quoteRouteOpenApi.js.map +7 -0
  11. package/dist/modules/cpq/api/orders/[orderId]/route.js +17 -1
  12. package/dist/modules/cpq/api/orders/[orderId]/route.js.map +2 -2
  13. package/dist/modules/cpq/api/orders/route.js +47 -2
  14. package/dist/modules/cpq/api/orders/route.js.map +2 -2
  15. package/dist/modules/cpq/api/quotes/[quoteId]/items/[lineId]/restore/route.js +54 -0
  16. package/dist/modules/cpq/api/quotes/[quoteId]/items/[lineId]/restore/route.js.map +7 -0
  17. package/dist/modules/cpq/api/quotes/[quoteId]/items/[lineId]/route.js +42 -2
  18. package/dist/modules/cpq/api/quotes/[quoteId]/items/[lineId]/route.js.map +2 -2
  19. package/dist/modules/cpq/api/quotes/[quoteId]/items/route.js +27 -2
  20. package/dist/modules/cpq/api/quotes/[quoteId]/items/route.js.map +2 -2
  21. package/dist/modules/cpq/api/quotes/[quoteId]/price-adjustments/[adjustmentId]/route.js +47 -0
  22. package/dist/modules/cpq/api/quotes/[quoteId]/price-adjustments/[adjustmentId]/route.js.map +7 -0
  23. package/dist/modules/cpq/api/quotes/[quoteId]/price-adjustments/preview/route.js +30 -0
  24. package/dist/modules/cpq/api/quotes/[quoteId]/price-adjustments/preview/route.js.map +7 -0
  25. package/dist/modules/cpq/api/quotes/[quoteId]/price-adjustments/route.js +47 -0
  26. package/dist/modules/cpq/api/quotes/[quoteId]/price-adjustments/route.js.map +7 -0
  27. package/dist/modules/cpq/api/quotes/[quoteId]/recalculate/route.js +32 -2
  28. package/dist/modules/cpq/api/quotes/[quoteId]/recalculate/route.js.map +2 -2
  29. package/dist/modules/cpq/api/quotes/[quoteId]/status/route.js +33 -2
  30. package/dist/modules/cpq/api/quotes/[quoteId]/status/route.js.map +2 -2
  31. package/dist/modules/cpq/api/quotes/price/route.js +43 -3
  32. package/dist/modules/cpq/api/quotes/price/route.js.map +2 -2
  33. package/dist/modules/cpq/backend/cpq/inventory/AssetsTable.js +3 -9
  34. package/dist/modules/cpq/backend/cpq/inventory/AssetsTable.js.map +2 -2
  35. package/dist/modules/cpq/backend/cpq/inventory/SubscriptionsTable.js +21 -25
  36. package/dist/modules/cpq/backend/cpq/inventory/SubscriptionsTable.js.map +2 -2
  37. package/dist/modules/cpq/backend/cpq/inventory/assets/[id]/page.js +48 -47
  38. package/dist/modules/cpq/backend/cpq/inventory/assets/[id]/page.js.map +2 -2
  39. package/dist/modules/cpq/backend/cpq/inventory/assets/[id]/page.meta.js +1 -1
  40. package/dist/modules/cpq/backend/cpq/inventory/assets/[id]/page.meta.js.map +2 -2
  41. package/dist/modules/cpq/backend/cpq/inventory/page.meta.js +3 -3
  42. package/dist/modules/cpq/backend/cpq/inventory/page.meta.js.map +2 -2
  43. package/dist/modules/cpq/backend/cpq/inventory/shared.js +37 -2
  44. package/dist/modules/cpq/backend/cpq/inventory/shared.js.map +2 -2
  45. package/dist/modules/cpq/backend/cpq/inventory/subscriptions/[id]/page.js +174 -184
  46. package/dist/modules/cpq/backend/cpq/inventory/subscriptions/[id]/page.js.map +2 -2
  47. package/dist/modules/cpq/backend/cpq/inventory/subscriptions/[id]/page.meta.js +1 -1
  48. package/dist/modules/cpq/backend/cpq/inventory/subscriptions/[id]/page.meta.js.map +2 -2
  49. package/dist/modules/cpq/backend/cpq/offerings/[id]/page.js +168 -143
  50. package/dist/modules/cpq/backend/cpq/offerings/[id]/page.js.map +2 -2
  51. package/dist/modules/cpq/backend/cpq/offerings/page.js +36 -34
  52. package/dist/modules/cpq/backend/cpq/offerings/page.js.map +2 -2
  53. package/dist/modules/cpq/backend/cpq/orders/[id]/page.js +140 -280
  54. package/dist/modules/cpq/backend/cpq/orders/[id]/page.js.map +2 -2
  55. package/dist/modules/cpq/backend/cpq/orders/page.js +6 -6
  56. package/dist/modules/cpq/backend/cpq/orders/page.js.map +2 -2
  57. package/dist/modules/cpq/backend/cpq/orders/page.meta.js +1 -1
  58. package/dist/modules/cpq/backend/cpq/orders/page.meta.js.map +1 -1
  59. package/dist/modules/cpq/backend/cpq/price-rules/PriceRuleForm.js +41 -36
  60. package/dist/modules/cpq/backend/cpq/price-rules/PriceRuleForm.js.map +2 -2
  61. package/dist/modules/cpq/backend/cpq/price-rules/[id]/page.js +76 -72
  62. package/dist/modules/cpq/backend/cpq/price-rules/[id]/page.js.map +2 -2
  63. package/dist/modules/cpq/backend/cpq/price-rules/[id]/page.meta.js +1 -1
  64. package/dist/modules/cpq/backend/cpq/price-rules/[id]/page.meta.js.map +2 -2
  65. package/dist/modules/cpq/backend/cpq/price-rules/page.js +18 -15
  66. package/dist/modules/cpq/backend/cpq/price-rules/page.js.map +2 -2
  67. package/dist/modules/cpq/backend/cpq/pricing/[id]/EntriesEditor.js +23 -21
  68. package/dist/modules/cpq/backend/cpq/pricing/[id]/EntriesEditor.js.map +2 -2
  69. package/dist/modules/cpq/backend/cpq/pricing/[id]/ImportPreview.js +22 -50
  70. package/dist/modules/cpq/backend/cpq/pricing/[id]/ImportPreview.js.map +2 -2
  71. package/dist/modules/cpq/backend/cpq/pricing/[id]/page.js +74 -52
  72. package/dist/modules/cpq/backend/cpq/pricing/[id]/page.js.map +2 -2
  73. package/dist/modules/cpq/backend/cpq/pricing/[id]/xlsxImport.js +20 -17
  74. package/dist/modules/cpq/backend/cpq/pricing/[id]/xlsxImport.js.map +2 -2
  75. package/dist/modules/cpq/backend/cpq/pricing/page.js +1 -1
  76. package/dist/modules/cpq/backend/cpq/pricing/page.js.map +2 -2
  77. package/dist/modules/cpq/backend/cpq/quotes/[id]/_components/ArcQuoteConfigurator.js +115 -123
  78. package/dist/modules/cpq/backend/cpq/quotes/[id]/_components/ArcQuoteConfigurator.js.map +2 -2
  79. package/dist/modules/cpq/backend/cpq/quotes/[id]/_components/PriceAdjustmentDialog.js +208 -0
  80. package/dist/modules/cpq/backend/cpq/quotes/[id]/_components/PriceAdjustmentDialog.js.map +7 -0
  81. package/dist/modules/cpq/backend/cpq/quotes/[id]/_components/PriceAdjustmentsPanel.js +79 -0
  82. package/dist/modules/cpq/backend/cpq/quotes/[id]/_components/PriceAdjustmentsPanel.js.map +7 -0
  83. package/dist/modules/cpq/backend/cpq/quotes/[id]/_components/arcLineRemoval.js +53 -0
  84. package/dist/modules/cpq/backend/cpq/quotes/[id]/_components/arcLineRemoval.js.map +7 -0
  85. package/dist/modules/cpq/backend/cpq/quotes/[id]/_components/priceAdjustmentContext.js +107 -0
  86. package/dist/modules/cpq/backend/cpq/quotes/[id]/_components/priceAdjustmentContext.js.map +7 -0
  87. package/dist/modules/cpq/backend/cpq/quotes/[id]/_components/usePriceAdjustments.js +130 -0
  88. package/dist/modules/cpq/backend/cpq/quotes/[id]/_components/usePriceAdjustments.js.map +7 -0
  89. package/dist/modules/cpq/backend/cpq/quotes/[id]/page.js +269 -311
  90. package/dist/modules/cpq/backend/cpq/quotes/[id]/page.js.map +3 -3
  91. package/dist/modules/cpq/backend/cpq/quotes/page.js +23 -19
  92. package/dist/modules/cpq/backend/cpq/quotes/page.js.map +2 -2
  93. package/dist/modules/cpq/backend/cpq/quotes/page.meta.js +1 -1
  94. package/dist/modules/cpq/backend/cpq/quotes/page.meta.js.map +1 -1
  95. package/dist/modules/cpq/backend/cpq/specifications/[id]/DependsOnRulesEditor.js +19 -15
  96. package/dist/modules/cpq/backend/cpq/specifications/[id]/DependsOnRulesEditor.js.map +2 -2
  97. package/dist/modules/cpq/backend/cpq/specifications/[id]/page.js +171 -178
  98. package/dist/modules/cpq/backend/cpq/specifications/[id]/page.js.map +2 -2
  99. package/dist/modules/cpq/backend/cpq/specifications/page.js +2 -2
  100. package/dist/modules/cpq/backend/cpq/specifications/page.js.map +2 -2
  101. package/dist/modules/cpq/backend/cpq/wizards/[definitionCode]/detail/page.js +60 -50
  102. package/dist/modules/cpq/backend/cpq/wizards/[definitionCode]/detail/page.js.map +2 -2
  103. package/dist/modules/cpq/backend/cpq/wizards/[definitionCode]/page.js +22 -18
  104. package/dist/modules/cpq/backend/cpq/wizards/[definitionCode]/page.js.map +2 -2
  105. package/dist/modules/cpq/backend/cpq/wizards/page.js +1 -1
  106. package/dist/modules/cpq/backend/cpq/wizards/page.js.map +2 -2
  107. package/dist/modules/cpq/ce.js +8 -0
  108. package/dist/modules/cpq/ce.js.map +2 -2
  109. package/dist/modules/cpq/cli.js +34 -1
  110. package/dist/modules/cpq/cli.js.map +2 -2
  111. package/dist/modules/cpq/commands/price-adjustments.js +107 -0
  112. package/dist/modules/cpq/commands/price-adjustments.js.map +7 -0
  113. package/dist/modules/cpq/components/ArcLineDiff.js +53 -0
  114. package/dist/modules/cpq/components/ArcLineDiff.js.map +7 -0
  115. package/dist/modules/cpq/components/ChargeBreakdownTable.js +148 -0
  116. package/dist/modules/cpq/components/ChargeBreakdownTable.js.map +7 -0
  117. package/dist/modules/cpq/components/PriceWaterfall.js +68 -0
  118. package/dist/modules/cpq/components/PriceWaterfall.js.map +7 -0
  119. package/dist/modules/cpq/components/PricingSummaryCard.js +112 -0
  120. package/dist/modules/cpq/components/PricingSummaryCard.js.map +7 -0
  121. package/dist/modules/cpq/components/StatusPath.js +5 -3
  122. package/dist/modules/cpq/components/StatusPath.js.map +2 -2
  123. package/dist/modules/cpq/components/useCpqRowActions.js +10 -22
  124. package/dist/modules/cpq/components/useCpqRowActions.js.map +2 -2
  125. package/dist/modules/cpq/components/useGrantedFeatures.js +27 -0
  126. package/dist/modules/cpq/components/useGrantedFeatures.js.map +7 -0
  127. package/dist/modules/cpq/data/entities.js +97 -0
  128. package/dist/modules/cpq/data/entities.js.map +2 -2
  129. package/dist/modules/cpq/data/price-adjustments.js +70 -0
  130. package/dist/modules/cpq/data/price-adjustments.js.map +7 -0
  131. package/dist/modules/cpq/data/validators.js +4 -0
  132. package/dist/modules/cpq/data/validators.js.map +2 -2
  133. package/dist/modules/cpq/di.js +6 -0
  134. package/dist/modules/cpq/di.js.map +2 -2
  135. package/dist/modules/cpq/events.js +47 -0
  136. package/dist/modules/cpq/events.js.map +2 -2
  137. package/dist/modules/cpq/i18n/de.json +1220 -0
  138. package/dist/modules/cpq/i18n/en.json +1220 -0
  139. package/dist/modules/cpq/i18n/es.json +1220 -0
  140. package/dist/modules/cpq/i18n/pl.json +1220 -0
  141. package/dist/modules/cpq/index.js +1 -1
  142. package/dist/modules/cpq/index.js.map +2 -2
  143. package/dist/modules/cpq/lib/auditActor.js +10 -0
  144. package/dist/modules/cpq/lib/auditActor.js.map +7 -0
  145. package/dist/modules/cpq/lib/formatMoney.js +7 -0
  146. package/dist/modules/cpq/lib/formatMoney.js.map +7 -0
  147. package/dist/modules/cpq/lib/priceAdjustmentDefaults.js +60 -0
  148. package/dist/modules/cpq/lib/priceAdjustmentDefaults.js.map +7 -0
  149. package/dist/modules/cpq/lib/priceAdjustmentView.js +169 -0
  150. package/dist/modules/cpq/lib/priceAdjustmentView.js.map +7 -0
  151. package/dist/modules/cpq/lib/quotePermissions.js +13 -0
  152. package/dist/modules/cpq/lib/quotePermissions.js.map +7 -0
  153. package/dist/modules/cpq/lib/quoteSummaryView.js +28 -0
  154. package/dist/modules/cpq/lib/quoteSummaryView.js.map +7 -0
  155. package/dist/modules/cpq/migrations/Migration20261110213052.js +22 -0
  156. package/dist/modules/cpq/migrations/Migration20261110213052.js.map +7 -0
  157. package/dist/modules/cpq/services/arcLineRemoval.js +53 -0
  158. package/dist/modules/cpq/services/arcLineRemoval.js.map +7 -0
  159. package/dist/modules/cpq/services/arcPriceFreeze.js +79 -0
  160. package/dist/modules/cpq/services/arcPriceFreeze.js.map +7 -0
  161. package/dist/modules/cpq/services/cpqOrderService.js +25 -28
  162. package/dist/modules/cpq/services/cpqOrderService.js.map +2 -2
  163. package/dist/modules/cpq/services/cpqPricingService.js +7 -0
  164. package/dist/modules/cpq/services/cpqPricingService.js.map +2 -2
  165. package/dist/modules/cpq/services/cpqQuotingService.js +330 -109
  166. package/dist/modules/cpq/services/cpqQuotingService.js.map +2 -2
  167. package/dist/modules/cpq/services/orderPricingSummary.js +26 -0
  168. package/dist/modules/cpq/services/orderPricingSummary.js.map +7 -0
  169. package/dist/modules/cpq/services/priceAdjustments/adjustmentService.js +264 -0
  170. package/dist/modules/cpq/services/priceAdjustments/adjustmentService.js.map +7 -0
  171. package/dist/modules/cpq/services/priceAdjustments/chargeWaterfall.js +25 -0
  172. package/dist/modules/cpq/services/priceAdjustments/chargeWaterfall.js.map +7 -0
  173. package/dist/modules/cpq/services/priceAdjustments/loadQuoteAdjustments.js +38 -0
  174. package/dist/modules/cpq/services/priceAdjustments/loadQuoteAdjustments.js.map +7 -0
  175. package/dist/modules/cpq/services/priceAdjustments/pricingSnapshot.js +104 -0
  176. package/dist/modules/cpq/services/priceAdjustments/pricingSnapshot.js.map +7 -0
  177. package/dist/modules/cpq/services/priceAdjustments/quoteAdjustmentLifecycle.js +102 -0
  178. package/dist/modules/cpq/services/priceAdjustments/quoteAdjustmentLifecycle.js.map +7 -0
  179. package/dist/modules/cpq/services/priceAdjustments/quotePricingEvents.js +52 -0
  180. package/dist/modules/cpq/services/priceAdjustments/quotePricingEvents.js.map +7 -0
  181. package/dist/modules/cpq/services/priceAdjustments/quotePricingWrite.js +37 -0
  182. package/dist/modules/cpq/services/priceAdjustments/quotePricingWrite.js.map +7 -0
  183. package/dist/modules/cpq/services/priceAdjustments/resolveManualAdjustments.js +107 -0
  184. package/dist/modules/cpq/services/priceAdjustments/resolveManualAdjustments.js.map +7 -0
  185. package/dist/modules/cpq/services/priceAdjustments/storedAdjustmentFailure.js +30 -0
  186. package/dist/modules/cpq/services/priceAdjustments/storedAdjustmentFailure.js.map +7 -0
  187. package/dist/modules/cpq/services/types.js.map +2 -2
  188. package/dist/modules/cpq/setup.js +6 -0
  189. package/dist/modules/cpq/setup.js.map +2 -2
  190. package/dist/modules/cpq/widgets/injection/customer-inventory/widget.client.js +39 -31
  191. package/dist/modules/cpq/widgets/injection/customer-inventory/widget.client.js.map +2 -2
  192. package/dist/modules/cpq/widgets/injection/order-cpq-tab/widget.client.js +13 -5
  193. package/dist/modules/cpq/widgets/injection/order-cpq-tab/widget.client.js.map +2 -2
  194. package/dist/modules/cpq/widgets/injection/quote-configurator/widget.client.js +41 -21
  195. package/dist/modules/cpq/widgets/injection/quote-configurator/widget.client.js.map +2 -2
  196. package/dist/modules/cpq/widgets/injection-table.js +2 -2
  197. package/dist/modules/cpq/widgets/injection-table.js.map +2 -2
  198. package/dist/modules/cpq/workflows/WizardRunner.js +10 -8
  199. package/dist/modules/cpq/workflows/WizardRunner.js.map +2 -2
  200. package/dist/modules/cpq/workflows/WizardTrigger.js +15 -9
  201. package/dist/modules/cpq/workflows/WizardTrigger.js.map +2 -2
  202. package/dist/modules/cpq/workflows/steps/CustomerSelectStep.js +9 -7
  203. package/dist/modules/cpq/workflows/steps/CustomerSelectStep.js.map +2 -2
  204. package/dist/modules/cpq/workflows/steps/InventorySelectStep.js +9 -4
  205. package/dist/modules/cpq/workflows/steps/InventorySelectStep.js.map +2 -2
  206. package/dist/modules/cpq/workflows/steps/ItemListStep.js +16 -19
  207. package/dist/modules/cpq/workflows/steps/ItemListStep.js.map +2 -2
  208. package/dist/modules/cpq/workflows/steps/OfferingSelectStep.js +19 -32
  209. package/dist/modules/cpq/workflows/steps/OfferingSelectStep.js.map +2 -2
  210. package/dist/modules/cpq/workflows/steps/ProductConfigureStep.js +8 -6
  211. package/dist/modules/cpq/workflows/steps/ProductConfigureStep.js.map +2 -2
  212. package/dist/modules/cpq/workflows/steps/ReviewStep.js +32 -30
  213. package/dist/modules/cpq/workflows/steps/ReviewStep.js.map +2 -2
  214. package/dist/modules/cpq/workflows/steps/index.js +12 -0
  215. package/dist/modules/cpq/workflows/steps/index.js.map +2 -2
  216. package/package.json +1 -1
  217. package/src/modules/cpq/__integration__/TC-CPQ-ARC-012.spec.ts +134 -0
  218. package/src/modules/cpq/__tests__/i18n/dictionaries.test.ts +62 -0
  219. package/src/modules/cpq/__tests__/i18n/hardcodedStrings.test.ts +35 -0
  220. package/src/modules/cpq/__tests__/i18n/sourceScan.ts +109 -0
  221. package/src/modules/cpq/acl.ts +1 -0
  222. package/src/modules/cpq/api/__tests__/adjustmentRoutes.test.ts +79 -0
  223. package/src/modules/cpq/api/__tests__/quoteWriteGuards.test.ts +100 -0
  224. package/src/modules/cpq/api/_helpers/__tests__/quoteMutationGuard.test.ts +48 -0
  225. package/src/modules/cpq/api/_helpers/adjustmentCommandRoute.ts +45 -0
  226. package/src/modules/cpq/api/_helpers/quoteMutationGuard.ts +38 -0
  227. package/src/modules/cpq/api/_helpers/quoteRouteOpenApi.ts +19 -0
  228. package/src/modules/cpq/api/orders/[orderId]/route.ts +18 -0
  229. package/src/modules/cpq/api/orders/route.ts +51 -1
  230. package/src/modules/cpq/api/quotes/[quoteId]/items/[lineId]/restore/route.ts +56 -0
  231. package/src/modules/cpq/api/quotes/[quoteId]/items/[lineId]/route.ts +48 -1
  232. package/src/modules/cpq/api/quotes/[quoteId]/items/route.ts +31 -1
  233. package/src/modules/cpq/api/quotes/[quoteId]/price-adjustments/[adjustmentId]/route.ts +39 -0
  234. package/src/modules/cpq/api/quotes/[quoteId]/price-adjustments/preview/route.ts +24 -0
  235. package/src/modules/cpq/api/quotes/[quoteId]/price-adjustments/route.ts +40 -0
  236. package/src/modules/cpq/api/quotes/[quoteId]/recalculate/__tests__/route.test.ts +95 -0
  237. package/src/modules/cpq/api/quotes/[quoteId]/recalculate/route.ts +40 -1
  238. package/src/modules/cpq/api/quotes/[quoteId]/status/__tests__/route.test.ts +74 -0
  239. package/src/modules/cpq/api/quotes/[quoteId]/status/route.ts +37 -1
  240. package/src/modules/cpq/api/quotes/price/__tests__/route.test.ts +37 -0
  241. package/src/modules/cpq/api/quotes/price/route.ts +28 -2
  242. package/src/modules/cpq/backend/cpq/inventory/AssetsTable.tsx +3 -9
  243. package/src/modules/cpq/backend/cpq/inventory/SubscriptionsTable.tsx +22 -26
  244. package/src/modules/cpq/backend/cpq/inventory/assets/[id]/page.meta.ts +1 -1
  245. package/src/modules/cpq/backend/cpq/inventory/assets/[id]/page.tsx +43 -46
  246. package/src/modules/cpq/backend/cpq/inventory/page.meta.ts +3 -3
  247. package/src/modules/cpq/backend/cpq/inventory/shared.tsx +37 -1
  248. package/src/modules/cpq/backend/cpq/inventory/subscriptions/[id]/page.meta.ts +1 -1
  249. package/src/modules/cpq/backend/cpq/inventory/subscriptions/[id]/page.tsx +164 -120
  250. package/src/modules/cpq/backend/cpq/offerings/[id]/page.tsx +169 -130
  251. package/src/modules/cpq/backend/cpq/offerings/page.tsx +34 -24
  252. package/src/modules/cpq/backend/cpq/orders/[id]/page.tsx +122 -308
  253. package/src/modules/cpq/backend/cpq/orders/page.meta.ts +1 -1
  254. package/src/modules/cpq/backend/cpq/orders/page.tsx +6 -6
  255. package/src/modules/cpq/backend/cpq/price-rules/PriceRuleForm.tsx +48 -34
  256. package/src/modules/cpq/backend/cpq/price-rules/[id]/page.meta.ts +1 -1
  257. package/src/modules/cpq/backend/cpq/price-rules/[id]/page.tsx +76 -70
  258. package/src/modules/cpq/backend/cpq/price-rules/page.tsx +25 -16
  259. package/src/modules/cpq/backend/cpq/pricing/[id]/EntriesEditor.tsx +24 -18
  260. package/src/modules/cpq/backend/cpq/pricing/[id]/ImportPreview.tsx +29 -19
  261. package/src/modules/cpq/backend/cpq/pricing/[id]/page.tsx +95 -47
  262. package/src/modules/cpq/backend/cpq/pricing/[id]/xlsxImport.ts +23 -15
  263. package/src/modules/cpq/backend/cpq/pricing/page.tsx +1 -1
  264. package/src/modules/cpq/backend/cpq/quotes/[id]/_components/ArcQuoteConfigurator.tsx +111 -88
  265. package/src/modules/cpq/backend/cpq/quotes/[id]/_components/PriceAdjustmentDialog.tsx +260 -0
  266. package/src/modules/cpq/backend/cpq/quotes/[id]/_components/PriceAdjustmentsPanel.tsx +124 -0
  267. package/src/modules/cpq/backend/cpq/quotes/[id]/_components/__tests__/PriceAdjustmentsPanel.test.tsx +76 -0
  268. package/src/modules/cpq/backend/cpq/quotes/[id]/_components/arcLineRemoval.tsx +76 -0
  269. package/src/modules/cpq/backend/cpq/quotes/[id]/_components/priceAdjustmentContext.tsx +133 -0
  270. package/src/modules/cpq/backend/cpq/quotes/[id]/_components/usePriceAdjustments.tsx +165 -0
  271. package/src/modules/cpq/backend/cpq/quotes/[id]/page.tsx +304 -348
  272. package/src/modules/cpq/backend/cpq/quotes/page.meta.ts +1 -1
  273. package/src/modules/cpq/backend/cpq/quotes/page.tsx +29 -21
  274. package/src/modules/cpq/backend/cpq/specifications/[id]/DependsOnRulesEditor.tsx +19 -15
  275. package/src/modules/cpq/backend/cpq/specifications/[id]/page.tsx +171 -171
  276. package/src/modules/cpq/backend/cpq/specifications/page.tsx +2 -2
  277. package/src/modules/cpq/backend/cpq/wizards/[definitionCode]/detail/page.tsx +51 -41
  278. package/src/modules/cpq/backend/cpq/wizards/[definitionCode]/page.tsx +17 -13
  279. package/src/modules/cpq/backend/cpq/wizards/page.tsx +1 -1
  280. package/src/modules/cpq/ce.ts +8 -0
  281. package/src/modules/cpq/cli.ts +48 -1
  282. package/src/modules/cpq/commands/__tests__/price-adjustments.test.ts +54 -0
  283. package/src/modules/cpq/commands/price-adjustments.ts +90 -0
  284. package/src/modules/cpq/components/ArcLineDiff.tsx +87 -0
  285. package/src/modules/cpq/components/ChargeBreakdownTable.tsx +203 -0
  286. package/src/modules/cpq/components/PriceWaterfall.tsx +96 -0
  287. package/src/modules/cpq/components/PricingSummaryCard.tsx +128 -0
  288. package/src/modules/cpq/components/StatusPath.tsx +7 -4
  289. package/src/modules/cpq/components/__tests__/PriceWaterfall.test.tsx +38 -0
  290. package/src/modules/cpq/components/useCpqRowActions.tsx +17 -25
  291. package/src/modules/cpq/components/useGrantedFeatures.ts +35 -0
  292. package/src/modules/cpq/data/__tests__/price-adjustment-migration.test.ts +11 -0
  293. package/src/modules/cpq/data/__tests__/price-adjustments.test.ts +26 -0
  294. package/src/modules/cpq/data/entities.ts +83 -0
  295. package/src/modules/cpq/data/price-adjustments.ts +67 -0
  296. package/src/modules/cpq/data/validators.ts +3 -0
  297. package/src/modules/cpq/di.ts +6 -0
  298. package/src/modules/cpq/events.ts +53 -2
  299. package/src/modules/cpq/i18n/de.json +1220 -0
  300. package/src/modules/cpq/i18n/en.json +1220 -0
  301. package/src/modules/cpq/i18n/es.json +1220 -0
  302. package/src/modules/cpq/i18n/pl.json +1220 -0
  303. package/src/modules/cpq/index.ts +1 -1
  304. package/src/modules/cpq/lib/__tests__/auditActor.test.ts +12 -0
  305. package/src/modules/cpq/lib/__tests__/priceAdjustmentDefaults.test.ts +37 -0
  306. package/src/modules/cpq/lib/__tests__/priceAdjustmentView.test.ts +152 -0
  307. package/src/modules/cpq/lib/__tests__/quotePermissions.test.ts +30 -0
  308. package/src/modules/cpq/lib/__tests__/quoteSummaryView.test.ts +56 -0
  309. package/src/modules/cpq/lib/auditActor.ts +13 -0
  310. package/src/modules/cpq/lib/formatMoney.ts +4 -0
  311. package/src/modules/cpq/lib/priceAdjustmentDefaults.ts +36 -0
  312. package/src/modules/cpq/lib/priceAdjustmentView.ts +259 -0
  313. package/src/modules/cpq/lib/quotePermissions.ts +22 -0
  314. package/src/modules/cpq/lib/quoteSummaryView.ts +51 -0
  315. package/src/modules/cpq/migrations/.snapshot-open-mercato.json +3298 -2423
  316. package/src/modules/cpq/migrations/Migration20261110213052.ts +22 -0
  317. package/src/modules/cpq/services/__tests__/_helpers/mockEm.ts +9 -2
  318. package/src/modules/cpq/services/__tests__/adjustmentService.test.ts +183 -0
  319. package/src/modules/cpq/services/__tests__/arcLineRemoval.test.ts +109 -0
  320. package/src/modules/cpq/services/__tests__/arcPriceFreeze.test.ts +141 -0
  321. package/src/modules/cpq/services/__tests__/chargeWaterfall.test.ts +28 -0
  322. package/src/modules/cpq/services/__tests__/cpqOrderService.test.ts +35 -2
  323. package/src/modules/cpq/services/__tests__/cpqPricingService.test.ts +57 -0
  324. package/src/modules/cpq/services/__tests__/cpqQuotingService.arc.test.ts +237 -0
  325. package/src/modules/cpq/services/__tests__/cpqQuotingService.test.ts +58 -3
  326. package/src/modules/cpq/services/__tests__/orderPricingSummary.test.ts +50 -0
  327. package/src/modules/cpq/services/__tests__/pricingSnapshot.test.ts +62 -0
  328. package/src/modules/cpq/services/__tests__/quoteAdjustmentLifecycle.test.ts +35 -0
  329. package/src/modules/cpq/services/__tests__/quoteAdjustmentPricing.test.ts +65 -0
  330. package/src/modules/cpq/services/__tests__/quoteCloneAdjustments.test.ts +45 -0
  331. package/src/modules/cpq/services/__tests__/quoteDetachTargetAdjustments.test.ts +54 -0
  332. package/src/modules/cpq/services/__tests__/quoteEventsService.test.ts +72 -0
  333. package/src/modules/cpq/services/__tests__/quotePricingEvents.test.ts +126 -0
  334. package/src/modules/cpq/services/__tests__/quotePricingIsolation.test.ts +52 -0
  335. package/src/modules/cpq/services/__tests__/quotePricingWrite.test.ts +74 -0
  336. package/src/modules/cpq/services/__tests__/resolveManualAdjustments.test.ts +90 -0
  337. package/src/modules/cpq/services/__tests__/storedAdjustmentFailure.test.ts +9 -0
  338. package/src/modules/cpq/services/arcLineRemoval.ts +87 -0
  339. package/src/modules/cpq/services/arcPriceFreeze.ts +165 -0
  340. package/src/modules/cpq/services/cpqOrderService.ts +22 -28
  341. package/src/modules/cpq/services/cpqPricingService.ts +8 -0
  342. package/src/modules/cpq/services/cpqQuotingService.ts +374 -125
  343. package/src/modules/cpq/services/orderPricingSummary.ts +47 -0
  344. package/src/modules/cpq/services/priceAdjustments/adjustmentService.ts +249 -0
  345. package/src/modules/cpq/services/priceAdjustments/chargeWaterfall.ts +28 -0
  346. package/src/modules/cpq/services/priceAdjustments/loadQuoteAdjustments.ts +25 -0
  347. package/src/modules/cpq/services/priceAdjustments/pricingSnapshot.ts +86 -0
  348. package/src/modules/cpq/services/priceAdjustments/quoteAdjustmentLifecycle.ts +68 -0
  349. package/src/modules/cpq/services/priceAdjustments/quotePricingEvents.ts +94 -0
  350. package/src/modules/cpq/services/priceAdjustments/quotePricingWrite.ts +51 -0
  351. package/src/modules/cpq/services/priceAdjustments/resolveManualAdjustments.ts +116 -0
  352. package/src/modules/cpq/services/priceAdjustments/storedAdjustmentFailure.ts +31 -0
  353. package/src/modules/cpq/services/types.ts +34 -1
  354. package/src/modules/cpq/setup.ts +7 -1
  355. package/src/modules/cpq/widgets/injection/customer-inventory/widget.client.tsx +38 -31
  356. package/src/modules/cpq/widgets/injection/order-cpq-tab/widget.client.tsx +7 -5
  357. package/src/modules/cpq/widgets/injection/quote-configurator/widget.client.tsx +36 -21
  358. package/src/modules/cpq/widgets/injection-table.ts +8 -2
  359. package/src/modules/cpq/workflows/WizardRunner.tsx +8 -5
  360. package/src/modules/cpq/workflows/WizardTrigger.tsx +15 -9
  361. package/src/modules/cpq/workflows/steps/CustomerSelectStep.tsx +11 -7
  362. package/src/modules/cpq/workflows/steps/InventorySelectStep.tsx +9 -5
  363. package/src/modules/cpq/workflows/steps/ItemListStep.tsx +18 -12
  364. package/src/modules/cpq/workflows/steps/OfferingSelectStep.tsx +20 -16
  365. package/src/modules/cpq/workflows/steps/ProductConfigureStep.tsx +8 -6
  366. package/src/modules/cpq/workflows/steps/ReviewStep.tsx +33 -18
  367. package/src/modules/cpq/workflows/steps/index.ts +12 -0
  368. package/src/modules/cpq/workflows/types.ts +4 -0
@@ -0,0 +1,1220 @@
1
+ {
2
+ "cpq.arc.diff.after": "Nachher",
3
+ "cpq.arc.diff.before": "Vorher",
4
+ "cpq.arc.diff.cancelNote": "Kündigung — die Position wird bei Aktivierung beendet.",
5
+ "cpq.arc.diff.mrc": "MRC",
6
+ "cpq.arc.diff.nrc": "NRC",
7
+ "cpq.arc.diff.quantity": "Menge",
8
+ "cpq.arc.diff.title": "Änderungsvorschau",
9
+ "cpq.charges.charge": "Gebühr",
10
+ "cpq.charges.finalTotal": "Endsumme",
11
+ "cpq.charges.pricePerUnit": "Preis/Einheit",
12
+ "cpq.charges.pricingDetailsFor": "Preisdetails — {name}",
13
+ "cpq.charges.qty": "Menge",
14
+ "cpq.charges.range": "Bereich",
15
+ "cpq.charges.subtotal": "Zwischensumme",
16
+ "cpq.charges.tier": "Staffel",
17
+ "cpq.charges.tierBreakdown": "Aufschlüsselung nach Staffeln",
18
+ "cpq.charges.tieredTotal": "Staffelsumme",
19
+ "cpq.charges.total": "Gesamt",
20
+ "cpq.charges.type": "Art",
21
+ "cpq.common.active": "Aktiv",
22
+ "cpq.common.back": "Zurück",
23
+ "cpq.common.cancel": "Abbrechen",
24
+ "cpq.common.delete": "Löschen",
25
+ "cpq.common.dismiss": "Schließen",
26
+ "cpq.common.edit": "Bearbeiten",
27
+ "cpq.common.inactive": "Inaktiv",
28
+ "cpq.common.loading": "Wird geladen...",
29
+ "cpq.common.no": "Nein",
30
+ "cpq.common.requestFailed": "Anfrage fehlgeschlagen ({status})",
31
+ "cpq.common.save": "Speichern",
32
+ "cpq.common.saving": "Wird gespeichert...",
33
+ "cpq.common.yes": "Ja",
34
+ "cpq.inventory.actions.refresh": "Aktualisieren",
35
+ "cpq.inventory.assets": "Assets",
36
+ "cpq.inventory.assets.detail.breadcrumb": "Asset-Details",
37
+ "cpq.inventory.assets.detail.charges.charge": "Gebühr",
38
+ "cpq.inventory.assets.detail.charges.qty": "Menge",
39
+ "cpq.inventory.assets.detail.charges.total": "Gesamt",
40
+ "cpq.inventory.assets.detail.charges.type": "Art",
41
+ "cpq.inventory.assets.detail.charges.unitPrice": "Stückpreis",
42
+ "cpq.inventory.assets.detail.entityType": "Asset",
43
+ "cpq.inventory.assets.detail.error.notFound": "Asset nicht gefunden",
44
+ "cpq.inventory.assets.detail.error.transitionFailed": "Statuswechsel fehlgeschlagen",
45
+ "cpq.inventory.assets.detail.fields.assetType": "Asset-Typ",
46
+ "cpq.inventory.assets.detail.fields.code": "Code",
47
+ "cpq.inventory.assets.detail.fields.created": "Erstellt",
48
+ "cpq.inventory.assets.detail.fields.currency": "Währung",
49
+ "cpq.inventory.assets.detail.fields.customer": "Kunde",
50
+ "cpq.inventory.assets.detail.fields.deliveryDate": "Lieferdatum",
51
+ "cpq.inventory.assets.detail.fields.description": "Beschreibung",
52
+ "cpq.inventory.assets.detail.fields.linkedSubscription": "Verknüpftes Abonnement",
53
+ "cpq.inventory.assets.detail.fields.offering": "Produktangebot",
54
+ "cpq.inventory.assets.detail.fields.product": "Produkt",
55
+ "cpq.inventory.assets.detail.fields.purchaseDate": "Kaufdatum",
56
+ "cpq.inventory.assets.detail.fields.purchasePrice": "Kaufpreis",
57
+ "cpq.inventory.assets.detail.fields.quantity": "Menge",
58
+ "cpq.inventory.assets.detail.fields.sourceOrder": "Ursprungsbestellung",
59
+ "cpq.inventory.assets.detail.fields.sourceQuote": "Ursprungsangebot",
60
+ "cpq.inventory.assets.detail.fields.specification": "Spezifikation",
61
+ "cpq.inventory.assets.detail.fields.status": "Status",
62
+ "cpq.inventory.assets.detail.loading": "Wird geladen…",
63
+ "cpq.inventory.assets.detail.notFound": "Asset nicht gefunden.",
64
+ "cpq.inventory.assets.detail.sections.charges": "Gebühren",
65
+ "cpq.inventory.assets.detail.sections.configuration": "Konfiguration",
66
+ "cpq.inventory.assets.detail.sections.details": "Asset-Details",
67
+ "cpq.inventory.assets.detail.sections.metadata": "Metadaten",
68
+ "cpq.inventory.assets.detail.sections.pricing": "Preise & Referenzen",
69
+ "cpq.inventory.assets.detail.statusPath": "Asset-Statuspfad",
70
+ "cpq.inventory.assets.empty": "Keine Assets gefunden.",
71
+ "cpq.inventory.assets.entityName": "Asset",
72
+ "cpq.inventory.assets.error.load": "Assets konnten nicht geladen werden",
73
+ "cpq.inventory.assets.search.placeholder": "Assets suchen...",
74
+ "cpq.inventory.assets.table.code": "Code",
75
+ "cpq.inventory.assets.table.created": "Erstellt",
76
+ "cpq.inventory.assets.table.name": "Name",
77
+ "cpq.inventory.assets.table.price": "Preis",
78
+ "cpq.inventory.assets.table.status": "Status",
79
+ "cpq.inventory.assets.table.type": "Typ",
80
+ "cpq.inventory.detail.backToInventory": "Zurück zum Kundenbestand",
81
+ "cpq.inventory.filters.assetType": "Asset-Typ",
82
+ "cpq.inventory.filters.billingCycle": "Abrechnungszyklus",
83
+ "cpq.inventory.filters.days14": "14 Tage",
84
+ "cpq.inventory.filters.days30": "30 Tage",
85
+ "cpq.inventory.filters.days60": "60 Tage",
86
+ "cpq.inventory.filters.days7": "7 Tage",
87
+ "cpq.inventory.filters.days90": "90 Tage",
88
+ "cpq.inventory.filters.expiringWithinDays": "Läuft ab innerhalb von (Tagen)",
89
+ "cpq.inventory.filters.status": "Status",
90
+ "cpq.inventory.nav.title": "CPQ-Abonnements",
91
+ "cpq.inventory.status.active": "Aktiv",
92
+ "cpq.inventory.status.cancelled": "Gekündigt",
93
+ "cpq.inventory.status.delivered": "Geliefert",
94
+ "cpq.inventory.status.expired": "Abgelaufen",
95
+ "cpq.inventory.status.pending": "Ausstehend",
96
+ "cpq.inventory.status.returned": "Zurückgegeben",
97
+ "cpq.inventory.status.suspended": "Ausgesetzt",
98
+ "cpq.inventory.status.terminated": "Beendet",
99
+ "cpq.inventory.subscriptions": "Abonnements",
100
+ "cpq.inventory.subscriptions.detail.arc.amend": "Ändern",
101
+ "cpq.inventory.subscriptions.detail.arc.cancel": "Kündigen",
102
+ "cpq.inventory.subscriptions.detail.arc.existingQuoteConfirm": "{error}\n\nDas bestehende Angebot jetzt öffnen?",
103
+ "cpq.inventory.subscriptions.detail.arc.existingQuoteInProgress": "Für dieses Abonnement ist bereits ein anderes ARC-Angebot in Bearbeitung.",
104
+ "cpq.inventory.subscriptions.detail.arc.renew": "Verlängern",
105
+ "cpq.inventory.subscriptions.detail.arc.startFailed": "Angebot ({type}) konnte nicht gestartet werden: {error}",
106
+ "cpq.inventory.subscriptions.detail.assets.empty": "Mit diesem Abonnement sind keine Assets verknüpft.",
107
+ "cpq.inventory.subscriptions.detail.assets.table.code": "Code",
108
+ "cpq.inventory.subscriptions.detail.assets.table.name": "Name",
109
+ "cpq.inventory.subscriptions.detail.assets.table.price": "Preis",
110
+ "cpq.inventory.subscriptions.detail.assets.table.qty": "Menge",
111
+ "cpq.inventory.subscriptions.detail.assets.table.status": "Status",
112
+ "cpq.inventory.subscriptions.detail.assets.table.type": "Typ",
113
+ "cpq.inventory.subscriptions.detail.assets.title": "Verknüpfte Assets ({count})",
114
+ "cpq.inventory.subscriptions.detail.breadcrumb": "Abonnementdetails",
115
+ "cpq.inventory.subscriptions.detail.changeLog.action.add": "hinzugefügt",
116
+ "cpq.inventory.subscriptions.detail.changeLog.action.cancel": "entfernt",
117
+ "cpq.inventory.subscriptions.detail.changeLog.action.modify": "geändert",
118
+ "cpq.inventory.subscriptions.detail.changeLog.deltaPerMonth": "({delta}/Monat)",
119
+ "cpq.inventory.subscriptions.detail.changeLog.empty": "Noch keine ARC-Änderungen.",
120
+ "cpq.inventory.subscriptions.detail.changeLog.etf": "ETF: {amount} {currency}",
121
+ "cpq.inventory.subscriptions.detail.changeLog.item": "Position",
122
+ "cpq.inventory.subscriptions.detail.changeLog.mergedFrom": "Zusammengeführt aus {count} Abonnements",
123
+ "cpq.inventory.subscriptions.detail.changeLog.mergedInto": "Zusammengeführt in",
124
+ "cpq.inventory.subscriptions.detail.changeLog.mergedIntoSubscription": "Abonnement {id}…",
125
+ "cpq.inventory.subscriptions.detail.changeLog.newItem": "Neue Position",
126
+ "cpq.inventory.subscriptions.detail.changeLog.noItemChanges": "Keine Änderungen auf Positionsebene erfasst.",
127
+ "cpq.inventory.subscriptions.detail.changeLog.noPriceChange": "keine Preisänderung",
128
+ "cpq.inventory.subscriptions.detail.changeLog.order": "Bestellung {number}",
129
+ "cpq.inventory.subscriptions.detail.changeLog.priceChangePerMonth": "{before} → {after}/Monat",
130
+ "cpq.inventory.subscriptions.detail.changeLog.pricePerMonth": "{price}/Monat",
131
+ "cpq.inventory.subscriptions.detail.changeLog.quote": "Angebot {number}",
132
+ "cpq.inventory.subscriptions.detail.changeLog.reason": "Grund: {code}",
133
+ "cpq.inventory.subscriptions.detail.changeLog.reasonWithText": "Grund: {code} — {text}",
134
+ "cpq.inventory.subscriptions.detail.changeLog.term": "Laufzeit: {from} → {to}",
135
+ "cpq.inventory.subscriptions.detail.changeLog.title": "Änderungsverlauf ({count})",
136
+ "cpq.inventory.subscriptions.detail.changeLog.wasPricePerMonth": "vorher {price}/Monat",
137
+ "cpq.inventory.subscriptions.detail.changeType.amend": "Geändert",
138
+ "cpq.inventory.subscriptions.detail.changeType.cancel": "Gekündigt",
139
+ "cpq.inventory.subscriptions.detail.changeType.created": "Erstellt",
140
+ "cpq.inventory.subscriptions.detail.changeType.mergeResult": "Durch Zusammenführung von Verträgen erstellt",
141
+ "cpq.inventory.subscriptions.detail.changeType.mergeSource": "In einen neuen Vertrag zusammengeführt",
142
+ "cpq.inventory.subscriptions.detail.changeType.renew": "Verlängert",
143
+ "cpq.inventory.subscriptions.detail.charges.charge": "Gebühr",
144
+ "cpq.inventory.subscriptions.detail.charges.list": "Listenpreis",
145
+ "cpq.inventory.subscriptions.detail.charges.offer": "Angebotspreis",
146
+ "cpq.inventory.subscriptions.detail.charges.qty": "Menge",
147
+ "cpq.inventory.subscriptions.detail.charges.total": "Gesamt",
148
+ "cpq.inventory.subscriptions.detail.charges.type": "Art",
149
+ "cpq.inventory.subscriptions.detail.entityType": "Abonnement",
150
+ "cpq.inventory.subscriptions.detail.error.notFound": "Abonnement nicht gefunden",
151
+ "cpq.inventory.subscriptions.detail.error.transitionFailed": "Statuswechsel fehlgeschlagen",
152
+ "cpq.inventory.subscriptions.detail.fields.activated": "Aktiviert",
153
+ "cpq.inventory.subscriptions.detail.fields.autoRenew": "Automatische Verlängerung",
154
+ "cpq.inventory.subscriptions.detail.fields.billingCycle": "Abrechnungszyklus",
155
+ "cpq.inventory.subscriptions.detail.fields.capacity": "Kapazität",
156
+ "cpq.inventory.subscriptions.detail.fields.code": "Code",
157
+ "cpq.inventory.subscriptions.detail.fields.created": "Erstellt",
158
+ "cpq.inventory.subscriptions.detail.fields.currency": "Währung",
159
+ "cpq.inventory.subscriptions.detail.fields.customer": "Kunde",
160
+ "cpq.inventory.subscriptions.detail.fields.description": "Beschreibung",
161
+ "cpq.inventory.subscriptions.detail.fields.mrc": "Monatliche Gebühr (MRC)",
162
+ "cpq.inventory.subscriptions.detail.fields.nrc": "Einmalige Gebühr (NRC)",
163
+ "cpq.inventory.subscriptions.detail.fields.offering": "Produktangebot",
164
+ "cpq.inventory.subscriptions.detail.fields.product": "Produkt",
165
+ "cpq.inventory.subscriptions.detail.fields.quantity": "Menge",
166
+ "cpq.inventory.subscriptions.detail.fields.sourceOrder": "Ursprungsbestellung",
167
+ "cpq.inventory.subscriptions.detail.fields.sourceQuote": "Ursprungsangebot",
168
+ "cpq.inventory.subscriptions.detail.fields.specification": "Spezifikation",
169
+ "cpq.inventory.subscriptions.detail.fields.startDate": "Startdatum",
170
+ "cpq.inventory.subscriptions.detail.fields.status": "Status",
171
+ "cpq.inventory.subscriptions.detail.fields.suspended": "Ausgesetzt",
172
+ "cpq.inventory.subscriptions.detail.fields.term": "Laufzeit",
173
+ "cpq.inventory.subscriptions.detail.fields.termEnd": "Laufzeitende",
174
+ "cpq.inventory.subscriptions.detail.fields.termMonths": "{count} Monate",
175
+ "cpq.inventory.subscriptions.detail.fields.terminated": "Beendet",
176
+ "cpq.inventory.subscriptions.detail.items.charges": "Gebühren",
177
+ "cpq.inventory.subscriptions.detail.items.configuration": "Konfiguration",
178
+ "cpq.inventory.subscriptions.detail.items.createdAt": "Erstellt: {date}",
179
+ "cpq.inventory.subscriptions.detail.items.empty": "Keine Positionen.",
180
+ "cpq.inventory.subscriptions.detail.items.metadata": "Metadaten",
181
+ "cpq.inventory.subscriptions.detail.items.mrc": "MRC",
182
+ "cpq.inventory.subscriptions.detail.items.nrc": "NRC",
183
+ "cpq.inventory.subscriptions.detail.items.title": "Abonnementpositionen ({count})",
184
+ "cpq.inventory.subscriptions.detail.items.updatedAt": "Aktualisiert: {date}",
185
+ "cpq.inventory.subscriptions.detail.loading": "Wird geladen…",
186
+ "cpq.inventory.subscriptions.detail.notFound": "Abonnement nicht gefunden.",
187
+ "cpq.inventory.subscriptions.detail.sections.details": "Abonnementdetails",
188
+ "cpq.inventory.subscriptions.detail.sections.metadata": "Metadaten",
189
+ "cpq.inventory.subscriptions.detail.sections.pricing": "Preise & Referenzen",
190
+ "cpq.inventory.subscriptions.detail.statusPath": "Abonnement-Statuspfad",
191
+ "cpq.inventory.subscriptions.empty": "Keine Abonnements gefunden.",
192
+ "cpq.inventory.subscriptions.entityName": "Abonnement",
193
+ "cpq.inventory.subscriptions.error.load": "Abonnements konnten nicht geladen werden",
194
+ "cpq.inventory.subscriptions.expiring.all": "Alle Abonnements",
195
+ "cpq.inventory.subscriptions.expiring.in14Days": "Läuft in 14 Tagen ab",
196
+ "cpq.inventory.subscriptions.expiring.in30Days": "Läuft in 30 Tagen ab",
197
+ "cpq.inventory.subscriptions.expiring.in60Days": "Läuft in 60 Tagen ab",
198
+ "cpq.inventory.subscriptions.expiring.in7Days": "Läuft in 7 Tagen ab",
199
+ "cpq.inventory.subscriptions.expiring.in90Days": "Läuft in 90 Tagen ab",
200
+ "cpq.inventory.subscriptions.search.placeholder": "Abonnements suchen...",
201
+ "cpq.inventory.subscriptions.table.billing": "Abrechnung",
202
+ "cpq.inventory.subscriptions.table.code": "Code",
203
+ "cpq.inventory.subscriptions.table.mrc": "MRC",
204
+ "cpq.inventory.subscriptions.table.name": "Name",
205
+ "cpq.inventory.subscriptions.table.startDate": "Startdatum",
206
+ "cpq.inventory.subscriptions.table.status": "Status",
207
+ "cpq.inventory.subscriptions.table.termEnd": "Laufzeitende",
208
+ "cpq.inventory.title": "Kundenbestand",
209
+ "cpq.lines.bundle": "Bundle",
210
+ "cpq.lines.bundleComponents": "Bundle-Komponenten ({count})",
211
+ "cpq.lines.chargeType.mrc": "mrc",
212
+ "cpq.lines.chargeType.nrc": "nrc",
213
+ "cpq.lines.chargeType.usage": "Nutzung",
214
+ "cpq.lines.componentCount.one": "{count} Komponente",
215
+ "cpq.lines.componentCount.other": "{count} Komponenten",
216
+ "cpq.lines.configuration": "Konfiguration",
217
+ "cpq.lines.mrc": "MRC",
218
+ "cpq.lines.nrc": "NRC",
219
+ "cpq.lines.perUnit": "{price}/Einheit",
220
+ "cpq.lines.term.end": "Ende: {date}",
221
+ "cpq.lines.term.months": "Laufzeit: {months} Mon.",
222
+ "cpq.lines.term.start": "Beginn: {date}",
223
+ "cpq.list.actions.refresh": "Aktualisieren",
224
+ "cpq.list.bulk.deleteSelected": "Ausgewählte löschen",
225
+ "cpq.list.error.load": "Laden fehlgeschlagen",
226
+ "cpq.list.search.placeholder": "Suchen...",
227
+ "cpq.offerings.add": "Neues Produktangebot",
228
+ "cpq.offerings.addCharge": "Gebühr hinzufügen",
229
+ "cpq.offerings.bulk.addCharge": "Gebühr hinzufügen",
230
+ "cpq.offerings.bulk.error.saveChargeFor": "Gebühr für {name} konnte nicht gespeichert werden",
231
+ "cpq.offerings.bulk.error.saveCharges": "Gebühren konnten nicht gespeichert werden",
232
+ "cpq.offerings.bulk.fields.code": "Code",
233
+ "cpq.offerings.bulk.fields.codePlaceholder": "z. B. mrc-monthly",
234
+ "cpq.offerings.bulk.fields.currency": "Währung",
235
+ "cpq.offerings.bulk.fields.description": "Beschreibung",
236
+ "cpq.offerings.bulk.fields.descriptionPlaceholder": "Für Kunden sichtbare Gebührenbeschreibung",
237
+ "cpq.offerings.bulk.fields.name": "Name",
238
+ "cpq.offerings.bulk.fields.namePlaceholder": "z. B. Monatliche Gebühr",
239
+ "cpq.offerings.bulk.fields.type": "Art",
240
+ "cpq.offerings.bulk.formTitle": "Neue Pauschalgebühr für",
241
+ "cpq.offerings.bulk.notice.flatOnly": "nur Pauschalpreise",
242
+ "cpq.offerings.bulk.notice.for": ". Für",
243
+ "cpq.offerings.bulk.notice.or": "oder",
244
+ "cpq.offerings.bulk.notice.perUnit": "Einheitspreise",
245
+ "cpq.offerings.bulk.notice.rest": "öffnen Sie jedes Produktangebot einzeln — diese Methoden benötigen eine Preistabelle und ein numerisches Attribut aus der Spezifikation des Produktangebots, die sich meist zwischen Produktangeboten unterscheidet.",
246
+ "cpq.offerings.bulk.notice.supports": "Die Massenerstellung unterstützt",
247
+ "cpq.offerings.bulk.notice.tiered": "Staffelpreise",
248
+ "cpq.offerings.bulk.offeringsPlural": "Produktangebote",
249
+ "cpq.offerings.bulk.offeringsSingular": "Produktangebot",
250
+ "cpq.offerings.bulk.submitPlural": "Gebühr für {count} Produktangebote erstellen",
251
+ "cpq.offerings.bulk.submitSingular": "Gebühr für {count} Produktangebot erstellen",
252
+ "cpq.offerings.bulk.table.offering": "Produktangebot",
253
+ "cpq.offerings.bulk.table.price": "Preis ({currency})",
254
+ "cpq.offerings.charge.fields.chargeModel": "Gebührenmodell",
255
+ "cpq.offerings.charge.fields.chargeType": "Gebührenart",
256
+ "cpq.offerings.charge.fields.code": "Code",
257
+ "cpq.offerings.charge.fields.codePlaceholder": "z. B. mrc-monthly",
258
+ "cpq.offerings.charge.fields.currency": "Währung",
259
+ "cpq.offerings.charge.fields.description": "Beschreibung",
260
+ "cpq.offerings.charge.fields.fixedPrice": "Festpreis",
261
+ "cpq.offerings.charge.fields.name": "Name",
262
+ "cpq.offerings.charge.fields.priceColumn": "Preisspalte",
263
+ "cpq.offerings.charge.fields.pricingMethod": "Preisermittlung",
264
+ "cpq.offerings.charge.fields.pricingTable": "Preistabelle",
265
+ "cpq.offerings.charge.fields.quantityAttribute": "Mengenattribut",
266
+ "cpq.offerings.charge.fields.quantityAttributeHelp": "Attribut, dessen Wert die Menge für die Preisberechnung bestimmt",
267
+ "cpq.offerings.charge.fields.selectAttribute": "Attribut auswählen...",
268
+ "cpq.offerings.charge.fields.selectColumn": "Spalte auswählen...",
269
+ "cpq.offerings.charge.fields.selectTable": "Tabelle auswählen...",
270
+ "cpq.offerings.charge.fields.sortOrder": "Sortierreihenfolge",
271
+ "cpq.offerings.charge.form.editTitle": "Gebühr bearbeiten",
272
+ "cpq.offerings.charge.form.newTitle": "Neue Gebühr",
273
+ "cpq.offerings.charge.missingFieldsPlural": "Fehlende Pflichtfelder für die Preisermittlung „{method}“: {fields}",
274
+ "cpq.offerings.charge.missingFieldsSingular": "Fehlendes Pflichtfeld für die Preisermittlung „{method}“: {fields}",
275
+ "cpq.offerings.charge.noNumberAttributes.link": "in der Spezifikation",
276
+ "cpq.offerings.charge.noNumberAttributes.prefix": "Die Spezifikation hat keine Zahlenattribute —",
277
+ "cpq.offerings.charge.noNumberAttributes.suffix": "zuerst eines hinzufügen.",
278
+ "cpq.offerings.charge.noPricingTables.link": "erstellen Sie eine,",
279
+ "cpq.offerings.charge.noPricingTables.prefix": "Noch keine Preistabellen —",
280
+ "cpq.offerings.charge.noPricingTables.suffix": "bevor Sie die Preisermittlung per Tabellensuche verwenden.",
281
+ "cpq.offerings.chargeModel.flat": "Pauschalgebühr",
282
+ "cpq.offerings.chargeModel.perUnit": "Pro Einheit",
283
+ "cpq.offerings.chargeModel.tiered": "Gestaffelt",
284
+ "cpq.offerings.chargeModel.volume": "Volumenbasiert",
285
+ "cpq.offerings.chargeType.mrc": "MRC (Monatliche Gebühr)",
286
+ "cpq.offerings.chargeType.nrc": "NRC (Einmalige Gebühr)",
287
+ "cpq.offerings.chargeType.usage": "Nutzung",
288
+ "cpq.offerings.charges": "Gebühren",
289
+ "cpq.offerings.charges.columns.actions": "Aktionen",
290
+ "cpq.offerings.charges.columns.active": "Aktiv",
291
+ "cpq.offerings.charges.columns.code": "Code",
292
+ "cpq.offerings.charges.columns.name": "Name",
293
+ "cpq.offerings.charges.columns.price": "Preis",
294
+ "cpq.offerings.charges.columns.pricing": "Preisermittlung",
295
+ "cpq.offerings.charges.columns.type": "Art",
296
+ "cpq.offerings.charges.empty": "Keine Gebühren definiert. Fügen Sie diesem Produktangebot wiederkehrende, einmalige oder nutzungsabhängige Gebühren hinzu.",
297
+ "cpq.offerings.charges.incomplete": "Unvollständig",
298
+ "cpq.offerings.charges.missing": "fehlt",
299
+ "cpq.offerings.charges.qtyLabel": "× Menge:",
300
+ "cpq.offerings.charges.tableLabel": "Tabelle:",
301
+ "cpq.offerings.code": "Code",
302
+ "cpq.offerings.components.add": "+ Komponente hinzufügen",
303
+ "cpq.offerings.components.addSubmit": "Hinzufügen",
304
+ "cpq.offerings.components.adding": "Wird hinzugefügt...",
305
+ "cpq.offerings.components.bundleSuffix": " [Bundle]",
306
+ "cpq.offerings.components.columns.actions": "Aktionen",
307
+ "cpq.offerings.components.columns.code": "Code",
308
+ "cpq.offerings.components.columns.default": "Standard",
309
+ "cpq.offerings.components.columns.offering": "Produktangebot",
310
+ "cpq.offerings.components.columns.type": "Typ",
311
+ "cpq.offerings.components.confirmRemove": "Diese Komponente aus dem Bundle entfernen?",
312
+ "cpq.offerings.components.emptySlot": "Diesem Slot sind keine Komponenten zugeordnet",
313
+ "cpq.offerings.components.error.add": "Komponente konnte nicht hinzugefügt werden",
314
+ "cpq.offerings.components.error.remove": "Entfernen fehlgeschlagen",
315
+ "cpq.offerings.components.error.removeComponent": "Komponente konnte nicht entfernt werden",
316
+ "cpq.offerings.components.fields.componentOffering": "Komponenten-Produktangebot",
317
+ "cpq.offerings.components.fields.isDefault": "Standard?",
318
+ "cpq.offerings.components.fields.isDefaultHelp": "Im Angebot vorausgewählt",
319
+ "cpq.offerings.components.fields.selectOffering": "— Produktangebot auswählen —",
320
+ "cpq.offerings.components.noSlots": "Für diese Spezifikation sind keine Bundle-Slots definiert. Fügen Sie zuerst Slots in der Spezifikation hinzu.",
321
+ "cpq.offerings.components.remove": "Entfernen",
322
+ "cpq.offerings.components.requiredMin": "(erforderlich: mind. {min})",
323
+ "cpq.offerings.components.tag.bundle": "Bundle",
324
+ "cpq.offerings.components.tag.simple": "einfach",
325
+ "cpq.offerings.components.unknown": "Unbekannt",
326
+ "cpq.offerings.confirmDelete": "Dieses Produktangebot und alle zugehörigen Gebühren löschen?",
327
+ "cpq.offerings.description": "Beschreibung",
328
+ "cpq.offerings.detail.codePlaceholder": "z. B. gix-cloud-connect-aws",
329
+ "cpq.offerings.detail.confirmDeleteCharge": "Diese Gebühr löschen?",
330
+ "cpq.offerings.detail.designTimeValues": "Design-Time-Werte",
331
+ "cpq.offerings.detail.error.delete": "Löschen fehlgeschlagen",
332
+ "cpq.offerings.detail.error.deleteCharge": "Gebühr konnte nicht gelöscht werden",
333
+ "cpq.offerings.detail.error.load": "Produktangebot konnte nicht geladen werden",
334
+ "cpq.offerings.detail.error.loadGeneric": "Laden fehlgeschlagen",
335
+ "cpq.offerings.detail.error.save": "Speichern fehlgeschlagen",
336
+ "cpq.offerings.detail.error.saveCharge": "Gebühr konnte nicht gespeichert werden",
337
+ "cpq.offerings.detail.selectAttribute": "{name} auswählen...",
338
+ "cpq.offerings.detail.selectSpecification": "Spezifikation auswählen...",
339
+ "cpq.offerings.detail.specLabel": "Spezifikation:",
340
+ "cpq.offerings.detail.specification": "Spezifikation",
341
+ "cpq.offerings.detail.tabs.charges": "Gebühren ({count})",
342
+ "cpq.offerings.detail.tabs.components": "Komponenten ({count})",
343
+ "cpq.offerings.detail.tabs.general": "Allgemein",
344
+ "cpq.offerings.empty": "Keine Produktangebote gefunden. Erstellen Sie eines, um eine verkaufsfähige Variante einer Produktspezifikation zu definieren.",
345
+ "cpq.offerings.entityName": "Produktangebot",
346
+ "cpq.offerings.filters.isActive": "Aktiv",
347
+ "cpq.offerings.filters.lifecycleStatus": "Lebenszyklusstatus",
348
+ "cpq.offerings.filters.offeringType": "Typ",
349
+ "cpq.offerings.flash.chargesCreated": "Gebühren erstellt",
350
+ "cpq.offerings.isActive": "Aktiv?",
351
+ "cpq.offerings.lifecycle.active": "Aktiv",
352
+ "cpq.offerings.lifecycle.deprecated": "Veraltet",
353
+ "cpq.offerings.lifecycle.draft": "Entwurf",
354
+ "cpq.offerings.lifecycleStatus": "Lebenszyklusstatus",
355
+ "cpq.offerings.list.chargePopover.pricing": "Preisermittlung: {method}",
356
+ "cpq.offerings.list.error.load": "Produktangebote konnten nicht geladen werden",
357
+ "cpq.offerings.list.tag.bundle": "Bundle",
358
+ "cpq.offerings.list.title": "Produktangebote",
359
+ "cpq.offerings.name": "Name",
360
+ "cpq.offerings.new": "Neues Produktangebot",
361
+ "cpq.offerings.pricingMethod.fixed": "Festpreis",
362
+ "cpq.offerings.pricingMethod.table": "Tabellensuche",
363
+ "cpq.offerings.search.placeholder": "Produktangebote suchen...",
364
+ "cpq.offerings.type.bundle": "Bundle",
365
+ "cpq.offerings.type.simple": "Einfach",
366
+ "cpq.orders.actions.open": "Öffnen",
367
+ "cpq.orders.detail.activate": "Aktivieren",
368
+ "cpq.orders.detail.activatedOn": "Aktiviert am {date}",
369
+ "cpq.orders.detail.backLabel": "Zurück zu CPQ-Bestellungen",
370
+ "cpq.orders.detail.backToOrders": "← Zurück zu Bestellungen",
371
+ "cpq.orders.detail.entityType": "CPQ-Bestellung",
372
+ "cpq.orders.detail.lineItems": "Positionen ({count})",
373
+ "cpq.orders.detail.linkedSubscription": "Verknüpftes Abonnement",
374
+ "cpq.orders.detail.loading": "Wird geladen…",
375
+ "cpq.orders.detail.meta.created": "Erstellt",
376
+ "cpq.orders.detail.meta.currency": "Währung",
377
+ "cpq.orders.detail.meta.customer": "Kunde",
378
+ "cpq.orders.detail.mirroredItem": "Aus bestehender Abonnementposition übernommen.",
379
+ "cpq.orders.detail.noBreakdown": "Keine detaillierte Aufschlüsselung für diese Position.",
380
+ "cpq.orders.detail.noLineItems": "Keine Positionen.",
381
+ "cpq.orders.detail.notFound": "Bestellung nicht gefunden.",
382
+ "cpq.orders.detail.sourceQuote": "Ursprungsangebot",
383
+ "cpq.orders.detail.statusPath": "Bestellstatuspfad",
384
+ "cpq.orders.detail.viewSalesOrder": "Vertriebsbestellung anzeigen",
385
+ "cpq.orders.empty": "Keine CPQ-Bestellungen gefunden. Wandeln Sie ein angenommenes Angebot um, um eine Bestellung zu erstellen.",
386
+ "cpq.orders.filters.currency": "Währung",
387
+ "cpq.orders.filters.status": "Status",
388
+ "cpq.orders.list.error.load": "Bestellungen konnten nicht geladen werden",
389
+ "cpq.orders.list.title": "CPQ-Bestellungen",
390
+ "cpq.orders.search.placeholder": "Nach Bestell- / Kunden-ID suchen...",
391
+ "cpq.orders.status.active": "Aktiv",
392
+ "cpq.orders.status.cancelled": "Storniert",
393
+ "cpq.orders.status.draft": "Entwurf",
394
+ "cpq.orders.status.fulfilled": "Erfüllt",
395
+ "cpq.orders.status.pending_activation": "Aktivierung ausstehend",
396
+ "cpq.orders.table.activatedAt": "Aktiviert",
397
+ "cpq.orders.table.createdAt": "Erstellt",
398
+ "cpq.orders.table.currency": "Währung",
399
+ "cpq.orders.table.mrcTotal": "MRC gesamt",
400
+ "cpq.orders.table.nrcTotal": "NRC gesamt",
401
+ "cpq.orders.table.order": "Bestellung",
402
+ "cpq.orders.table.status": "Status",
403
+ "cpq.orders.title": "CPQ-Bestellungen",
404
+ "cpq.priceAdjustments.adjustPrice": "Preis anpassen",
405
+ "cpq.priceAdjustments.audit.adjust": "Angebotspreis anpassen",
406
+ "cpq.priceAdjustments.blocked.converted": "Dieses Angebot wurde bereits in eine Bestellung umgewandelt",
407
+ "cpq.priceAdjustments.blocked.disabled": "Manuelle Preisanpassungen sind deaktiviert",
408
+ "cpq.priceAdjustments.blocked.freeForm": "Freitextpositionen können nicht angepasst werden",
409
+ "cpq.priceAdjustments.blocked.loading": "Wird geladen…",
410
+ "cpq.priceAdjustments.blocked.locked": "Anpassungen sind im Status {status} gesperrt — setzen Sie das Angebot auf „Bereit“ zurück, um sie zu ändern",
411
+ "cpq.priceAdjustments.blocked.mirror": "Preisänderungen an bestehenden Abonnementpositionen folgen in einem späteren Release",
412
+ "cpq.priceAdjustments.blocked.permission": "Sie haben keine Berechtigung, Preise anzupassen",
413
+ "cpq.priceAdjustments.delete": "Anpassung löschen",
414
+ "cpq.priceAdjustments.deleteConfirm.confirm": "Entfernen",
415
+ "cpq.priceAdjustments.deleteConfirm.text": "Die Gebühr kehrt zu ihrem Standardpreis zurück.",
416
+ "cpq.priceAdjustments.deleteConfirm.title": "Diese Preisanpassung entfernen?",
417
+ "cpq.priceAdjustments.dialog.absoluteHint": "Betrag, der von der Summe dieser Gebühr abgezogen wird",
418
+ "cpq.priceAdjustments.dialog.allCharges": "Alle einmaligen und wiederkehrenden Gebühren",
419
+ "cpq.priceAdjustments.dialog.appliesTo": "Gilt für",
420
+ "cpq.priceAdjustments.dialog.cancel": "Abbrechen",
421
+ "cpq.priceAdjustments.dialog.chargeTitle": "Preis anpassen",
422
+ "cpq.priceAdjustments.dialog.editTitle": "Preisanpassung bearbeiten",
423
+ "cpq.priceAdjustments.dialog.lineTitle": "Positionsrabatt",
424
+ "cpq.priceAdjustments.dialog.mrcOnly": "Nur wiederkehrende Gebühren",
425
+ "cpq.priceAdjustments.dialog.note": "Notiz",
426
+ "cpq.priceAdjustments.dialog.nrcOnly": "Nur einmalige Gebühren",
427
+ "cpq.priceAdjustments.dialog.overrideHint": "Neuer Stückpreis, höchstens der Standardpreis",
428
+ "cpq.priceAdjustments.dialog.percentHint": "Prozentualer Abzug vom Standardpreis (0–100)",
429
+ "cpq.priceAdjustments.dialog.previewCharge": "Neuer Angebotspreis",
430
+ "cpq.priceAdjustments.dialog.previewEmpty": "Geben Sie einen Wert und einen Grund ein, um den neuen Preis in der Vorschau zu sehen.",
431
+ "cpq.priceAdjustments.dialog.previewLine": "Positionssummen",
432
+ "cpq.priceAdjustments.dialog.previewing": "Wird berechnet…",
433
+ "cpq.priceAdjustments.dialog.reason": "Grund",
434
+ "cpq.priceAdjustments.dialog.reasonPlaceholder": "Grund auswählen",
435
+ "cpq.priceAdjustments.dialog.reload": "Neu laden",
436
+ "cpq.priceAdjustments.dialog.save": "Speichern",
437
+ "cpq.priceAdjustments.dialog.saveShortcut": "Strg/Cmd+Enter",
438
+ "cpq.priceAdjustments.dialog.saving": "Wird gespeichert…",
439
+ "cpq.priceAdjustments.dialog.standard": "Standard",
440
+ "cpq.priceAdjustments.dialog.type": "Anpassung",
441
+ "cpq.priceAdjustments.dialog.types.discount_absolute": "Betrag von der Gebührensumme abziehen",
442
+ "cpq.priceAdjustments.dialog.types.discount_percent": "Prozentualer Rabatt",
443
+ "cpq.priceAdjustments.dialog.types.price_override": "Neuen Stückpreis festlegen",
444
+ "cpq.priceAdjustments.dialog.value": "Wert",
445
+ "cpq.priceAdjustments.discountLine": "Positionsrabatt",
446
+ "cpq.priceAdjustments.edit": "Anpassung bearbeiten",
447
+ "cpq.priceAdjustments.errors.ABOVE_STANDARD": "Der Preis liegt über dem Standardpreis",
448
+ "cpq.priceAdjustments.errors.ADJUSTMENT_LOCKED": "Anpassungen sind für dieses Angebot gesperrt",
449
+ "cpq.priceAdjustments.errors.ADJUSTMENT_OVERLAP": "Eine andere Anpassung betrifft diese Gebühr bereits auf derselben Ebene",
450
+ "cpq.priceAdjustments.errors.ADJUSTMENT_TARGET_MISSING": "Die angepasste Gebühr existiert in dieser Position nicht mehr",
451
+ "cpq.priceAdjustments.errors.CURRENCY_MISMATCH": "Die Währung stimmt nicht mit dem Angebot überein",
452
+ "cpq.priceAdjustments.errors.INVALID_AMOUNT": "Geben Sie einen Betrag größer als 0 ein",
453
+ "cpq.priceAdjustments.errors.INVALID_PERCENT": "Geben Sie einen Prozentsatz größer als 0 und höchstens 100 ein",
454
+ "cpq.priceAdjustments.errors.LINE_NOT_ELIGIBLE": "Diese Position kann nicht angepasst werden",
455
+ "cpq.priceAdjustments.errors.REASON_NOTE_REQUIRED": "Fügen Sie eine Notiz hinzu, wenn der Grund „Sonstiges“ ist",
456
+ "cpq.priceAdjustments.errors.REASON_NOT_FOUND": "Wählen Sie einen Grund aus der Liste",
457
+ "cpq.priceAdjustments.errors.STALE_REVISION": "Die Preise haben sich seit dem Öffnen geändert — neu laden und erneut versuchen",
458
+ "cpq.priceAdjustments.errors.TARGET_AMBIGUOUS": "Die angepasste Gebühr kommt in dieser Position mehrfach vor",
459
+ "cpq.priceAdjustments.errors.TYPE_NOT_ALLOWED": "Diese Art der Anpassung ist für diese Gebühr nicht zulässig",
460
+ "cpq.priceAdjustments.invalid": "Ungültig",
461
+ "cpq.priceAdjustments.invalidReason": "Ungültig: {reason}",
462
+ "cpq.priceAdjustments.listUnit": "Listenpreis",
463
+ "cpq.priceAdjustments.listUnitHint": "Katalog-Stückpreis aus der Preistabelle, vor Preisregeln und manuellen Anpassungen.",
464
+ "cpq.priceAdjustments.offerUnit": "Angebotspreis",
465
+ "cpq.priceAdjustments.offerUnitHint": "Endgültiger Stückpreis, der dem Kunden angeboten wird, nach Preisregeln und manuellen Anpassungen. Das Badge zeigt die Gesamtänderung gegenüber dem Listenpreis.",
466
+ "cpq.priceAdjustments.panel.author": "Autor",
467
+ "cpq.priceAdjustments.panel.date": "Datum",
468
+ "cpq.priceAdjustments.panel.empty": "Noch keine verhandelten Preise. Verwenden Sie „Preis anpassen“ bei einer Gebühr oder „Positionsrabatt“ bei einer Position.",
469
+ "cpq.priceAdjustments.panel.line": "gesamte Position",
470
+ "cpq.priceAdjustments.panel.lineMrc": "gesamte Position, wiederkehrend",
471
+ "cpq.priceAdjustments.panel.lineNrc": "gesamte Position, einmalig",
472
+ "cpq.priceAdjustments.panel.reason": "Grund",
473
+ "cpq.priceAdjustments.panel.removedLine": "Entfernte Position",
474
+ "cpq.priceAdjustments.panel.target": "Gilt für",
475
+ "cpq.priceAdjustments.panel.title": "Preisanpassungen",
476
+ "cpq.priceAdjustments.panel.type": "Art",
477
+ "cpq.priceAdjustments.panel.types.discount_absolute": "Betragsabzug",
478
+ "cpq.priceAdjustments.panel.types.discount_percent": "%-Rabatt",
479
+ "cpq.priceAdjustments.panel.types.price_override": "Preisüberschreibung",
480
+ "cpq.priceAdjustments.panel.value": "Wert",
481
+ "cpq.priceAdjustments.showBreakdown": "Preisaufschlüsselung anzeigen",
482
+ "cpq.priceAdjustments.standardUnit": "Standardpreis",
483
+ "cpq.priceAdjustments.standardUnitHint": "Stückpreis nach automatischen Preisregeln (z. B. Mengen- oder Segmentrabatte), vor manuellen Anpassungen.",
484
+ "cpq.priceAdjustments.summary.dealValue": "Geschäftswert",
485
+ "cpq.priceAdjustments.summary.hint": "Der Geschäftswert umfasst wiederkehrende Gebühren über die Laufzeit plus einmalige Gebühren; bestehende Abonnementpositionen in Änderungsangeboten sind ausgenommen.",
486
+ "cpq.priceAdjustments.types.discount_absolute": "Betragsabzug",
487
+ "cpq.priceAdjustments.types.discount_percent": "%-Rabatt",
488
+ "cpq.priceAdjustments.types.price_override": "Preisüberschreibung",
489
+ "cpq.priceAdjustments.types.surcharge_absolute": "fester Aufschlag",
490
+ "cpq.priceAdjustments.types.surcharge_percent": "%-Aufschlag",
491
+ "cpq.priceAdjustments.waterfall.delta": "Differenz",
492
+ "cpq.priceAdjustments.waterfall.list": "Listenpreis",
493
+ "cpq.priceAdjustments.waterfall.manualSource": "Verhandelt: {reason}",
494
+ "cpq.priceAdjustments.waterfall.offer": "Angebotspreis",
495
+ "cpq.priceAdjustments.waterfall.ruleSource": "Preisregel: {name}",
496
+ "cpq.priceAdjustments.waterfall.source": "Quelle",
497
+ "cpq.priceAdjustments.waterfall.standard": "Standardpreis",
498
+ "cpq.priceAdjustments.waterfall.step": "Schritt",
499
+ "cpq.priceAdjustments.waterfall.title": "Preis-Wasserfall",
500
+ "cpq.priceAdjustments.waterfall.unitPrice": "Stückpreis",
501
+ "cpq.priceAdjustments.waterfall.value": "Wert",
502
+ "cpq.priceRules.chargeTypes.mrc": "MRC",
503
+ "cpq.priceRules.chargeTypes.nrc": "NRC",
504
+ "cpq.priceRules.chargeTypes.usage": "Nutzung",
505
+ "cpq.priceRules.create": "Regel erstellen",
506
+ "cpq.priceRules.detail.activate": "Aktivieren",
507
+ "cpq.priceRules.detail.allCharges": "Alle Gebühren",
508
+ "cpq.priceRules.detail.allTypes": "Alle Arten",
509
+ "cpq.priceRules.detail.applicabilityCondition": "Anwendungsbedingung",
510
+ "cpq.priceRules.detail.backToList": "Zurück zu Preisregeln",
511
+ "cpq.priceRules.detail.breadcrumb": "Regeldetails",
512
+ "cpq.priceRules.detail.chargeCode": "Gebührencode",
513
+ "cpq.priceRules.detail.chargeType": "Gebührenart",
514
+ "cpq.priceRules.detail.code": "Code",
515
+ "cpq.priceRules.detail.confirmDelete": "Ja, löschen",
516
+ "cpq.priceRules.detail.created": "Erstellt",
517
+ "cpq.priceRules.detail.deactivate": "Deaktivieren",
518
+ "cpq.priceRules.detail.deleteConfirm": "Möchten Sie {name} wirklich löschen?",
519
+ "cpq.priceRules.detail.deleting": "Wird gelöscht...",
520
+ "cpq.priceRules.detail.description": "Beschreibung",
521
+ "cpq.priceRules.detail.globalAllOfferings": "Global (alle Produktangebote)",
522
+ "cpq.priceRules.detail.id": "ID",
523
+ "cpq.priceRules.detail.metadata": "Metadaten",
524
+ "cpq.priceRules.detail.noCondition": "Keine Bedingung (gilt immer)",
525
+ "cpq.priceRules.detail.notFound": "Nicht gefunden",
526
+ "cpq.priceRules.detail.ruleConfiguration": "Regelkonfiguration",
527
+ "cpq.priceRules.detail.ruleNotFound": "Regel nicht gefunden",
528
+ "cpq.priceRules.detail.ruleType": "Regeltyp",
529
+ "cpq.priceRules.detail.saveChanges": "Änderungen speichern",
530
+ "cpq.priceRules.detail.scope": "Geltungsbereich",
531
+ "cpq.priceRules.detail.scopeAndFilters": "Geltungsbereich & Filter",
532
+ "cpq.priceRules.detail.sortOrder": "Sortierreihenfolge",
533
+ "cpq.priceRules.detail.updated": "Aktualisiert",
534
+ "cpq.priceRules.detail.value": "Wert",
535
+ "cpq.priceRules.empty": "Keine Preisregeln gefunden. Klicken Sie auf „Regel erstellen“, um eine hinzuzufügen.",
536
+ "cpq.priceRules.entityName": "Preisregel",
537
+ "cpq.priceRules.errors.createFailed": "Erstellen fehlgeschlagen",
538
+ "cpq.priceRules.errors.unknown": "Unbekannter Fehler",
539
+ "cpq.priceRules.errors.updateFailed": "Aktualisieren fehlgeschlagen",
540
+ "cpq.priceRules.filters.chargeType": "Gebührenart",
541
+ "cpq.priceRules.filters.globalOnly": "Nur globale",
542
+ "cpq.priceRules.filters.isActive": "Aktiv",
543
+ "cpq.priceRules.filters.ruleType": "Regeltyp",
544
+ "cpq.priceRules.form.allChargeTypes": "Alle Gebührenarten",
545
+ "cpq.priceRules.form.applicabilityCondition": "Anwendungsbedingung",
546
+ "cpq.priceRules.form.applicabilityConditionHint": "(optional — nur anwenden, wenn ein Produktattribut übereinstimmt)",
547
+ "cpq.priceRules.form.chargeCodeFilter": "Gebührencode-Filter",
548
+ "cpq.priceRules.form.chargeCodeFilterPlaceholder": "z. B. setup_fee (leer lassen für alle)",
549
+ "cpq.priceRules.form.chargeTypeFilter": "Gebührenart-Filter",
550
+ "cpq.priceRules.form.code": "Code",
551
+ "cpq.priceRules.form.conditionAttributePlaceholder": "Attribut (z. B. port_size)",
552
+ "cpq.priceRules.form.conditionValuePlaceholder": "Wert (z. B. 100G)",
553
+ "cpq.priceRules.form.conditionValuePlaceholderShort": "Wert",
554
+ "cpq.priceRules.form.create": "Erstellen",
555
+ "cpq.priceRules.form.description": "Beschreibung",
556
+ "cpq.priceRules.form.descriptionPlaceholder": "Optional",
557
+ "cpq.priceRules.form.editTitle": "Regel bearbeiten",
558
+ "cpq.priceRules.form.globalAllProducts": "Global (alle Produkte)",
559
+ "cpq.priceRules.form.mrcOnly": "Nur MRC",
560
+ "cpq.priceRules.form.name": "Name",
561
+ "cpq.priceRules.form.newTitle": "Neue Regel",
562
+ "cpq.priceRules.form.nrcOnly": "Nur NRC",
563
+ "cpq.priceRules.form.operatorEq": "gleich (=)",
564
+ "cpq.priceRules.form.operatorNeq": "ungleich (≠)",
565
+ "cpq.priceRules.form.optionalHint": "(optional)",
566
+ "cpq.priceRules.form.productOffering": "Produktangebot",
567
+ "cpq.priceRules.form.productOfferingHint": "Belassen Sie „Global“, um die Regel auf alle Produkte anzuwenden, oder wählen Sie ein bestimmtes Produktangebot",
568
+ "cpq.priceRules.form.ruleType": "Regeltyp",
569
+ "cpq.priceRules.form.sortOrder": "Sortierreihenfolge",
570
+ "cpq.priceRules.form.update": "Aktualisieren",
571
+ "cpq.priceRules.form.usageOnly": "Nur Nutzung",
572
+ "cpq.priceRules.form.value": "Wert",
573
+ "cpq.priceRules.list.error.load": "Preisregeln konnten nicht geladen werden",
574
+ "cpq.priceRules.list.title": "Preisregeln",
575
+ "cpq.priceRules.ruleTypes.discountAbsolute": "Rabatt $",
576
+ "cpq.priceRules.ruleTypes.discountPercent": "Rabatt %",
577
+ "cpq.priceRules.ruleTypes.priceOverride": "Überschreibung",
578
+ "cpq.priceRules.ruleTypes.surchargeAbsolute": "Aufschlag $",
579
+ "cpq.priceRules.ruleTypes.surchargePercent": "Aufschlag %",
580
+ "cpq.priceRules.scope.global": "Global",
581
+ "cpq.priceRules.scope.productScoped": "Produktbezogen",
582
+ "cpq.priceRules.search.placeholder": "Preisregeln suchen...",
583
+ "cpq.priceRules.table.code": "Code",
584
+ "cpq.priceRules.table.filter": "Filter",
585
+ "cpq.priceRules.table.name": "Name",
586
+ "cpq.priceRules.table.order": "Reihenfolge",
587
+ "cpq.priceRules.table.scope": "Geltungsbereich",
588
+ "cpq.priceRules.table.status": "Status",
589
+ "cpq.priceRules.table.type": "Typ",
590
+ "cpq.priceRules.table.value": "Wert",
591
+ "cpq.pricing.add": "Neue Preistabelle",
592
+ "cpq.pricing.code": "Code",
593
+ "cpq.pricing.confirmDelete": "Diese Preistabelle und alle ihre Einträge löschen?",
594
+ "cpq.pricing.currencies": "Währungen",
595
+ "cpq.pricing.detail.codePlaceholder": "z. B. cloud-connect-pricing",
596
+ "cpq.pricing.detail.configuration": "Konfiguration",
597
+ "cpq.pricing.detail.create": "Preistabelle erstellen",
598
+ "cpq.pricing.detail.currenciesCommaSeparated": "Währungen (kommagetrennt)",
599
+ "cpq.pricing.detail.currenciesPlaceholder": "USD, EUR",
600
+ "cpq.pricing.detail.dimensions.add": "+ Dimension hinzufügen",
601
+ "cpq.pricing.detail.dimensions.description": "Suchschlüssel für passende Einträge (z. B. Region, Staffel). Leer lassen, wenn Sie nur Staffelbereiche verwenden.",
602
+ "cpq.pricing.detail.dimensions.title": "Dimensionen",
603
+ "cpq.pricing.detail.errors.createFailed": "Preistabelle konnte nicht erstellt werden",
604
+ "cpq.pricing.detail.errors.deleteFailed": "Löschen fehlgeschlagen",
605
+ "cpq.pricing.detail.errors.invalidId": "Ungültige Preistabellen-ID",
606
+ "cpq.pricing.detail.errors.loadFailed": "Laden fehlgeschlagen",
607
+ "cpq.pricing.detail.errors.notFound": "Preistabelle nicht gefunden",
608
+ "cpq.pricing.detail.errors.saveFailed": "Preistabelle konnte nicht gespeichert werden",
609
+ "cpq.pricing.detail.errors.saveFailedGeneric": "Speichern fehlgeschlagen",
610
+ "cpq.pricing.detail.keyLabelList.actions": "Aktionen",
611
+ "cpq.pricing.detail.keyLabelList.key": "Schlüssel",
612
+ "cpq.pricing.detail.keyLabelList.keyPlaceholder": "z. B. region",
613
+ "cpq.pricing.detail.keyLabelList.label": "Bezeichnung",
614
+ "cpq.pricing.detail.keyLabelList.labelPlaceholder": "Region",
615
+ "cpq.pricing.detail.keyLabelList.remove": "Entfernen",
616
+ "cpq.pricing.detail.namePlaceholder": "Cloud-Connect-Preise",
617
+ "cpq.pricing.detail.priceColumns.add": "+ Preisspalte hinzufügen",
618
+ "cpq.pricing.detail.priceColumns.description": "Jede Preisspalte wird zu einem numerischen Feld in jedem Eintrag. Gebühren referenzieren eine Spalte über ihren Schlüssel.",
619
+ "cpq.pricing.empty": "Keine Preistabellen gefunden.",
620
+ "cpq.pricing.entityName": "Preistabelle",
621
+ "cpq.pricing.entries.actions": "Aktionen",
622
+ "cpq.pricing.entries.addRow": "+ Zeile hinzufügen",
623
+ "cpq.pricing.entries.addTier": "+ Staffel hinzufügen",
624
+ "cpq.pricing.entries.currency": "Währung",
625
+ "cpq.pricing.entries.deleteRow": "Zeile löschen",
626
+ "cpq.pricing.entries.edit": "Einträge bearbeiten",
627
+ "cpq.pricing.entries.empty": "Keine Einträge in dieser Preistabelle.",
628
+ "cpq.pricing.entries.emptyEditing": "Noch keine Einträge — verwenden Sie „+ Zeile hinzufügen“ (Suche nach Dimensionen) oder „+ Staffel hinzufügen“ (Suche nach Bereich).",
629
+ "cpq.pricing.entries.errors.createFailed": "Einträge konnten nicht erstellt werden",
630
+ "cpq.pricing.entries.errors.deleteFailed": "Eintrag {id} konnte nicht gelöscht werden",
631
+ "cpq.pricing.entries.errors.saveFailed": "Einträge konnten nicht gespeichert werden",
632
+ "cpq.pricing.entries.errors.updateFailed": "Eintrag {id} konnte nicht aktualisiert werden",
633
+ "cpq.pricing.entries.rangeFrom": "Bereich von",
634
+ "cpq.pricing.entries.rangeTo": "Bereich bis",
635
+ "cpq.pricing.entries.tierNumber": "Staffel-Nr.",
636
+ "cpq.pricing.entries.title": "Einträge ({count})",
637
+ "cpq.pricing.export.button": "Nach Excel exportieren",
638
+ "cpq.pricing.export.tooltip": "Diese Preistabelle als Excel-Datei herunterladen",
639
+ "cpq.pricing.filters.isActive": "Aktiv",
640
+ "cpq.pricing.import.button": "Aus Excel importieren",
641
+ "cpq.pricing.import.errors.insertFailed": "Einträge konnten nicht eingefügt werden",
642
+ "cpq.pricing.import.errors.missingCurrencyColumn": "Spalte „currency_code“ fehlt",
643
+ "cpq.pricing.import.errors.missingDimensionColumns": "Fehlende Dimensionsspalte(n): {columns}",
644
+ "cpq.pricing.import.errors.missingPriceColumns": "Fehlende Preisspalte(n): {columns}",
645
+ "cpq.pricing.import.errors.noDataRows": "Das Tabellenblatt enthält keine Datenzeilen",
646
+ "cpq.pricing.import.errors.noSheets": "Die Arbeitsmappe enthält keine Tabellenblätter",
647
+ "cpq.pricing.import.errors.readFailed": "Datei konnte nicht gelesen werden",
648
+ "cpq.pricing.import.errors.readFailedWithReason": "Datei konnte nicht gelesen werden: {reason}",
649
+ "cpq.pricing.import.errors.rowCurrencyNotAllowed": "Zeile {row}: Währung „{currency}“ ist nicht in der Währungsliste der Tabelle ({currencies})",
650
+ "cpq.pricing.import.errors.rowMissingCurrency": "Zeile {row}: currency_code fehlt",
651
+ "cpq.pricing.import.errors.rowPriceNotNumber": "Zeile {row}: Preisspalte „{column}“ muss eine Zahl sein, erhalten: „{value}“",
652
+ "cpq.pricing.import.errors.rowTierNotNumber": "Zeile {row}: tier_number muss eine Zahl sein, erhalten: „{value}“",
653
+ "cpq.pricing.import.preview.apply": "Änderungen übernehmen ({count})",
654
+ "cpq.pricing.import.preview.applying": "Wird übernommen...",
655
+ "cpq.pricing.import.preview.deletedCount": "{count} gelöscht",
656
+ "cpq.pricing.import.preview.deletesSummary": "{count} Einträge werden gelöscht",
657
+ "cpq.pricing.import.preview.insertRow": "Zeile {row}: {summary}",
658
+ "cpq.pricing.import.preview.insertsSummary": "{count} neue Einträge werden erstellt",
659
+ "cpq.pricing.import.preview.newCount": "{count} neu",
660
+ "cpq.pricing.import.preview.noChanges": "Die Datei enthält keine Änderungen — jede Zeile entspricht einem bestehenden Eintrag.",
661
+ "cpq.pricing.import.preview.tier": "Staffel {tier}",
662
+ "cpq.pricing.import.preview.title": "Importvorschau",
663
+ "cpq.pricing.import.preview.unchangedCount": "({count} unverändert)",
664
+ "cpq.pricing.import.preview.updateRowPrefix": "Zeile {row} (ID ",
665
+ "cpq.pricing.import.preview.updateRowSuffix": "): {summary}",
666
+ "cpq.pricing.import.preview.updatedCount": "{count} aktualisiert",
667
+ "cpq.pricing.import.preview.updatesSummary": "{count} Einträge werden aktualisiert",
668
+ "cpq.pricing.import.preview.warnings": "Warnungen",
669
+ "cpq.pricing.import.tooltip": "Excel-Datei hochladen, um Einträge hinzuzufügen / zu aktualisieren / zu löschen",
670
+ "cpq.pricing.import.warnings.idNotFound": "Zeile {row}: ID „{id}“ in den aktuellen Einträgen nicht gefunden — wird als neuer Eintrag eingefügt",
671
+ "cpq.pricing.import.warnings.unknownColumn": "Unbekannte Spalte „{column}“ ignoriert",
672
+ "cpq.pricing.list.error.load": "Preistabellen konnten nicht geladen werden",
673
+ "cpq.pricing.list.title": "Preistabellen",
674
+ "cpq.pricing.name": "Name",
675
+ "cpq.pricing.new": "Neue Preistabelle",
676
+ "cpq.pricing.priceColumns": "Preisspalten",
677
+ "cpq.pricing.search.placeholder": "Preistabellen suchen...",
678
+ "cpq.pricing.status": "Status",
679
+ "cpq.pricing.validation.codeRequired": "Code ist erforderlich",
680
+ "cpq.pricing.validation.currencyRequired": "Mindestens eine Währung ist erforderlich",
681
+ "cpq.pricing.validation.dimensionDuplicateKey": "Dimension: doppelter Schlüssel „{key}“",
682
+ "cpq.pricing.validation.dimensionKeyRequired": "Dimension #{index}: Schlüssel ist erforderlich",
683
+ "cpq.pricing.validation.dimensionLabelRequired": "Dimension #{index}: Bezeichnung ist erforderlich",
684
+ "cpq.pricing.validation.nameRequired": "Name ist erforderlich",
685
+ "cpq.pricing.validation.priceColumnDuplicateKey": "Preisspalte: doppelter Schlüssel „{key}“",
686
+ "cpq.pricing.validation.priceColumnKeyRequired": "Preisspalte #{index}: Schlüssel ist erforderlich",
687
+ "cpq.pricing.validation.priceColumnLabelRequired": "Preisspalte #{index}: Bezeichnung ist erforderlich",
688
+ "cpq.quotes.actions.open": "Öffnen",
689
+ "cpq.quotes.add": "Neues Angebot",
690
+ "cpq.quotes.arc.drawer.actions.amendHint": "Positionen in bestehenden Abonnements hinzufügen oder entfernen. Die Laufzeit bleibt unverändert.",
691
+ "cpq.quotes.arc.drawer.actions.cancelHint": "Ein oder mehrere Abonnements kündigen.",
692
+ "cpq.quotes.arc.drawer.actions.renewHint": "Laufzeit verlängern. Bei 2+ Zielen werden diese zu einem neuen Vertrag zusammengeführt.",
693
+ "cpq.quotes.arc.drawer.back": "← Zurück",
694
+ "cpq.quotes.arc.drawer.cancel.etfAmount": "ETF-Betrag (optional)",
695
+ "cpq.quotes.arc.drawer.cancel.etfCurrency": "ETF-Währung",
696
+ "cpq.quotes.arc.drawer.cancel.freeText": "Freitext (optional)",
697
+ "cpq.quotes.arc.drawer.cancel.pickOne": "— bitte auswählen —",
698
+ "cpq.quotes.arc.drawer.cancel.reasonCode": "Grundcode",
699
+ "cpq.quotes.arc.drawer.cancel.title": "Kündigungsgrund:",
700
+ "cpq.quotes.arc.drawer.close": "Seitenleiste schließen",
701
+ "cpq.quotes.arc.drawer.closeButton": "Schließen",
702
+ "cpq.quotes.arc.drawer.currencyMismatch": "Abweichende Währung ({subscriptionCurrency} vs. {quoteCurrency}) — kann nicht einbezogen werden",
703
+ "cpq.quotes.arc.drawer.cyclesMismatch": "Die ausgewählten Ziele haben unterschiedliche Abrechnungszyklen — eine Zusammenführung erfordert übereinstimmende Zyklen.",
704
+ "cpq.quotes.arc.drawer.done": "Fertig — schließen, um zum Angebot zurückzukehren.",
705
+ "cpq.quotes.arc.drawer.errors.attachFailed": "POST /target-subscriptions fehlgeschlagen",
706
+ "cpq.quotes.arc.drawer.errors.cancelMetaFailed": "POST /cancel-meta fehlgeschlagen",
707
+ "cpq.quotes.arc.drawer.errors.mergeMetaFailed": "POST /merge-meta fehlgeschlagen",
708
+ "cpq.quotes.arc.drawer.errors.patchFailed": "PATCH /quotes/{quoteId} fehlgeschlagen",
709
+ "cpq.quotes.arc.drawer.fields.end": "Ende",
710
+ "cpq.quotes.arc.drawer.fields.months": "Monate",
711
+ "cpq.quotes.arc.drawer.fields.newCode": "Code des neuen Vertrags (optional — wird automatisch erzeugt, wenn leer)",
712
+ "cpq.quotes.arc.drawer.fields.newName": "Name des neuen Vertrags (optional)",
713
+ "cpq.quotes.arc.drawer.fields.start": "Beginn",
714
+ "cpq.quotes.arc.drawer.loadingSubscriptions": "Abonnements werden geladen…",
715
+ "cpq.quotes.arc.drawer.mergeWarning": "{count} Verträge werden zu einem neuen zusammengeführt — die Quellverträge werden bei Aktivierung als „Zusammengeführt“ markiert.",
716
+ "cpq.quotes.arc.drawer.next": "Weiter",
717
+ "cpq.quotes.arc.drawer.noSubscriptions": "Keine Abonnements für diesen Kunden.",
718
+ "cpq.quotes.arc.drawer.pickAction": "Wählen Sie die Art der Änderung:",
719
+ "cpq.quotes.arc.drawer.reasons.configChange": "Konfigurationsänderung",
720
+ "cpq.quotes.arc.drawer.reasons.consolidation": "Konsolidierung",
721
+ "cpq.quotes.arc.drawer.reasons.contractBreach": "Vertragsverletzung",
722
+ "cpq.quotes.arc.drawer.reasons.customerRequest": "Kundenwunsch",
723
+ "cpq.quotes.arc.drawer.reasons.downgrade": "Downgrade",
724
+ "cpq.quotes.arc.drawer.reasons.nonPayment": "Zahlungsausfall",
725
+ "cpq.quotes.arc.drawer.reasons.other": "Sonstiges",
726
+ "cpq.quotes.arc.drawer.reasons.priceAdjustment": "Preisanpassung",
727
+ "cpq.quotes.arc.drawer.reasons.termExtension": "Laufzeitverlängerung",
728
+ "cpq.quotes.arc.drawer.reasons.termReduction": "Laufzeitverkürzung",
729
+ "cpq.quotes.arc.drawer.reasons.upgrade": "Upgrade",
730
+ "cpq.quotes.arc.drawer.renew.mergeHintAfter": "ein, um beide Daten automatisch auszufüllen — Beginn ist standardmäßig heute, Ende ist Beginn + Monate.",
731
+ "cpq.quotes.arc.drawer.renew.mergeHintBefore": "Geben Sie einen Wert in",
732
+ "cpq.quotes.arc.drawer.renew.mergeTitle": "Details des neuen Vertrags (Zusammenführung von {count} Abonnements):",
733
+ "cpq.quotes.arc.drawer.renew.singleHintAfter": "ein, um das Enddatum automatisch zu verschieben, oder bearbeiten Sie Beginn/Ende direkt.",
734
+ "cpq.quotes.arc.drawer.renew.singleHintBefore": "Vorausgefüllt mit derselben Länge wie die aktuelle Laufzeit, beginnend am aktuellen Laufzeitende. Geben Sie einen neuen Wert in",
735
+ "cpq.quotes.arc.drawer.renew.singleTitle": "Neue Vertragslaufzeit für {name}:",
736
+ "cpq.quotes.arc.drawer.review.action": "Aktion: {type}",
737
+ "cpq.quotes.arc.drawer.review.etf": "ETF {amount} {currency}",
738
+ "cpq.quotes.arc.drawer.review.lockWarning": "Mit dem Absenden wird der Angebotstyp festgelegt. Die Positionen werden danach auf der Hauptseite bearbeitet.",
739
+ "cpq.quotes.arc.drawer.review.mergeCode": "code={code}",
740
+ "cpq.quotes.arc.drawer.review.mergeName": "name={name}",
741
+ "cpq.quotes.arc.drawer.review.mergeTerm": "Laufzeit der Zusammenführung: {start} → {end}",
742
+ "cpq.quotes.arc.drawer.review.reason": "Grund: {reason}",
743
+ "cpq.quotes.arc.drawer.review.targets": "Ziele: {count}",
744
+ "cpq.quotes.arc.drawer.review.term": "Laufzeit: {start} → {end}",
745
+ "cpq.quotes.arc.drawer.review.termWithMonths": "Laufzeit: {start} → {end} ({months} Mon.)",
746
+ "cpq.quotes.arc.drawer.review.title": "Prüfen und absenden:",
747
+ "cpq.quotes.arc.drawer.stepLabel": "Schritt:",
748
+ "cpq.quotes.arc.drawer.submit": "Absenden",
749
+ "cpq.quotes.arc.drawer.submitting": "Wird gesendet…",
750
+ "cpq.quotes.arc.drawer.targetCount": "{count} Ziel(e)",
751
+ "cpq.quotes.arc.drawer.termEnds": "Laufzeit endet am {date}",
752
+ "cpq.quotes.arc.drawer.title": "Abonnement ändern",
753
+ "cpq.quotes.arc.lineRemoved": "entfernen",
754
+ "cpq.quotes.arc.lineRemovedHint": "Diese Position wird im Abonnement gekündigt, sobald die Bestellung aktiviert wird",
755
+ "cpq.quotes.arc.priceKept": "Preis beibehalten",
756
+ "cpq.quotes.arc.priceKeptHint": "Preis aus dem Abonnement übernommen — er ändert sich nur, wenn Sie diese Position neu konfigurieren",
757
+ "cpq.quotes.arc.removeConfirm.confirm": "Position entfernen",
758
+ "cpq.quotes.arc.removeConfirm.text": "Diese Position existiert bereits im Abonnement. Wenn Sie sie hier entfernen, wird sie nicht aus dem Angebot gelöscht — sie bleibt als „entfernen“-Position bestehen, und bei Aktivierung der Bestellung wird die Position (samt ihren Komponenten) im Abonnement gekündigt und ihre wiederkehrende Gebühr endet. Bis dahin können Sie sie wiederherstellen.",
759
+ "cpq.quotes.arc.removeConfirm.title": "{name} aus dem Abonnement entfernen?",
760
+ "cpq.quotes.arc.repricedDescription": "Neu konfigurierte Positionen wurden zum heutigen Katalogpreis neu bepreist. Verhandelte Preise aus dem Abonnement werden noch nicht auf neu konfigurierte Positionen übertragen.",
761
+ "cpq.quotes.arc.repricedTitle": "Einige bestehende Positionen verwenden den aktuellen Katalogpreis",
762
+ "cpq.quotes.arc.restore": "Wiederherstellen",
763
+ "cpq.quotes.arc.restoreHint": "Diese Position im Abonnement behalten",
764
+ "cpq.quotes.bundle.addComponent": "{name} hinzufügen",
765
+ "cpq.quotes.bundle.alreadyAdded": "Bereits hinzugefügt",
766
+ "cpq.quotes.bundle.loadingStructure": "Bundle-Struktur wird geladen…",
767
+ "cpq.quotes.bundle.slotFull": "Slot ist voll",
768
+ "cpq.quotes.bundle.slotMin": "(mind. {min})",
769
+ "cpq.quotes.bundle.slotOptional": "optional",
770
+ "cpq.quotes.bundle.slotRequired": "erforderlich",
771
+ "cpq.quotes.create.error": "Angebot konnte nicht erstellt werden ({status})",
772
+ "cpq.quotes.customerPicker.empty": "Keine Kunden gefunden.",
773
+ "cpq.quotes.customerPicker.loading": "Kunden werden geladen…",
774
+ "cpq.quotes.customerPicker.noMatch": "Keine Kunden entsprechen Ihrer Suche.",
775
+ "cpq.quotes.customerPicker.searchPlaceholder": "Kunden suchen…",
776
+ "cpq.quotes.customerPicker.title": "Kunden für neues Angebot auswählen",
777
+ "cpq.quotes.customerPicker.unnamed": "Unbenannt",
778
+ "cpq.quotes.detail.actions": "Aktionen",
779
+ "cpq.quotes.detail.actsOnSubscription": "Betrifft Abonnement {code}",
780
+ "cpq.quotes.detail.addComponent": "Komponente hinzufügen",
781
+ "cpq.quotes.detail.addOffering": "Produktangebot hinzufügen",
782
+ "cpq.quotes.detail.addingComponentTo": "Komponente wird dem Bundle hinzugefügt:",
783
+ "cpq.quotes.detail.arcTargets.one": "{count} Ziel:",
784
+ "cpq.quotes.detail.arcTargets.other": "{count} Ziele:",
785
+ "cpq.quotes.detail.backLabel": "Zurück zu CPQ-Angeboten",
786
+ "cpq.quotes.detail.backToQuotes": "← Zurück zu Angeboten",
787
+ "cpq.quotes.detail.bundleFallback": "Bundle",
788
+ "cpq.quotes.detail.configure.addComponentTitle": "Komponente hinzufügen: {name}",
789
+ "cpq.quotes.detail.configure.addToQuote": "Zum Angebot hinzufügen",
790
+ "cpq.quotes.detail.configure.applyToSubscriptions": "Auf Abonnement(s) anwenden",
791
+ "cpq.quotes.detail.configure.applyToSubscriptionsHint": "Wählen Sie eines oder mehrere — für jedes ausgewählte Abonnement wird eine eigene Position erstellt.",
792
+ "cpq.quotes.detail.configure.configureTitle": "Konfigurieren: {name}",
793
+ "cpq.quotes.detail.configure.editTitle": "Bearbeiten: {name}",
794
+ "cpq.quotes.detail.configure.enable": "Aktivieren",
795
+ "cpq.quotes.detail.configure.lineFallback": "Position",
796
+ "cpq.quotes.detail.configure.noAttributes": "Keine konfigurierbaren Attribute für dieses Produktangebot.",
797
+ "cpq.quotes.detail.configure.quantity": "Menge",
798
+ "cpq.quotes.detail.configure.selectPlaceholder": "— Auswählen —",
799
+ "cpq.quotes.detail.configure.selectTarget": "Wählen Sie mindestens ein Ziel aus.",
800
+ "cpq.quotes.detail.configure.updateLine": "Position aktualisieren",
801
+ "cpq.quotes.detail.convertToOrder": "In Bestellung umwandeln",
802
+ "cpq.quotes.detail.converted": "Umgewandelt",
803
+ "cpq.quotes.detail.customerIdRequired": "customerId ist erforderlich, um ein CPQ-Angebot zu erstellen",
804
+ "cpq.quotes.detail.deleteConfirm.text": "Möchten Sie dieses Angebot wirklich löschen? Das Angebot und alle seine Positionen werden als gelöscht markiert (Soft Delete).",
805
+ "cpq.quotes.detail.deleteConfirm.title": "Angebot löschen",
806
+ "cpq.quotes.detail.entityType": "CPQ-Angebot",
807
+ "cpq.quotes.detail.goToOrder": "Zur Bestellung",
808
+ "cpq.quotes.detail.lineConfigured": "konfiguriert",
809
+ "cpq.quotes.detail.lineIncomplete": "unvollständig",
810
+ "cpq.quotes.detail.lineItems": "Positionen",
811
+ "cpq.quotes.detail.loading": "Wird geladen…",
812
+ "cpq.quotes.detail.mergingRenew": "• Zusammenführung in einen neuen Vertrag",
813
+ "cpq.quotes.detail.meta.currency": "Währung",
814
+ "cpq.quotes.detail.meta.customer": "Kunde",
815
+ "cpq.quotes.detail.meta.version": "Version",
816
+ "cpq.quotes.detail.modifySubscription": "Abonnement ändern",
817
+ "cpq.quotes.detail.noBreakdown": "Für diese Position ist keine detaillierte Gebührenaufschlüsselung verfügbar.",
818
+ "cpq.quotes.detail.noLines": "Noch keine Positionen konfiguriert. Klicken Sie auf „Produktangebot hinzufügen“, um zu beginnen.",
819
+ "cpq.quotes.detail.notFound": "Angebot nicht gefunden.",
820
+ "cpq.quotes.detail.recalculate": "Neu berechnen",
821
+ "cpq.quotes.detail.removeLine": "Entfernen",
822
+ "cpq.quotes.detail.statusPath": "Angebotsstatuspfad",
823
+ "cpq.quotes.detail.untitled": "Ohne Titel",
824
+ "cpq.quotes.detail.validationIssues": "Validierungsprobleme",
825
+ "cpq.quotes.detail.viewSalesQuote": "Vertriebsangebot anzeigen",
826
+ "cpq.quotes.empty": "Keine CPQ-Angebote gefunden. Erstellen Sie eines, um Produktangebote für einen Kunden zu konfigurieren.",
827
+ "cpq.quotes.filters.currency": "Währung",
828
+ "cpq.quotes.filters.status": "Status",
829
+ "cpq.quotes.lineUpdateFailed": "Die Position konnte nicht aktualisiert werden",
830
+ "cpq.quotes.list.error.load": "Angebote konnten nicht geladen werden",
831
+ "cpq.quotes.list.title": "CPQ-Angebote",
832
+ "cpq.quotes.offeringBrowser.empty": "Keine aktiven Produktangebote verfügbar.",
833
+ "cpq.quotes.offeringBrowser.loading": "Produktangebote werden geladen…",
834
+ "cpq.quotes.offeringBrowser.noMatch": "Keine Produktangebote entsprechen Ihrer Suche.",
835
+ "cpq.quotes.offeringBrowser.searchPlaceholder": "Produktangebote suchen…",
836
+ "cpq.quotes.offeringBrowser.title": "Produktangebot auswählen",
837
+ "cpq.quotes.search.placeholder": "Nach Angebots- / Kunden-ID suchen...",
838
+ "cpq.quotes.status.accepted": "Angenommen",
839
+ "cpq.quotes.status.approved": "Genehmigt",
840
+ "cpq.quotes.status.cancelled": "Storniert",
841
+ "cpq.quotes.status.in_approval": "In Genehmigung",
842
+ "cpq.quotes.status.incomplete": "Unvollständig",
843
+ "cpq.quotes.status.new": "Neu",
844
+ "cpq.quotes.status.ready": "Bereit",
845
+ "cpq.quotes.status.rejected": "Abgelehnt",
846
+ "cpq.quotes.status.with_customer": "Beim Kunden",
847
+ "cpq.quotes.summary.arc.currentMrc": "Aktuelle MRC",
848
+ "cpq.quotes.summary.arc.mrcChange": "MRC-Änderung",
849
+ "cpq.quotes.summary.arc.newMrc": "Neue MRC",
850
+ "cpq.quotes.summary.mrc": "Monatliche Gebühr (MRC)",
851
+ "cpq.quotes.summary.nrc": "Einmalige Gebühr (NRC)",
852
+ "cpq.quotes.summary.title": "Preisübersicht",
853
+ "cpq.quotes.summary.usageChargeLine": "{name}: {price}/Einheit",
854
+ "cpq.quotes.summary.usageCharges": "Nutzungsgebühren",
855
+ "cpq.quotes.summary.usageEstimated": "Nutzung (geschätzt)",
856
+ "cpq.quotes.table.createdAt": "Erstellt",
857
+ "cpq.quotes.table.currency": "Währung",
858
+ "cpq.quotes.table.mrcTotal": "MRC gesamt",
859
+ "cpq.quotes.table.nrcTotal": "NRC gesamt",
860
+ "cpq.quotes.table.quoteNumber": "Angebotsnummer",
861
+ "cpq.quotes.table.status": "Status",
862
+ "cpq.quotes.table.version": "Version",
863
+ "cpq.quotes.title": "CPQ-Angebote",
864
+ "cpq.quotes.type.amend": "Änderung",
865
+ "cpq.quotes.type.cancel": "Kündigung",
866
+ "cpq.quotes.type.renew": "Verlängerung",
867
+ "cpq.rowActions.delete": "Löschen",
868
+ "cpq.rowActions.deleteBulk.confirm": "Ausgewählte Elemente löschen ({count})?",
869
+ "cpq.rowActions.deleteBulk.noEligible": "Keines der ausgewählten Elemente kann im aktuellen Zustand gelöscht werden.",
870
+ "cpq.rowActions.deleteBulk.partialError": "{count} der ausgewählten Elemente konnten nicht gelöscht werden",
871
+ "cpq.rowActions.deleteBulk.success": "Ausgewählte Elemente gelöscht ({count})",
872
+ "cpq.rowActions.deleteOne.confirm": "Dieses Element löschen?",
873
+ "cpq.rowActions.deleteOne.error": "Das Element konnte nicht gelöscht werden",
874
+ "cpq.rowActions.deleteOne.success": "Element gelöscht",
875
+ "cpq.rowActions.edit": "Bearbeiten",
876
+ "cpq.specifications.add": "Neue Spezifikation",
877
+ "cpq.specifications.addAttribute": "Attribut hinzufügen",
878
+ "cpq.specifications.addOffering": "Produktangebot hinzufügen",
879
+ "cpq.specifications.addRelationship": "Beziehung hinzufügen",
880
+ "cpq.specifications.attributeType.boolean": "Boolesch",
881
+ "cpq.specifications.attributeType.multiSelect": "Mehrfachauswahl",
882
+ "cpq.specifications.attributeType.number": "Zahl",
883
+ "cpq.specifications.attributeType.reference": "Referenz",
884
+ "cpq.specifications.attributeType.select": "Auswahl",
885
+ "cpq.specifications.attributeType.text": "Text",
886
+ "cpq.specifications.attributes.addOption": "+ Option hinzufügen",
887
+ "cpq.specifications.attributes.columns.actions": "Aktionen",
888
+ "cpq.specifications.attributes.columns.code": "Code",
889
+ "cpq.specifications.attributes.columns.name": "Name",
890
+ "cpq.specifications.attributes.columns.options": "Optionen",
891
+ "cpq.specifications.attributes.columns.required": "Erforderlich",
892
+ "cpq.specifications.attributes.columns.resolution": "Festlegung",
893
+ "cpq.specifications.attributes.columns.type": "Typ",
894
+ "cpq.specifications.attributes.confirmDelete": "Dieses Attribut löschen?",
895
+ "cpq.specifications.attributes.dependsOn.effect": "Auswirkung",
896
+ "cpq.specifications.attributes.dependsOn.effects.filterOptions": "Optionen filtern",
897
+ "cpq.specifications.attributes.dependsOn.effects.setValue": "Wert setzen",
898
+ "cpq.specifications.attributes.dependsOn.effects.toggleRequired": "Pflichtstatus umschalten",
899
+ "cpq.specifications.attributes.dependsOn.enable": "Hängt von einem anderen Attribut ab",
900
+ "cpq.specifications.attributes.dependsOn.parentAttribute": "Code des übergeordneten Attributs",
901
+ "cpq.specifications.attributes.dependsOn.rules": "Regeln",
902
+ "cpq.specifications.attributes.dependsOn.selectAttribute": "Attribut auswählen...",
903
+ "cpq.specifications.attributes.empty": "Keine Attribute definiert. Fügen Sie dieser Spezifikation Design-Time- und Run-Time-Attribute hinzu.",
904
+ "cpq.specifications.attributes.error.delete": "Attribut konnte nicht gelöscht werden",
905
+ "cpq.specifications.attributes.error.save": "Attribut konnte nicht gespeichert werden",
906
+ "cpq.specifications.attributes.fields.code": "Code",
907
+ "cpq.specifications.attributes.fields.helpText": "Hilfetext",
908
+ "cpq.specifications.attributes.fields.isRequired": "Erforderlich",
909
+ "cpq.specifications.attributes.fields.name": "Name",
910
+ "cpq.specifications.attributes.fields.options": "Optionen",
911
+ "cpq.specifications.attributes.fields.referenceEntity": "Referenzentität",
912
+ "cpq.specifications.attributes.fields.referenceEntityPlaceholder": "z. B. CatalogProduct",
913
+ "cpq.specifications.attributes.fields.resolutionTime": "Festlegungszeitpunkt",
914
+ "cpq.specifications.attributes.fields.sortOrder": "Sortierreihenfolge",
915
+ "cpq.specifications.attributes.fields.type": "Typ",
916
+ "cpq.specifications.attributes.form.editTitle": "Attribut bearbeiten",
917
+ "cpq.specifications.attributes.form.newTitle": "Neues Attribut",
918
+ "cpq.specifications.attributes.noOptions": "Keine Optionen definiert. Klicken Sie auf „Option hinzufügen“, um zu beginnen.",
919
+ "cpq.specifications.attributes.optionLabelPlaceholder": "Bezeichnung (z. B. Amazon Web Services)",
920
+ "cpq.specifications.attributes.optionValuePlaceholder": "Wert (z. B. aws)",
921
+ "cpq.specifications.attributes.optionsCount": "{count} Optionen",
922
+ "cpq.specifications.attributes.removeOption": "Entfernen",
923
+ "cpq.specifications.attributes.resolutionShort.design": "Design",
924
+ "cpq.specifications.attributes.resolutionShort.run": "Run",
925
+ "cpq.specifications.booleanFalse": "Falsch",
926
+ "cpq.specifications.booleanTrue": "Wahr",
927
+ "cpq.specifications.charges.confirmDelete": "Diese Gebühr löschen?",
928
+ "cpq.specifications.charges.error.delete": "Gebühr konnte nicht gelöscht werden",
929
+ "cpq.specifications.charges.error.saveAll": "Gebühren konnten nicht gespeichert werden",
930
+ "cpq.specifications.charges.error.saveFor": "Gebühr für {name} konnte nicht gespeichert werden",
931
+ "cpq.specifications.code": "Code",
932
+ "cpq.specifications.confirmDelete": "Diese Spezifikation samt allen Produktangeboten, Attributen und Beziehungen löschen?",
933
+ "cpq.specifications.defaultValue": "Standardwert",
934
+ "cpq.specifications.dependsOn.addRule": "Regel hinzufügen",
935
+ "cpq.specifications.dependsOn.csvPlaceholder": "wert1, wert2, wert3",
936
+ "cpq.specifications.dependsOn.empty": "Noch keine Regeln. Fügen Sie mindestens eine hinzu, damit diese Abhängigkeit wirksam wird.",
937
+ "cpq.specifications.dependsOn.optional": "Optional",
938
+ "cpq.specifications.dependsOn.parentValuePlaceholder": "Übergeordneter Wert",
939
+ "cpq.specifications.dependsOn.removeRule": "Regel entfernen",
940
+ "cpq.specifications.dependsOn.required": "Erforderlich",
941
+ "cpq.specifications.dependsOn.selectValue": "— Wert auswählen —",
942
+ "cpq.specifications.dependsOn.thenAllowOnly": "Dann nur zulassen",
943
+ "cpq.specifications.dependsOn.thenAllowOnlyCsv": "Dann nur zulassen (kommagetrennt)",
944
+ "cpq.specifications.dependsOn.thenRequiredIs": "Dann ist Pflichtfeld",
945
+ "cpq.specifications.dependsOn.thenSetValueTo": "Dann Wert setzen auf",
946
+ "cpq.specifications.dependsOn.valuePlaceholder": "Wert",
947
+ "cpq.specifications.dependsOn.whenParent": "Wenn übergeordnet =",
948
+ "cpq.specifications.description": "Beschreibung",
949
+ "cpq.specifications.detail.codePlaceholder": "z. B. gix-access-port",
950
+ "cpq.specifications.detail.error.delete": "Löschen fehlgeschlagen",
951
+ "cpq.specifications.detail.error.load": "Spezifikation konnte nicht geladen werden",
952
+ "cpq.specifications.detail.error.loadGeneric": "Laden fehlgeschlagen",
953
+ "cpq.specifications.detail.error.save": "Speichern fehlgeschlagen",
954
+ "cpq.specifications.detail.isAssetizable": "Als Asset erfassen?",
955
+ "cpq.specifications.detail.isAssetizableHelp": "Erstellt bei der Auftragserfüllung Asset-Datensätze",
956
+ "cpq.specifications.detail.specType": "Spezifikationstyp",
957
+ "cpq.specifications.detail.specTypeLocked": "Kann nicht mehr geändert werden, sobald Produktangebote oder Slots existieren",
958
+ "cpq.specifications.detail.tabs.attributes": "Attribute ({count})",
959
+ "cpq.specifications.detail.tabs.general": "Allgemein",
960
+ "cpq.specifications.detail.tabs.offerings": "Produktangebote ({count})",
961
+ "cpq.specifications.detail.tabs.relationships": "Beziehungen ({count})",
962
+ "cpq.specifications.detail.tabs.slots": "Bundle-Slots ({count})",
963
+ "cpq.specifications.detail.versionLabel": "Version {version}",
964
+ "cpq.specifications.empty": "Keine Produktspezifikationen gefunden. Erstellen Sie eine, um Ihren Produktkatalog zu definieren.",
965
+ "cpq.specifications.entityName": "Spezifikation",
966
+ "cpq.specifications.filters.isActive": "Aktiv",
967
+ "cpq.specifications.filters.isAssetizable": "Als Asset erfassbar",
968
+ "cpq.specifications.filters.lifecycleStatus": "Lebenszyklusstatus",
969
+ "cpq.specifications.filters.specType": "Typ",
970
+ "cpq.specifications.isActive": "Aktiv?",
971
+ "cpq.specifications.lifecycle.active": "Aktiv",
972
+ "cpq.specifications.lifecycle.deprecated": "Veraltet",
973
+ "cpq.specifications.lifecycle.draft": "Entwurf",
974
+ "cpq.specifications.lifecycleStatus": "Lebenszyklusstatus",
975
+ "cpq.specifications.list.error.load": "Spezifikationen konnten nicht geladen werden",
976
+ "cpq.specifications.list.tag.asset": "Asset",
977
+ "cpq.specifications.list.tag.bundle": "Bundle",
978
+ "cpq.specifications.list.title": "Produktspezifikationen",
979
+ "cpq.specifications.multiSelectDefaultHint": "Strg/Cmd-Klick, um mehrere auszuwählen, oder alle abwählen, um den Standardwert zu entfernen.",
980
+ "cpq.specifications.name": "Name",
981
+ "cpq.specifications.new": "Neue Spezifikation",
982
+ "cpq.specifications.noDefault": "Kein Standardwert",
983
+ "cpq.specifications.offerings.columns.actions": "Aktionen",
984
+ "cpq.specifications.offerings.columns.code": "Code",
985
+ "cpq.specifications.offerings.columns.designTimeValues": "Design-Time-Werte",
986
+ "cpq.specifications.offerings.columns.name": "Name",
987
+ "cpq.specifications.offerings.columns.status": "Status",
988
+ "cpq.specifications.offerings.confirmDelete": "Dieses Produktangebot löschen?",
989
+ "cpq.specifications.offerings.empty": "Keine Produktangebote erstellt. Ein Produktangebot ist eine verkaufsfähige Ausprägung dieser Spezifikation mit festen Design-Time-Werten und zugeordneten Gebühren.",
990
+ "cpq.specifications.offerings.error.delete": "Produktangebot konnte nicht gelöscht werden",
991
+ "cpq.specifications.offerings.error.save": "Produktangebot konnte nicht gespeichert werden",
992
+ "cpq.specifications.offerings.fields.code": "Code",
993
+ "cpq.specifications.offerings.fields.codePlaceholder": "z. B. gix-cloud-connect-aws",
994
+ "cpq.specifications.offerings.fields.description": "Beschreibung",
995
+ "cpq.specifications.offerings.fields.designTimeValues": "Design-Time-Werte",
996
+ "cpq.specifications.offerings.fields.isActive": "Aktiv?",
997
+ "cpq.specifications.offerings.fields.lifecycleStatus": "Lebenszyklusstatus",
998
+ "cpq.specifications.offerings.fields.name": "Name",
999
+ "cpq.specifications.offerings.fields.selectAttribute": "{name} auswählen...",
1000
+ "cpq.specifications.offerings.form.editTitle": "Produktangebot bearbeiten",
1001
+ "cpq.specifications.offerings.form.newTitle": "Neues Produktangebot",
1002
+ "cpq.specifications.offerings.noDesignTimeAttributes": "Für diese Spezifikation sind keine Design-Time-Attribute definiert. Alle Attribute sind Run-Time-Attribute.",
1003
+ "cpq.specifications.relationships.columns.actions": "Aktionen",
1004
+ "cpq.specifications.relationships.columns.cardinality": "Kardinalität",
1005
+ "cpq.specifications.relationships.columns.condition": "Bedingung",
1006
+ "cpq.specifications.relationships.columns.source": "Quelle",
1007
+ "cpq.specifications.relationships.columns.target": "Ziel",
1008
+ "cpq.specifications.relationships.columns.type": "Typ",
1009
+ "cpq.specifications.relationships.confirmDelete": "Diese Beziehung löschen?",
1010
+ "cpq.specifications.relationships.empty": "Keine Beziehungen definiert. Legen Sie Eltern/Kind-, Erfordert- oder Schließt-aus-Beziehungen zu anderen Spezifikationen fest.",
1011
+ "cpq.specifications.relationships.error.delete": "Beziehung konnte nicht gelöscht werden",
1012
+ "cpq.specifications.relationships.error.save": "Beziehung konnte nicht gespeichert werden",
1013
+ "cpq.specifications.relationships.fields.condition": "Bedingung (JSON)",
1014
+ "cpq.specifications.relationships.fields.conditionPlaceholder": "null oder {\"attribute\":\"direction\",\"operator\":\"in\",\"value\":[\"inbound\"]}",
1015
+ "cpq.specifications.relationships.fields.max": "Max.",
1016
+ "cpq.specifications.relationships.fields.min": "Min.",
1017
+ "cpq.specifications.relationships.fields.selectTarget": "Auswählen...",
1018
+ "cpq.specifications.relationships.fields.targetSpecification": "Zielspezifikation",
1019
+ "cpq.specifications.relationships.fields.type": "Typ",
1020
+ "cpq.specifications.relationships.form.editTitle": "Beziehung bearbeiten",
1021
+ "cpq.specifications.relationships.form.newTitle": "Neue Beziehung",
1022
+ "cpq.specifications.relationships.type.excludes": "Schließt aus",
1023
+ "cpq.specifications.relationships.type.parentChild": "Eltern / Kind",
1024
+ "cpq.specifications.relationships.type.requires": "Erfordert",
1025
+ "cpq.specifications.resolutionTime.designTime": "Design-Time (Produktangebot)",
1026
+ "cpq.specifications.resolutionTime.runTime": "Run-Time (Angebotserstellung)",
1027
+ "cpq.specifications.search.placeholder": "Spezifikationen suchen...",
1028
+ "cpq.specifications.slots.add": "+ Slot hinzufügen",
1029
+ "cpq.specifications.slots.columns.actions": "Aktionen",
1030
+ "cpq.specifications.slots.columns.cardinality": "Kardinalität",
1031
+ "cpq.specifications.slots.columns.group": "Gruppe",
1032
+ "cpq.specifications.slots.columns.name": "Name",
1033
+ "cpq.specifications.slots.columns.order": "Reihenfolge",
1034
+ "cpq.specifications.slots.columns.targetSpec": "Zielspezifikation",
1035
+ "cpq.specifications.slots.confirmDelete": "Diesen Bundle-Slot löschen?",
1036
+ "cpq.specifications.slots.empty": "Noch keine Bundle-Slots definiert. Fügen Sie Slots hinzu, um festzulegen, welche Komponentenspezifikationen dieses Bundle füllen können.",
1037
+ "cpq.specifications.slots.error.delete": "Slot konnte nicht gelöscht werden",
1038
+ "cpq.specifications.slots.error.save": "Slot konnte nicht gespeichert werden",
1039
+ "cpq.specifications.slots.fields.cardinalityMax": "Kardinalität max.",
1040
+ "cpq.specifications.slots.fields.cardinalityMaxPlaceholder": "∞ (unbegrenzt)",
1041
+ "cpq.specifications.slots.fields.cardinalityMin": "Kardinalität min.",
1042
+ "cpq.specifications.slots.fields.componentGroup": "Komponentengruppe",
1043
+ "cpq.specifications.slots.fields.componentGroupPlaceholder": "z. B. internet, tv, phone",
1044
+ "cpq.specifications.slots.fields.description": "Beschreibung",
1045
+ "cpq.specifications.slots.fields.name": "Name",
1046
+ "cpq.specifications.slots.fields.namePlaceholder": "z. B. Internet-Komponente",
1047
+ "cpq.specifications.slots.fields.selectSpecification": "— Spezifikation auswählen —",
1048
+ "cpq.specifications.slots.fields.sortOrder": "Sortierreihenfolge",
1049
+ "cpq.specifications.slots.fields.targetSpecification": "Zielspezifikation",
1050
+ "cpq.specifications.slots.form.create": "Erstellen",
1051
+ "cpq.specifications.slots.form.editTitle": "Bundle-Slot bearbeiten",
1052
+ "cpq.specifications.slots.form.newTitle": "Neuer Bundle-Slot",
1053
+ "cpq.specifications.slots.form.update": "Aktualisieren",
1054
+ "cpq.specifications.slots.tag.bundle": "Bundle",
1055
+ "cpq.specifications.slots.unknown": "Unbekannt",
1056
+ "cpq.specifications.type.bundle": "Bundle",
1057
+ "cpq.specifications.type.simple": "Einfach",
1058
+ "cpq.specifications.version": "Version",
1059
+ "cpq.statusPath.ariaLabel": "Statuspfad",
1060
+ "cpq.statusPath.transitionTo": "Wechseln zu {status}",
1061
+ "cpq.widgets.customerInventory.empty": "Keine Bestandsdatensätze gefunden.",
1062
+ "cpq.widgets.customerInventory.emptyTab": "Keine Datensätze in dieser Kategorie.",
1063
+ "cpq.widgets.customerInventory.loading": "Bestand wird geladen…",
1064
+ "cpq.widgets.customerInventory.noContext": "Kein Kundenkontext verfügbar.",
1065
+ "cpq.widgets.customerInventory.summary.activeAssets": "Aktive Assets",
1066
+ "cpq.widgets.customerInventory.summary.activeSubscriptions": "Aktive Abonnements",
1067
+ "cpq.widgets.customerInventory.summary.pendingItems": "Ausstehende Positionen",
1068
+ "cpq.widgets.customerInventory.summary.totalMrc": "MRC gesamt",
1069
+ "cpq.widgets.customerInventory.table.billing": "Abrechnung",
1070
+ "cpq.widgets.customerInventory.table.linkedSubscription": "Abo {id}…",
1071
+ "cpq.widgets.customerInventory.table.linkedTo": "Verknüpft mit",
1072
+ "cpq.widgets.customerInventory.table.mrc": "MRC",
1073
+ "cpq.widgets.customerInventory.table.name": "Name",
1074
+ "cpq.widgets.customerInventory.table.nrc": "NRC",
1075
+ "cpq.widgets.customerInventory.table.price": "Preis",
1076
+ "cpq.widgets.customerInventory.table.qty": "Menge",
1077
+ "cpq.widgets.customerInventory.table.startDate": "Startdatum",
1078
+ "cpq.widgets.customerInventory.table.status": "Status",
1079
+ "cpq.widgets.customerInventory.table.termEnd": "Laufzeitende",
1080
+ "cpq.widgets.customerInventory.table.type": "Typ",
1081
+ "cpq.widgets.customerInventory.tabs.assets": "Assets",
1082
+ "cpq.widgets.customerInventory.tabs.items": "Abonnementpositionen",
1083
+ "cpq.widgets.customerInventory.tabs.subscriptions": "Abonnements",
1084
+ "cpq.widgets.customerInventory.viewFull": "Gesamten Bestand anzeigen →",
1085
+ "cpq.widgets.orderCpqTab.empty": "Mit dieser Vertriebsbestellung sind keine CPQ-Bestellungen verknüpft.",
1086
+ "cpq.widgets.orderCpqTab.loading": "CPQ-Bestellungen werden geladen…",
1087
+ "cpq.widgets.orderCpqTab.open": "Öffnen →",
1088
+ "cpq.widgets.orderCpqTab.tab": "CPQ-Bestellung",
1089
+ "cpq.widgets.quoteConfigurator.assignCustomer": "Weisen Sie diesem Angebot zuerst einen Kunden zu.",
1090
+ "cpq.widgets.quoteConfigurator.charges.charge": "Gebühr",
1091
+ "cpq.widgets.quoteConfigurator.charges.qty": "Menge",
1092
+ "cpq.widgets.quoteConfigurator.charges.total": "Gesamt",
1093
+ "cpq.widgets.quoteConfigurator.charges.type": "Art",
1094
+ "cpq.widgets.quoteConfigurator.charges.unitPrice": "Stückpreis",
1095
+ "cpq.widgets.quoteConfigurator.create": "CPQ-Angebot erstellen",
1096
+ "cpq.widgets.quoteConfigurator.loading": "CPQ-Konfiguration wird geladen…",
1097
+ "cpq.widgets.quoteConfigurator.noConfig": "Dieses Angebot hat noch keine CPQ-Konfiguration.",
1098
+ "cpq.widgets.quoteConfigurator.noContext": "Kein Angebotskontext verfügbar.",
1099
+ "cpq.widgets.quoteConfigurator.noLines": "Noch keine Positionen konfiguriert.",
1100
+ "cpq.widgets.quoteConfigurator.open": "CPQ-Konfigurator öffnen",
1101
+ "cpq.widgets.quoteConfigurator.tab": "CPQ-Konfiguration",
1102
+ "cpq.wizard.linePricing": "{nrc} NRC / {mrc} MRC",
1103
+ "cpq.wizard.loadingAttributes": "Attribute werden geladen...",
1104
+ "cpq.wizard.next": "Weiter",
1105
+ "cpq.wizard.remove": "Entfernen",
1106
+ "cpq.wizard.runner.currentStep": "Schritt: {title}",
1107
+ "cpq.wizard.runner.notRegistered": "Dieser Schritttyp ist nicht registriert. Registrieren Sie ihn über",
1108
+ "cpq.wizard.runner.unknownStepType": "Unbekannter Schritttyp:",
1109
+ "cpq.wizard.selectPlaceholder": "Auswählen...",
1110
+ "cpq.wizard.skip": "Überspringen",
1111
+ "cpq.wizard.steps.customerSelect.clear": "Zurücksetzen",
1112
+ "cpq.wizard.steps.customerSelect.description": "Kunden für das Angebot suchen und auswählen.",
1113
+ "cpq.wizard.steps.customerSelect.empty": "Keine Kunden gefunden.",
1114
+ "cpq.wizard.steps.customerSelect.label": "Kundenauswahl",
1115
+ "cpq.wizard.steps.customerSelect.search": "Suchen",
1116
+ "cpq.wizard.steps.customerSelect.searchPlaceholder": "Kunden suchen...",
1117
+ "cpq.wizard.steps.customerSelect.searching": "Suche läuft...",
1118
+ "cpq.wizard.steps.customerSelect.selected": "Ausgewählt:",
1119
+ "cpq.wizard.steps.inventorySelect.description": "Bestehende Positionen aus dem Kundenbestand auswählen (Platzhalter — Bestandsdomäne ausstehend).",
1120
+ "cpq.wizard.steps.inventorySelect.label": "Bestandsauswahl",
1121
+ "cpq.wizard.steps.inventorySelect.notImplemented": "Dieser Schritttyp ist noch nicht implementiert. Sobald die Bestandsdomäne verfügbar ist, können damit bestehende Positionen aus dem Kundenbestand zur Änderung oder Verlängerung ausgewählt werden.",
1122
+ "cpq.wizard.steps.inventorySelect.title": "Bestandsauswahl",
1123
+ "cpq.wizard.steps.itemList.count.one": "{count} Position",
1124
+ "cpq.wizard.steps.itemList.count.other": "{count} Positionen",
1125
+ "cpq.wizard.steps.itemList.description": "Untergeordnete Positionen im Angebot anzeigen und verwalten.",
1126
+ "cpq.wizard.steps.itemList.empty": "Noch keine Positionen hinzugefügt.",
1127
+ "cpq.wizard.steps.itemList.hint": "Fügen Sie über den Produktangebots-Browser Positionen zum Angebot hinzu und kehren Sie dann hierher zurück.",
1128
+ "cpq.wizard.steps.itemList.label": "Positionsliste",
1129
+ "cpq.wizard.steps.itemList.loading": "Positionen werden geladen...",
1130
+ "cpq.wizard.steps.itemList.max": "(max.: {max})",
1131
+ "cpq.wizard.steps.itemList.min": "(min.: {min})",
1132
+ "cpq.wizard.steps.itemList.needsConfiguration": "Konfiguration erforderlich",
1133
+ "cpq.wizard.steps.itemList.refresh": "Aktualisieren",
1134
+ "cpq.wizard.steps.offeringSelect.add": "+ Hinzufügen",
1135
+ "cpq.wizard.steps.offeringSelect.added": "Hinzugefügt",
1136
+ "cpq.wizard.steps.offeringSelect.bandwidth.exceeded": "Die Gesamtbandbreite überschreitet die Portkapazität um {excess} MB",
1137
+ "cpq.wizard.steps.offeringSelect.bandwidth.title": "Bandbreitenauslastung",
1138
+ "cpq.wizard.steps.offeringSelect.bandwidth.usage": "{used} / {capacity} MB",
1139
+ "cpq.wizard.steps.offeringSelect.description": "Produktangebot im Katalog durchsuchen und auswählen.",
1140
+ "cpq.wizard.steps.offeringSelect.empty": "Keine Produktangebote verfügbar.",
1141
+ "cpq.wizard.steps.offeringSelect.label": "Produktangebotsauswahl",
1142
+ "cpq.wizard.steps.offeringSelect.loading": "Produktangebote werden geladen...",
1143
+ "cpq.wizard.steps.offeringSelect.noAttributes": "Keine konfigurierbaren Attribute.",
1144
+ "cpq.wizard.steps.offeringSelect.selected": "Ausgewählt ({count})",
1145
+ "cpq.wizard.steps.offeringSelect.selectedServices": "Ausgewählte Dienste ({count})",
1146
+ "cpq.wizard.steps.productConfigure.description": "Run-Time-Attribute für das ausgewählte Produktangebot konfigurieren.",
1147
+ "cpq.wizard.steps.productConfigure.label": "Produktkonfiguration",
1148
+ "cpq.wizard.steps.productConfigure.noOffering": "Kein Produktangebot ausgewählt. Bitte gehen Sie zurück und wählen Sie ein Produktangebot aus.",
1149
+ "cpq.wizard.steps.review.charges.charge": "Gebühr",
1150
+ "cpq.wizard.steps.review.charges.price": "Preis",
1151
+ "cpq.wizard.steps.review.charges.type": "Art",
1152
+ "cpq.wizard.steps.review.complete": "Abschließen",
1153
+ "cpq.wizard.steps.review.description": "Angebotsübersicht prüfen und absenden.",
1154
+ "cpq.wizard.steps.review.discounts": "Rabatte",
1155
+ "cpq.wizard.steps.review.items": "Positionen ({count})",
1156
+ "cpq.wizard.steps.review.label": "Prüfen & Absenden",
1157
+ "cpq.wizard.steps.review.loading": "Angebotsübersicht wird geladen...",
1158
+ "cpq.wizard.steps.review.mrcTotal": "MRC gesamt",
1159
+ "cpq.wizard.steps.review.noData": "Keine Angebotsdaten verfügbar. Bitte gehen Sie zurück und konfigurieren Sie Positionen.",
1160
+ "cpq.wizard.steps.review.nrcTotal": "NRC gesamt",
1161
+ "cpq.wizard.steps.review.quantity": "Menge: {quantity}",
1162
+ "cpq.wizard.steps.review.submitting": "Wird gesendet...",
1163
+ "cpq.wizard.steps.review.summaryTitle": "Angebotsübersicht",
1164
+ "cpq.wizard.steps.review.surcharges": "Aufschläge",
1165
+ "cpq.wizard.trigger.apiError": "API-Fehler {status}",
1166
+ "cpq.wizard.trigger.failed": "Assistent konnte nicht gestartet werden",
1167
+ "cpq.wizard.trigger.notFound": "Kein passender Assistent gefunden",
1168
+ "cpq.wizard.trigger.start": "Assistent starten",
1169
+ "cpq.wizard.trigger.starting": "Wird gestartet...",
1170
+ "cpq.wizards.actions.details": "Details anzeigen",
1171
+ "cpq.wizards.actions.preview": "Vorschau",
1172
+ "cpq.wizards.detail.active": "Aktiv",
1173
+ "cpq.wizards.detail.code": "Code",
1174
+ "cpq.wizards.detail.config": "Konfiguration",
1175
+ "cpq.wizards.detail.customerSegments": "Kundensegmente",
1176
+ "cpq.wizards.detail.noApplicability": "Keine Anwendbarkeitseinschränkungen",
1177
+ "cpq.wizards.detail.noTransitions": "Keine Übergänge (Endschritt)",
1178
+ "cpq.wizards.detail.none": "keine",
1179
+ "cpq.wizards.detail.offeringCodes": "Produktangebotscodes",
1180
+ "cpq.wizards.detail.optional": "optional",
1181
+ "cpq.wizards.detail.priority": "Priorität",
1182
+ "cpq.wizards.detail.sections.applicability": "Anwendbarkeit",
1183
+ "cpq.wizards.detail.sections.general": "Allgemein",
1184
+ "cpq.wizards.detail.sections.metadata": "Metadaten",
1185
+ "cpq.wizards.detail.sections.paramsSchema": "Parameterschema",
1186
+ "cpq.wizards.detail.sections.steps": "Schritte ({count})",
1187
+ "cpq.wizards.detail.specCodes": "Spezifikationscodes",
1188
+ "cpq.wizards.detail.stepId": "Schritt-ID",
1189
+ "cpq.wizards.detail.surface": "Oberfläche",
1190
+ "cpq.wizards.detail.transitionDefault": "Standard",
1191
+ "cpq.wizards.detail.transitionWhen": "wenn {field} {operator}",
1192
+ "cpq.wizards.detail.transitions": "Übergänge ({count})",
1193
+ "cpq.wizards.detail.type": "Typ",
1194
+ "cpq.wizards.detail.validationRules": "Validierungsregeln",
1195
+ "cpq.wizards.detail.version": "Version",
1196
+ "cpq.wizards.empty": "Noch keine Assistentendefinitionen. Erstellen Sie eine über die API.",
1197
+ "cpq.wizards.filters.isActive": "Aktiv",
1198
+ "cpq.wizards.filters.surface": "Oberfläche",
1199
+ "cpq.wizards.list.error.load": "Assistenten konnten nicht geladen werden",
1200
+ "cpq.wizards.list.title": "Assistenten",
1201
+ "cpq.wizards.runner.allWizards": "Alle Assistenten",
1202
+ "cpq.wizards.runner.backToList": "Zurück zu Assistenten",
1203
+ "cpq.wizards.runner.errors.api": "API-Fehler {status}",
1204
+ "cpq.wizards.runner.errors.invalidCode": "Ungültiger Code der Assistentendefinition",
1205
+ "cpq.wizards.runner.errors.load": "Assistent konnte nicht geladen werden",
1206
+ "cpq.wizards.runner.loading": "Assistent wird geladen...",
1207
+ "cpq.wizards.runner.notFound": "Assistent nicht gefunden.",
1208
+ "cpq.wizards.runner.params.format": "Format: {format}",
1209
+ "cpq.wizards.runner.params.hint": "Füllen Sie vor dem Start die Pflichtfelder aus.",
1210
+ "cpq.wizards.runner.params.start": "Assistent in der Vorschau öffnen",
1211
+ "cpq.wizards.runner.params.title": "Dieser Assistent benötigt Eingabeparameter",
1212
+ "cpq.wizards.search.placeholder": "Assistenten suchen...",
1213
+ "cpq.wizards.table.active": "Aktiv",
1214
+ "cpq.wizards.table.code": "Code",
1215
+ "cpq.wizards.table.name": "Name",
1216
+ "cpq.wizards.table.steps": "Schritte",
1217
+ "cpq.wizards.table.surface": "Oberfläche",
1218
+ "cpq.wizards.table.version": "Version",
1219
+ "cpq.wizards.title": "Assistenten"
1220
+ }