import { type CommonReservedFields, type NoReservedFields, defaultGqlPermission, defaultPermission, } from "@tailor-platform/erp-kit/core"; import { db, type TailorAnyDBField } from "@tailor-platform/sdk"; import { bankAccount } from "./bankAccount"; const builtins = { bankAccountId: db .uuid() .relation({ type: "n-1", toward: { type: bankAccount, as: "bankAccount" }, backward: "bankStatements", }) .description("Foreign key to BankAccount"), statementNumber: db.string().description("Bank-provided statement identifier"), statementDate: db.date().description("Statement date"), openingBalance: db.decimal().description("Opening statement balance"), closingBalance: db.decimal().description("Closing statement balance"), importedAt: db.datetime().description("Timestamp when the statement was imported"), }; type ReservedFields = keyof typeof builtins | CommonReservedFields; export interface CreateBankStatementTypeParams> { fields?: NoReservedFields; } export function createBankStatementType>( params: CreateBankStatementTypeParams, ) { return db .table("BankStatement", { ...builtins, ...((params.fields ?? {}) as F), ...db.fields.timestamps(), }) .indexes({ fields: ["bankAccountId", "statementNumber"], unique: true, name: "bank_statement_account_number_uq", }) .permission(defaultPermission) .gqlPermission(defaultGqlPermission); } export const bankStatement = createBankStatementType({});