import { markInvariantsSatisfied as markPurchaseItemInvariantsSatisfied, type PurchaseItem as PurchaseItemAggregate, } from "../domain/purchaseItem"; import { markInvariantsSatisfied, type PurchaseOrder as PurchaseOrderAggregate, type PurchaseOrderLine as PurchaseOrderAggregateLine, } from "../domain/purchaseOrder"; import type { Company, Item, SupplierAccountReference, Site, Unit } from "./moduleMocks"; const createdAt = new Date("2024-01-01T00:00:00.000Z"); export const baseCompany = { id: "company-1", status: "ACTIVE", legalName: "Test Corp", baseCurrencyId: "currency-1", taxId: null, registrationNumber: null, street: "123 Main St", city: "New York", state: "NY", postalCode: "10001", country: "US", createdAt, updatedAt: createdAt, } as const satisfies Company; export const baseSupplier = { id: "supplier-account-1", companyId: baseCompany.id, partnerName: "Supplier One", accountStatus: "ACTIVE", partnerStatus: "ACTIVE", partnerId: "partner-1", code: "ACCOUNT-001", accountName: "Supplier account", preferredCurrencyId: null, defaultExpenseAccountId: null, } satisfies SupplierAccountReference; export const inactiveSupplier = { ...baseSupplier, id: "supplier-account-2", accountStatus: "INACTIVE", partnerStatus: "ACTIVE", } satisfies SupplierAccountReference; export const baseReceivingSite = { id: "site-1", name: "Receiving Site", type: "WAREHOUSE", companyId: baseCompany.id, street: "123 Main St", city: "New York", state: "NY", postalCode: "10001", country: "US", timezone: "America/New_York", status: "ACTIVE", createdAt, updatedAt: createdAt, } satisfies Site; export const baseUnit = { id: "unit-1", name: "Each", symbol: "EA", categoryId: "uom-category-1", conversionFactor: 1, roundingPrecision: 0, status: "ACTIVE", createdAt, updatedAt: createdAt, } satisfies Unit; export const compatibleUnit = { id: "unit-2", name: "Box", symbol: "BOX", categoryId: "uom-category-1", conversionFactor: 12, roundingPrecision: 0, status: "ACTIVE", createdAt, updatedAt: createdAt, } satisfies Unit; export const incompatibleUnit = { id: "unit-3", name: "Kilogram", symbol: "KG", categoryId: "uom-category-2", conversionFactor: 1, roundingPrecision: 3, status: "ACTIVE", createdAt, updatedAt: createdAt, } satisfies Unit; export const baseItem = { id: "item-1", sku: "ITEM-001", name: "Base Item", barcode: null, unitId: baseUnit.id, status: "ACTIVE", createdAt, updatedAt: createdAt, } satisfies Item; export const inactiveItem = { ...baseItem, id: "item-2", status: "INACTIVE", } satisfies Item; // --- Domain aggregates --- export const basePurchaseItem: PurchaseItemAggregate = markPurchaseItemInvariantsSatisfied({ id: "purchase-item-1", itemId: baseItem.id, requiresPhysicalReceipt: true, customFields: {}, }); export const nonPhysicalPurchaseItem: PurchaseItemAggregate = { ...basePurchaseItem, id: "purchase-item-2", requiresPhysicalReceipt: false, }; export const draftOrderLine: PurchaseOrderAggregateLine = { id: "po-line-1", itemId: baseItem.id, itemSnapshotName: baseItem.name, itemSnapshotSku: baseItem.sku, quantity: "10", unitPrice: "100", unitId: baseUnit.id, receivingSiteId: baseReceivingSite.id, requiresPhysicalReceipt: true, billedQuantity: "0", receivedQuantity: "0", customFields: {}, }; export const draftOrder: PurchaseOrderAggregate = markInvariantsSatisfied({ id: "purchase-order-1", header: { companyId: baseCompany.id, supplierAccountId: baseSupplier.id, currencyId: baseCompany.baseCurrencyId, receivingSiteId: baseReceivingSite.id, orderStatus: "DRAFT", receiptStatus: null, billingStatus: null, orderDate: createdAt, externalSupplierOrderReference: "PO-EXT-1", supplierSnapshotName: baseSupplier.accountName, rejectionReason: null, closeReason: null, customFields: {}, }, lines: [draftOrderLine], revisions: [], }); export const submittedOrder: PurchaseOrderAggregate = { ...draftOrder, id: "purchase-order-2", header: { ...draftOrder.header, orderStatus: "SUBMITTED" }, }; export const orderedOrder: PurchaseOrderAggregate = { ...draftOrder, id: "purchase-order-3", header: { ...draftOrder.header, orderStatus: "ORDERED", receiptStatus: "NOT_RECEIVED", billingStatus: "NOT_BILLED", }, };