@mamindom/contracts 1.0.211 → 1.0.213
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.
- package/dist/gen/calculation.d.ts +20 -0
- package/dist/gen/crm_calculation.d.ts +28 -0
- package/dist/gen/crm_calculation.js +1 -0
- package/dist/gen/promotion.d.ts +12 -0
- package/dist/proto/calculation.proto +19 -0
- package/dist/proto/crm_calculation.proto +20 -0
- package/dist/proto/promotion.proto +11 -0
- package/gen/calculation.ts +21 -0
- package/gen/crm_calculation.ts +37 -0
- package/gen/promotion.ts +17 -1
- package/package.json +1 -1
- package/proto/calculation.proto +19 -0
- package/proto/crm_calculation.proto +20 -0
- package/proto/promotion.proto +11 -0
|
@@ -53,16 +53,36 @@ export interface GiftSuggestion {
|
|
|
53
53
|
productIds: string[];
|
|
54
54
|
minOrderAmount: number;
|
|
55
55
|
}
|
|
56
|
+
/**
|
|
57
|
+
* Частка знижки, що припадає на КОНКРЕТНУ позицію кошика.
|
|
58
|
+
*
|
|
59
|
+
* `item_index` — позиція в масиві `items` запиту, а не productId: у кошику
|
|
60
|
+
* можуть лежати два рядки одного товару (різні варіанти/кольори), і за
|
|
61
|
+
* productId їх не розрізнити. Порядок масиву зберігається на всьому шляху,
|
|
62
|
+
* тож індекс однозначний.
|
|
63
|
+
*/
|
|
64
|
+
export interface ItemDiscount {
|
|
65
|
+
itemIndex: number;
|
|
66
|
+
amount: number;
|
|
67
|
+
}
|
|
56
68
|
export interface AppliedPromotion {
|
|
57
69
|
promotionId: string;
|
|
58
70
|
promotionName: string;
|
|
59
71
|
discountAmount: number;
|
|
72
|
+
/**
|
|
73
|
+
* Рознесення `discount_amount` по позиціях. Двигун знає, з яких саме
|
|
74
|
+
* одиниць він зняв гроші (найдешевші в подарунок, найдорожчі в набір,
|
|
75
|
+
* задані позиції в чеку), і віддає це назовні. Порожній масив = споживач
|
|
76
|
+
* має право розкласти суму пропорційно сам.
|
|
77
|
+
*/
|
|
78
|
+
itemDiscounts: ItemDiscount[];
|
|
60
79
|
}
|
|
61
80
|
export interface AppliedCoupon {
|
|
62
81
|
couponId: string;
|
|
63
82
|
code: string;
|
|
64
83
|
promotionId: string;
|
|
65
84
|
discountAmount: number;
|
|
85
|
+
itemDiscounts: ItemDiscount[];
|
|
66
86
|
}
|
|
67
87
|
export declare const PROMO_V1_PACKAGE_NAME = "promo.v1";
|
|
68
88
|
export interface PromoCalculationServiceClient {
|
|
@@ -1,5 +1,11 @@
|
|
|
1
1
|
import { Observable } from "rxjs";
|
|
2
2
|
export declare const protobufPackage = "crm.v1";
|
|
3
|
+
export interface GetCalculationModeRequest {
|
|
4
|
+
}
|
|
5
|
+
export interface GetCalculationModeResponse {
|
|
6
|
+
/** true — джерело правди щодо акцій це CRM. */
|
|
7
|
+
crmPromotions: boolean;
|
|
8
|
+
}
|
|
3
9
|
export interface CrmCalculationItem {
|
|
4
10
|
productId: string;
|
|
5
11
|
variantId: string;
|
|
@@ -56,6 +62,14 @@ export interface CalculateCartResponse {
|
|
|
56
62
|
crmCommentId: string;
|
|
57
63
|
rawResult: string;
|
|
58
64
|
durationMs: number;
|
|
65
|
+
/**
|
|
66
|
+
* Чому підсумок узяли НЕ з CRM. Порожнє — узяли з CRM.
|
|
67
|
+
*
|
|
68
|
+
* Без цього поля «CRM не порахувала» виглядало точно так само, як «у CRM
|
|
69
|
+
* немає акцій»: кошик показував локальний розрахунок під міткою PLANFIX, і
|
|
70
|
+
* менеджер не мав жодного способу відрізнити ці випадки.
|
|
71
|
+
*/
|
|
72
|
+
fallbackReason: string;
|
|
59
73
|
}
|
|
60
74
|
export interface ReserveBonusesRequest {
|
|
61
75
|
userId: string;
|
|
@@ -105,6 +119,13 @@ export interface CrmCalculationServiceClient {
|
|
|
105
119
|
reserveBonuses(request: ReserveBonusesRequest): Observable<ReserveBonusesResponse>;
|
|
106
120
|
releaseBonusReserve(request: ReleaseBonusReserveRequest): Observable<ReleaseBonusReserveResponse>;
|
|
107
121
|
getCustomerProfile(request: GetCustomerProfileRequest): Observable<GetCustomerProfileResponse>;
|
|
122
|
+
/**
|
|
123
|
+
* Чи рахує акції CRM. Кошику це потрібно, щоб не показувати ВЛАСНІ
|
|
124
|
+
* автоакції поверх тих, які потім перерахує CRM: інакше клієнт бачить одну
|
|
125
|
+
* знижку в кошику й іншу на чекауті, а менеджер — «акція є в CRM, а сайт її
|
|
126
|
+
* не бачить».
|
|
127
|
+
*/
|
|
128
|
+
getCalculationMode(request: GetCalculationModeRequest): Observable<GetCalculationModeResponse>;
|
|
108
129
|
}
|
|
109
130
|
export interface CrmCalculationServiceController {
|
|
110
131
|
calculateCart(request: CalculateCartRequest): Promise<CalculateCartResponse> | Observable<CalculateCartResponse> | CalculateCartResponse;
|
|
@@ -112,6 +133,13 @@ export interface CrmCalculationServiceController {
|
|
|
112
133
|
reserveBonuses(request: ReserveBonusesRequest): Promise<ReserveBonusesResponse> | Observable<ReserveBonusesResponse> | ReserveBonusesResponse;
|
|
113
134
|
releaseBonusReserve(request: ReleaseBonusReserveRequest): Promise<ReleaseBonusReserveResponse> | Observable<ReleaseBonusReserveResponse> | ReleaseBonusReserveResponse;
|
|
114
135
|
getCustomerProfile(request: GetCustomerProfileRequest): Promise<GetCustomerProfileResponse> | Observable<GetCustomerProfileResponse> | GetCustomerProfileResponse;
|
|
136
|
+
/**
|
|
137
|
+
* Чи рахує акції CRM. Кошику це потрібно, щоб не показувати ВЛАСНІ
|
|
138
|
+
* автоакції поверх тих, які потім перерахує CRM: інакше клієнт бачить одну
|
|
139
|
+
* знижку в кошику й іншу на чекауті, а менеджер — «акція є в CRM, а сайт її
|
|
140
|
+
* не бачить».
|
|
141
|
+
*/
|
|
142
|
+
getCalculationMode(request: GetCalculationModeRequest): Promise<GetCalculationModeResponse> | Observable<GetCalculationModeResponse> | GetCalculationModeResponse;
|
|
115
143
|
}
|
|
116
144
|
export declare function CrmCalculationServiceControllerMethods(): (constructor: Function) => void;
|
|
117
145
|
export declare const CRM_CALCULATION_SERVICE_NAME = "CrmCalculationService";
|
|
@@ -19,6 +19,7 @@ function CrmCalculationServiceControllerMethods() {
|
|
|
19
19
|
"reserveBonuses",
|
|
20
20
|
"releaseBonusReserve",
|
|
21
21
|
"getCustomerProfile",
|
|
22
|
+
"getCalculationMode",
|
|
22
23
|
];
|
|
23
24
|
for (const method of grpcMethods) {
|
|
24
25
|
const descriptor = Reflect.getOwnPropertyDescriptor(constructor.prototype, method);
|
package/dist/gen/promotion.d.ts
CHANGED
|
@@ -179,6 +179,18 @@ export interface PromotionListItem {
|
|
|
179
179
|
source?: string | undefined;
|
|
180
180
|
planfixId?: string | undefined;
|
|
181
181
|
seoSlug?: string | undefined;
|
|
182
|
+
/**
|
|
183
|
+
* Параметри механіки — щоб список показував, ЩО саме дає акція.
|
|
184
|
+
* Без них бандли, каскади й позиційні знижки малювались як «0 %»:
|
|
185
|
+
* їхня знижка живе не в `discount_value`, і рядок виглядав зламаним.
|
|
186
|
+
*/
|
|
187
|
+
buyQuantity?: number | undefined;
|
|
188
|
+
getQuantity?: number | undefined;
|
|
189
|
+
bundlePrice?: number | undefined;
|
|
190
|
+
bundleSize?: number | undefined;
|
|
191
|
+
/** JSON-рядком — так само, як у детальному повідомленні вище. */
|
|
192
|
+
cascadeSteps?: string | undefined;
|
|
193
|
+
positionSteps?: string | undefined;
|
|
182
194
|
}
|
|
183
195
|
export interface PromotionListItem_NameEntry {
|
|
184
196
|
key: string;
|
|
@@ -90,10 +90,27 @@ message GiftSuggestion {
|
|
|
90
90
|
double min_order_amount = 5;
|
|
91
91
|
}
|
|
92
92
|
|
|
93
|
+
// Частка знижки, що припадає на КОНКРЕТНУ позицію кошика.
|
|
94
|
+
//
|
|
95
|
+
// `item_index` — позиція в масиві `items` запиту, а не productId: у кошику
|
|
96
|
+
// можуть лежати два рядки одного товару (різні варіанти/кольори), і за
|
|
97
|
+
// productId їх не розрізнити. Порядок масиву зберігається на всьому шляху,
|
|
98
|
+
// тож індекс однозначний.
|
|
99
|
+
message ItemDiscount {
|
|
100
|
+
int32 item_index = 1;
|
|
101
|
+
double amount = 2;
|
|
102
|
+
}
|
|
103
|
+
|
|
93
104
|
message AppliedPromotion {
|
|
94
105
|
string promotion_id = 1;
|
|
95
106
|
string promotion_name = 2;
|
|
96
107
|
double discount_amount = 3;
|
|
108
|
+
|
|
109
|
+
// Рознесення `discount_amount` по позиціях. Двигун знає, з яких саме
|
|
110
|
+
// одиниць він зняв гроші (найдешевші в подарунок, найдорожчі в набір,
|
|
111
|
+
// задані позиції в чеку), і віддає це назовні. Порожній масив = споживач
|
|
112
|
+
// має право розкласти суму пропорційно сам.
|
|
113
|
+
repeated ItemDiscount item_discounts = 4;
|
|
97
114
|
}
|
|
98
115
|
|
|
99
116
|
message AppliedCoupon {
|
|
@@ -101,5 +118,7 @@ message AppliedCoupon {
|
|
|
101
118
|
string code = 2;
|
|
102
119
|
string promotion_id = 3;
|
|
103
120
|
double discount_amount = 4;
|
|
121
|
+
|
|
122
|
+
repeated ItemDiscount item_discounts = 5;
|
|
104
123
|
}
|
|
105
124
|
|
|
@@ -11,6 +11,19 @@ service CrmCalculationService {
|
|
|
11
11
|
rpc ReleaseBonusReserve(ReleaseBonusReserveRequest) returns (ReleaseBonusReserveResponse);
|
|
12
12
|
|
|
13
13
|
rpc GetCustomerProfile(GetCustomerProfileRequest) returns (GetCustomerProfileResponse);
|
|
14
|
+
|
|
15
|
+
// Чи рахує акції CRM. Кошику це потрібно, щоб не показувати ВЛАСНІ
|
|
16
|
+
// автоакції поверх тих, які потім перерахує CRM: інакше клієнт бачить одну
|
|
17
|
+
// знижку в кошику й іншу на чекауті, а менеджер — «акція є в CRM, а сайт її
|
|
18
|
+
// не бачить».
|
|
19
|
+
rpc GetCalculationMode(GetCalculationModeRequest) returns (GetCalculationModeResponse);
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
message GetCalculationModeRequest {}
|
|
23
|
+
|
|
24
|
+
message GetCalculationModeResponse {
|
|
25
|
+
// true — джерело правди щодо акцій це CRM.
|
|
26
|
+
bool crm_promotions = 1;
|
|
14
27
|
}
|
|
15
28
|
|
|
16
29
|
message CrmCalculationItem {
|
|
@@ -83,6 +96,13 @@ message CalculateCartResponse {
|
|
|
83
96
|
string raw_result = 15;
|
|
84
97
|
|
|
85
98
|
int32 duration_ms = 16;
|
|
99
|
+
|
|
100
|
+
// Чому підсумок узяли НЕ з CRM. Порожнє — узяли з CRM.
|
|
101
|
+
//
|
|
102
|
+
// Без цього поля «CRM не порахувала» виглядало точно так само, як «у CRM
|
|
103
|
+
// немає акцій»: кошик показував локальний розрахунок під міткою PLANFIX, і
|
|
104
|
+
// менеджер не мав жодного способу відрізнити ці випадки.
|
|
105
|
+
string fallback_reason = 17;
|
|
86
106
|
}
|
|
87
107
|
|
|
88
108
|
message ReserveBonusesRequest {
|
|
@@ -216,6 +216,17 @@ message PromotionListItem {
|
|
|
216
216
|
optional string source = 16;
|
|
217
217
|
optional string planfix_id = 17;
|
|
218
218
|
optional string seo_slug = 18;
|
|
219
|
+
|
|
220
|
+
// Параметри механіки — щоб список показував, ЩО саме дає акція.
|
|
221
|
+
// Без них бандли, каскади й позиційні знижки малювались як «0 %»:
|
|
222
|
+
// їхня знижка живе не в `discount_value`, і рядок виглядав зламаним.
|
|
223
|
+
optional int32 buy_quantity = 19;
|
|
224
|
+
optional int32 get_quantity = 20;
|
|
225
|
+
optional double bundle_price = 21;
|
|
226
|
+
optional int32 bundle_size = 22;
|
|
227
|
+
// JSON-рядком — так само, як у детальному повідомленні вище.
|
|
228
|
+
optional string cascade_steps = 23;
|
|
229
|
+
optional string position_steps = 24;
|
|
219
230
|
}
|
|
220
231
|
|
|
221
232
|
|
package/gen/calculation.ts
CHANGED
|
@@ -69,10 +69,30 @@ export interface GiftSuggestion {
|
|
|
69
69
|
minOrderAmount: number;
|
|
70
70
|
}
|
|
71
71
|
|
|
72
|
+
/**
|
|
73
|
+
* Частка знижки, що припадає на КОНКРЕТНУ позицію кошика.
|
|
74
|
+
*
|
|
75
|
+
* `item_index` — позиція в масиві `items` запиту, а не productId: у кошику
|
|
76
|
+
* можуть лежати два рядки одного товару (різні варіанти/кольори), і за
|
|
77
|
+
* productId їх не розрізнити. Порядок масиву зберігається на всьому шляху,
|
|
78
|
+
* тож індекс однозначний.
|
|
79
|
+
*/
|
|
80
|
+
export interface ItemDiscount {
|
|
81
|
+
itemIndex: number;
|
|
82
|
+
amount: number;
|
|
83
|
+
}
|
|
84
|
+
|
|
72
85
|
export interface AppliedPromotion {
|
|
73
86
|
promotionId: string;
|
|
74
87
|
promotionName: string;
|
|
75
88
|
discountAmount: number;
|
|
89
|
+
/**
|
|
90
|
+
* Рознесення `discount_amount` по позиціях. Двигун знає, з яких саме
|
|
91
|
+
* одиниць він зняв гроші (найдешевші в подарунок, найдорожчі в набір,
|
|
92
|
+
* задані позиції в чеку), і віддає це назовні. Порожній масив = споживач
|
|
93
|
+
* має право розкласти суму пропорційно сам.
|
|
94
|
+
*/
|
|
95
|
+
itemDiscounts: ItemDiscount[];
|
|
76
96
|
}
|
|
77
97
|
|
|
78
98
|
export interface AppliedCoupon {
|
|
@@ -80,6 +100,7 @@ export interface AppliedCoupon {
|
|
|
80
100
|
code: string;
|
|
81
101
|
promotionId: string;
|
|
82
102
|
discountAmount: number;
|
|
103
|
+
itemDiscounts: ItemDiscount[];
|
|
83
104
|
}
|
|
84
105
|
|
|
85
106
|
export const PROMO_V1_PACKAGE_NAME = "promo.v1";
|
package/gen/crm_calculation.ts
CHANGED
|
@@ -10,6 +10,14 @@ import { Observable } from "rxjs";
|
|
|
10
10
|
|
|
11
11
|
export const protobufPackage = "crm.v1";
|
|
12
12
|
|
|
13
|
+
export interface GetCalculationModeRequest {
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
export interface GetCalculationModeResponse {
|
|
17
|
+
/** true — джерело правди щодо акцій це CRM. */
|
|
18
|
+
crmPromotions: boolean;
|
|
19
|
+
}
|
|
20
|
+
|
|
13
21
|
export interface CrmCalculationItem {
|
|
14
22
|
productId: string;
|
|
15
23
|
variantId: string;
|
|
@@ -71,6 +79,14 @@ export interface CalculateCartResponse {
|
|
|
71
79
|
crmCommentId: string;
|
|
72
80
|
rawResult: string;
|
|
73
81
|
durationMs: number;
|
|
82
|
+
/**
|
|
83
|
+
* Чому підсумок узяли НЕ з CRM. Порожнє — узяли з CRM.
|
|
84
|
+
*
|
|
85
|
+
* Без цього поля «CRM не порахувала» виглядало точно так само, як «у CRM
|
|
86
|
+
* немає акцій»: кошик показував локальний розрахунок під міткою PLANFIX, і
|
|
87
|
+
* менеджер не мав жодного способу відрізнити ці випадки.
|
|
88
|
+
*/
|
|
89
|
+
fallbackReason: string;
|
|
74
90
|
}
|
|
75
91
|
|
|
76
92
|
export interface ReserveBonusesRequest {
|
|
@@ -134,6 +150,15 @@ export interface CrmCalculationServiceClient {
|
|
|
134
150
|
releaseBonusReserve(request: ReleaseBonusReserveRequest): Observable<ReleaseBonusReserveResponse>;
|
|
135
151
|
|
|
136
152
|
getCustomerProfile(request: GetCustomerProfileRequest): Observable<GetCustomerProfileResponse>;
|
|
153
|
+
|
|
154
|
+
/**
|
|
155
|
+
* Чи рахує акції CRM. Кошику це потрібно, щоб не показувати ВЛАСНІ
|
|
156
|
+
* автоакції поверх тих, які потім перерахує CRM: інакше клієнт бачить одну
|
|
157
|
+
* знижку в кошику й іншу на чекауті, а менеджер — «акція є в CRM, а сайт її
|
|
158
|
+
* не бачить».
|
|
159
|
+
*/
|
|
160
|
+
|
|
161
|
+
getCalculationMode(request: GetCalculationModeRequest): Observable<GetCalculationModeResponse>;
|
|
137
162
|
}
|
|
138
163
|
|
|
139
164
|
export interface CrmCalculationServiceController {
|
|
@@ -156,6 +181,17 @@ export interface CrmCalculationServiceController {
|
|
|
156
181
|
getCustomerProfile(
|
|
157
182
|
request: GetCustomerProfileRequest,
|
|
158
183
|
): Promise<GetCustomerProfileResponse> | Observable<GetCustomerProfileResponse> | GetCustomerProfileResponse;
|
|
184
|
+
|
|
185
|
+
/**
|
|
186
|
+
* Чи рахує акції CRM. Кошику це потрібно, щоб не показувати ВЛАСНІ
|
|
187
|
+
* автоакції поверх тих, які потім перерахує CRM: інакше клієнт бачить одну
|
|
188
|
+
* знижку в кошику й іншу на чекауті, а менеджер — «акція є в CRM, а сайт її
|
|
189
|
+
* не бачить».
|
|
190
|
+
*/
|
|
191
|
+
|
|
192
|
+
getCalculationMode(
|
|
193
|
+
request: GetCalculationModeRequest,
|
|
194
|
+
): Promise<GetCalculationModeResponse> | Observable<GetCalculationModeResponse> | GetCalculationModeResponse;
|
|
159
195
|
}
|
|
160
196
|
|
|
161
197
|
export function CrmCalculationServiceControllerMethods() {
|
|
@@ -166,6 +202,7 @@ export function CrmCalculationServiceControllerMethods() {
|
|
|
166
202
|
"reserveBonuses",
|
|
167
203
|
"releaseBonusReserve",
|
|
168
204
|
"getCustomerProfile",
|
|
205
|
+
"getCalculationMode",
|
|
169
206
|
];
|
|
170
207
|
for (const method of grpcMethods) {
|
|
171
208
|
const descriptor: any = Reflect.getOwnPropertyDescriptor(constructor.prototype, method);
|
package/gen/promotion.ts
CHANGED
|
@@ -195,7 +195,23 @@ export interface PromotionListItem {
|
|
|
195
195
|
discountType: DiscountType;
|
|
196
196
|
source?: string | undefined;
|
|
197
197
|
planfixId?: string | undefined;
|
|
198
|
-
seoSlug?:
|
|
198
|
+
seoSlug?:
|
|
199
|
+
| string
|
|
200
|
+
| undefined;
|
|
201
|
+
/**
|
|
202
|
+
* Параметри механіки — щоб список показував, ЩО саме дає акція.
|
|
203
|
+
* Без них бандли, каскади й позиційні знижки малювались як «0 %»:
|
|
204
|
+
* їхня знижка живе не в `discount_value`, і рядок виглядав зламаним.
|
|
205
|
+
*/
|
|
206
|
+
buyQuantity?: number | undefined;
|
|
207
|
+
getQuantity?: number | undefined;
|
|
208
|
+
bundlePrice?: number | undefined;
|
|
209
|
+
bundleSize?:
|
|
210
|
+
| number
|
|
211
|
+
| undefined;
|
|
212
|
+
/** JSON-рядком — так само, як у детальному повідомленні вище. */
|
|
213
|
+
cascadeSteps?: string | undefined;
|
|
214
|
+
positionSteps?: string | undefined;
|
|
199
215
|
}
|
|
200
216
|
|
|
201
217
|
export interface PromotionListItem_NameEntry {
|
package/package.json
CHANGED
package/proto/calculation.proto
CHANGED
|
@@ -90,10 +90,27 @@ message GiftSuggestion {
|
|
|
90
90
|
double min_order_amount = 5;
|
|
91
91
|
}
|
|
92
92
|
|
|
93
|
+
// Частка знижки, що припадає на КОНКРЕТНУ позицію кошика.
|
|
94
|
+
//
|
|
95
|
+
// `item_index` — позиція в масиві `items` запиту, а не productId: у кошику
|
|
96
|
+
// можуть лежати два рядки одного товару (різні варіанти/кольори), і за
|
|
97
|
+
// productId їх не розрізнити. Порядок масиву зберігається на всьому шляху,
|
|
98
|
+
// тож індекс однозначний.
|
|
99
|
+
message ItemDiscount {
|
|
100
|
+
int32 item_index = 1;
|
|
101
|
+
double amount = 2;
|
|
102
|
+
}
|
|
103
|
+
|
|
93
104
|
message AppliedPromotion {
|
|
94
105
|
string promotion_id = 1;
|
|
95
106
|
string promotion_name = 2;
|
|
96
107
|
double discount_amount = 3;
|
|
108
|
+
|
|
109
|
+
// Рознесення `discount_amount` по позиціях. Двигун знає, з яких саме
|
|
110
|
+
// одиниць він зняв гроші (найдешевші в подарунок, найдорожчі в набір,
|
|
111
|
+
// задані позиції в чеку), і віддає це назовні. Порожній масив = споживач
|
|
112
|
+
// має право розкласти суму пропорційно сам.
|
|
113
|
+
repeated ItemDiscount item_discounts = 4;
|
|
97
114
|
}
|
|
98
115
|
|
|
99
116
|
message AppliedCoupon {
|
|
@@ -101,5 +118,7 @@ message AppliedCoupon {
|
|
|
101
118
|
string code = 2;
|
|
102
119
|
string promotion_id = 3;
|
|
103
120
|
double discount_amount = 4;
|
|
121
|
+
|
|
122
|
+
repeated ItemDiscount item_discounts = 5;
|
|
104
123
|
}
|
|
105
124
|
|
|
@@ -11,6 +11,19 @@ service CrmCalculationService {
|
|
|
11
11
|
rpc ReleaseBonusReserve(ReleaseBonusReserveRequest) returns (ReleaseBonusReserveResponse);
|
|
12
12
|
|
|
13
13
|
rpc GetCustomerProfile(GetCustomerProfileRequest) returns (GetCustomerProfileResponse);
|
|
14
|
+
|
|
15
|
+
// Чи рахує акції CRM. Кошику це потрібно, щоб не показувати ВЛАСНІ
|
|
16
|
+
// автоакції поверх тих, які потім перерахує CRM: інакше клієнт бачить одну
|
|
17
|
+
// знижку в кошику й іншу на чекауті, а менеджер — «акція є в CRM, а сайт її
|
|
18
|
+
// не бачить».
|
|
19
|
+
rpc GetCalculationMode(GetCalculationModeRequest) returns (GetCalculationModeResponse);
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
message GetCalculationModeRequest {}
|
|
23
|
+
|
|
24
|
+
message GetCalculationModeResponse {
|
|
25
|
+
// true — джерело правди щодо акцій це CRM.
|
|
26
|
+
bool crm_promotions = 1;
|
|
14
27
|
}
|
|
15
28
|
|
|
16
29
|
message CrmCalculationItem {
|
|
@@ -83,6 +96,13 @@ message CalculateCartResponse {
|
|
|
83
96
|
string raw_result = 15;
|
|
84
97
|
|
|
85
98
|
int32 duration_ms = 16;
|
|
99
|
+
|
|
100
|
+
// Чому підсумок узяли НЕ з CRM. Порожнє — узяли з CRM.
|
|
101
|
+
//
|
|
102
|
+
// Без цього поля «CRM не порахувала» виглядало точно так само, як «у CRM
|
|
103
|
+
// немає акцій»: кошик показував локальний розрахунок під міткою PLANFIX, і
|
|
104
|
+
// менеджер не мав жодного способу відрізнити ці випадки.
|
|
105
|
+
string fallback_reason = 17;
|
|
86
106
|
}
|
|
87
107
|
|
|
88
108
|
message ReserveBonusesRequest {
|
package/proto/promotion.proto
CHANGED
|
@@ -216,6 +216,17 @@ message PromotionListItem {
|
|
|
216
216
|
optional string source = 16;
|
|
217
217
|
optional string planfix_id = 17;
|
|
218
218
|
optional string seo_slug = 18;
|
|
219
|
+
|
|
220
|
+
// Параметри механіки — щоб список показував, ЩО саме дає акція.
|
|
221
|
+
// Без них бандли, каскади й позиційні знижки малювались як «0 %»:
|
|
222
|
+
// їхня знижка живе не в `discount_value`, і рядок виглядав зламаним.
|
|
223
|
+
optional int32 buy_quantity = 19;
|
|
224
|
+
optional int32 get_quantity = 20;
|
|
225
|
+
optional double bundle_price = 21;
|
|
226
|
+
optional int32 bundle_size = 22;
|
|
227
|
+
// JSON-рядком — так само, як у детальному повідомленні вище.
|
|
228
|
+
optional string cascade_steps = 23;
|
|
229
|
+
optional string position_steps = 24;
|
|
219
230
|
}
|
|
220
231
|
|
|
221
232
|
|