cloud-ide-model-schema
Version:
Pachage for schema management of Cloud IDEsys LMS
259 lines (258 loc) • 7.59 kB
JavaScript
"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;