import { defaultGqlPermission, defaultPermission } from "@tailor-platform/erp-kit/core"; import { db } from "@tailor-platform/sdk"; import { bankReconciliation } from "./bankReconciliation"; export const BANK_RECONCILIATION_ITEM_SOURCE_TYPES = [ "BANK_STATEMENT_LINE", "INCOMING_PAYMENT", "OUTGOING_PAYMENT", ] as const; const builtins = { bankReconciliationId: db .uuid() .relation({ type: "n-1", toward: { type: bankReconciliation, as: "bankReconciliation" }, backward: "items", }) .description("Foreign key to BankReconciliation"), sourceType: db .enum(BANK_RECONCILIATION_ITEM_SOURCE_TYPES) .description("Type of item participating in the reconciliation group"), sourceId: db.uuid().description("Logical source identifier interpreted by sourceType"), clearedAmount: db.decimal().description("Positive amount participating in this reconciliation"), }; // Reconciliation items are internal source links; consumers do not extend them with custom fields. export function createBankReconciliationItemType() { return db .table("BankReconciliationItem", { ...builtins, ...db.fields.timestamps(), }) .indexes( { fields: ["bankReconciliationId", "sourceType", "sourceId"], unique: true, name: "bank_reconciliation_item_source_uq", }, { fields: ["sourceType", "sourceId"], unique: false, name: "bank_reconciliation_item_source_idx", }, ) .permission(defaultPermission) .gqlPermission(defaultGqlPermission); } export const bankReconciliationItem = createBankReconciliationItemType();