UNPKG

cloud-ide-model-schema

Version:

Pachage for schema management of Cloud IDEsys LMS

259 lines (258 loc) 7.59 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.CFeeAssignment = void 0; var mongoose_1 = require("mongoose"); /** * Fee Assignment Schema * * Purpose: Fees assigned to individual students * Used by: Fees, Student Management modules */ /* SCHEMA START */ var fee_assignment = new mongoose_1.Schema({ feeas_assignment_number: { type: String, required: true, unique: true, maxlength: 50, trim: true, comment: "Unique fee assignment number (auto-generated)" }, feeas_student_id_auth: { type: mongoose_1.default.Schema.Types.ObjectId, ref: "auth_user_mst", required: true, comment: "Student ID reference - Reference to auth_user_mst" }, feeas_fee_structure_id_feest: { type: mongoose_1.default.Schema.Types.ObjectId, ref: "fee_structures", default: null, comment: "Fee structure (if assigned from structure)" }, feeas_fee_structure_item_id_feesi: { type: mongoose_1.default.Schema.Types.ObjectId, ref: "fee_structure_items", default: null, comment: "Specific fee structure item (if assigned from structure)" }, feeas_fee_category_sygms: { type: mongoose_1.default.Schema.Types.ObjectId, ref: "core_general_master", required: true, comment: "Fee category (Tuition, Library, Lab, etc.)" }, feeas_fee_name: { type: String, required: true, minlength: 1, maxlength: 200, trim: true, comment: "Fee name" }, feeas_fee_description: { type: String, maxlength: 500, trim: true, comment: "Fee description" }, feeas_fee_type: { type: String, required: true, enum: ['ONE_TIME', 'RECURRING'], default: 'ONE_TIME', comment: "Fee type" }, feeas_payment_frequency: { type: String, required: true, enum: ['MONTHLY', 'QUARTERLY', 'SEMESTER', 'ANNUAL', 'ONE_TIME'], default: 'ONE_TIME', comment: "Payment frequency" }, feeas_original_amount: { type: Number, required: true, min: 0, comment: "Original fee amount (before discounts)" }, feeas_discount_amount: { type: Number, required: true, default: 0, min: 0, comment: "Discount amount applied" }, feeas_scholarship_amount: { type: Number, required: true, default: 0, min: 0, comment: "Scholarship amount applied" }, feeas_waiver_amount: { type: Number, required: true, default: 0, min: 0, comment: "Waiver amount applied" }, feeas_tax_amount: { type: Number, required: true, default: 0, min: 0, comment: "Tax amount" }, feeas_total_amount: { type: Number, required: true, min: 0, comment: "Total amount after discounts/scholarships/waivers (including tax)" }, feeas_assigned_amount: { type: Number, required: true, min: 0, comment: "Amount assigned (may differ from total if partial assignment)" }, feeas_paid_amount: { type: Number, required: true, default: 0, min: 0, comment: "Total amount paid so far" }, feeas_outstanding_amount: { type: Number, required: true, min: 0, comment: "Outstanding amount (assigned_amount - paid_amount)" }, feeas_assignment_date: { type: Date, required: true, default: Date.now, comment: "Date when fee was assigned" }, feeas_due_date: { type: Date, required: true, comment: "Due date for payment" }, feeas_collection_start_date: { type: Date, required: true, comment: "Collection window start date" }, feeas_collection_end_date: { type: Date, required: true, comment: "Collection window end date" }, feeas_installment_count: { type: Number, required: true, default: 1, min: 1, max: 12, comment: "Number of installments" }, feeas_installment_amount: { type: Number, required: true, min: 0, comment: "Amount per installment" }, feeas_paid_installments: { type: Number, required: true, default: 0, min: 0, comment: "Number of installments paid" }, feeas_payment_status: { type: String, required: true, enum: ['PENDING', 'PARTIALLY_PAID', 'PAID', 'OVERDUE', 'WAIVED', 'CANCELLED'], default: 'PENDING', comment: "Payment status" }, feeas_late_fee_applied: { type: Boolean, default: false, comment: "Has late fee been applied" }, feeas_late_fee_amount: { type: Number, required: true, default: 0, min: 0, comment: "Late fee amount applied" }, feeas_academic_year_id_acayr: { type: mongoose_1.default.Schema.Types.ObjectId, ref: "aca_academic_year", required: true, comment: "Academic year" }, feeas_class_program_id_acacpm: { type: mongoose_1.default.Schema.Types.ObjectId, ref: "aca_class_program_master", default: null, comment: "Class/Program (from admission form)" }, feeas_section_id_acapts: { type: mongoose_1.default.Schema.Types.ObjectId, ref: "aca_prg_trm_section", default: null, comment: "Section (optional)" }, feeas_entity_id_syen: { type: mongoose_1.default.Schema.Types.ObjectId, ref: "core_system_entity", required: true, comment: "Entity/Organization" }, feeas_admission_id_admap: { type: mongoose_1.default.Schema.Types.ObjectId, ref: "admission_application_main", default: null, comment: "Reference to admission form (for tracking)" }, feeas_notes: { type: String, maxlength: 1000, trim: true, comment: "Additional notes" }, feeas_created_by_user: { type: mongoose_1.default.Schema.Types.ObjectId, ref: "auth_user_mst", required: true, comment: "User who assigned the fee" }, feeas_isactive: { type: Boolean, default: true, comment: "Active status flag" } }, { collection: 'fee_assignments', timestamps: true // Adds created_at and updated_at }); // Indexes for performance // Note: feeas_assignment_number already has unique index from field definition (unique: true) fee_assignment.index({ feeas_student_id_auth: 1, feeas_due_date: 1 }); fee_assignment.index({ feeas_fee_structure_id_feest: 1 }); fee_assignment.index({ feeas_payment_status: 1, feeas_due_date: 1 }); fee_assignment.index({ feeas_entity_id_syen: 1, feeas_academic_year_id_acayr: 1 }); fee_assignment.index({ feeas_due_date: 1 }); fee_assignment.index({ feeas_student_id_auth: 1, feeas_payment_status: 1 }); fee_assignment.index({ feeas_entity_id_syen: 1, feeas_payment_status: 1 }); fee_assignment.index({ feeas_admission_id_admap: 1 }); /* SCHEMA END */ // Note: Interface will be defined in cloud-ide-lms-model // For now, export the schema model var CFeeAssignment = mongoose_1.default.model("fee_assignments", fee_assignment); exports.CFeeAssignment = CFeeAssignment;