@yolo-croket-dev/entity-v2 0.3.17 → 0.3.19

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.
@@ -19,6 +19,11 @@ export interface PInfoOfBundle {
19
19
  itemType?: StoreItemTypeEnum;
20
20
  /** 분할 배송 여부 (PurchasedInfo.isSplitDelivery의 비정규화 필드, BundlePInfo Atlas Search 필터용) */
21
21
  isSplitDelivery?: boolean;
22
+ /** 셀러 이관 거래 모아보기용 비정규화 여부 */
23
+ isTransferred?: boolean;
24
+ /** 셀러 이관 거래 우선 정렬·노출용 최신 이관 일시 */
25
+ latestTransferDate?: Date;
26
+ transferPriority?: 0 | 1;
22
27
  }
23
28
  export interface PastIsPrepay {
24
29
  PInfoId: Types.ObjectId;
@@ -13,6 +13,8 @@ export interface LegacyCartPOption {
13
13
  pNums?: number;
14
14
  }
15
15
  export interface CartPOptionChild {
16
+ /** 결제 시도 snapshot에서 최초 발급된 불변 옵션 순번 */
17
+ detailSequence?: number;
16
18
  optionName: string;
17
19
  optionNameList: string[];
18
20
  pNums: number;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@yolo-croket-dev/entity-v2",
3
- "version": "0.3.17",
3
+ "version": "0.3.19",
4
4
  "main": "index.js",
5
5
  "author": "Yolo Co., Ltd.",
6
6
  "description": "크로켓 nest 용 entity-v3",
@@ -1,6 +1,6 @@
1
1
  import { Types } from 'mongoose';
2
- import { PurchasedInfoEntity } from '@yolo-croket-dev/entity/src/purchased-info/purchased-info.entity';
3
2
  import { StoreItemKeyword } from '@yolo-croket-dev/entity/src/store-item';
3
+ import { PurchasedInfoEntity } from './purchased-info.entity';
4
4
  import { CustomPurchasedInfo } from './custom-purchased-info.entity';
5
5
  import { StoreItemTypeEnum } from '../store-item/store-item.entity';
6
6
  import { UserEntity } from '../user/user.entity';
@@ -12,13 +12,18 @@ export default interface PurchasedInfoForSeller {
12
12
  }
13
13
  export type RefundInfoPickedForSeller = Pick<RefundEntity, '_id' | 'reg_date' | 'acceptInfo' | 'process' | '_authorType' | 'openInfo' | 'refundVersion' | 'returnInfo' | 'rejectInfo' | 'PInfoLastProcess'>;
14
14
  export type UserInfoPickedForSeller = Pick<UserEntity, '_id' | 'username' | 'phoneCountry' | 'phoneNumber' | 'photos' | 'subContactList'>;
15
- export type PInfoPickedForSeller = Pick<PurchasedInfoEntity, '_id' | 'publicId' | 'process' | 'pOptionInfo' | 'proceedsInfo' | 'itemId' | 'pastName' | 'pastImg' | 'pastPrice' | 'deliveryMethod' | 'deliveryData' | 'paymentDate' | 'pastSellingInfo' | 'PCCCInfo' | 'cancelInfo' | 'requirement' | 'originPrice' | 'buyerInfo' | 'lastPartialRefundProcess' | 'lastPartialRefundId' | 'waitingReceiveInfo' | 'cancelledDate' | 'process_v2' | 'isPOptionChanged' | 'pInfoType' | 'isSplitDelivery' | 'splitDeliveryDataList' | 'remainingShipQuantity'> & {
15
+ export type PInfoPickedForSeller = Pick<PurchasedInfoEntity, '_id' | 'publicId' | 'process' | 'pOptionInfo' | 'proceedsInfo' | 'itemId' | 'pastName' | 'pastImg' | 'pastPrice' | 'deliveryMethod' | 'deliveryData' | 'paymentDate' | 'pastSellingInfo' | 'PCCCInfo' | 'cancelInfo' | 'requirement' | 'originPrice' | 'buyerInfo' | 'lastPartialRefundProcess' | 'lastPartialRefundId' | 'waitingReceiveInfo' | 'cancelledDate' | 'process_v2' | 'isPOptionChanged' | 'pInfoType' | 'isSplitDelivery' | 'splitDeliveryDataList' | 'remainingShipQuantity' | 'refundWaitingInfo'> & {
16
16
  /** 주문 당시 상품 키워드 스냅샷 */
17
17
  itemKeywords?: StoreItemKeyword[];
18
18
  isPcccDeferred?: boolean;
19
19
  isReceiveInfoChangedInBeforeDelivery?: boolean;
20
20
  /** 구매 당시 상품 타입 */
21
21
  itemType?: StoreItemTypeEnum;
22
+ /**
23
+ * 목록 응답에서는 용량이 큰 이관 이력을 제외하고 최신 이관 정보만 제공한다.
24
+ * - Pick 대상에서 transferSellerInfo를 제외해야 Omit한 history가 교차 타입으로 다시 필수가 되지 않는다.
25
+ */
26
+ transferSellerInfo?: Omit<NonNullable<PurchasedInfoEntity['transferSellerInfo']>, 'history'>;
22
27
  };
23
28
  export type PurchasedInfoForSellerDetail = {
24
29
  pInfo: PInfoPickedForSeller;
@@ -81,6 +81,91 @@ export declare enum PurchasedProcessV2Enum {
81
81
  /** 예약 취소 요청으로 취소됨 */
82
82
  cancelledByReserveCancelAsk = "cancelledByReserveCancelAsk"
83
83
  }
84
+ /** @description 셀러 귀책 환불 대기 워크플로 상태 */
85
+ export declare enum RefundWaitingStatusEnum {
86
+ /** 구매자 응답 또는 관리자 이관 판단 대기. 3일 자동 환불 대상 */
87
+ PENDING = "PENDING",
88
+ /** 구매자가 타 셀러 이관을 기다리기로 선택한 상태 */
89
+ WAITING_FOR_ITEM = "WAITING_FOR_ITEM",
90
+ /** 관리자 이관 불가 확정 후 실제 환불을 시작하기 전 상태 */
91
+ UNAVAILABLE = "UNAVAILABLE",
92
+ /** 이관 성공으로 환불 대기 워크플로가 종료된 상태 */
93
+ TRANSFERRED = "TRANSFERRED",
94
+ /** 실제 Refund 생성 작업을 선점한 내부 상태 */
95
+ REFUND_REQUESTED = "REFUND_REQUESTED"
96
+ }
97
+ /** @description 셀러 귀책 환불 대기 사유 코드 */
98
+ export declare enum RefundWaitingReasonCode {
99
+ /** 셀러의 현지 품절로 대체 셀러 이관 또는 환불 판단이 필요한 경우 */
100
+ SOLD_OUT = "SOLD_OUT",
101
+ /** 셀러의 현지 가격 또는 재고 변동으로 기존 주문 이행이 어려운 경우 */
102
+ PRICE_OR_STOCK_CHANGED = "PRICE_OR_STOCK_CHANGED",
103
+ /** 셀러 귀책 배송 지연으로 구매자 선택이 필요한 경우 */
104
+ DELIVERY_DELAY = "DELIVERY_DELAY"
105
+ }
106
+ /** @description 구매자의 환불 대기 선택 */
107
+ export declare enum RefundWaitingBuyerActionTypeEnum {
108
+ /** 구매자가 환불 대신 관리자에게 다른 셀러 이관을 요청함 */
109
+ WAIT_FOR_ITEM = "WAIT_FOR_ITEM",
110
+ /** 구매자가 대기 중단 후 기존 환불 절차 진행을 선택함 */
111
+ REQUEST_REFUND = "REQUEST_REFUND"
112
+ }
113
+ /** @description 셀러 귀책 환불 대기 정보 */
114
+ export interface RefundWaitingInfo {
115
+ /** 환불 대기 워크플로 상태 */
116
+ status: RefundWaitingStatusEnum;
117
+ /** 환불 대기로 전환한 시각. SLA와 대기 리드타임의 기준점이다. */
118
+ startDate: Date;
119
+ /** 자동 환불 대상 시각. 진입 시점에 startDate + 3일을 확정 저장해 정책 변경의 영향을 받지 않는다. */
120
+ autoRefundDueDate: Date;
121
+ /** 셀러 귀책 사유의 코드와 당시 구매자 화면에 노출한 문구 스냅샷 */
122
+ refundReason: {
123
+ /** 분기, 통계, 정책 적용에 사용하는 정규화된 사유 코드 */
124
+ code: RefundWaitingReasonCode;
125
+ /** 사유 코드의 당시 표시명. 사유 마스터 변경 후에도 이력을 보존한다. */
126
+ name: string;
127
+ /** 구매자/셀러가 입력한 보조 사유. 입력이 있을 때만 저장한다. */
128
+ detail?: string;
129
+ };
130
+ /** 환불 대기 진입을 유발한 셀러 ID. 이후 이관되더라도 최초 귀책 셀러를 추적한다. */
131
+ requestedSellerId: Types.ObjectId | string;
132
+ /** 구매자가 마지막으로 환불 대기 관련 액션을 선택한 시각 */
133
+ buyerActionDate?: Date;
134
+ /** 구매자의 마지막 액션. WAIT_FOR_ITEM 또는 REQUEST_REFUND만 저장한다. */
135
+ buyerActionType?: RefundWaitingBuyerActionTypeEnum;
136
+ /** 실제 환불 생성을 선점하기 전의 상태. 실패 시 재시도 가능한 상태로 복구하는 데 사용한다. */
137
+ refundRequestPreviousStatus?: RefundWaitingStatusEnum;
138
+ /** 구매자가 실제 환불 생성을 마지막으로 시도한 시각 */
139
+ refundRequestAttemptedDate?: Date;
140
+ /** 구매자 환불 생성 시도 횟수 */
141
+ refundRequestAttemptCount?: number;
142
+ /** 마지막 구매자 환불 생성 실패의 운영 분류 코드 */
143
+ refundRequestLastErrorCode?: string;
144
+ /** 관리자가 이관 불가를 확정한 시각. UNAVAILABLE 상태의 감사 이력이다. */
145
+ unavailableDate?: Date;
146
+ /** 이관 불가 처리를 수행한 관리자 ID */
147
+ unavailableManagerId?: Types.ObjectId | string;
148
+ /** 이관 불가 후 환불 생성을 마지막으로 시도한 시각 */
149
+ unavailableRefundAttemptedDate?: Date;
150
+ /** 이관 불가 후 환불 생성 시도 횟수 */
151
+ unavailableRefundAttemptCount?: number;
152
+ /** 마지막 이관 불가 환불 생성 실패 코드 */
153
+ unavailableRefundLastErrorCode?: string;
154
+ /** 스케줄러가 자동 환불 작업을 마지막으로 선점한 시각. 중복 실행 방지에 사용한다. */
155
+ autoRefundAttemptedDate?: Date;
156
+ /** 자동 환불 실행 시도 횟수. 재시도 한도와 운영 모니터링에 사용한다. */
157
+ autoRefundAttemptCount?: number;
158
+ /** 마지막 자동 환불 실패 코드. 원문 오류 대신 운영 분류용 코드만 저장한다. */
159
+ autoRefundLastErrorCode?: string;
160
+ /** 구매자 응답 만기 전 알림 발송 작업을 선점한 시각 */
161
+ buyerResponseReminderClaimedDate?: Date;
162
+ /** 구매자 응답 만기 전 알림 발송 완료 시각 */
163
+ buyerResponseReminderSentDate?: Date;
164
+ /** 구매자 응답 만기 전 알림 발송 시도 횟수 */
165
+ buyerResponseReminderAttemptCount?: number;
166
+ /** 마지막 구매자 응답 만기 전 알림 발송 실패 코드 */
167
+ buyerResponseReminderLastErrorCode?: string;
168
+ }
84
169
  export interface PastSellingInfoShippingTermsInfo {
85
170
  /** 조건 배송 종류 <shippingFeeBySection, > */
86
171
  shippingTermsType: string;
@@ -527,6 +612,8 @@ export interface PInfoBuyerInfo {
527
612
  buyerEngLastName?: string;
528
613
  }
529
614
  export interface POption {
615
+ /** 결제 시도 snapshot에서 발급된 불변 옵션 순번 */
616
+ detailSequence: number;
530
617
  /** 옵션 이름 */
531
618
  optionName: string;
532
619
  /** 옵션 이름 조합 */
@@ -540,6 +627,27 @@ export interface PInfoPOptionInfo {
540
627
  pOptionType?: POptionTypeEnum;
541
628
  pOptionList: POption[];
542
629
  }
630
+ export type PurchasedInfoOptionMutationOperationKind = 'buyer-stock' | 'admin-refund';
631
+ export type PurchasedInfoOptionMutationOperationState = 'stock-pending' | 'refund-pending' | 'remote-applied' | 'finalized' | 'recovery-required';
632
+ export interface PurchasedInfoOptionMutationOperation {
633
+ operationId: string;
634
+ kind: PurchasedInfoOptionMutationOperationKind;
635
+ state: PurchasedInfoOptionMutationOperationState;
636
+ createdAt: Date;
637
+ updatedAt: Date;
638
+ recoveryOwner: 'jun';
639
+ sourcePOptionList?: POption[];
640
+ isSourcePOptionListAbsent: boolean;
641
+ targetPOptionList: POption[];
642
+ requestFingerprint: string;
643
+ storeItemId?: Types.ObjectId | string;
644
+ stockRequestPayload?: Record<string, unknown>;
645
+ stockRequestFingerprint?: string;
646
+ partialRefundId?: Types.ObjectId | string;
647
+ desiredPartialRefundPrice?: number;
648
+ localUpdateDataDigest?: string;
649
+ localUpdateDataSnapshot?: Record<string, unknown>;
650
+ }
543
651
  export interface PaymentFeeInfo {
544
652
  paymentMethod: string;
545
653
  paymentFeePercent: number;
@@ -1156,6 +1264,7 @@ export default interface PurchasedInfoEntity {
1156
1264
  option: PurchasedInfoOption[];
1157
1265
  /** 결제한 옵션 정보 21년 후 부터 생김 */
1158
1266
  pOptionInfo?: PInfoPOptionInfo;
1267
+ optionMutationOperation?: PurchasedInfoOptionMutationOperation;
1159
1268
  totalPrice: number;
1160
1269
  originPrice: number;
1161
1270
  originPriceForBuyer?: number;
@@ -1248,12 +1357,17 @@ export default interface PurchasedInfoEntity {
1248
1357
  priceCompareAffiliateInfo?: PriceCompareAffiliateInfo;
1249
1358
  pInfoType?: PInfoTypeEnum;
1250
1359
  reservationInfo?: PurchasedReservationInfo;
1360
+ /** @description 셀러 귀책 환불 대기 워크플로 정보 */
1361
+ refundWaitingInfo?: RefundWaitingInfo;
1251
1362
  /** @description 셀러 변경 이력 (관리자 셀러 이전 기능) */
1252
1363
  transferSellerInfo?: {
1253
1364
  /** 셀러 변경 여부 (DB 필터링용) */
1254
1365
  isTransferred: boolean;
1255
1366
  /** 셀러 변경 횟수 */
1256
1367
  transferCount: number;
1368
+ /** 셀러 거래내역 목록 정렬·노출을 위한 가장 최근 이관 완료 시각 */
1369
+ latestTransferDate?: Date;
1370
+ transferPriority?: 0 | 1;
1257
1371
  /** 변경 이력 목록 */
1258
1372
  history: Array<{
1259
1373
  transferDate: Date;
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.PriceCompareAffiliateSettleStatusEnum = exports.PriceCompareAffiliateTypeEnum = exports.InsuranceProcessTypeEnum = exports.ShippingForwarderProviderEnum = exports.CrawlerProxyOrderForeignCurrencyEnum = exports.CrawlerProxyForwardingStatusEnum = exports.CrawlerProxyPurchaseStatusEnum = exports.PastSelectionFrameDataInfo = exports.PurchasedProcessV2Enum = exports.PurchasedProcessEnum = exports.UserTypeEnum = exports.TaxInvoiceIssueProcessEnum = exports.POptionTypeEnum = exports.PInfoTypeEnum = exports.ReservationCancelReasonEnum = exports.CardQuotaEnum = void 0;
3
+ exports.PriceCompareAffiliateSettleStatusEnum = exports.PriceCompareAffiliateTypeEnum = exports.InsuranceProcessTypeEnum = exports.ShippingForwarderProviderEnum = exports.CrawlerProxyOrderForeignCurrencyEnum = exports.CrawlerProxyForwardingStatusEnum = exports.CrawlerProxyPurchaseStatusEnum = exports.PastSelectionFrameDataInfo = exports.RefundWaitingBuyerActionTypeEnum = exports.RefundWaitingReasonCode = exports.RefundWaitingStatusEnum = exports.PurchasedProcessV2Enum = exports.PurchasedProcessEnum = exports.UserTypeEnum = exports.TaxInvoiceIssueProcessEnum = exports.POptionTypeEnum = exports.PInfoTypeEnum = exports.ReservationCancelReasonEnum = exports.CardQuotaEnum = void 0;
4
4
  var CardQuotaEnum;
5
5
  (function (CardQuotaEnum) {
6
6
  CardQuotaEnum["\uC77C\uC2DC\uBD88"] = "00";
@@ -82,6 +82,38 @@ var PurchasedProcessV2Enum;
82
82
  /** 예약 취소 요청으로 취소됨 */
83
83
  PurchasedProcessV2Enum["cancelledByReserveCancelAsk"] = "cancelledByReserveCancelAsk";
84
84
  })(PurchasedProcessV2Enum || (exports.PurchasedProcessV2Enum = PurchasedProcessV2Enum = {}));
85
+ /** @description 셀러 귀책 환불 대기 워크플로 상태 */
86
+ var RefundWaitingStatusEnum;
87
+ (function (RefundWaitingStatusEnum) {
88
+ /** 구매자 응답 또는 관리자 이관 판단 대기. 3일 자동 환불 대상 */
89
+ RefundWaitingStatusEnum["PENDING"] = "PENDING";
90
+ /** 구매자가 타 셀러 이관을 기다리기로 선택한 상태 */
91
+ RefundWaitingStatusEnum["WAITING_FOR_ITEM"] = "WAITING_FOR_ITEM";
92
+ /** 관리자 이관 불가 확정 후 실제 환불을 시작하기 전 상태 */
93
+ RefundWaitingStatusEnum["UNAVAILABLE"] = "UNAVAILABLE";
94
+ /** 이관 성공으로 환불 대기 워크플로가 종료된 상태 */
95
+ RefundWaitingStatusEnum["TRANSFERRED"] = "TRANSFERRED";
96
+ /** 실제 Refund 생성 작업을 선점한 내부 상태 */
97
+ RefundWaitingStatusEnum["REFUND_REQUESTED"] = "REFUND_REQUESTED";
98
+ })(RefundWaitingStatusEnum || (exports.RefundWaitingStatusEnum = RefundWaitingStatusEnum = {}));
99
+ /** @description 셀러 귀책 환불 대기 사유 코드 */
100
+ var RefundWaitingReasonCode;
101
+ (function (RefundWaitingReasonCode) {
102
+ /** 셀러의 현지 품절로 대체 셀러 이관 또는 환불 판단이 필요한 경우 */
103
+ RefundWaitingReasonCode["SOLD_OUT"] = "SOLD_OUT";
104
+ /** 셀러의 현지 가격 또는 재고 변동으로 기존 주문 이행이 어려운 경우 */
105
+ RefundWaitingReasonCode["PRICE_OR_STOCK_CHANGED"] = "PRICE_OR_STOCK_CHANGED";
106
+ /** 셀러 귀책 배송 지연으로 구매자 선택이 필요한 경우 */
107
+ RefundWaitingReasonCode["DELIVERY_DELAY"] = "DELIVERY_DELAY";
108
+ })(RefundWaitingReasonCode || (exports.RefundWaitingReasonCode = RefundWaitingReasonCode = {}));
109
+ /** @description 구매자의 환불 대기 선택 */
110
+ var RefundWaitingBuyerActionTypeEnum;
111
+ (function (RefundWaitingBuyerActionTypeEnum) {
112
+ /** 구매자가 환불 대신 관리자에게 다른 셀러 이관을 요청함 */
113
+ RefundWaitingBuyerActionTypeEnum["WAIT_FOR_ITEM"] = "WAIT_FOR_ITEM";
114
+ /** 구매자가 대기 중단 후 기존 환불 절차 진행을 선택함 */
115
+ RefundWaitingBuyerActionTypeEnum["REQUEST_REFUND"] = "REQUEST_REFUND";
116
+ })(RefundWaitingBuyerActionTypeEnum || (exports.RefundWaitingBuyerActionTypeEnum = RefundWaitingBuyerActionTypeEnum = {}));
85
117
  // 당시 셀렉션 프레임 데이터 정보
86
118
  class PastSelectionFrameDataInfo {
87
119
  }