wiil-core-js 0.0.82
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/LICENSE +21 -0
- package/README.md +174 -0
- package/dist/core/account/index.d.ts +7 -0
- package/dist/core/account/index.js +23 -0
- package/dist/core/account/organization.schema.d.ts +118 -0
- package/dist/core/account/organization.schema.js +91 -0
- package/dist/core/account/project.schema.d.ts +121 -0
- package/dist/core/account/project.schema.js +102 -0
- package/dist/core/account/supported-business-verticals.d.ts +8 -0
- package/dist/core/account/supported-business-verticals.js +23 -0
- package/dist/core/assistant-setups/assistant-setup-result.schema.d.ts +115 -0
- package/dist/core/assistant-setups/assistant-setup-result.schema.js +17 -0
- package/dist/core/assistant-setups/base-assistant-setup.schema.d.ts +61 -0
- package/dist/core/assistant-setups/base-assistant-setup.schema.js +29 -0
- package/dist/core/assistant-setups/index.d.ts +4 -0
- package/dist/core/assistant-setups/index.js +21 -0
- package/dist/core/assistant-setups/phone-assistant-setup.schema.d.ts +63 -0
- package/dist/core/assistant-setups/phone-assistant-setup.schema.js +14 -0
- package/dist/core/assistant-setups/web-assitant-setup.schema.d.ts +56 -0
- package/dist/core/assistant-setups/web-assitant-setup.schema.js +17 -0
- package/dist/core/base.schema.d.ts +34 -0
- package/dist/core/base.schema.js +36 -0
- package/dist/core/business-mgt/appointment-additional-info.schema.d.ts +63 -0
- package/dist/core/business-mgt/appointment-additional-info.schema.js +53 -0
- package/dist/core/business-mgt/appointment-field-config.schema.d.ts +251 -0
- package/dist/core/business-mgt/appointment-field-config.schema.js +49 -0
- package/dist/core/business-mgt/bookings.shared.schema.d.ts +47 -0
- package/dist/core/business-mgt/bookings.shared.schema.js +60 -0
- package/dist/core/business-mgt/business-location.schema.d.ts +327 -0
- package/dist/core/business-mgt/business-location.schema.js +176 -0
- package/dist/core/business-mgt/customer-management/customer-group.schema.d.ts +87 -0
- package/dist/core/business-mgt/customer-management/customer-group.schema.js +53 -0
- package/dist/core/business-mgt/customer-management/customer.schema.d.ts +156 -0
- package/dist/core/business-mgt/customer-management/customer.schema.js +93 -0
- package/dist/core/business-mgt/customer-management/index.d.ts +7 -0
- package/dist/core/business-mgt/customer-management/index.js +23 -0
- package/dist/core/business-mgt/customer-management/shipping-address.schema.d.ts +112 -0
- package/dist/core/business-mgt/customer-management/shipping-address.schema.js +79 -0
- package/dist/core/business-mgt/customer.schema.d.ts +111 -0
- package/dist/core/business-mgt/customer.schema.js +73 -0
- package/dist/core/business-mgt/discount-rule.schema.d.ts +183 -0
- package/dist/core/business-mgt/discount-rule.schema.js +108 -0
- package/dist/core/business-mgt/index.d.ts +16 -0
- package/dist/core/business-mgt/index.js +38 -0
- package/dist/core/business-mgt/menu-config.schema.d.ts +165 -0
- package/dist/core/business-mgt/menu-config.schema.js +86 -0
- package/dist/core/business-mgt/menu-management/index.d.ts +11 -0
- package/dist/core/business-mgt/menu-management/index.js +27 -0
- package/dist/core/business-mgt/menu-management/menu-catalog.schema.d.ts +386 -0
- package/dist/core/business-mgt/menu-management/menu-catalog.schema.js +58 -0
- package/dist/core/business-mgt/menu-management/menu-config.schema.d.ts +301 -0
- package/dist/core/business-mgt/menu-management/menu-config.schema.js +169 -0
- package/dist/core/business-mgt/menu-management/menu-item-variant.schema.d.ts +143 -0
- package/dist/core/business-mgt/menu-management/menu-item-variant.schema.js +86 -0
- package/dist/core/business-mgt/menu-management/menu-pricing-rule.schema.d.ts +239 -0
- package/dist/core/business-mgt/menu-management/menu-pricing-rule.schema.js +117 -0
- package/dist/core/business-mgt/menu-management/menu-set.schema.d.ts +420 -0
- package/dist/core/business-mgt/menu-management/menu-set.schema.js +283 -0
- package/dist/core/business-mgt/menu-management/menu.order.schema.d.ts +654 -0
- package/dist/core/business-mgt/menu-management/menu.order.schema.js +204 -0
- package/dist/core/business-mgt/menu-management/modifier.schema.d.ts +585 -0
- package/dist/core/business-mgt/menu-management/modifier.schema.js +341 -0
- package/dist/core/business-mgt/menu.order.schema.d.ts +335 -0
- package/dist/core/business-mgt/menu.order.schema.js +149 -0
- package/dist/core/business-mgt/order.schema.d.ts +222 -0
- package/dist/core/business-mgt/order.schema.js +205 -0
- package/dist/core/business-mgt/pricing-rule.shared.schema.d.ts +56 -0
- package/dist/core/business-mgt/pricing-rule.shared.schema.js +68 -0
- package/dist/core/business-mgt/product-config.schema.d.ts +177 -0
- package/dist/core/business-mgt/product-config.schema.js +106 -0
- package/dist/core/business-mgt/product-management/index.d.ts +12 -0
- package/dist/core/business-mgt/product-management/index.js +28 -0
- package/dist/core/business-mgt/product-management/product-axis-binding.schema.d.ts +54 -0
- package/dist/core/business-mgt/product-management/product-axis-binding.schema.js +54 -0
- package/dist/core/business-mgt/product-management/product-config.schema.d.ts +1042 -0
- package/dist/core/business-mgt/product-management/product-config.schema.js +392 -0
- package/dist/core/business-mgt/product-management/product-display.schema.d.ts +548 -0
- package/dist/core/business-mgt/product-management/product-display.schema.js +80 -0
- package/dist/core/business-mgt/product-management/product-order.schema.d.ts +493 -0
- package/dist/core/business-mgt/product-management/product-order.schema.js +158 -0
- package/dist/core/business-mgt/product-management/product-pricing-rule.schema.d.ts +167 -0
- package/dist/core/business-mgt/product-management/product-pricing-rule.schema.js +68 -0
- package/dist/core/business-mgt/product-management/product-set.schema.d.ts +488 -0
- package/dist/core/business-mgt/product-management/product-set.schema.js +273 -0
- package/dist/core/business-mgt/product-management/product-variant-axis.schema.d.ts +156 -0
- package/dist/core/business-mgt/product-management/product-variant-axis.schema.js +98 -0
- package/dist/core/business-mgt/product-management/product-variant.schema.d.ts +219 -0
- package/dist/core/business-mgt/product-management/product-variant.schema.js +130 -0
- package/dist/core/business-mgt/product-order.schema.d.ts +326 -0
- package/dist/core/business-mgt/product-order.schema.js +153 -0
- package/dist/core/business-mgt/property-config.schema.d.ts +621 -0
- package/dist/core/business-mgt/property-config.schema.js +224 -0
- package/dist/core/business-mgt/property-inquiry.schema.d.ts +222 -0
- package/dist/core/business-mgt/property-inquiry.schema.js +112 -0
- package/dist/core/business-mgt/property-management/index.d.ts +6 -0
- package/dist/core/business-mgt/property-management/index.js +22 -0
- package/dist/core/business-mgt/property-management/property-config.schema.d.ts +1306 -0
- package/dist/core/business-mgt/property-management/property-config.schema.js +367 -0
- package/dist/core/business-mgt/property-management/property-inquiry.schema.d.ts +254 -0
- package/dist/core/business-mgt/property-management/property-inquiry.schema.js +131 -0
- package/dist/core/business-mgt/reservation-mgt/assignment/index.d.ts +3 -0
- package/dist/core/business-mgt/reservation-mgt/assignment/index.js +19 -0
- package/dist/core/business-mgt/reservation-mgt/assignment/reservation-rental-assignment.schema.d.ts +139 -0
- package/dist/core/business-mgt/reservation-mgt/assignment/reservation-rental-assignment.schema.js +90 -0
- package/dist/core/business-mgt/reservation-mgt/assignment/reservation-room-assignment.schema.d.ts +104 -0
- package/dist/core/business-mgt/reservation-mgt/assignment/reservation-room-assignment.schema.js +70 -0
- package/dist/core/business-mgt/reservation-mgt/assignment/reservation-table-assignment.schema.d.ts +104 -0
- package/dist/core/business-mgt/reservation-mgt/assignment/reservation-table-assignment.schema.js +72 -0
- package/dist/core/business-mgt/reservation-mgt/index.d.ts +14 -0
- package/dist/core/business-mgt/reservation-mgt/index.js +31 -0
- package/dist/core/business-mgt/reservation-mgt/reservation-floor-plan-definition.schema.d.ts +180 -0
- package/dist/core/business-mgt/reservation-mgt/reservation-floor-plan-definition.schema.js +75 -0
- package/dist/core/business-mgt/reservation-mgt/reservation-maintenance-block.schema.d.ts +91 -0
- package/dist/core/business-mgt/reservation-mgt/reservation-maintenance-block.schema.js +57 -0
- package/dist/core/business-mgt/reservation-mgt/reservation-rental.schema.d.ts +334 -0
- package/dist/core/business-mgt/reservation-mgt/reservation-rental.schema.js +179 -0
- package/dist/core/business-mgt/reservation-mgt/reservation-room.schema.d.ts +195 -0
- package/dist/core/business-mgt/reservation-mgt/reservation-room.schema.js +106 -0
- package/dist/core/business-mgt/reservation-mgt/reservation-section.schema.d.ts +402 -0
- package/dist/core/business-mgt/reservation-mgt/reservation-section.schema.js +198 -0
- package/dist/core/business-mgt/reservation-mgt/reservation-settings.schema.d.ts +229 -0
- package/dist/core/business-mgt/reservation-mgt/reservation-settings.schema.js +127 -0
- package/dist/core/business-mgt/reservation-mgt/reservation-slot-query.schema.d.ts +382 -0
- package/dist/core/business-mgt/reservation-mgt/reservation-slot-query.schema.js +322 -0
- package/dist/core/business-mgt/reservation-mgt/reservation-table-layout.schema.d.ts +123 -0
- package/dist/core/business-mgt/reservation-mgt/reservation-table-layout.schema.js +83 -0
- package/dist/core/business-mgt/reservation-mgt/reservation-table.schema.d.ts +167 -0
- package/dist/core/business-mgt/reservation-mgt/reservation-table.schema.js +84 -0
- package/dist/core/business-mgt/reservation-mgt/reservation.schema.d.ts +0 -0
- package/dist/core/business-mgt/reservation-mgt/reservation.schema.js +153 -0
- package/dist/core/business-mgt/reservation-mgt/resource/index.d.ts +4 -0
- package/dist/core/business-mgt/reservation-mgt/resource/index.js +20 -0
- package/dist/core/business-mgt/reservation-mgt/resource/reservation-resource-category.schema.d.ts +157 -0
- package/dist/core/business-mgt/reservation-mgt/resource/reservation-resource-category.schema.js +76 -0
- package/dist/core/business-mgt/reservation-mgt/resource/reservation-resource-instance.schema.d.ts +137 -0
- package/dist/core/business-mgt/reservation-mgt/resource/reservation-resource-instance.schema.js +94 -0
- package/dist/core/business-mgt/reservation-mgt/resource/reservation-resource.schema.d.ts +713 -0
- package/dist/core/business-mgt/reservation-mgt/resource/reservation-resource.schema.js +363 -0
- package/dist/core/business-mgt/reservation-mgt/resource/resource-versioning.schema.d.ts +151 -0
- package/dist/core/business-mgt/reservation-mgt/resource/resource-versioning.schema.js +147 -0
- package/dist/core/business-mgt/reservation-resource.schema.d.ts +154 -0
- package/dist/core/business-mgt/reservation-resource.schema.js +100 -0
- package/dist/core/business-mgt/reservation.schema.d.ts +119 -0
- package/dist/core/business-mgt/reservation.schema.js +89 -0
- package/dist/core/business-mgt/service-appointment.schema.d.ts +105 -0
- package/dist/core/business-mgt/service-appointment.schema.js +69 -0
- package/dist/core/business-mgt/service-config.schema.d.ts +453 -0
- package/dist/core/business-mgt/service-config.schema.js +102 -0
- package/dist/core/business-mgt/service-management/appointment-additional-info.schema.d.ts +110 -0
- package/dist/core/business-mgt/service-management/appointment-additional-info.schema.js +78 -0
- package/dist/core/business-mgt/service-management/appointment-field-config.schema.d.ts +304 -0
- package/dist/core/business-mgt/service-management/appointment-field-config.schema.js +75 -0
- package/dist/core/business-mgt/service-management/business-service-config.schema.d.ts +1226 -0
- package/dist/core/business-mgt/service-management/business-service-config.schema.js +317 -0
- package/dist/core/business-mgt/service-management/index.d.ts +13 -0
- package/dist/core/business-mgt/service-management/index.js +29 -0
- package/dist/core/business-mgt/service-management/service-appointment.schema.d.ts +531 -0
- package/dist/core/business-mgt/service-management/service-appointment.schema.js +116 -0
- package/dist/core/business-mgt/service-management/service-person.schema.d.ts +122 -0
- package/dist/core/business-mgt/service-management/service-person.schema.js +66 -0
- package/dist/core/business-mgt/service-management/service-pricing-rule.schema.d.ts +221 -0
- package/dist/core/business-mgt/service-management/service-pricing-rule.schema.js +118 -0
- package/dist/core/business-mgt/service-management/service-provider.schema.d.ts +90 -0
- package/dist/core/business-mgt/service-management/service-provider.schema.js +54 -0
- package/dist/core/business-mgt/service-management/service-slot-query.schema.d.ts +90 -0
- package/dist/core/business-mgt/service-management/service-slot-query.schema.js +113 -0
- package/dist/core/business-mgt/service-management/service-time-off.schema.d.ts +121 -0
- package/dist/core/business-mgt/service-management/service-time-off.schema.js +95 -0
- package/dist/core/business-mgt/service-person.schema.d.ts +43 -0
- package/dist/core/business-mgt/service-person.schema.js +38 -0
- package/dist/core/business-mgt/tax-rule.schema.d.ts +161 -0
- package/dist/core/business-mgt/tax-rule.schema.js +90 -0
- package/dist/core/conversation/conversation-config.schema.d.ts +644 -0
- package/dist/core/conversation/conversation-config.schema.js +351 -0
- package/dist/core/conversation/conversation-message.schema.d.ts +307 -0
- package/dist/core/conversation/conversation-message.schema.js +275 -0
- package/dist/core/conversation/index.d.ts +12 -0
- package/dist/core/conversation/index.js +28 -0
- package/dist/core/conversation/outbound-call.schema.d.ts +209 -0
- package/dist/core/conversation/outbound-call.schema.js +116 -0
- package/dist/core/conversation/outbound-email.schema.d.ts +338 -0
- package/dist/core/conversation/outbound-email.schema.js +150 -0
- package/dist/core/conversation/outbound-sms.schema.d.ts +163 -0
- package/dist/core/conversation/outbound-sms.schema.js +85 -0
- package/dist/core/conversation/outbound-template.schema.d.ts +375 -0
- package/dist/core/conversation/outbound-template.schema.js +160 -0
- package/dist/core/conversation/translation-config.schema.d.ts +92 -0
- package/dist/core/conversation/translation-config.schema.js +88 -0
- package/dist/core/conversation/translation-conversation.schema.d.ts +469 -0
- package/dist/core/conversation/translation-conversation.schema.js +175 -0
- package/dist/core/index.d.ts +12 -0
- package/dist/core/index.js +30 -0
- package/dist/core/service-configuration/agent-config.schema.d.ts +236 -0
- package/dist/core/service-configuration/agent-config.schema.js +152 -0
- package/dist/core/service-configuration/base-agent-setup.d.ts +147 -0
- package/dist/core/service-configuration/base-agent-setup.js +123 -0
- package/dist/core/service-configuration/call-transfer-config.schema.d.ts +60 -0
- package/dist/core/service-configuration/call-transfer-config.schema.js +53 -0
- package/dist/core/service-configuration/deployment-config.schema.d.ts +522 -0
- package/dist/core/service-configuration/deployment-config.schema.js +271 -0
- package/dist/core/service-configuration/dynamic_setup/base-agent-setup.d.ts +130 -0
- package/dist/core/service-configuration/dynamic_setup/base-agent-setup.js +110 -0
- package/dist/core/service-configuration/dynamic_setup/index.d.ts +10 -0
- package/dist/core/service-configuration/dynamic_setup/index.js +26 -0
- package/dist/core/service-configuration/dynamic_setup/phone-agent-setup.d.ts +111 -0
- package/dist/core/service-configuration/dynamic_setup/phone-agent-setup.js +56 -0
- package/dist/core/service-configuration/dynamic_setup/web-agent-setup.d.ts +113 -0
- package/dist/core/service-configuration/dynamic_setup/web-agent-setup.js +55 -0
- package/dist/core/service-configuration/index.d.ts +17 -0
- package/dist/core/service-configuration/index.js +33 -0
- package/dist/core/service-configuration/instruction-config.schema.d.ts +183 -0
- package/dist/core/service-configuration/instruction-config.schema.js +139 -0
- package/dist/core/service-configuration/interaction-channels.schema.d.ts +469 -0
- package/dist/core/service-configuration/interaction-channels.schema.js +390 -0
- package/dist/core/service-configuration/knowledge.schema.d.ts +107 -0
- package/dist/core/service-configuration/knowledge.schema.js +106 -0
- package/dist/core/service-configuration/phone-config.schema.d.ts +206 -0
- package/dist/core/service-configuration/phone-config.schema.js +121 -0
- package/dist/core/service-configuration/phone-number.schema.d.ts +236 -0
- package/dist/core/service-configuration/phone-number.schema.js +211 -0
- package/dist/core/service-configuration/provisioning-config.d.ts +429 -0
- package/dist/core/service-configuration/provisioning-config.js +307 -0
- package/dist/core/service-configuration/support-llm.d.ts +95 -0
- package/dist/core/service-configuration/support-llm.js +76 -0
- package/dist/core/service-configuration/voice-language.schema.d.ts +200 -0
- package/dist/core/service-configuration/voice-language.schema.js +166 -0
- package/dist/core/type-definitions/account-definitions.d.ts +82 -0
- package/dist/core/type-definitions/account-definitions.js +88 -0
- package/dist/core/type-definitions/business-definitions.d.ts +394 -0
- package/dist/core/type-definitions/business-definitions.js +447 -0
- package/dist/core/type-definitions/conversation.type.definition.d.ts +223 -0
- package/dist/core/type-definitions/conversation.type.definition.js +236 -0
- package/dist/core/type-definitions/display-order.d.ts +154 -0
- package/dist/core/type-definitions/display-order.js +154 -0
- package/dist/core/type-definitions/dynamic-fields/field-definition.schema.d.ts +165 -0
- package/dist/core/type-definitions/dynamic-fields/field-definition.schema.js +97 -0
- package/dist/core/type-definitions/dynamic-fields/field-types.d.ts +49 -0
- package/dist/core/type-definitions/dynamic-fields/field-types.js +104 -0
- package/dist/core/type-definitions/dynamic-fields/index.d.ts +9 -0
- package/dist/core/type-definitions/dynamic-fields/index.js +25 -0
- package/dist/core/type-definitions/index.d.ts +10 -0
- package/dist/core/type-definitions/index.js +26 -0
- package/dist/core/type-definitions/knowledge-definitions.d.ts +30 -0
- package/dist/core/type-definitions/knowledge-definitions.js +37 -0
- package/dist/core/type-definitions/service-config.definitions.d.ts +112 -0
- package/dist/core/type-definitions/service-config.definitions.js +135 -0
- package/dist/core/validators/channel-validation.d.ts +19 -0
- package/dist/core/validators/channel-validation.js +40 -0
- package/dist/core/validators/index.d.ts +5 -0
- package/dist/core/validators/index.js +21 -0
- package/dist/index.d.ts +6 -0
- package/dist/index.js +24 -0
- package/dist/request/index.d.ts +5 -0
- package/dist/request/index.js +21 -0
- package/dist/request/models/index.d.ts +6 -0
- package/dist/request/models/index.js +22 -0
- package/dist/request/models/paginated-quest.schema.d.ts +33 -0
- package/dist/request/models/paginated-quest.schema.js +35 -0
- package/dist/request/models/paginated-result.schema.d.ts +124 -0
- package/dist/request/models/paginated-result.schema.js +94 -0
- package/package.json +43 -0
|
@@ -0,0 +1,367 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.BusinessPropertyCatalogSchema = exports.PropertyCatalogSchema = exports.UpdatePropertySchema = exports.CreatePropertySchema = exports.UpdatePropertyAddressSchema = exports.CreatePropertyAddressSchema = exports.UpdatePropertyCategorySchema = exports.CreatePropertyCategorySchema = exports.PropertySchema = exports.LandDetailsSchema = exports.CommercialDetailsSchema = exports.ResidentialDetailsSchema = exports.PropertyFeaturesSchema = exports.PropertyAddressSchema = exports.PropertyCategorySchema = void 0;
|
|
7
|
+
const zod_1 = __importDefault(require("zod"));
|
|
8
|
+
const base_schema_1 = require("../../base.schema");
|
|
9
|
+
const display_order_1 = require("../../type-definitions/display-order");
|
|
10
|
+
const type_definitions_1 = require("../../type-definitions");
|
|
11
|
+
/**
|
|
12
|
+
* @fileoverview Property configuration schema definitions for property management.
|
|
13
|
+
* @module business-mgt/property-management
|
|
14
|
+
*
|
|
15
|
+
* Property management schemas for real estate listings including residential,
|
|
16
|
+
* commercial, and land properties with categories, addresses, and type-specific details.
|
|
17
|
+
*/
|
|
18
|
+
// ============================================================================
|
|
19
|
+
// PROPERTY CATEGORY SCHEMA
|
|
20
|
+
// ============================================================================
|
|
21
|
+
/**
|
|
22
|
+
* Property category schema.
|
|
23
|
+
* Organizes properties into logical groups (e.g., Luxury Homes, Commercial Offices).
|
|
24
|
+
*
|
|
25
|
+
* @typedef {Object} PropertyCategory
|
|
26
|
+
* @property {string} name - Category name
|
|
27
|
+
* @property {string} [description] - Category description
|
|
28
|
+
* @property {PropertyType} propertyType - Type of property
|
|
29
|
+
* @property {number} [displayOrder] - Display order in listing
|
|
30
|
+
* @property {boolean} isDefault - Whether this is the default category
|
|
31
|
+
*/
|
|
32
|
+
exports.PropertyCategorySchema = base_schema_1.BaseModelSchema.safeExtend({
|
|
33
|
+
name: zod_1.default.string().min(1, "Category name is required").describe("Category name (e.g., Luxury Homes, Commercial Offices)"),
|
|
34
|
+
description: zod_1.default.string().optional().describe("Category description"),
|
|
35
|
+
propertyType: zod_1.default.enum(type_definitions_1.PropertyType).describe("Type of property (residential, commercial, land)"),
|
|
36
|
+
displayOrder: zod_1.default.number().int().optional().describe("Display order in listing"),
|
|
37
|
+
isDefault: zod_1.default.boolean().default(false).describe("Whether this is the default category"),
|
|
38
|
+
});
|
|
39
|
+
// ============================================================================
|
|
40
|
+
// PROPERTY ADDRESS SCHEMA
|
|
41
|
+
// ============================================================================
|
|
42
|
+
/**
|
|
43
|
+
* Property address schema.
|
|
44
|
+
* Standalone address entity for property locations with verification support.
|
|
45
|
+
*
|
|
46
|
+
* @typedef {Object} PropertyAddress
|
|
47
|
+
* @property {string} street - Street address
|
|
48
|
+
* @property {string} [unit] - Unit or apartment number
|
|
49
|
+
* @property {string} city - City name
|
|
50
|
+
* @property {string} state - State or province
|
|
51
|
+
* @property {string} [postalCode] - Postal or ZIP code
|
|
52
|
+
* @property {string} country - Country
|
|
53
|
+
* @property {Object} [coordinates] - Geographic coordinates
|
|
54
|
+
* @property {string} [neighborhood] - Neighborhood name
|
|
55
|
+
* @property {string} [district] - Administrative district
|
|
56
|
+
* @property {boolean} isVerified - Whether address is verified
|
|
57
|
+
* @property {number} [verifiedAt] - Verification timestamp
|
|
58
|
+
* @property {string} [primaryUserAccountId] - User account managing property
|
|
59
|
+
*/
|
|
60
|
+
exports.PropertyAddressSchema = base_schema_1.BaseModelSchema.safeExtend({
|
|
61
|
+
street: zod_1.default.string().min(1, "Street address is required").describe("Street address"),
|
|
62
|
+
unit: zod_1.default.string().nullable().optional().describe("Unit or apartment number"),
|
|
63
|
+
city: zod_1.default.string().min(1, "City is required").describe("City name"),
|
|
64
|
+
state: zod_1.default.string().min(1, "State is required").describe("State or province"),
|
|
65
|
+
postalCode: zod_1.default.string().nullable().optional().describe("Postal or ZIP code"),
|
|
66
|
+
country: zod_1.default.string().min(1, "Country is required").describe("Country"),
|
|
67
|
+
coordinates: zod_1.default.object({
|
|
68
|
+
latitude: zod_1.default.number().min(-90).max(90).describe("Latitude coordinate"),
|
|
69
|
+
longitude: zod_1.default.number().min(-180).max(180).describe("Longitude coordinate"),
|
|
70
|
+
}).nullable().optional().describe("Geographic coordinates"),
|
|
71
|
+
neighborhood: zod_1.default.string().nullable().optional().describe("Neighborhood or district name"),
|
|
72
|
+
district: zod_1.default.string().nullable().optional().describe("Administrative district"),
|
|
73
|
+
isVerified: zod_1.default.boolean().default(false).describe("Whether address has been verified"),
|
|
74
|
+
verifiedAt: zod_1.default.number().nullable().optional().describe("Timestamp when address was verified"),
|
|
75
|
+
primaryUserAccountId: zod_1.default.string().nullable().optional().describe("User account managing the property at this address"),
|
|
76
|
+
});
|
|
77
|
+
// ============================================================================
|
|
78
|
+
// PROPERTY DETAILS SCHEMAS
|
|
79
|
+
// ============================================================================
|
|
80
|
+
/**
|
|
81
|
+
* Property features schema.
|
|
82
|
+
* Shared features across all property types.
|
|
83
|
+
*
|
|
84
|
+
* @typedef {Object} PropertyFeatures
|
|
85
|
+
* @property {number} [parkingSpaces] - Number of parking spaces
|
|
86
|
+
* @property {string[]} amenities - List of amenities
|
|
87
|
+
* @property {string[]} utilities - Available utilities
|
|
88
|
+
*/
|
|
89
|
+
exports.PropertyFeaturesSchema = zod_1.default.object({
|
|
90
|
+
parkingSpaces: zod_1.default.number().int().nonnegative().nullable().optional().describe("Number of parking spaces"),
|
|
91
|
+
amenities: zod_1.default.array(zod_1.default.string()).default([]).describe("List of amenities (pool, gym, etc.)"),
|
|
92
|
+
utilities: zod_1.default.array(zod_1.default.string()).default([]).describe("Available utilities (gas, electric, water, etc.)"),
|
|
93
|
+
});
|
|
94
|
+
/**
|
|
95
|
+
* Residential details schema.
|
|
96
|
+
* Details for houses, apartments, condos, townhouses, villas.
|
|
97
|
+
*
|
|
98
|
+
* @typedef {Object} ResidentialDetails
|
|
99
|
+
* @property {number} bedrooms - Number of bedrooms
|
|
100
|
+
* @property {number} bathrooms - Number of bathrooms
|
|
101
|
+
* @property {number} [halfBaths] - Number of half bathrooms
|
|
102
|
+
* @property {number} squareFootage - Total square footage
|
|
103
|
+
* @property {number} [lotSize] - Lot size
|
|
104
|
+
* @property {string} lotSizeUnit - Unit for lot size
|
|
105
|
+
* @property {number} [yearBuilt] - Year built
|
|
106
|
+
* @property {number} [floors] - Number of floors
|
|
107
|
+
* @property {string} [basementType] - Basement type
|
|
108
|
+
* @property {boolean} [atticFinished] - Whether attic is finished
|
|
109
|
+
* @property {string} [heatingType] - Heating system type
|
|
110
|
+
* @property {string} [coolingType] - Cooling system type
|
|
111
|
+
* @property {string} [roofType] - Roof material
|
|
112
|
+
* @property {string} [exteriorMaterial] - Exterior material
|
|
113
|
+
* @property {number} [garageSpaces] - Number of garage spaces
|
|
114
|
+
* @property {boolean} hasPool - Whether has pool
|
|
115
|
+
* @property {boolean} hasFireplace - Whether has fireplace
|
|
116
|
+
*/
|
|
117
|
+
exports.ResidentialDetailsSchema = zod_1.default.object({
|
|
118
|
+
bedrooms: zod_1.default.number().int().nonnegative().describe("Number of bedrooms"),
|
|
119
|
+
bathrooms: zod_1.default.number().nonnegative().describe("Number of bathrooms"),
|
|
120
|
+
halfBaths: zod_1.default.number().int().nonnegative().nullable().optional().describe("Number of half bathrooms"),
|
|
121
|
+
squareFootage: zod_1.default.number().positive().describe("Total square footage"),
|
|
122
|
+
lotSize: zod_1.default.number().positive().nullable().optional().describe("Lot size"),
|
|
123
|
+
lotSizeUnit: zod_1.default.enum(['sqft', 'acres', 'sqm', 'hectares']).default('sqft').describe("Unit for lot size"),
|
|
124
|
+
yearBuilt: zod_1.default.number().int().min(1800).max(2100).nullable().optional().describe("Year the property was built"),
|
|
125
|
+
floors: zod_1.default.number().int().positive().nullable().optional().describe("Number of floors"),
|
|
126
|
+
basementType: zod_1.default.enum(['none', 'unfinished', 'partial', 'finished']).nullable().optional().describe("Basement type"),
|
|
127
|
+
atticFinished: zod_1.default.boolean().nullable().optional().describe("Whether attic is finished"),
|
|
128
|
+
heatingType: zod_1.default.string().nullable().optional().describe("Heating system type (e.g., forced air, radiant)"),
|
|
129
|
+
coolingType: zod_1.default.string().nullable().optional().describe("Cooling system type (e.g., central, window)"),
|
|
130
|
+
roofType: zod_1.default.string().nullable().optional().describe("Roof material (e.g., shingle, tile, metal)"),
|
|
131
|
+
exteriorMaterial: zod_1.default.string().nullable().optional().describe("Exterior material (e.g., brick, vinyl, stucco)"),
|
|
132
|
+
garageSpaces: zod_1.default.number().int().nonnegative().nullable().optional().describe("Number of garage spaces"),
|
|
133
|
+
hasPool: zod_1.default.boolean().default(false).describe("Whether property has a pool"),
|
|
134
|
+
hasFireplace: zod_1.default.boolean().default(false).describe("Whether property has a fireplace"),
|
|
135
|
+
});
|
|
136
|
+
/**
|
|
137
|
+
* Commercial details schema.
|
|
138
|
+
* Details for office, retail, warehouse, industrial properties.
|
|
139
|
+
*
|
|
140
|
+
* @typedef {Object} CommercialDetails
|
|
141
|
+
* @property {number} squareFootage - Total square footage
|
|
142
|
+
* @property {number} [usableSquareFootage] - Usable square footage
|
|
143
|
+
* @property {number} [floors] - Number of floors
|
|
144
|
+
* @property {number} [ceilingHeight] - Ceiling height in feet
|
|
145
|
+
* @property {number} [loadingDocks] - Number of loading docks
|
|
146
|
+
* @property {number} [driveInDoors] - Number of drive-in doors
|
|
147
|
+
* @property {boolean} freightElevator - Has freight elevator
|
|
148
|
+
* @property {boolean} passengerElevator - Has passenger elevator
|
|
149
|
+
* @property {string} zoningType - Zoning classification
|
|
150
|
+
* @property {number} [yearBuilt] - Year built
|
|
151
|
+
* @property {string} [previousUse] - Previous use
|
|
152
|
+
* @property {string} [buildOutStatus] - Build-out status
|
|
153
|
+
* @property {string} [hvacType] - HVAC system type
|
|
154
|
+
* @property {string} [powerCapacity] - Electrical power capacity
|
|
155
|
+
* @property {boolean} sprinklerSystem - Has sprinkler system
|
|
156
|
+
*/
|
|
157
|
+
exports.CommercialDetailsSchema = zod_1.default.object({
|
|
158
|
+
squareFootage: zod_1.default.number().positive().describe("Total square footage"),
|
|
159
|
+
usableSquareFootage: zod_1.default.number().positive().nullable().optional().describe("Usable square footage"),
|
|
160
|
+
floors: zod_1.default.number().int().positive().nullable().optional().describe("Number of floors"),
|
|
161
|
+
ceilingHeight: zod_1.default.number().positive().nullable().optional().describe("Ceiling height in feet"),
|
|
162
|
+
loadingDocks: zod_1.default.number().int().nonnegative().nullable().optional().describe("Number of loading docks"),
|
|
163
|
+
driveInDoors: zod_1.default.number().int().nonnegative().nullable().optional().describe("Number of drive-in doors"),
|
|
164
|
+
freightElevator: zod_1.default.boolean().default(false).describe("Whether property has freight elevator"),
|
|
165
|
+
passengerElevator: zod_1.default.boolean().default(false).describe("Whether property has passenger elevator"),
|
|
166
|
+
zoningType: zod_1.default.string().describe("Zoning classification"),
|
|
167
|
+
yearBuilt: zod_1.default.number().int().min(1800).max(2100).nullable().optional().describe("Year the property was built"),
|
|
168
|
+
previousUse: zod_1.default.string().nullable().optional().describe("Previous use of the property"),
|
|
169
|
+
buildOutStatus: zod_1.default.enum(['shell', 'partial', 'turnkey']).nullable().optional().describe("Build-out status"),
|
|
170
|
+
hvacType: zod_1.default.string().nullable().optional().describe("HVAC system type"),
|
|
171
|
+
powerCapacity: zod_1.default.string().nullable().optional().describe("Electrical power capacity"),
|
|
172
|
+
sprinklerSystem: zod_1.default.boolean().default(false).describe("Whether property has sprinkler system"),
|
|
173
|
+
});
|
|
174
|
+
/**
|
|
175
|
+
* Land details schema.
|
|
176
|
+
* Details for lots, farms, and acreage properties.
|
|
177
|
+
*
|
|
178
|
+
* @typedef {Object} LandDetails
|
|
179
|
+
* @property {number} lotSize - Lot size
|
|
180
|
+
* @property {string} lotSizeUnit - Unit for lot size
|
|
181
|
+
* @property {string} zoning - Zoning classification
|
|
182
|
+
* @property {string} [topography] - Land topography
|
|
183
|
+
* @property {number} [roadFrontage] - Road frontage in feet
|
|
184
|
+
* @property {string} [roadAccess] - Road access type
|
|
185
|
+
* @property {string[]} utilitiesAvailable - Available utilities
|
|
186
|
+
* @property {string} [waterSource] - Water source
|
|
187
|
+
* @property {string} [sewerType] - Sewer type
|
|
188
|
+
* @property {string} [soilType] - Soil type
|
|
189
|
+
* @property {boolean} floodZone - Whether in flood zone
|
|
190
|
+
* @property {string} [floodZoneDesignation] - FEMA flood zone
|
|
191
|
+
* @property {string} [easements] - Easements description
|
|
192
|
+
* @property {boolean} surveyAvailable - Whether survey available
|
|
193
|
+
* @property {string} [mineralRights] - Mineral rights status
|
|
194
|
+
* @property {number} [timberValue] - Estimated timber value
|
|
195
|
+
*/
|
|
196
|
+
exports.LandDetailsSchema = zod_1.default.object({
|
|
197
|
+
lotSize: zod_1.default.number().positive().describe("Lot size"),
|
|
198
|
+
lotSizeUnit: zod_1.default.enum(['sqft', 'acres', 'sqm', 'hectares']).default('acres').describe("Unit for lot size"),
|
|
199
|
+
zoning: zod_1.default.string().describe("Zoning classification"),
|
|
200
|
+
topography: zod_1.default.enum(['flat', 'sloped', 'hilly', 'mixed']).nullable().optional().describe("Land topography"),
|
|
201
|
+
roadFrontage: zod_1.default.number().positive().nullable().optional().describe("Road frontage in feet"),
|
|
202
|
+
roadAccess: zod_1.default.enum(['paved', 'gravel', 'dirt', 'none']).nullable().optional().describe("Road access type"),
|
|
203
|
+
utilitiesAvailable: zod_1.default.array(zod_1.default.string()).default([]).describe("Available utilities (water, sewer, electric, gas)"),
|
|
204
|
+
waterSource: zod_1.default.enum(['municipal', 'well', 'none', 'unknown']).nullable().optional().describe("Water source"),
|
|
205
|
+
sewerType: zod_1.default.enum(['municipal', 'septic', 'none', 'unknown']).nullable().optional().describe("Sewer type"),
|
|
206
|
+
soilType: zod_1.default.string().nullable().optional().describe("Soil type or classification"),
|
|
207
|
+
floodZone: zod_1.default.boolean().default(false).describe("Whether property is in a flood zone"),
|
|
208
|
+
floodZoneDesignation: zod_1.default.string().nullable().optional().describe("FEMA flood zone designation"),
|
|
209
|
+
easements: zod_1.default.string().nullable().optional().describe("Easements description"),
|
|
210
|
+
surveyAvailable: zod_1.default.boolean().default(false).describe("Whether survey is available"),
|
|
211
|
+
mineralRights: zod_1.default.enum(['included', 'excluded', 'partial', 'unknown']).nullable().optional().describe("Mineral rights status"),
|
|
212
|
+
timberValue: zod_1.default.number().nonnegative().nullable().optional().describe("Estimated timber value"),
|
|
213
|
+
});
|
|
214
|
+
// ============================================================================
|
|
215
|
+
// PROPERTY SCHEMA
|
|
216
|
+
// ============================================================================
|
|
217
|
+
/**
|
|
218
|
+
* Property schema.
|
|
219
|
+
* Main property listing with pricing, details, and type-specific information.
|
|
220
|
+
*
|
|
221
|
+
* @typedef {Object} Property
|
|
222
|
+
* @property {string} categoryId - Category ID
|
|
223
|
+
* @property {PropertyCategory} [category] - Property category
|
|
224
|
+
* @property {string} title - Property listing title
|
|
225
|
+
* @property {string} [description] - Detailed description
|
|
226
|
+
* @property {PropertyType} propertyType - Type of property
|
|
227
|
+
* @property {PropertySubType} propertySubType - Subtype of property
|
|
228
|
+
* @property {string} addressId - Address ID
|
|
229
|
+
* @property {PropertyAddress} [address] - Property address
|
|
230
|
+
* @property {ListingType} listingType - Type of listing
|
|
231
|
+
* @property {ListingStatus} listingStatus - Current listing status
|
|
232
|
+
* @property {number} [salePrice] - Sale price
|
|
233
|
+
* @property {string} salePriceCurrency - Currency for sale price
|
|
234
|
+
* @property {number} [rentalPrice] - Rental price
|
|
235
|
+
* @property {RentalPeriod} [rentalPeriod] - Rental period
|
|
236
|
+
* @property {string} rentalPriceCurrency - Currency for rental price
|
|
237
|
+
* @property {boolean} priceNegotiable - Whether price is negotiable
|
|
238
|
+
* @property {PropertyFeatures} [features] - Property features
|
|
239
|
+
* @property {PropertyCondition} [condition] - Property condition
|
|
240
|
+
* @property {boolean} furnished - Whether furnished
|
|
241
|
+
* @property {string[]} images - Image URLs
|
|
242
|
+
* @property {string} [virtualTourUrl] - Virtual tour URL
|
|
243
|
+
* @property {string} [videoUrl] - Video tour URL
|
|
244
|
+
* @property {number} [availableFrom] - Available from timestamp
|
|
245
|
+
* @property {number} [availableTo] - Available until timestamp
|
|
246
|
+
* @property {boolean} isActive - Whether active
|
|
247
|
+
* @property {boolean} isFeatured - Whether featured
|
|
248
|
+
* @property {boolean} isVerified - Whether verified
|
|
249
|
+
* @property {string} [externalId] - External system ID
|
|
250
|
+
* @property {string} [mlsNumber] - MLS listing number
|
|
251
|
+
* @property {ResidentialDetails} [residentialDetails] - Residential details
|
|
252
|
+
* @property {CommercialDetails} [commercialDetails] - Commercial details
|
|
253
|
+
* @property {LandDetails} [landDetails] - Land details
|
|
254
|
+
*/
|
|
255
|
+
exports.PropertySchema = base_schema_1.BaseModelSchema.safeExtend({
|
|
256
|
+
categoryId: zod_1.default.string().describe("ID of the category this property belongs to"),
|
|
257
|
+
category: exports.PropertyCategorySchema.optional().describe("Property category"),
|
|
258
|
+
// Basic Info
|
|
259
|
+
title: zod_1.default.string().min(1, "Property title is required").describe("Property listing title"),
|
|
260
|
+
description: zod_1.default.string().optional().describe("Detailed property description"),
|
|
261
|
+
propertyType: zod_1.default.enum(type_definitions_1.PropertyType).describe("Type of property"),
|
|
262
|
+
propertySubType: zod_1.default.enum(type_definitions_1.PropertySubType).describe("Subtype of property"),
|
|
263
|
+
// Location
|
|
264
|
+
addressId: zod_1.default.string().describe("ID of the property address"),
|
|
265
|
+
address: exports.PropertyAddressSchema.nullable().optional().describe("Property address (populated)"),
|
|
266
|
+
// Listing Info
|
|
267
|
+
listingType: zod_1.default.enum(type_definitions_1.ListingType).describe("Type of listing (sale, rent, or both)"),
|
|
268
|
+
listingStatus: zod_1.default.enum(type_definitions_1.ListingStatus).default(type_definitions_1.ListingStatus.DRAFT).describe("Current listing status"),
|
|
269
|
+
// Sale Pricing
|
|
270
|
+
salePrice: zod_1.default.number().nonnegative().nullable().optional().describe("Sale price"),
|
|
271
|
+
salePriceCurrency: zod_1.default.string().default('USD').describe("Currency for sale price"),
|
|
272
|
+
// Rental Pricing
|
|
273
|
+
rentalPrice: zod_1.default.number().nonnegative().nullable().optional().describe("Rental price"),
|
|
274
|
+
rentalPeriod: zod_1.default.enum(type_definitions_1.RentalPeriod).nullable().optional().describe("Rental period (daily, weekly, monthly, yearly)"),
|
|
275
|
+
rentalPriceCurrency: zod_1.default.string().default('USD').describe("Currency for rental price"),
|
|
276
|
+
// Pricing Options
|
|
277
|
+
priceNegotiable: zod_1.default.boolean().default(false).describe("Whether price is negotiable"),
|
|
278
|
+
// Features
|
|
279
|
+
features: exports.PropertyFeaturesSchema.optional().describe("Property features"),
|
|
280
|
+
// Condition
|
|
281
|
+
condition: zod_1.default.enum(type_definitions_1.PropertyCondition).nullable().optional().describe("Property condition"),
|
|
282
|
+
furnished: zod_1.default.boolean().default(false).describe("Whether property is furnished"),
|
|
283
|
+
// Media
|
|
284
|
+
images: zod_1.default.array(zod_1.default.string()).default([]).describe("Array of image URLs"),
|
|
285
|
+
virtualTourUrl: zod_1.default.url().nullable().optional().describe("Virtual tour URL"),
|
|
286
|
+
videoUrl: zod_1.default.url().nullable().optional().describe("Video tour URL"),
|
|
287
|
+
// Availability
|
|
288
|
+
availableFrom: zod_1.default.number().nullable().optional().describe("Available from date (timestamp)"),
|
|
289
|
+
availableTo: zod_1.default.number().nullable().optional().describe("Available until date (timestamp) - for rentals"),
|
|
290
|
+
// Flags
|
|
291
|
+
isActive: zod_1.default.boolean().default(true).describe("Whether property is active in listings"),
|
|
292
|
+
isFeatured: zod_1.default.boolean().default(false).describe("Whether property is featured"),
|
|
293
|
+
isVerified: zod_1.default.boolean().default(false).describe("Whether property has been verified"),
|
|
294
|
+
// Reference
|
|
295
|
+
externalId: zod_1.default.string().nullable().optional().describe("External system reference ID"),
|
|
296
|
+
mlsNumber: zod_1.default.string().nullable().optional().describe("MLS listing number"),
|
|
297
|
+
// Type-specific details (populated based on propertyType)
|
|
298
|
+
residentialDetails: exports.ResidentialDetailsSchema.nullable().optional().describe("Residential-specific details (when propertyType is 'residential')"),
|
|
299
|
+
commercialDetails: exports.CommercialDetailsSchema.nullable().optional().describe("Commercial-specific details (when propertyType is 'commercial')"),
|
|
300
|
+
landDetails: exports.LandDetailsSchema.nullable().optional().describe("Land-specific details (when propertyType is 'land')"),
|
|
301
|
+
});
|
|
302
|
+
// ============================================================================
|
|
303
|
+
// CREATE/UPDATE SCHEMAS
|
|
304
|
+
// ============================================================================
|
|
305
|
+
/**
|
|
306
|
+
* Schema for creating a new property category.
|
|
307
|
+
*/
|
|
308
|
+
exports.CreatePropertyCategorySchema = exports.PropertyCategorySchema.omit({
|
|
309
|
+
id: true,
|
|
310
|
+
createdAt: true,
|
|
311
|
+
updatedAt: true,
|
|
312
|
+
}).safeExtend({
|
|
313
|
+
placement: display_order_1.CreateDisplayOrderPlacementSchema.optional(),
|
|
314
|
+
});
|
|
315
|
+
/**
|
|
316
|
+
* Schema for updating an existing property category.
|
|
317
|
+
*/
|
|
318
|
+
exports.UpdatePropertyCategorySchema = exports.CreatePropertyCategorySchema.partial().safeExtend({
|
|
319
|
+
id: zod_1.default.string().describe("Unique identifier of the PropertyCategory to update"),
|
|
320
|
+
});
|
|
321
|
+
/**
|
|
322
|
+
* Schema for creating a new property address.
|
|
323
|
+
*/
|
|
324
|
+
exports.CreatePropertyAddressSchema = exports.PropertyAddressSchema.omit({
|
|
325
|
+
id: true,
|
|
326
|
+
createdAt: true,
|
|
327
|
+
updatedAt: true,
|
|
328
|
+
verifiedAt: true,
|
|
329
|
+
});
|
|
330
|
+
/**
|
|
331
|
+
* Schema for updating an existing property address.
|
|
332
|
+
*/
|
|
333
|
+
exports.UpdatePropertyAddressSchema = exports.CreatePropertyAddressSchema.partial().safeExtend({
|
|
334
|
+
id: zod_1.default.string().describe("Unique identifier of the PropertyAddress to update"),
|
|
335
|
+
});
|
|
336
|
+
/**
|
|
337
|
+
* Schema for creating a new property.
|
|
338
|
+
*/
|
|
339
|
+
exports.CreatePropertySchema = exports.PropertySchema.omit({
|
|
340
|
+
id: true,
|
|
341
|
+
createdAt: true,
|
|
342
|
+
updatedAt: true,
|
|
343
|
+
category: true,
|
|
344
|
+
address: true,
|
|
345
|
+
});
|
|
346
|
+
/**
|
|
347
|
+
* Schema for updating an existing property.
|
|
348
|
+
*/
|
|
349
|
+
exports.UpdatePropertySchema = exports.CreatePropertySchema.partial().safeExtend({
|
|
350
|
+
id: zod_1.default.string().describe("Unique identifier of the Property to update"),
|
|
351
|
+
});
|
|
352
|
+
// ============================================================================
|
|
353
|
+
// CATALOG SCHEMAS
|
|
354
|
+
// ============================================================================
|
|
355
|
+
/**
|
|
356
|
+
* Property Catalog schema.
|
|
357
|
+
* Category with its property listings.
|
|
358
|
+
*/
|
|
359
|
+
exports.PropertyCatalogSchema = zod_1.default.object({
|
|
360
|
+
propertyCategory: exports.PropertyCategorySchema,
|
|
361
|
+
items: zod_1.default.array(exports.PropertySchema).describe("List of properties in this category"),
|
|
362
|
+
}).describe("Schema representing a property category and its listings");
|
|
363
|
+
/**
|
|
364
|
+
* Business Property Catalog schema.
|
|
365
|
+
* Full property catalog array.
|
|
366
|
+
*/
|
|
367
|
+
exports.BusinessPropertyCatalogSchema = zod_1.default.array(exports.PropertyCatalogSchema).describe("Schema representing a business property catalog");
|
|
@@ -0,0 +1,254 @@
|
|
|
1
|
+
import z from "zod";
|
|
2
|
+
import { PropertyInquiryType, PropertyInquiryStatus } from "../../type-definitions";
|
|
3
|
+
/**
|
|
4
|
+
* @fileoverview Property Inquiry schema definitions for property management.
|
|
5
|
+
* @module business-mgt/property-inquiry
|
|
6
|
+
*
|
|
7
|
+
* Property inquiries track leads and customer interest in properties,
|
|
8
|
+
* including viewing scheduling, follow-ups, and conversion tracking.
|
|
9
|
+
*/
|
|
10
|
+
/**
|
|
11
|
+
* Property Inquiry schema.
|
|
12
|
+
* Tracks customer inquiries about properties with viewing and follow-up management.
|
|
13
|
+
*
|
|
14
|
+
* @typedef {Object} PropertyInquiry
|
|
15
|
+
* @property {string} propertyId - ID of the property being inquired about
|
|
16
|
+
* @property {string} [customerId] - ID of existing contact in system
|
|
17
|
+
* @property {Object} [customer] - Contact details of the inquirer
|
|
18
|
+
* @property {PropertyInquiryType} inquiryType - Type of inquiry
|
|
19
|
+
* @property {string} [message] - Inquiry message from the contact
|
|
20
|
+
* @property {string} source - Source of the inquiry
|
|
21
|
+
* @property {PropertyInquiryStatus} status - Current status of the inquiry
|
|
22
|
+
* @property {number} [preferredViewingDate] - Contact's preferred viewing date
|
|
23
|
+
* @property {string} [preferredViewingTime] - Contact's preferred viewing time
|
|
24
|
+
* @property {number} [scheduledViewingDate] - Scheduled viewing date
|
|
25
|
+
* @property {boolean} viewingCompleted - Whether the viewing has been completed
|
|
26
|
+
* @property {string} [viewingNotes] - Notes from the viewing
|
|
27
|
+
* @property {number} [followUpDate] - Next follow-up date
|
|
28
|
+
* @property {string} [followUpNotes] - Notes for follow-up
|
|
29
|
+
* @property {string} [assignedAgentId] - ID of the assigned agent
|
|
30
|
+
* @property {boolean} convertedToTransaction - Whether inquiry converted to a transaction
|
|
31
|
+
* @property {string} [transactionId] - ID of the resulting transaction
|
|
32
|
+
* @property {string} [transactionType] - Type of transaction (purchase or lease)
|
|
33
|
+
* @property {boolean} interestedInBuying - Whether contact is interested in buying
|
|
34
|
+
* @property {boolean} interestedInRenting - Whether contact is interested in renting
|
|
35
|
+
* @property {number} [budgetMin] - Minimum budget
|
|
36
|
+
* @property {number} [budgetMax] - Maximum budget
|
|
37
|
+
* @property {string} [notes] - Internal notes about the inquiry
|
|
38
|
+
* @property {string} [appointmentRecordId] - Linked appointment record ID
|
|
39
|
+
* @property {string} [cancelReason] - Reason for cancellation
|
|
40
|
+
* @property {string} [serviceConversationConfigId] - Service conversation config ID
|
|
41
|
+
*/
|
|
42
|
+
export declare const PropertyInquirySchema: z.ZodObject<{
|
|
43
|
+
id: z.ZodString;
|
|
44
|
+
createdAt: z.ZodOptional<z.ZodNumber>;
|
|
45
|
+
updatedAt: z.ZodOptional<z.ZodNumber>;
|
|
46
|
+
propertyId: z.ZodString;
|
|
47
|
+
customerId: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
48
|
+
customer: z.ZodOptional<z.ZodNullable<z.ZodObject<{
|
|
49
|
+
id: z.ZodString;
|
|
50
|
+
createdAt: z.ZodOptional<z.ZodNumber>;
|
|
51
|
+
updatedAt: z.ZodOptional<z.ZodNumber>;
|
|
52
|
+
customerId: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
53
|
+
phone_number: z.ZodOptional<z.ZodNullable<z.ZodPipe<z.ZodString, z.ZodTransform<string, string>>>>;
|
|
54
|
+
firstname: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
55
|
+
lastname: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
56
|
+
company: z.ZodOptional<z.ZodString>;
|
|
57
|
+
timezone: z.ZodOptional<z.ZodString>;
|
|
58
|
+
email: z.ZodOptional<z.ZodEmail>;
|
|
59
|
+
preferred_language: z.ZodDefault<z.ZodString>;
|
|
60
|
+
preferred_contact_method: z.ZodDefault<z.ZodEnum<typeof import("../../type-definitions").PreferredContactMethod>>;
|
|
61
|
+
best_time_to_call: z.ZodOptional<z.ZodEnum<typeof import("../../type-definitions").BestTimeToCall>>;
|
|
62
|
+
notes: z.ZodOptional<z.ZodString>;
|
|
63
|
+
tags: z.ZodOptional<z.ZodArray<z.ZodString>>;
|
|
64
|
+
custom_fields: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodAny>>;
|
|
65
|
+
channelId: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
66
|
+
address: z.ZodOptional<z.ZodObject<{
|
|
67
|
+
street: z.ZodString;
|
|
68
|
+
street2: z.ZodOptional<z.ZodString>;
|
|
69
|
+
city: z.ZodString;
|
|
70
|
+
state: z.ZodString;
|
|
71
|
+
postalCode: z.ZodString;
|
|
72
|
+
country: z.ZodString;
|
|
73
|
+
}, z.core.$strip>>;
|
|
74
|
+
isValidatedNames: z.ZodDefault<z.ZodBoolean>;
|
|
75
|
+
customerGroupId: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
76
|
+
}, z.core.$strip>>>;
|
|
77
|
+
inquiryType: z.ZodEnum<typeof PropertyInquiryType>;
|
|
78
|
+
message: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
79
|
+
source: z.ZodDefault<z.ZodString>;
|
|
80
|
+
status: z.ZodDefault<z.ZodEnum<typeof PropertyInquiryStatus>>;
|
|
81
|
+
preferredViewingDate: z.ZodOptional<z.ZodNullable<z.ZodNumber>>;
|
|
82
|
+
preferredViewingTime: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
83
|
+
scheduledViewingDate: z.ZodOptional<z.ZodNullable<z.ZodNumber>>;
|
|
84
|
+
viewingCompleted: z.ZodDefault<z.ZodBoolean>;
|
|
85
|
+
viewingNotes: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
86
|
+
followUpDate: z.ZodOptional<z.ZodNullable<z.ZodNumber>>;
|
|
87
|
+
followUpNotes: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
88
|
+
assignedAgentId: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
89
|
+
convertedToTransaction: z.ZodDefault<z.ZodBoolean>;
|
|
90
|
+
transactionId: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
91
|
+
transactionType: z.ZodOptional<z.ZodNullable<z.ZodEnum<{
|
|
92
|
+
purchase: "purchase";
|
|
93
|
+
lease: "lease";
|
|
94
|
+
}>>>;
|
|
95
|
+
interestedInBuying: z.ZodDefault<z.ZodBoolean>;
|
|
96
|
+
interestedInRenting: z.ZodDefault<z.ZodBoolean>;
|
|
97
|
+
budgetMin: z.ZodOptional<z.ZodNullable<z.ZodNumber>>;
|
|
98
|
+
budgetMax: z.ZodOptional<z.ZodNullable<z.ZodNumber>>;
|
|
99
|
+
notes: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
100
|
+
appointmentRecordId: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
101
|
+
cancelReason: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
102
|
+
serviceConversationConfigId: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
103
|
+
}, z.core.$strip>;
|
|
104
|
+
/**
|
|
105
|
+
* Schema for creating a new property inquiry.
|
|
106
|
+
*/
|
|
107
|
+
export declare const CreatePropertyInquirySchema: z.ZodObject<{
|
|
108
|
+
message: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
109
|
+
source: z.ZodDefault<z.ZodString>;
|
|
110
|
+
status: z.ZodDefault<z.ZodEnum<typeof PropertyInquiryStatus>>;
|
|
111
|
+
customerId: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
112
|
+
notes: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
113
|
+
cancelReason: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
114
|
+
serviceConversationConfigId: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
115
|
+
propertyId: z.ZodString;
|
|
116
|
+
inquiryType: z.ZodEnum<typeof PropertyInquiryType>;
|
|
117
|
+
preferredViewingDate: z.ZodOptional<z.ZodNullable<z.ZodNumber>>;
|
|
118
|
+
preferredViewingTime: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
119
|
+
scheduledViewingDate: z.ZodOptional<z.ZodNullable<z.ZodNumber>>;
|
|
120
|
+
viewingCompleted: z.ZodDefault<z.ZodBoolean>;
|
|
121
|
+
viewingNotes: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
122
|
+
followUpDate: z.ZodOptional<z.ZodNullable<z.ZodNumber>>;
|
|
123
|
+
followUpNotes: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
124
|
+
assignedAgentId: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
125
|
+
convertedToTransaction: z.ZodDefault<z.ZodBoolean>;
|
|
126
|
+
transactionId: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
127
|
+
transactionType: z.ZodOptional<z.ZodNullable<z.ZodEnum<{
|
|
128
|
+
purchase: "purchase";
|
|
129
|
+
lease: "lease";
|
|
130
|
+
}>>>;
|
|
131
|
+
interestedInBuying: z.ZodDefault<z.ZodBoolean>;
|
|
132
|
+
interestedInRenting: z.ZodDefault<z.ZodBoolean>;
|
|
133
|
+
budgetMin: z.ZodOptional<z.ZodNullable<z.ZodNumber>>;
|
|
134
|
+
budgetMax: z.ZodOptional<z.ZodNullable<z.ZodNumber>>;
|
|
135
|
+
appointmentRecordId: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
136
|
+
}, z.core.$strip>;
|
|
137
|
+
/**
|
|
138
|
+
* Schema for updating an existing property inquiry.
|
|
139
|
+
*
|
|
140
|
+
* @remarks
|
|
141
|
+
* Fields that carry a `.default()` on the base schema are re-declared here as plain
|
|
142
|
+
* `.optional()` (without defaults). In Zod, `.partial()` does not strip defaults, so a
|
|
143
|
+
* partial update would otherwise inject those defaults (e.g., `status`, `source`) on
|
|
144
|
+
* `.parse()` and submit values the caller never set.
|
|
145
|
+
*/
|
|
146
|
+
export declare const UpdatePropertyInquirySchema: z.ZodObject<{
|
|
147
|
+
message: z.ZodOptional<z.ZodOptional<z.ZodNullable<z.ZodString>>>;
|
|
148
|
+
customerId: z.ZodOptional<z.ZodOptional<z.ZodNullable<z.ZodString>>>;
|
|
149
|
+
notes: z.ZodOptional<z.ZodOptional<z.ZodNullable<z.ZodString>>>;
|
|
150
|
+
cancelReason: z.ZodOptional<z.ZodOptional<z.ZodNullable<z.ZodString>>>;
|
|
151
|
+
serviceConversationConfigId: z.ZodOptional<z.ZodOptional<z.ZodNullable<z.ZodString>>>;
|
|
152
|
+
propertyId: z.ZodOptional<z.ZodString>;
|
|
153
|
+
inquiryType: z.ZodOptional<z.ZodEnum<typeof PropertyInquiryType>>;
|
|
154
|
+
preferredViewingDate: z.ZodOptional<z.ZodOptional<z.ZodNullable<z.ZodNumber>>>;
|
|
155
|
+
preferredViewingTime: z.ZodOptional<z.ZodOptional<z.ZodNullable<z.ZodString>>>;
|
|
156
|
+
scheduledViewingDate: z.ZodOptional<z.ZodOptional<z.ZodNullable<z.ZodNumber>>>;
|
|
157
|
+
viewingNotes: z.ZodOptional<z.ZodOptional<z.ZodNullable<z.ZodString>>>;
|
|
158
|
+
followUpDate: z.ZodOptional<z.ZodOptional<z.ZodNullable<z.ZodNumber>>>;
|
|
159
|
+
followUpNotes: z.ZodOptional<z.ZodOptional<z.ZodNullable<z.ZodString>>>;
|
|
160
|
+
assignedAgentId: z.ZodOptional<z.ZodOptional<z.ZodNullable<z.ZodString>>>;
|
|
161
|
+
transactionId: z.ZodOptional<z.ZodOptional<z.ZodNullable<z.ZodString>>>;
|
|
162
|
+
transactionType: z.ZodOptional<z.ZodOptional<z.ZodNullable<z.ZodEnum<{
|
|
163
|
+
purchase: "purchase";
|
|
164
|
+
lease: "lease";
|
|
165
|
+
}>>>>;
|
|
166
|
+
budgetMin: z.ZodOptional<z.ZodOptional<z.ZodNullable<z.ZodNumber>>>;
|
|
167
|
+
budgetMax: z.ZodOptional<z.ZodOptional<z.ZodNullable<z.ZodNumber>>>;
|
|
168
|
+
appointmentRecordId: z.ZodOptional<z.ZodOptional<z.ZodNullable<z.ZodString>>>;
|
|
169
|
+
id: z.ZodString;
|
|
170
|
+
source: z.ZodOptional<z.ZodString>;
|
|
171
|
+
status: z.ZodOptional<z.ZodEnum<typeof PropertyInquiryStatus>>;
|
|
172
|
+
viewingCompleted: z.ZodOptional<z.ZodBoolean>;
|
|
173
|
+
convertedToTransaction: z.ZodOptional<z.ZodBoolean>;
|
|
174
|
+
interestedInBuying: z.ZodOptional<z.ZodBoolean>;
|
|
175
|
+
interestedInRenting: z.ZodOptional<z.ZodBoolean>;
|
|
176
|
+
}, z.core.$strip>;
|
|
177
|
+
/**
|
|
178
|
+
* Schema for quick status update on property inquiry.
|
|
179
|
+
*/
|
|
180
|
+
export declare const UpdatePropertyInquiryStatusSchema: z.ZodObject<{
|
|
181
|
+
id: z.ZodString;
|
|
182
|
+
status: z.ZodEnum<typeof PropertyInquiryStatus>;
|
|
183
|
+
scheduledViewingDate: z.ZodOptional<z.ZodNullable<z.ZodNumber>>;
|
|
184
|
+
viewingCompleted: z.ZodOptional<z.ZodBoolean>;
|
|
185
|
+
viewingNotes: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
186
|
+
followUpDate: z.ZodOptional<z.ZodNullable<z.ZodNumber>>;
|
|
187
|
+
followUpNotes: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
188
|
+
}, z.core.$strip>;
|
|
189
|
+
export type PropertyInquiry = z.infer<typeof PropertyInquirySchema>;
|
|
190
|
+
export type CreatePropertyInquiry = z.infer<typeof CreatePropertyInquirySchema>;
|
|
191
|
+
export type UpdatePropertyInquiry = z.infer<typeof UpdatePropertyInquirySchema>;
|
|
192
|
+
export type UpdatePropertyInquiryStatus = z.infer<typeof UpdatePropertyInquiryStatusSchema>;
|
|
193
|
+
/**
|
|
194
|
+
* Property inquiry filter options.
|
|
195
|
+
* @interface PropertyInquiryFilters
|
|
196
|
+
*/
|
|
197
|
+
export interface PropertyInquiryFilters {
|
|
198
|
+
/** Text search across message/notes */
|
|
199
|
+
search?: string;
|
|
200
|
+
/** Filter by property ID */
|
|
201
|
+
propertyId?: string;
|
|
202
|
+
/** Filter by customer ID */
|
|
203
|
+
customerId?: string;
|
|
204
|
+
/** Filter by status(es) */
|
|
205
|
+
status?: PropertyInquiryStatus[];
|
|
206
|
+
/** Filter by inquiry type */
|
|
207
|
+
inquiryType?: PropertyInquiryType;
|
|
208
|
+
/** Filter by assigned agent */
|
|
209
|
+
assignedAgentId?: string;
|
|
210
|
+
/** Filter by source */
|
|
211
|
+
source?: string;
|
|
212
|
+
/** Filter by conversion status */
|
|
213
|
+
convertedToTransaction?: boolean;
|
|
214
|
+
/** Filter by buying interest */
|
|
215
|
+
interestedInBuying?: boolean;
|
|
216
|
+
/** Filter by renting interest */
|
|
217
|
+
interestedInRenting?: boolean;
|
|
218
|
+
/** Filter by viewing completed status */
|
|
219
|
+
viewingCompleted?: boolean;
|
|
220
|
+
/** Filter by date range */
|
|
221
|
+
dateRange?: {
|
|
222
|
+
start?: number;
|
|
223
|
+
end?: number;
|
|
224
|
+
};
|
|
225
|
+
/** Filter by follow-up date range */
|
|
226
|
+
followUpDateRange?: {
|
|
227
|
+
start?: number;
|
|
228
|
+
end?: number;
|
|
229
|
+
};
|
|
230
|
+
}
|
|
231
|
+
/**
|
|
232
|
+
* Property inquiry sorting options.
|
|
233
|
+
* @interface PropertyInquirySorting
|
|
234
|
+
*/
|
|
235
|
+
export interface PropertyInquirySorting {
|
|
236
|
+
/** Field to sort by */
|
|
237
|
+
field: 'createdAt' | 'scheduledViewingDate' | 'followUpDate' | 'status';
|
|
238
|
+
/** Sort direction */
|
|
239
|
+
direction: 'asc' | 'desc';
|
|
240
|
+
}
|
|
241
|
+
/**
|
|
242
|
+
* Property inquiry query options.
|
|
243
|
+
* @interface PropertyInquiryQueryOptions
|
|
244
|
+
*/
|
|
245
|
+
export interface PropertyInquiryQueryOptions {
|
|
246
|
+
/** Page number (1-indexed) */
|
|
247
|
+
page: number;
|
|
248
|
+
/** Items per page */
|
|
249
|
+
pageSize: number;
|
|
250
|
+
/** Optional filters */
|
|
251
|
+
filters?: PropertyInquiryFilters;
|
|
252
|
+
/** Optional sorting */
|
|
253
|
+
sorting?: PropertyInquirySorting;
|
|
254
|
+
}
|