@floristcloud/api-lib 1.2.131 → 1.2.132

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.
@@ -3,12 +3,19 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.PreOrderProductInfoSchema = void 0;
4
4
  const zod_1 = require("zod");
5
5
  const action_log_money_schema_1 = require("./action-log-money.schema");
6
+ /**
7
+ * Снимок позиции предзаказа в журнале аудита.
8
+ *
9
+ * `name` и `price` — nullable: у позиции предзаказа наименование и цена появляются не сразу
10
+ * (в БД `pre_order_product.name` и `price` тоже nullable), и журнал фиксирует позицию такой,
11
+ * какой она была на момент события. Записи с `null` уже лежат в `action_log.payload`.
12
+ */
6
13
  exports.PreOrderProductInfoSchema = zod_1.z.object({
7
14
  preOrderUUID: zod_1.z.string(),
8
15
  preOrderProductUUID: zod_1.z.string(),
9
- name: zod_1.z.string(),
16
+ name: zod_1.z.string().nullable(),
10
17
  categoryName: zod_1.z.string().nullable(),
11
18
  quantity: zod_1.z.coerce.number(),
12
- price: action_log_money_schema_1.ActionLogMoneySchema,
19
+ price: action_log_money_schema_1.ActionLogMoneySchema.nullable(),
13
20
  comment: zod_1.z.string().nullable(),
14
21
  });
@@ -7,6 +7,7 @@ const action_log_money_schema_1 = require("./action-log-money.schema");
7
7
  exports.PreOrderProductUpdateActionLogSchema = zod_1.z.object({
8
8
  preOrderProduct: pre_order_product_info_schema_1.PreOrderProductInfoSchema,
9
9
  newQuantity: zod_1.z.coerce.number(),
10
- newPrice: action_log_money_schema_1.ActionLogMoneySchema,
10
+ // Цену позиции предзаказа можно снять — новое значение бывает null, см. PreOrderProductInfoSchema.
11
+ newPrice: action_log_money_schema_1.ActionLogMoneySchema.nullable(),
11
12
  newComment: zod_1.z.string().nullable(),
12
13
  });
@@ -91,6 +91,23 @@ exports.ProductExtendedForClientSchema = exports.ProductForClientSchema.merge(zo
91
91
  isInStock: zod_1.z.boolean(),
92
92
  }),
93
93
  multiplicityOptions: zod_1.z.array(product_multiplicity_option_for_client_schema_1.ProductMultiplicityOptionForClientSchema).optional(),
94
+ /**
95
+ * Правила клиента, снижающие **базовую цену товара**, — и только они.
96
+ *
97
+ * Правило, оставляющее цену как есть, в список не попадает: это не скидка, а «скидка» с
98
+ * той же ценой рядом. Так выходит у правила от себестоимости, когда «себестоимость +
99
+ * наценка» вышла выше прайса, и у скидки в 0 %. Отбор общий с панелью
100
+ * (`GetProductDiscountPriceContractQuery`) — правила отбираются одинаково.
101
+ *
102
+ * Список считается от базовой цены товара, поэтому пустой список **не означает**, что у
103
+ * клиента нет скидочных цен по этому товару вовсе: у кратности своя база, и правило может
104
+ * снижать цену фасовки, не снижая цену штуки. Цена каждой фасовки — в её собственных
105
+ * `optionPriceWithDiscount` и `isDiscountApplicable`, там результат уже посчитан от нужной
106
+ * базы. Пример: прайс 50, фасовка 80, «себестоимость + наценка» 60 — список пуст, а
107
+ * фасовка идёт по 60.
108
+ *
109
+ * Порядок не зафиксирован — лучшую цену базового тарифа берите из `priceWithBestDiscount`.
110
+ */
94
111
  discountDataList: zod_1.z
95
112
  .object({
96
113
  discountRulesUUID: zod_1.z.string(),
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@floristcloud/api-lib",
3
- "version": "1.2.131",
3
+ "version": "1.2.132",
4
4
  "description": "",
5
5
  "main": "./build/index.js",
6
6
  "scripts": {
@@ -1,12 +1,19 @@
1
1
  import { z } from 'zod';
2
2
  import { ActionLogMoneySchema } from './action-log-money.schema';
3
3
 
4
+ /**
5
+ * Снимок позиции предзаказа в журнале аудита.
6
+ *
7
+ * `name` и `price` — nullable: у позиции предзаказа наименование и цена появляются не сразу
8
+ * (в БД `pre_order_product.name` и `price` тоже nullable), и журнал фиксирует позицию такой,
9
+ * какой она была на момент события. Записи с `null` уже лежат в `action_log.payload`.
10
+ */
4
11
  export const PreOrderProductInfoSchema = z.object({
5
12
  preOrderUUID: z.string(),
6
13
  preOrderProductUUID: z.string(),
7
- name: z.string(),
14
+ name: z.string().nullable(),
8
15
  categoryName: z.string().nullable(),
9
16
  quantity: z.coerce.number(),
10
- price: ActionLogMoneySchema,
17
+ price: ActionLogMoneySchema.nullable(),
11
18
  comment: z.string().nullable(),
12
19
  });
@@ -5,6 +5,7 @@ import { ActionLogMoneySchema } from './action-log-money.schema';
5
5
  export const PreOrderProductUpdateActionLogSchema = z.object({
6
6
  preOrderProduct: PreOrderProductInfoSchema,
7
7
  newQuantity: z.coerce.number(),
8
- newPrice: ActionLogMoneySchema,
8
+ // Цену позиции предзаказа можно снять — новое значение бывает null, см. PreOrderProductInfoSchema.
9
+ newPrice: ActionLogMoneySchema.nullable(),
9
10
  newComment: z.string().nullable(),
10
11
  });
@@ -98,6 +98,23 @@ export const ProductExtendedForClientSchema = ProductForClientSchema.merge(
98
98
  isInStock: z.boolean(),
99
99
  }),
100
100
  multiplicityOptions: z.array(ProductMultiplicityOptionForClientSchema).optional(),
101
+ /**
102
+ * Правила клиента, снижающие **базовую цену товара**, — и только они.
103
+ *
104
+ * Правило, оставляющее цену как есть, в список не попадает: это не скидка, а «скидка» с
105
+ * той же ценой рядом. Так выходит у правила от себестоимости, когда «себестоимость +
106
+ * наценка» вышла выше прайса, и у скидки в 0 %. Отбор общий с панелью
107
+ * (`GetProductDiscountPriceContractQuery`) — правила отбираются одинаково.
108
+ *
109
+ * Список считается от базовой цены товара, поэтому пустой список **не означает**, что у
110
+ * клиента нет скидочных цен по этому товару вовсе: у кратности своя база, и правило может
111
+ * снижать цену фасовки, не снижая цену штуки. Цена каждой фасовки — в её собственных
112
+ * `optionPriceWithDiscount` и `isDiscountApplicable`, там результат уже посчитан от нужной
113
+ * базы. Пример: прайс 50, фасовка 80, «себестоимость + наценка» 60 — список пуст, а
114
+ * фасовка идёт по 60.
115
+ *
116
+ * Порядок не зафиксирован — лучшую цену базового тарифа берите из `priceWithBestDiscount`.
117
+ */
101
118
  discountDataList: z
102
119
  .object({
103
120
  discountRulesUUID: z.string(),