@fiado/type-kit 3.495.0 → 3.496.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.
- package/_test_/unit/loanCredit/dtos/createSellerPaymentRequest.test.ts +63 -0
- package/_test_/unit/loanCredit/inStorePaymentDtos.test.ts +141 -0
- package/_test_/unit/retailIntegration/applyRetailEventRequest.test.ts +43 -0
- package/_test_/unit/retailIntegration/isIsoDateTimeWithZone.test.ts +85 -0
- package/_test_/unit/retailIntegration/receiveRetailEventRequest.test.ts +93 -0
- package/_test_/unit/retailIntegration/retailOutboundRequests.test.ts +69 -0
- package/_test_/unit/retailIntegration/retailSystemEnums.test.ts +42 -0
- package/bin/index.d.ts +1 -0
- package/bin/index.js +3 -1
- package/bin/loanCredit/dtos/requests/CreateSellerPaymentRequest.d.ts +15 -0
- package/bin/loanCredit/dtos/requests/CreateSellerPaymentRequest.js +56 -0
- package/bin/loanCredit/dtos/requests/InStorePaymentDetail.d.ts +12 -0
- package/bin/loanCredit/dtos/requests/InStorePaymentDetail.js +40 -0
- package/bin/loanCredit/dtos/responses/CreditCustomerListItem.d.ts +46 -0
- package/bin/loanCredit/dtos/responses/CreditCustomerListItem.js +2 -0
- package/bin/loanCredit/dtos/responses/InStorePaymentListItem.d.ts +19 -0
- package/bin/loanCredit/dtos/responses/InStorePaymentListItem.js +2 -0
- package/bin/loanCredit/dtos/responses/LoanPaymentListItem.d.ts +14 -1
- package/bin/loanCredit/dtos/responses/SellerCreditLookupResult.d.ts +10 -0
- package/bin/loanCredit/dtos/responses/SellerCreditLookupResult.js +2 -0
- package/bin/loanCredit/dtos/responses/SellerPaymentOptions.d.ts +36 -0
- package/bin/loanCredit/dtos/responses/SellerPaymentOptions.js +2 -0
- package/bin/loanCredit/dtos/responses/SellerPaymentResult.d.ts +39 -0
- package/bin/loanCredit/dtos/responses/SellerPaymentResult.js +2 -0
- package/bin/loanCredit/enums/CreditCustomerStateEnum.d.ts +6 -0
- package/bin/loanCredit/enums/CreditCustomerStateEnum.js +10 -0
- package/bin/loanCredit/enums/InStorePaymentMethodEnum.d.ts +6 -0
- package/bin/loanCredit/enums/InStorePaymentMethodEnum.js +10 -0
- package/bin/loanCredit/enums/LoanPaymentOriginEnum.d.ts +5 -0
- package/bin/loanCredit/enums/LoanPaymentOriginEnum.js +9 -0
- package/bin/loanCredit/index.d.ts +10 -0
- package/bin/loanCredit/index.js +11 -0
- package/bin/retailIntegration/constants/retailIntegrationLimits.d.ts +7 -0
- package/bin/retailIntegration/constants/retailIntegrationLimits.js +10 -0
- package/bin/retailIntegration/dtos/ApplyRetailEventRequest.d.ts +29 -0
- package/bin/retailIntegration/dtos/ApplyRetailEventRequest.js +54 -0
- package/bin/retailIntegration/dtos/GetRetailInventoryRequest.d.ts +5 -0
- package/bin/retailIntegration/dtos/GetRetailInventoryRequest.js +23 -0
- package/bin/retailIntegration/dtos/ListRetailCatalogRequest.d.ts +4 -0
- package/bin/retailIntegration/dtos/ListRetailCatalogRequest.js +8 -0
- package/bin/retailIntegration/dtos/ListRetailStoresRequest.d.ts +4 -0
- package/bin/retailIntegration/dtos/ListRetailStoresRequest.js +8 -0
- package/bin/retailIntegration/dtos/ListRetailUsersRequest.d.ts +5 -0
- package/bin/retailIntegration/dtos/ListRetailUsersRequest.js +24 -0
- package/bin/retailIntegration/dtos/ReceiveInventoryEventRequest.d.ts +6 -0
- package/bin/retailIntegration/dtos/ReceiveInventoryEventRequest.js +23 -0
- package/bin/retailIntegration/dtos/ReceiveProductEventRequest.d.ts +6 -0
- package/bin/retailIntegration/dtos/ReceiveProductEventRequest.js +23 -0
- package/bin/retailIntegration/dtos/ReceiveRetailEventRequest.d.ts +12 -0
- package/bin/retailIntegration/dtos/ReceiveRetailEventRequest.js +2 -0
- package/bin/retailIntegration/dtos/ReceiveRetailUserEventRequest.d.ts +6 -0
- package/bin/retailIntegration/dtos/ReceiveRetailUserEventRequest.js +23 -0
- package/bin/retailIntegration/dtos/ReceiveStoreEventRequest.d.ts +6 -0
- package/bin/retailIntegration/dtos/ReceiveStoreEventRequest.js +23 -0
- package/bin/retailIntegration/dtos/RegisterRetailSaleRequest.d.ts +4 -0
- package/bin/retailIntegration/dtos/RegisterRetailSaleRequest.js +8 -0
- package/bin/retailIntegration/dtos/RetailEventEnvelope.d.ts +8 -0
- package/bin/retailIntegration/dtos/RetailEventEnvelope.js +33 -0
- package/bin/retailIntegration/dtos/RetailEventResult.d.ts +12 -0
- package/bin/retailIntegration/dtos/RetailEventResult.js +2 -0
- package/bin/retailIntegration/dtos/RetailOutboundResponses.d.ts +30 -0
- package/bin/retailIntegration/dtos/RetailOutboundResponses.js +2 -0
- package/bin/retailIntegration/dtos/RetailPagedQuery.d.ts +6 -0
- package/bin/retailIntegration/dtos/RetailPagedQuery.js +34 -0
- package/bin/retailIntegration/dtos/RetailTenantQuery.d.ts +4 -0
- package/bin/retailIntegration/dtos/RetailTenantQuery.js +23 -0
- package/bin/retailIntegration/enums/InventoryEventTypeEnum.d.ts +4 -0
- package/bin/retailIntegration/enums/InventoryEventTypeEnum.js +8 -0
- package/bin/retailIntegration/enums/ProductEventTypeEnum.d.ts +6 -0
- package/bin/retailIntegration/enums/ProductEventTypeEnum.js +10 -0
- package/bin/retailIntegration/enums/RetailCurrencyEnum.d.ts +5 -0
- package/bin/retailIntegration/enums/RetailCurrencyEnum.js +9 -0
- package/bin/retailIntegration/enums/RetailEventResultEnum.d.ts +6 -0
- package/bin/retailIntegration/enums/RetailEventResultEnum.js +10 -0
- package/bin/retailIntegration/enums/RetailFinancierEnum.d.ts +8 -0
- package/bin/retailIntegration/enums/RetailFinancierEnum.js +12 -0
- package/bin/retailIntegration/enums/RetailLinePaymentTypeEnum.d.ts +5 -0
- package/bin/retailIntegration/enums/RetailLinePaymentTypeEnum.js +9 -0
- package/bin/retailIntegration/enums/RetailMdmProviderEnum.d.ts +5 -0
- package/bin/retailIntegration/enums/RetailMdmProviderEnum.js +9 -0
- package/bin/retailIntegration/enums/RetailPaymentMethodEnum.d.ts +6 -0
- package/bin/retailIntegration/enums/RetailPaymentMethodEnum.js +10 -0
- package/bin/retailIntegration/enums/RetailPieceReasonEnum.d.ts +6 -0
- package/bin/retailIntegration/enums/RetailPieceReasonEnum.js +10 -0
- package/bin/retailIntegration/enums/RetailPieceStatusEnum.d.ts +7 -0
- package/bin/retailIntegration/enums/RetailPieceStatusEnum.js +11 -0
- package/bin/retailIntegration/enums/RetailProductCategoryEnum.d.ts +7 -0
- package/bin/retailIntegration/enums/RetailProductCategoryEnum.js +11 -0
- package/bin/retailIntegration/enums/RetailProductStatusEnum.d.ts +6 -0
- package/bin/retailIntegration/enums/RetailProductStatusEnum.js +10 -0
- package/bin/retailIntegration/enums/RetailProductTierEnum.d.ts +7 -0
- package/bin/retailIntegration/enums/RetailProductTierEnum.js +11 -0
- package/bin/retailIntegration/enums/RetailSaleFinancierEnum.d.ts +9 -0
- package/bin/retailIntegration/enums/RetailSaleFinancierEnum.js +13 -0
- package/bin/retailIntegration/enums/RetailSaleTypeEnum.d.ts +6 -0
- package/bin/retailIntegration/enums/RetailSaleTypeEnum.js +10 -0
- package/bin/retailIntegration/enums/RetailStoreStatusEnum.d.ts +6 -0
- package/bin/retailIntegration/enums/RetailStoreStatusEnum.js +10 -0
- package/bin/retailIntegration/enums/RetailTrackingModeEnum.d.ts +6 -0
- package/bin/retailIntegration/enums/RetailTrackingModeEnum.js +10 -0
- package/bin/retailIntegration/enums/RetailUserAccessStatusEnum.d.ts +6 -0
- package/bin/retailIntegration/enums/RetailUserAccessStatusEnum.js +10 -0
- package/bin/retailIntegration/enums/RetailUserEventTypeEnum.d.ts +7 -0
- package/bin/retailIntegration/enums/RetailUserEventTypeEnum.js +11 -0
- package/bin/retailIntegration/enums/RetailUserRoleEnum.d.ts +7 -0
- package/bin/retailIntegration/enums/RetailUserRoleEnum.js +11 -0
- package/bin/retailIntegration/enums/StoreEventTypeEnum.d.ts +6 -0
- package/bin/retailIntegration/enums/StoreEventTypeEnum.js +10 -0
- package/bin/retailIntegration/enums/index.d.ts +21 -0
- package/bin/retailIntegration/enums/index.js +37 -0
- package/bin/retailIntegration/index.d.ts +25 -0
- package/bin/retailIntegration/index.js +41 -0
- package/bin/retailIntegration/models/RetailPageMeta.d.ts +10 -0
- package/bin/retailIntegration/models/RetailPageMeta.js +2 -0
- package/bin/retailIntegration/models/RetailSystemInventory.d.ts +17 -0
- package/bin/retailIntegration/models/RetailSystemInventory.js +2 -0
- package/bin/retailIntegration/models/RetailSystemProduct.d.ts +32 -0
- package/bin/retailIntegration/models/RetailSystemProduct.js +2 -0
- package/bin/retailIntegration/models/RetailSystemSale.d.ts +46 -0
- package/bin/retailIntegration/models/RetailSystemSale.js +2 -0
- package/bin/retailIntegration/models/RetailSystemStore.d.ts +29 -0
- package/bin/retailIntegration/models/RetailSystemStore.js +2 -0
- package/bin/retailIntegration/models/RetailSystemUser.d.ts +14 -0
- package/bin/retailIntegration/models/RetailSystemUser.js +2 -0
- package/bin/retailIntegration/validators/IsIsoDateTimeWithZone.d.ts +6 -0
- package/bin/retailIntegration/validators/IsIsoDateTimeWithZone.js +29 -0
- package/package.json +1 -1
- package/src/index.ts +2 -0
- package/src/loanCredit/dtos/requests/CreateSellerPaymentRequest.ts +40 -0
- package/src/loanCredit/dtos/requests/InStorePaymentDetail.ts +27 -0
- package/src/loanCredit/dtos/responses/CreditCustomerListItem.ts +51 -0
- package/src/loanCredit/dtos/responses/InStorePaymentListItem.ts +21 -0
- package/src/loanCredit/dtos/responses/LoanPaymentListItem.ts +11 -1
- package/src/loanCredit/dtos/responses/SellerCreditLookupResult.ts +11 -0
- package/src/loanCredit/dtos/responses/SellerPaymentOptions.ts +29 -0
- package/src/loanCredit/dtos/responses/SellerPaymentResult.ts +43 -0
- package/src/loanCredit/enums/CreditCustomerStateEnum.ts +6 -0
- package/src/loanCredit/enums/InStorePaymentMethodEnum.ts +6 -0
- package/src/loanCredit/enums/LoanPaymentOriginEnum.ts +5 -0
- package/src/loanCredit/index.ts +12 -0
- package/src/retailIntegration/constants/retailIntegrationLimits.ts +9 -0
- package/src/retailIntegration/dtos/ApplyRetailEventRequest.ts +49 -0
- package/src/retailIntegration/dtos/GetRetailInventoryRequest.ts +9 -0
- package/src/retailIntegration/dtos/ListRetailCatalogRequest.ts +4 -0
- package/src/retailIntegration/dtos/ListRetailStoresRequest.ts +4 -0
- package/src/retailIntegration/dtos/ListRetailUsersRequest.ts +10 -0
- package/src/retailIntegration/dtos/ReceiveInventoryEventRequest.ts +9 -0
- package/src/retailIntegration/dtos/ReceiveProductEventRequest.ts +9 -0
- package/src/retailIntegration/dtos/ReceiveRetailEventRequest.ts +18 -0
- package/src/retailIntegration/dtos/ReceiveRetailUserEventRequest.ts +9 -0
- package/src/retailIntegration/dtos/ReceiveStoreEventRequest.ts +9 -0
- package/src/retailIntegration/dtos/RegisterRetailSaleRequest.ts +4 -0
- package/src/retailIntegration/dtos/RetailEventEnvelope.ts +20 -0
- package/src/retailIntegration/dtos/RetailEventResult.ts +14 -0
- package/src/retailIntegration/dtos/RetailOutboundResponses.ts +35 -0
- package/src/retailIntegration/dtos/RetailPagedQuery.ts +19 -0
- package/src/retailIntegration/dtos/RetailTenantQuery.ts +9 -0
- package/src/retailIntegration/enums/InventoryEventTypeEnum.ts +4 -0
- package/src/retailIntegration/enums/ProductEventTypeEnum.ts +6 -0
- package/src/retailIntegration/enums/RetailCurrencyEnum.ts +5 -0
- package/src/retailIntegration/enums/RetailEventResultEnum.ts +6 -0
- package/src/retailIntegration/enums/RetailFinancierEnum.ts +8 -0
- package/src/retailIntegration/enums/RetailLinePaymentTypeEnum.ts +5 -0
- package/src/retailIntegration/enums/RetailMdmProviderEnum.ts +5 -0
- package/src/retailIntegration/enums/RetailPaymentMethodEnum.ts +6 -0
- package/src/retailIntegration/enums/RetailPieceReasonEnum.ts +6 -0
- package/src/retailIntegration/enums/RetailPieceStatusEnum.ts +7 -0
- package/src/retailIntegration/enums/RetailProductCategoryEnum.ts +7 -0
- package/src/retailIntegration/enums/RetailProductStatusEnum.ts +6 -0
- package/src/retailIntegration/enums/RetailProductTierEnum.ts +7 -0
- package/src/retailIntegration/enums/RetailSaleFinancierEnum.ts +9 -0
- package/src/retailIntegration/enums/RetailSaleTypeEnum.ts +6 -0
- package/src/retailIntegration/enums/RetailStoreStatusEnum.ts +6 -0
- package/src/retailIntegration/enums/RetailTrackingModeEnum.ts +6 -0
- package/src/retailIntegration/enums/RetailUserAccessStatusEnum.ts +6 -0
- package/src/retailIntegration/enums/RetailUserEventTypeEnum.ts +7 -0
- package/src/retailIntegration/enums/RetailUserRoleEnum.ts +7 -0
- package/src/retailIntegration/enums/StoreEventTypeEnum.ts +6 -0
- package/src/retailIntegration/enums/index.ts +21 -0
- package/src/retailIntegration/index.ts +25 -0
- package/src/retailIntegration/models/RetailPageMeta.ts +11 -0
- package/src/retailIntegration/models/RetailSystemInventory.ts +20 -0
- package/src/retailIntegration/models/RetailSystemProduct.ts +43 -0
- package/src/retailIntegration/models/RetailSystemSale.ts +51 -0
- package/src/retailIntegration/models/RetailSystemStore.ts +33 -0
- package/src/retailIntegration/models/RetailSystemUser.ts +16 -0
- package/src/retailIntegration/validators/IsIsoDateTimeWithZone.ts +21 -0
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import {
|
|
2
|
+
RetailCurrencyEnum,
|
|
3
|
+
RetailFinancierEnum,
|
|
4
|
+
RetailMdmProviderEnum,
|
|
5
|
+
RetailProductCategoryEnum,
|
|
6
|
+
RetailProductStatusEnum,
|
|
7
|
+
RetailProductTierEnum,
|
|
8
|
+
RetailTrackingModeEnum,
|
|
9
|
+
} from '../enums';
|
|
10
|
+
|
|
11
|
+
export type RetailProductCategory = `${RetailProductCategoryEnum}`;
|
|
12
|
+
export type RetailTrackingMode = `${RetailTrackingModeEnum}`;
|
|
13
|
+
export type RetailProductTier = `${RetailProductTierEnum}`;
|
|
14
|
+
export type RetailCurrency = `${RetailCurrencyEnum}`;
|
|
15
|
+
export type RetailFinancier = `${RetailFinancierEnum}`;
|
|
16
|
+
export type RetailMdmProvider = `${RetailMdmProviderEnum}`;
|
|
17
|
+
export type RetailProductStatus = `${RetailProductStatusEnum}`;
|
|
18
|
+
|
|
19
|
+
/** Precios como decimal en string con dos decimales. */
|
|
20
|
+
export interface RetailSystemProductPrice {
|
|
21
|
+
basePrice: string;
|
|
22
|
+
listPrice: string | null;
|
|
23
|
+
effectiveFrom: string;
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
/** Producto tal como lo define la doc de integración. */
|
|
27
|
+
export interface RetailSystemProduct {
|
|
28
|
+
sku: string;
|
|
29
|
+
externalId: string;
|
|
30
|
+
brand: string;
|
|
31
|
+
model: string;
|
|
32
|
+
color: string | null;
|
|
33
|
+
capacity: string | null;
|
|
34
|
+
description: string | null;
|
|
35
|
+
category: RetailProductCategory;
|
|
36
|
+
trackingMode: RetailTrackingMode;
|
|
37
|
+
tier: RetailProductTier | null;
|
|
38
|
+
currencyId: RetailCurrency;
|
|
39
|
+
price: RetailSystemProductPrice;
|
|
40
|
+
eligibleFinanciers: RetailFinancier[];
|
|
41
|
+
mdmProvider: RetailMdmProvider | null;
|
|
42
|
+
status: RetailProductStatus;
|
|
43
|
+
}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
import { RetailLinePaymentTypeEnum, RetailPaymentMethodEnum, RetailSaleFinancierEnum, RetailSaleTypeEnum } from '../enums';
|
|
2
|
+
import { RetailCurrency } from './RetailSystemProduct';
|
|
3
|
+
|
|
4
|
+
export type RetailSaleType = `${RetailSaleTypeEnum}`;
|
|
5
|
+
export type RetailSaleFinancier = `${RetailSaleFinancierEnum}`;
|
|
6
|
+
export type RetailPaymentMethod = `${RetailPaymentMethodEnum}`;
|
|
7
|
+
export type RetailLinePaymentType = `${RetailLinePaymentTypeEnum}`;
|
|
8
|
+
|
|
9
|
+
export interface RetailSystemSaleCustomer {
|
|
10
|
+
customerId: string;
|
|
11
|
+
names: string;
|
|
12
|
+
paternalLastName: string;
|
|
13
|
+
maternalLastName: string | null;
|
|
14
|
+
phone: string;
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
export interface RetailSystemSaleComponent {
|
|
18
|
+
sku: string;
|
|
19
|
+
qty: number;
|
|
20
|
+
identifiers: string[];
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
export interface RetailSystemSaleLine {
|
|
24
|
+
lineId: string;
|
|
25
|
+
sku: string;
|
|
26
|
+
qty: number;
|
|
27
|
+
basePrice: string;
|
|
28
|
+
discount: string;
|
|
29
|
+
paymentType: RetailLinePaymentType;
|
|
30
|
+
financedAmount: string;
|
|
31
|
+
role: 'GIFT' | null;
|
|
32
|
+
components: RetailSystemSaleComponent[];
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
/** Cuerpo de `POST /sales` de la doc; `saleId` es la llave de idempotencia. */
|
|
36
|
+
export interface RetailSystemSale {
|
|
37
|
+
saleId: string;
|
|
38
|
+
folio: string;
|
|
39
|
+
storeId: string;
|
|
40
|
+
sellerRetailUserId: string;
|
|
41
|
+
soldAt: string;
|
|
42
|
+
saleType: RetailSaleType;
|
|
43
|
+
financier: RetailSaleFinancier;
|
|
44
|
+
creditId: string | null;
|
|
45
|
+
currencyId: RetailCurrency;
|
|
46
|
+
customer: RetailSystemSaleCustomer;
|
|
47
|
+
equipmentPrice: string;
|
|
48
|
+
amountPaid: string;
|
|
49
|
+
paymentMethod: RetailPaymentMethod | null;
|
|
50
|
+
lines: RetailSystemSaleLine[];
|
|
51
|
+
}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import { RetailStoreStatusEnum } from '../enums';
|
|
2
|
+
|
|
3
|
+
export type RetailStoreStatus = `${RetailStoreStatusEnum}`;
|
|
4
|
+
|
|
5
|
+
export interface RetailSystemStoreAddress {
|
|
6
|
+
address1: string;
|
|
7
|
+
externalNumber: string | null;
|
|
8
|
+
internalNumber: string | null;
|
|
9
|
+
neighborhood: string | null;
|
|
10
|
+
city: string;
|
|
11
|
+
state: string;
|
|
12
|
+
zipCode: string;
|
|
13
|
+
country: string | null;
|
|
14
|
+
reference: string | null;
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
export interface RetailSystemStoreLocation {
|
|
18
|
+
lat: number | null;
|
|
19
|
+
lng: number | null;
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
/** Tienda tal como la define la doc de integración. */
|
|
23
|
+
export interface RetailSystemStore {
|
|
24
|
+
storeId: string;
|
|
25
|
+
code: string;
|
|
26
|
+
name: string;
|
|
27
|
+
zoneId: string | null;
|
|
28
|
+
address: RetailSystemStoreAddress;
|
|
29
|
+
location: RetailSystemStoreLocation;
|
|
30
|
+
phone: string;
|
|
31
|
+
schedule: string | null;
|
|
32
|
+
status: RetailStoreStatus;
|
|
33
|
+
}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { RetailUserAccessStatusEnum, RetailUserRoleEnum } from '../enums';
|
|
2
|
+
|
|
3
|
+
export type RetailUserRole = `${RetailUserRoleEnum}`;
|
|
4
|
+
export type RetailUserAccessStatus = `${RetailUserAccessStatusEnum}`;
|
|
5
|
+
|
|
6
|
+
/** Usuario de la operación del retailer, tal como lo define la doc de integración. */
|
|
7
|
+
export interface RetailSystemUser {
|
|
8
|
+
retailUserId: string;
|
|
9
|
+
displayName: string;
|
|
10
|
+
email: string;
|
|
11
|
+
phone: string | null;
|
|
12
|
+
homeStoreId: string;
|
|
13
|
+
zoneId: string | null;
|
|
14
|
+
role: RetailUserRole;
|
|
15
|
+
status: RetailUserAccessStatus;
|
|
16
|
+
}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { ValidatorConstraint, ValidatorConstraintInterface } from 'class-validator';
|
|
2
|
+
|
|
3
|
+
const ISO_DATE_TIME_WITH_ZONE = /^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}(\.\d{1,9})?(Z|[+-]\d{2}:\d{2})$/;
|
|
4
|
+
|
|
5
|
+
/** Descarta fechas que `Date` recorre en silencio, como el 31 de febrero. */
|
|
6
|
+
function isRealCalendarDate(value: string): boolean {
|
|
7
|
+
const [year, month, day] = value.slice(0, 10).split('-').map(Number);
|
|
8
|
+
return !Number.isNaN(Date.parse(value)) && new Date(Date.UTC(year, month - 1, day)).getUTCDate() === day;
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
/** Acepta fecha y hora ISO-8601 con segundos y zona; sin zona se rechaza, como dice la doc. */
|
|
12
|
+
@ValidatorConstraint({ name: 'isIsoDateTimeWithZone', async: false })
|
|
13
|
+
export class IsIsoDateTimeWithZone implements ValidatorConstraintInterface {
|
|
14
|
+
validate(value: unknown): boolean {
|
|
15
|
+
return typeof value === 'string' && ISO_DATE_TIME_WITH_ZONE.test(value) && isRealCalendarDate(value);
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
defaultMessage(): string {
|
|
19
|
+
return 'debe ser fecha y hora ISO-8601 con zona, por ejemplo 2026-08-17T20:32:05Z';
|
|
20
|
+
}
|
|
21
|
+
}
|