Technical Design Document
Form Name: Advance Plan | Form Type: Master Form | Database: SioniqAdminDB
Prepared: March 2026 | Tool: Visio | Font: Verdana 10pt
Table of Contents
- Overview
- Database
- Primary Tables
- Reference / Update Tables
- Form Controls & Functionalities
- Table View
- Custom Data Control
- Functional Specifications
- Account Stock Group & Average Cost Functional Specifications
- Transaction Type Settings
1. Overview
The Advance Plan module is a master configuration form used to define structured advance deposit plans offered to customers. Each plan captures the plan type, structural configuration, instalment schedule, collection rules, commission settings, early closure conditions, channel access restrictions, and instalment rule values.
When a user creates an Advance Plan, they specify the plan's identity (name, short name, plan type, customer deposit type), structural behaviour (instalment-based or open-contribution), maturity parameters, rate-fixing options, discount applicability, commission rules, and collection window constraints. The plan further supports per-instalment channel blocking (online/offline) and per-action-type channel access control.
Each instalment in the plan is linked to an instalment rule that governs how the instalment amount is determined. Four rule types are supported: Fixed Selection (user selects from a list of fixed amounts), Ranged Selection (any amount within a defined start–end range, optionally in multiples), Predefined Term Amount (a distinct fixed amount per instalment), and Progressive Term Formula (amount increases or decreases progressively based on a formula applied from instalment 2 onwards).
On save, the form inserts one header record into emaADPPlanHDR and a set of detail records across multiple DTL tables covering instalment definitions, instalment rules, rule values, formula components, channel access, and early closure conditions. The plan is subject to an approval workflow governed by the MasterDataValueID_ApprovalStatus field.
2. Database
SioniqAdminDB
3. Primary Tables
- emaADPPlanHDR
- emaADPPlanRuleDTL
- emaADPPlanInstallmentDTL
- emaADPPlanInstallmentRuleDTL
- emaADPPlanInstallmentRuleValueDTL
- emaADPPlanInstallmentRuleValueFormulaDTL
- emaADPPlanChannelAccessDTL
- emaADPPlanEarlyClosureConditionDTL
4. Reference / Update Tables
| Table Name | Purpose |
| MasterDataValue | Source for all MasterDataValueID-based dropdowns (Plan Type, Customer Deposit Type, Plan Structure Type, Maturity Payout Calculation Method, ADP Instalment Rule Type, ADP Action Type, Comparison Operator, Comparison Connector, Instalment Progression Type, Calculation Type, ADP Instalment Formula Component Type, Approval Status) |
| MasterDataValue (Day) | Source for From_MasterDataValueID_Day and To_MasterDataValueID_Day dropdowns (days 1–30) |
5. Form Controls & Functionalities
5.1 Header Level
Plan Type (Single Selection Dropdown)
Description: Defines the category of the advance plan, which determines the overall behaviour and deposit structure.
Control Properties:
- Default Value: —
- Data Source: MasterDataValue
- Filter Condition:
- Active = True, listed from MasterDataValueID
- Filtered by MasterDataCategory = ADP Plan Type
- User Entry: Selection from dropdown
- Mandatory: Yes
- Options: Value-Based Plan, Weight-Based Plan, Customer Deposit Plan (Confirm options with team)
Behavior:
- If Value-Based Plan → plan operates on monetary value.
- If Weight-Based Plan → plan operates on metal weight.
- If Customer Deposit Plan → plan operates as a customer deposit scheme.
Saved in & as:
- emaADPPlanHDR → MasterDataValueID_ADPPlanType
Name (Textbox)
Description: The full descriptive name of the advance plan.
Control Properties:
- Default Value: Empty
- User Entry: Manual input by user
- Mandatory: Yes
- Allowed Characters: Alphanumeric
Behavior: No conditional visibility.
Validation: Must not be blank. Must be unique across active plans.
(Confirm uniqueness constraint with team)
Saved in & as:
Short Name (Textbox)
Description: An abbreviated identifier for the advance plan, used in lists and reports.
Control Properties:
- Default Value: Empty
- User Entry: Manual input by user
- Mandatory: Yes
- Allowed Characters: Alphanumeric
Behavior: No conditional visibility.
Validation: Must not be blank.
Saved in & as:
- emaADPPlanHDR → ShortName
Customer Deposit Type (Single Selection Dropdown)
Description: Specifies whether the deposit collected from the customer is in the form of metal or monetary amount.
Control Properties:
- Default Value: —
- Data Source: MasterDataValue
- Filter Condition:
- Active = True, listed from MasterDataValueID
- Filtered by MasterDataCategory = ADP Plan Customer Deposit Type
- User Entry: Selection from dropdown
- Mandatory: Yes
- Options: Metal Deposit, Amount Deposit (Confirm options with team)
Behavior:
- If Metal Deposit → plan collects metal as deposit.
- If Amount Deposit → plan collects monetary amount as deposit.
Saved in & as:
- emaADPPlanHDR → MasterDataValueID_ADPPlanCustomerDepositType
Rotation No (Textbox)
Description: A numeric rotation identifier for the plan, used to differentiate plan cycles or batches.
Control Properties:
- Default Value: Empty
- User Entry: Manual input by user
- Mandatory: Yes (Confirm mandatory status with team)
- Allowed Characters: Numeric
Behavior: No conditional visibility.
Validation: Must be a positive integer.
Saved in & as:
- emaADPPlanHDR → RotationNo
Plan Structure Type (Single Selection Dropdown)
Description: Defines how the plan's collection amounts are structured — either as fixed instalments or as open contributions.
Control Properties:
- Default Value: —
- Data Source: MasterDataValue
- Filter Condition:
- Active = True, listed from MasterDataValueID
- Filtered by MasterDataCategory = ADP Plan Structure Type
- User Entry: Selection from dropdown
- Mandatory: Yes
- Options: Installment-Based, Open Contribution (Confirm options with team)
Behavior:
- If Installment-Based → Total No. of Installments field becomes visible and mandatory. Instalment rule configuration sections are activated.
- If Open Contribution → Total No. of Installments is hidden.
Saved in & as:
- emaADPPlanHDR → MasterDataValueID_ADPPlanStructureType
Total No. of Installments (Textbox)
Description: Specifies the total number of instalments in the plan. This value drives the generation of instalment rows in the detail grid.
Control Properties:
- Default Value: Empty
- User Entry: Manual input by user
- Mandatory: Yes (when Plan Structure Type = Installment-Based)
- Allowed Characters: Numeric
Behavior: Visible only when Plan Structure Type = Installment-Based. On entry, generates the corresponding number of instalment rows in the instalment detail grid.
Validation: Must be a positive integer greater than 0.
Saved in & as:
- emaADPPlanHDR → TotalInstallmentCount
Maturity Period (Days) (Textbox)
Description: Defines the plan's maturity duration in days from enrolment.
Control Properties:
- Default Value: Empty
- User Entry: Manual input by user
- Mandatory: Yes (Confirm mandatory status with team)
- Allowed Characters: Numeric
Behavior: No conditional visibility.
Validation: Must be a positive integer.
Saved in & as:
- emaADPPlanHDR → MaturityPeriodInDays
Lucky Draw Applicable (Checkbox)
Description: Indicates whether the plan is eligible for lucky draw participation.
Control Properties:
- Default Value: Unchecked (False)
- User Entry: User can Check/Uncheck
- Mandatory: No
Behavior:
- Checked (True): Plan is marked as eligible for lucky draw.
- Unchecked (False): Plan is not eligible for lucky draw.
Saved in & as:
- emaADPPlanHDR → IsLuckyDrawApplicable
Enrollment Gift Applicable (Checkbox)
Description: Indicates whether an enrollment gift is offered upon joining this plan.
Control Properties:
- Default Value: Unchecked (False)
- User Entry: User can Check/Uncheck
- Mandatory: No
Behavior:
- Checked (True): Enrolment gift feature is enabled for this plan.
- Unchecked (False): Enrolment gift feature is disabled.
Saved in & as:
- emaADPPlanHDR → HasEnrollmentGift
Rate Fixing Allowed (Checkbox)
Description: Determines whether a rate-fixing option is available for this plan.
Control Properties:
- Default Value: Unchecked (False)
- User Entry: User can Check/Uncheck
- Mandatory: No
Behavior:
- Checked (True): Enables the Partial Rate Fixing Allowed checkbox.
- Unchecked (False): Disables and hides Partial Rate Fixing Allowed checkbox.
Saved in & as:
- emaADPPlanHDR → IsRateFixingAllowed
Partial Rate Fixing Allowed (Checkbox)
Description: Indicates whether partial rate fixing is permitted, i.e. only a portion of the holding can be rate-fixed.
Control Properties:
- Default Value: Unchecked (False)
- User Entry: User can Check/Uncheck
- Mandatory: No
Behavior: Visible only when Rate Fixing Allowed = Checked (True).
- Checked (True): Partial rate fixing is allowed.
- Unchecked (False): Only full rate fixing is allowed.
Saved in & as:
- emaADPPlanHDR → IsPartialRateFixingAllowed
Allow Maturity Payout (Checkbox)
Description: Controls whether a maturity payout is disbursed to the plan member upon plan completion.
Control Properties:
- Default Value: Unchecked (False)
- User Entry: User can Check/Uncheck
- Mandatory: No
Behavior:
- Checked (True): Enables the Maturity Payout Calculation Method dropdown.
- Unchecked (False): Hides and disables the Maturity Payout Calculation Method dropdown.
Saved in & as:
- emaADPPlanHDR → AllowMaturityPayout
Maturity Payout Calculation Method (Single Selection Dropdown)
Description: Specifies the method used to calculate the maturity payout amount.
Control Properties:
- Default Value: —
- Data Source: MasterDataValue
- Filter Condition:
- Active = True, listed from MasterDataValueID
- Filtered by MasterDataCategory = ADP Maturity Payout Calculation Method
- User Entry: Selection from dropdown
- Mandatory: Yes (when Allow Maturity Payout = Checked)
- Options: (Confirm options with team)
Behavior: Visible only when Allow Maturity Payout = Checked (True).
Saved in & as:
- emaADPPlanHDR → MasterDataValueID_MaturityPayoutCalculationMethod
Installment Discount Applicable (Checkbox)
Description: Indicates whether an instalment discount scheme applies to this plan.
Control Properties:
- Default Value: Unchecked (False)
- User Entry: User can Check/Uncheck
- Mandatory: No
Behavior:
- Checked (True): Reveals the Discount Installment Count textbox and the Installment Discount Distribution popup/section.
- Unchecked (False): Hides Discount Installment Count and Discount Distribution section.
Saved in & as:
- emaADPPlanHDR → IsInstallmentDiscountApplicable
Discount Installment Count (Textbox)
Description: Specifies how many instalments are eligible for a discount.
Control Properties:
- Default Value: Empty
- User Entry: Manual input by user
- Mandatory: Yes (when Installment Discount Applicable = Checked)
- Allowed Characters: Numeric
Behavior: Visible only when Installment Discount Applicable = Checked (True). On entry, generates the corresponding number of discount rows in the Installment Discount Distribution popup.
Validation: Must be ≤ Total No. of Installments.
Saved in & as:
- emaADPPlanHDR → DiscountInstallmentCount
Commission Applicable (Checkbox)
Description: Controls whether a commission is applicable for this advance plan.
Control Properties:
- Default Value: Unchecked (False)
- User Entry: User can Check/Uncheck
- Mandatory: No
Behavior:
- Checked (True): Reveals Commission Calculation Method, Commission Trigger Event, Commission Value, and the per-instalment Commission Value grid.
- Unchecked (False): Hides all commission-related fields.
Saved in & as:
- emaADPPlanHDR → IsCommissionApplicable
Commission Calculation Method (Single Selection Dropdown)
Description: Defines how the commission amount is calculated — as a fixed amount or a percentage.
Control Properties:
- Default Value: —
- Data Source: MasterDataValue
- Filter Condition:
- Active = True, listed from MasterDataValueID
- Filtered by MasterDataCategory = ADP Commission Calculation Method
- User Entry: Selection from dropdown
- Mandatory: Yes (when Commission Applicable = Checked)
- Options: Fixed Amount, Percentage (Confirm options with team)
Behavior: Visible only when Commission Applicable = Checked (True).
Saved in & as:
- emaADPPlanHDR → Comission_MasterDataValueID_CalculationType
Commission Trigger Event (Single Selection Dropdown)
Description: Specifies the business event that triggers the commission calculation and payment.
Control Properties:
- Default Value: —
- Data Source: MasterDataValue
- Filter Condition:
- Active = True, listed from MasterDataValueID
- Filtered by MasterDataCategory = ADP Commission Trigger Event
- User Entry: Selection from dropdown
- Mandatory: Yes (when Commission Applicable = Checked)
- Options: On Enrollment, On Collection, Per Installment (Confirm options with team)
Behavior: Visible only when Commission Applicable = Checked (True).
- If Per Installment → the per-instalment commission value grid is shown (one row per instalment with individual Commission Value input).
- If On Enrollment or On Collection → a single Commission Value textbox is shown.
Saved in & as:
- emaADPPlanHDR → MasterDataValueID_ADPCommissionTriggerEvent
Commission Value (Textbox)
Description: The fixed commission amount or percentage applicable at the header level (used when Commission Trigger Event ≠ Per Installment).
Control Properties:
- Default Value: Empty
- User Entry: Manual input by user
- Mandatory: Yes (when Commission Trigger Event = On Enrollment or On Collection)
- Allowed Characters: Numeric (decimal)
Behavior: Visible only when Commission Applicable = Checked AND Commission Trigger Event ≠ Per Installment.
Saved in & as:
- emaADPPlanHDR → CommissionValue
ADP Enrollment Limit (Single Selection Dropdown)
Description: Defines whether the plan has an unlimited or limited enrolment capacity.
Control Properties:
- Default Value: —
- Data Source: MasterDataValue
- Filter Condition:
- Active = True, listed from MasterDataValueID
- Filtered by MasterDataCategory = ADP Enrollment Limit
- User Entry: Selection from dropdown
- Mandatory: Yes
- Options: Unlimited, Limited (Confirm options with team)
Behavior:
- If Unlimited → Maximum Enrollment Count field is hidden.
- If Limited → Maximum Enrollment Count textbox becomes visible and mandatory.
Saved in & as:
- emaADPPlanHDR → MasterDataValueID_ADPEnrollmentLimit
Maximum Enrollment Count (Textbox)
Description: Specifies the maximum number of member enrolments permitted for this plan.
Control Properties:
- Default Value: Empty
- User Entry: Manual input by user
- Mandatory: Yes (when ADP Enrollment Limit = Limited)
- Allowed Characters: Numeric
Behavior: Visible only when ADP Enrollment Limit = Limited.
Validation: Must be a positive integer.
Saved in & as:
- emaADPPlanHDR → MaximumEnrollmentCount
ADP Installment Rule Type (Single Selection Dropdown)
Description: Sets the default instalment rule type applied to all instalments in the plan. This drives which input fields are shown in the instalment rule configuration section.
Control Properties:
- Default Value: —
- Data Source: MasterDataValue
- Filter Condition:
- Active = True, listed from MasterDataValueID
- Filtered by MasterDataCategory = ADP Installment Rule Type
- User Entry: Selection from dropdown
- Mandatory: Yes
- Options: Fixed Selection, Ranged Selection, Predefined Term Amount, Progressive Term Formula (Confirm options with team)
Behavior:
- If Fixed Selection → Amount textbox and Add button shown; saved amounts listed in grid.
- If Ranged Selection → Starting Amount, Ending Amount, Multiple With textboxes shown.
- If Predefined Term Amount → per-instalment Amount grid with editable Amount per row.
- If Progressive Term Formula → Starting Amount, Ending Amount, Multiple With textboxes plus per-instalment Progression Type, Calculation Type, Progressive Value grid (from instalment 2 onwards).
Saved in & as:
- emaADPPlanHDR → MasterDataValueID_ADPInstallmentRuleType
Allow Early Plan Closure (Checkbox)
Description: Enables the early plan closure feature, revealing the closure eligibility condition configuration popup.
Control Properties:
- Default Value: Unchecked (False)
- User Entry: User can Check/Uncheck
- Mandatory: No
Behavior:
- Checked (True): Reveals the Early Plan Closure configuration popup (Closure Eligibility Basis, Comparison Operator, Value, Connector rows, Expression display).
- Unchecked (False): Hides all early closure configuration fields.
Saved in & as:
- emaADPPlanHDR → AllowEarlyPlanClosure
Member Enrollment Limit (Textbox)
Description: Specifies the maximum number of plan enrolments allowed per individual member.
Control Properties:
- Default Value: Empty
- User Entry: Manual input by user
- Mandatory: No (Confirm mandatory status with team)
- Allowed Characters: Numeric
Behavior: Visible only when Allow Early Plan Closure popup is active.
(Confirm placement — UI Page 2 suggests this is near the early closure popup)
Saved in & as:
- emaADPPlanHDR → MaximumEnrollmentCount (Confirm — may be a separate member-level limit column)
5.2 Detail Level
Collection Window Type (Single Selection Dropdown)
Description: Defines the type of collection window used for instalment collection scheduling.
Control Properties:
- Default Value: —
- Data Source: MasterDataValue
- Filter Condition:
- Active = True, listed from MasterDataValueID
- Filtered by MasterDataCategory = ADP Collection Window Type
- User Entry: Selection from dropdown
- Mandatory: Yes
- Options: Calendar Window, Relative Days Window, Open Collection (Confirm options with team)
Behavior:
- If Calendar Window → From Day (1st dropdown, 1–30) and To Day (1st dropdown, 1–30) plus second From Day / To Day pair are shown.
- If Relative Days Window → From Day and To Day dropdowns are shown.
- If Open Collection → Collection window day fields are hidden.
Saved in & as:
- emaADPPlanRuleDTL → MasterDataValueID_ADPCollectionWindowType
From Day (Single Selection Dropdown)
Description: The start day of the primary collection window period (day of month, 1–30).
Control Properties:
- Default Value: —
- Data Source: MasterDataValue (Day)
- Filter Condition:
- Active = True, listed from MasterDataValueID
- Options: 1 through 30
- User Entry: Selection from dropdown
- Mandatory: Yes (when Collection Window Type = Calendar Window or Relative Days Window)
Behavior: Visible only when Collection Window Type ≠ Open Collection.
Saved in & as:
- emaADPPlanRuleDTL → From_MasterDataValueID_Day
To Day (Single Selection Dropdown)
Description: The end day of the primary collection window period (day of month, 1–30).
Control Properties:
- Default Value: —
- Data Source: MasterDataValue (Day)
- Filter Condition:
- Active = True, listed from MasterDataValueID
- Options: 1 through 30
- User Entry: Selection from dropdown
- Mandatory: Yes (when Collection Window Type = Calendar Window or Relative Days Window)
Behavior: Visible only when Collection Window Type ≠ Open Collection.
Saved in & as:
- emaADPPlanRuleDTL → To_MasterDataValueID_Day
Collection Cutoff Period (Days) (Textbox)
Description: The number of days after the collection window close before the instalment is considered overdue.
Control Properties:
- Default Value: Empty
- User Entry: Manual input by user
- Mandatory: No (Confirm mandatory status with team)
- Allowed Characters: Numeric
Saved in & as:
- emaADPPlanRuleDTL → CollectionCutoffPeriodInDays
Min Gap Between Installments (Days) (Textbox)
Description: The minimum number of days that must elapse between successive instalment collections.
Control Properties:
- Default Value: Empty
- User Entry: Manual input by user
- Mandatory: No
- Allowed Characters: Numeric
Saved in & as:
- emaADPPlanRuleDTL → MinimumInstallmentGapInDays
Auto Deactivate on Missed Collections (Checkbox)
Description: When enabled, the plan membership is automatically deactivated if the member misses a defined number of collections.
Control Properties:
- Default Value: Unchecked (False)
- User Entry: User can Check/Uncheck
- Mandatory: No
Behavior:
- Checked (True): Reveals Max Missed Installments, Max Overdue Days, and Max Missed Collection Occurrences fields.
- Unchecked (False): Hides Max Missed Installments, Max Overdue Days, and Max Missed Collection Occurrences fields.
Saved in & as:
- emaADPPlanRuleDTL → IsAutoDeactivateOnMissedCollection
Max Missed Installments (Textbox)
Description: Maximum number of missed instalments before automatic deactivation is triggered.
Control Properties:
- Default Value: Empty
- User Entry: Manual input by user
- Mandatory: Yes (when Auto Deactivate on Missed Collections = Checked)
- Allowed Characters: Numeric
Behavior: Visible only when Auto Deactivate on Missed Collections = Checked.
Saved in & as:
- emaADPPlanRuleDTL → MaxMissedInstallmentCount
Max Overdue Days (Textbox)
Description: Maximum number of overdue days allowed before auto-deactivation is triggered.
Control Properties:
- Default Value: Empty
- User Entry: Manual input by user
- Mandatory: Yes (when Auto Deactivate on Missed Collections = Checked)
- Allowed Characters: Numeric
Behavior: Visible only when Auto Deactivate on Missed Collections = Checked.
Saved in & as:
- emaADPPlanRuleDTL → MaxOverdueDays
Max Missed Collection Occurrences (Textbox)
Description: Maximum number of times a member can miss a collection window before auto-deactivation triggers.
Control Properties:
- Default Value: Empty
- User Entry: Manual input by user
- Mandatory: Yes (when Auto Deactivate on Missed Collections = Checked)
- Allowed Characters: Numeric
Behavior: Visible only when Auto Deactivate on Missed Collections = Checked.
Saved in & as:
- emaADPPlanRuleDTL → MaxMissedCollectionOccurrences
Auto Deactivate Member (Checkbox)
Description: When checked, the member account itself (not just the plan membership) is auto-deactivated after a defined period.
Control Properties:
- Default Value: Unchecked (False)
- User Entry: User can Check/Uncheck
- Mandatory: No
Behavior:
- Checked (True): Reveals Member Auto Deactivation Period (Days) field.
- Unchecked (False): Hides Member Auto Deactivation Period (Days) field.
Saved in & as:
- emaADPPlanRuleDTL → IsAutoDeactivateMember
Member Auto Deactivation Period (Days) (Textbox)
Description: The number of days after which a member is automatically deactivated if the plan conditions are breached.
Control Properties:
- Default Value: Empty
- User Entry: Manual input by user
- Mandatory: Yes (when Auto Deactivate Member = Checked)
- Allowed Characters: Numeric
Behavior: Visible only when Auto Deactivate Member = Checked.
Saved in & as:
- emaADPPlanRuleDTL → MemberAutoDeactivationPeriodInDays
Allow Collection of Pending Installments (Checkbox)
Description: Permits collection of outstanding overdue instalments.
Control Properties:
- Default Value: Unchecked (False)
- User Entry: User can Check/Uncheck
- Mandatory: No
Behavior:
- Checked (True): Reveals Max Pending Installments Allowed textbox.
- Unchecked (False): Hides Max Pending Installments Allowed textbox.
Saved in & as:
- emaADPPlanRuleDTL → IsPendingInstallmentCollectionAllowed
Max Pending Installments Allowed (Textbox)
Description: Maximum number of pending instalments that can be collected in one transaction.
Control Properties:
- Default Value: Empty
- User Entry: Manual input by user
- Mandatory: Yes (when Allow Collection of Pending Installments = Checked)
- Allowed Characters: Numeric
Behavior: Visible only when Allow Collection of Pending Installments = Checked.
Saved in & as:
- emaADPPlanRuleDTL → MaxPendingInstallmentCollectionCount
Allow Collection of Advance Installments (Checkbox)
Description: Permits collection of future (advance) instalments ahead of their scheduled date.
Control Properties:
- Default Value: Unchecked (False)
- User Entry: User can Check/Uncheck
- Mandatory: No
Behavior:
- Checked (True): Reveals Max Advance Installments Allowed textbox.
- Unchecked (False): Hides Max Advance Installments Allowed textbox.
Saved in & as:
- emaADPPlanRuleDTL → IsAdvanceInstallmentCollectionAllowed
Max Advance Installments Allowed (Textbox)
Description: Maximum number of advance instalments permitted in a single collection.
Control Properties:
- Default Value: Empty
- User Entry: Manual input by user
- Mandatory: Yes (when Allow Collection of Advance Installments = Checked)
- Allowed Characters: Numeric
Behavior: Visible only when Allow Collection of Advance Installments = Checked.
Saved in & as:
- emaADPPlanRuleDTL → MaxAdvanceInstallmentCollectionCount
Allow Partial Installment Collection (Checkbox)
Description: Allows partial payment of an instalment amount.
Control Properties:
- Default Value: Unchecked (False)
- User Entry: User can Check/Uncheck
- Mandatory: No
Behavior:
- Checked (True): Reveals Max Partial Payments Per Installment textbox.
- Unchecked (False): Hides Max Partial Payments Per Installment textbox.
Saved in & as:
- emaADPPlanRuleDTL → IsPartialInstallmentCollectionAllowed
Max Partial Payments Per Installment (Textbox)
Description: Maximum number of partial payments allowed per instalment.
Control Properties:
- Default Value: Empty
- User Entry: Manual input by user
- Mandatory: Yes (when Allow Partial Installment Collection = Checked)
- Allowed Characters: Numeric
Behavior: Visible only when Allow Partial Installment Collection = Checked.
Saved in & as:
- emaADPPlanRuleDTL → MaxPartialPaymentsPerInstallment
Amount — Fixed Selection (Textbox)
Description: A fixed instalment amount option that the plan member will select from during enrolment.
Control Properties:
- Default Value: Empty
- User Entry: Manual input by user
- Mandatory: Yes (when Installment Rule Type = Fixed Selection)
- Allowed Characters: Numeric (decimal)
Behavior: Visible only when Installment Rule Type = Fixed Selection. The user enters an amount and clicks Add; each added amount creates one row in the display grid and one record in emaADPPlanInstallmentRuleValueDTL.
Saved in & as:
- emaADPPlanInstallmentRuleValueDTL → InstallmentAmount
Starting Amount (Textbox)
Description: The minimum (starting) instalment amount for Ranged Selection or Progressive Term Formula rule types.
Control Properties:
- Default Value: Empty
- User Entry: Manual input by user
- Mandatory: Yes (when Installment Rule Type = Ranged Selection or Progressive Term Formula)
- Allowed Characters: Numeric (decimal)
Behavior: Visible only when Installment Rule Type = Ranged Selection or Progressive Term Formula.
Saved in & as:
- emaADPPlanInstallmentRuleValueDTL → StartingInstallmentAmount
Ending Amount (Textbox)
Description: The maximum (ending) instalment amount for Ranged Selection or Progressive Term Formula rule types.
Control Properties:
- Default Value: Empty
- User Entry: Manual input by user
- Mandatory: Yes (when Installment Rule Type = Ranged Selection or Progressive Term Formula)
- Allowed Characters: Numeric (decimal)
Behavior: Visible only when Installment Rule Type = Ranged Selection or Progressive Term Formula.
Saved in & as:
- emaADPPlanInstallmentRuleValueDTL → EndingInstallmentAmount
Multiple With (Textbox)
Description: Defines the increment step for Ranged Selection; the collected amount must be a multiple of this value within the defined range.
Control Properties:
- Default Value: Empty
- User Entry: Manual input by user
- Mandatory: No (optional for Ranged Selection)
- Allowed Characters: Numeric (decimal)
Behavior: Visible only when Installment Rule Type = Ranged Selection or Progressive Term Formula.
Saved in & as:
- emaADPPlanInstallmentRuleValueDTL → MultipleWith
Installment Amount — Predefined Term Amount (Grid — Textbox per row)
Description: A per-instalment amount grid where each instalment row has an editable Amount field. The number of rows equals Total No. of Installments.
Control Properties:
- Default Value: Empty per row
- User Entry: Manual input per row
- Mandatory: Yes (when Installment Rule Type = Predefined Term Amount)
- Allowed Characters: Numeric (decimal)
Behavior: Visible only when Installment Rule Type = Predefined Term Amount. One editable Amount cell per instalment row. Each row generates a separate emaADPPlanInstallmentRuleDTL record and a corresponding emaADPPlanInstallmentRuleValueDTL record.
Saved in & as:
- emaADPPlanInstallmentRuleValueDTL → InstallmentAmount (one row per instalment)
Progressive Term Formula Grid (Grid Table — Dropdown and Textbox per row)
Description: A grid shown when Installment Rule Type = Progressive Term Formula. Rows are generated from instalment 2 through Total No. of Installments (instalment 1 uses the Starting Amount). Each row has Progression Type (dropdown), Calculation Type (dropdown), and Progressive Value (textbox).
Progression Type (Single Selection Dropdown per row)
- Data Source: MasterDataValue
- Filter Condition: Active = True, MasterDataCategory = ADP Installment Progression Type
- Options: Increase, Decrease (Confirm options with team)
- Mandatory: Yes (when row is active)
- Saved in: emaADPPlanInstallmentRuleValueDTL → MasterDataValueID_ADPInstallmentProgressionType
Calculation Type (Single Selection Dropdown per row)
- Data Source: MasterDataValue
- Filter Condition: Active = True, MasterDataCategory = ADP Calculation Type
- Options: Percent, Fixed Amount (Confirm options with team)
- Mandatory: Yes (when row is active)
- Saved in: emaADPPlanInstallmentRuleValueDTL → MasterDataValueID_CalculationType
Progressive Value (Textbox per row)
- Allowed Characters: Numeric (decimal)
- Mandatory: Yes (when row is active)
- Saved in: emaADPPlanInstallmentRuleValueDTL → ProgressionValue
Additional Behavior: Each row also generates an emaADPPlanInstallmentRuleValueFormulaDTL record for the formula expression components.
Commission Value / Percentage per Installment (Grid — Textbox per row)
Description: When Commission Trigger Event = Per Installment, a grid is displayed showing each instalment number and an editable Commission Value/Percentage textbox.
Control Properties:
- Default Value: Empty per row
- User Entry: Manual input per row
- Mandatory: Yes (when Commission Trigger Event = Per Installment)
- Allowed Characters: Numeric (decimal)
Behavior: Visible only when Commission Applicable = Checked AND Commission Trigger Event = Per Installment. Number of rows = TotalInstallmentCount.
Saved in & as:
- emaADPPlanInstallmentDTL → CommissionValue (one row per instalment)
Collection Channel Restrictions — Block Online / Block Offline per Installment (Grid — Checkbox per row)
Description: A grid showing each instalment number with two checkbox columns — Block Online and Block Offline — to restrict which collection channels are available per instalment.
Control Properties:
- Default Value: Unchecked per cell
- User Entry: User can Check/Uncheck per cell
- Mandatory: No
Behavior: One row per instalment. Checking Block Online sets IsOnlineCollectionBlocked = True for that instalment. Checking Block Offline sets IsOfflineCollectionBlocked = True.
Saved in & as:
- emaADPPlanInstallmentDTL → IsOnlineCollectionBlocked (per instalment row)
- emaADPPlanInstallmentDTL → IsOfflineCollectionBlocked (per instalment row)
Channel Access Control — Online / Offline per Action Type (Grid — Checkbox per row)
Description: A grid displaying each action type (Enrollment, Collection, Closing) with Online and Offline checkbox columns to control which channels are permitted per action.
Control Properties:
- Default Value: Unchecked per cell
- User Entry: User can Check/Uncheck per cell
- Mandatory: No
Behavior: One row per action type. Checking Online = unchecked means channel is allowed; checking Block means channel is blocked.
(Confirm whether checkbox = Blocked or checkbox = Allowed with team)
Saved in & as:
- emaADPPlanChannelAccessDTL → MasterDataValueID_ADPActionType (one row per action type)
- emaADPPlanChannelAccessDTL → IsOnlineBlocked
- emaADPPlanChannelAccessDTL → IsOfflineBlocked
5.3 Associated Popups / Panels
Installment Discount Distribution (Popup Panel)
Description: A popup that appears when Installment Discount Applicable = Checked. Displays a grid of instalments (count = Discount Installment Count) with a checkbox selector and a Discount Percentage input per row.
Visible when: Installment Discount Applicable = Checked (True).
- Select (Checkbox per row): Allows marking which instalments receive the discount.
- Installment (Read only label): Instalment term label (e.g. Installment Term 1, 2, 3…).
- Discount Percentage (Textbox per row): The discount percentage applied to the selected instalment.
- Allowed Characters: Numeric (decimal)
- Mandatory: Yes (when row is selected)
- Saved in: emaADPPlanInstallmentDTL → DiscountPercentage and IsInstallmentDiscountApplicable = True
Early Plan Closure Condition (Popup Panel)
Description: A popup that appears when Allow Early Plan Closure = Checked. Allows the user to define one or more eligibility conditions for early closure, combined with logical connectors, and displays the resulting expression.
Visible when: Allow Early Plan Closure = Checked (True).
Closure Eligibility Basis (Single Selection Dropdown):
- Data Source: MasterDataValue, filtered by MasterDataCategory = ADP Closure Eligibility Basis
- Options: (Confirm options with team)
- Mandatory: Yes
- Saved in: emaADPPlanEarlyClosureConditionDTL → MasterDataValueID_ADPClosureEligibilityBasis
Comparison Operator (Single Selection Dropdown):
- Data Source: MasterDataValue, filtered by MasterDataCategory = Comparison Operator
- Options: =, ≠, >, <, ≥, ≤ (Confirm options with team)
- Mandatory: Yes
- Saved in: emaADPPlanEarlyClosureConditionDTL → MasterDataValueID_ComparisionOperator
Value (Textbox):
- Allowed Characters: Numeric (decimal)
- Mandatory: Yes
- Saved in: emaADPPlanEarlyClosureConditionDTL → Value
+ Button: Adds an additional condition row (with Connector dropdown).
Connector (Single Selection Dropdown — for additional rows):
- Data Source: MasterDataValue, filtered by MasterDataCategory = Comparison Connector
- Options: AND, OR (Confirm options with team)
- Mandatory: Yes (when second condition row is added)
- Saved in: emaADPPlanEarlyClosureConditionDTL → MasterDataValueID_ComparisionConnector
Expression (Textbox — Read only):
- Auto-generated string representation of the conditions defined above.
- Saved in: emaADPPlanHDR → EarlyPlanClosureConditionJsonFormat / EarlyPlanClosureConditionStringFormat
Sort Order: Saved in emaADPPlanEarlyClosureConditionDTL → SortOrder (auto-incremented per row).
6. Table View
Data Source: emaADPPlanHDR
Filter Condition:
- Active = True
- MasterDataValueID_ApprovalStatus = Approved (Confirm filter — draft records may also be listed)
Columns to Display (in order):
| # | Column Label | Source Column |
| 1 | Plan Name | Name |
| 2 | Short Name | ShortName |
| 3 | Plan Type | MasterDataValueID_ADPPlanType (display value) |
| 4 | Plan Structure Type | MasterDataValueID_ADPPlanStructureType (display value) |
| 5 | Total Installments | TotalInstallmentCount |
| 6 | Maturity Period (Days) | MaturityPeriodInDays |
| 7 | Approval Status | MasterDataValueID_ApprovalStatus (display value) |
| 8 | Active | Active |
Table Control Properties:
- Searchable: Yes
- Sortable: Yes
- Add: Yes
- Edit: Yes
- Delete / Deactivate: Deactivate (sets Active = False)
- Export: Yes
- Export All: Yes
7. Custom Data Control
Not applicable for this module. The Advance Plan form does not utilise a dynamic custom data control framework; all fields are statically defined and mapped to fixed database columns.
8. Functional Specifications
8.1 Source Tables & Data Filtration Conditions
| Source Table | Filter Condition | Used For |
| MasterDataValue | Active = True AND MasterDataCategory = 'ADP Plan Type' | Plan Type dropdown |
| MasterDataValue | Active = True AND MasterDataCategory = 'ADP Plan Customer Deposit Type' | Customer Deposit Type dropdown |
| MasterDataValue | Active = True AND MasterDataCategory = 'ADP Plan Structure Type' | Plan Structure Type dropdown |
| MasterDataValue | Active = True AND MasterDataCategory = 'ADP Maturity Payout Calculation Method' | Maturity Payout Calculation Method dropdown |
| MasterDataValue | Active = True AND MasterDataCategory = 'ADP Commission Calculation Method' | Commission Calculation Method dropdown |
| MasterDataValue | Active = True AND MasterDataCategory = 'ADP Commission Trigger Event' | Commission Trigger Event dropdown |
| MasterDataValue | Active = True AND MasterDataCategory = 'ADP Enrollment Limit' | ADP Enrollment Limit dropdown |
| MasterDataValue | Active = True AND MasterDataCategory = 'ADP Installment Rule Type' | Installment Rule Type dropdown |
| MasterDataValue | Active = True AND MasterDataCategory = 'ADP Collection Window Type' | Collection Window Type dropdown |
| MasterDataValue (Day) | Active = True, Day values 1–30 | From Day / To Day dropdowns |
| MasterDataValue | Active = True AND MasterDataCategory = 'ADP Action Type' | Channel Access Control action type rows |
| MasterDataValue | Active = True AND MasterDataCategory = 'ADP Closure Eligibility Basis' | Closure Eligibility Basis dropdown in popup |
| MasterDataValue | Active = True AND MasterDataCategory = 'Comparison Operator' | Comparison Operator dropdown in popup |
| MasterDataValue | Active = True AND MasterDataCategory = 'Comparison Connector' | Connector dropdown in popup |
| MasterDataValue | Active = True AND MasterDataCategory = 'ADP Installment Progression Type' | Progression Type dropdown in Progressive formula grid |
| MasterDataValue | Active = True AND MasterDataCategory = 'ADP Calculation Type' | Calculation Type dropdown in Progressive formula grid |
| MasterDataValue | Active = True AND MasterDataCategory = 'ADP Installment Formula Component Type' | Formula component type in emaADPPlanInstallmentRuleValueFormulaDTL |
8.2 Transaction Saving Tables
8.2.1 HDR Table — emaADPPlanHDR
One record is inserted per new Advance Plan. On edit, the existing record is updated.
| Column | Value on Save |
| ADPPlanID | New GUID (auto-generated) |
| Name | Value from Name textbox |
| ShortName | Value from Short Name textbox |
| MasterDataValueID_ADPPlanType | Selected Plan Type MasterDataValueID |
| MasterDataValueID_ADPPlanCustomerDepositType | Selected Customer Deposit Type MasterDataValueID |
| MetalID | Linked metal ID if applicable (Confirm source with team) |
| RotationNo | Value from Rotation No textbox |
| MasterDataValueID_ADPPlanStructureType | Selected Plan Structure Type MasterDataValueID |
| TotalInstallmentCount | Value from Total No. of Installments textbox |
| MaturityPeriodInDays | Value from Maturity Period textbox |
| IsLuckyDrawApplicable | True / False from checkbox |
| HasEnrollmentGift | True / False from checkbox |
| AllowEarlyPlanClosure | True / False from checkbox |
| EarlyPlanClosureConditionJsonFormat | JSON expression string from closure popup |
| EarlyPlanClosureConditionStringFormat | Human-readable expression from closure popup |
| IsRateFixingAllowed | True / False from checkbox |
| IsPartialRateFixingAllowed | True / False from checkbox |
| AllowMaturityPayout | True / False from checkbox |
| MasterDataValueID_MaturityPayoutCalculationMethod | Selected MasterDataValueID (null if AllowMaturityPayout = False) |
| IsInstallmentDiscountApplicable | True / False from checkbox |
| DiscountInstallmentCount | Value from Discount Installment Count textbox (null if not applicable) |
| IsCommissionApplicable | True / False from checkbox |
| Comission_MasterDataValueID_CalculationType | Selected MasterDataValueID (null if Commission = False) |
| MasterDataValueID_ADPCommissionTriggerEvent | Selected MasterDataValueID (null if Commission = False) |
| CommissionValue | Value from Commission Value textbox (null if Per Installment) |
| MasterDataValueID_ADPEnrollmentLimit | Selected MasterDataValueID |
| MaximumEnrollmentCount | Value from Max Enrollment Count textbox (null if Unlimited) |
| MasterDataValueID_ADPInstallmentRuleType | Selected MasterDataValueID |
| Active | True (default on creation) |
| MasterDataValueID_ApprovalStatus | Pending Approval (default) (Confirm default status with team) |
8.2.2 DTL Tables
emaADPPlanRuleDTL — One row per plan, containing all collection window and deactivation rule settings.
| Column | Value on Save |
| ADPPlanRuleID | New GUID |
| ADPPlanID | FK to emaADPPlanHDR.ADPPlanID |
| MasterDataValueID_ADPCollectionWindowType | Selected Collection Window Type |
| FromDays | Value derived from From Day (1st) dropdown |
| ToDays | Value derived from To Day (1st) dropdown |
| From_MasterDataValueID_Day | Selected From Day MasterDataValueID |
| To_MasterDataValueID_Day | Selected To Day MasterDataValueID |
| MinimumInstallmentGapInDays | Value from Min Gap textbox |
| CollectionCutoffPeriodInDays | Value from Collection Cutoff Period textbox |
| IsAutoDeactivateOnMissedCollection | True / False |
| MaxMissedInstallmentCount | Value (null if IsAutoDeactivate = False) |
| MaxOverdueDays | Value (null if IsAutoDeactivate = False) |
| MaxMissedCollectionOccurrences | Value (null if IsAutoDeactivate = False) |
| IsAutoDeactivateMember | True / False |
| MemberAutoDeactivationPeriodInDays | Value (null if IsAutoDeactivateMember = False) |
| IsPendingInstallmentCollectionAllowed | True / False |
| MaxPendingInstallmentCollectionCount | Value (null if not allowed) |
| IsAdvanceInstallmentCollectionAllowed | True / False |
| MaxAdvanceInstallmentCollectionCount | Value (null if not allowed) |
| IsPartialInstallmentCollectionAllowed | True / False |
| MaxPartialPaymentsPerInstallment | Value (null if not allowed) |
emaADPPlanInstallmentDTL — One row per instalment (total rows = TotalInstallmentCount). Stores term details, discount settings, commission (per instalment), and channel blocking flags.
| Column | Value on Save |
| ADPPlanInstallmentID | New GUID per row |
| ADPPlanID | FK to emaADPPlanHDR.ADPPlanID |
| TermName | Auto-generated label e.g. "Installment 1" |
| TermNo | Sequential integer (1, 2, 3 … n) |
| SortOrder | Same as TermNo |
| IsDiscountApplied | True if instalment is selected in discount popup, else False |
| IsInstallmentDiscountApplicable | True if instalment row participates in discount scheme |
| DiscountPercentage | Value from Discount Percentage in popup (null if not applicable) |
| CommissionValue | Per-instalment commission value (null if Commission Trigger ≠ Per Installment) |
| IsOnlineCollectionBlocked | True / False from Collection Channel Restrictions grid |
| IsOfflineCollectionBlocked | True / False from Collection Channel Restrictions grid |
| ADPPlanInstallmentRuleID | FK to emaADPPlanInstallmentRuleDTL (assigned per rule type logic — see below) |
Installment Rule assignment logic per rule type:
- Fixed Selection: All instalments share a single ADPPlanInstallmentRuleID (one rule record created; all DTL rows point to it).
- Ranged Selection: All instalments share a single ADPPlanInstallmentRuleID.
- Predefined Term Amount: Each instalment gets its own unique ADPPlanInstallmentRuleID (one rule per term).
- Progressive Term Formula: Each instalment gets its own unique ADPPlanInstallmentRuleID (one rule per term).
emaADPPlanInstallmentRuleDTL — One row per instalment rule. Links the instalment to its rule type.
| Column | Value on Save |
| ADPPlanInstallmentRuleID | New GUID |
| MasterDataValueID_ADPInstallmentRuleType | Selected Installment Rule Type MasterDataValueID |
emaADPPlanInstallmentRuleValueDTL — Stores the value configuration for each rule. One row per Fixed Selection amount; one row per rule for Ranged / Predefined / Progressive types.
| Column | Value on Save |
| ADPPlanInstallmentRuleValueID | New GUID |
| ADPPlanInstallmentRuleID | FK to emaADPPlanInstallmentRuleDTL |
| MasterDataValueID_ADPInstallmentRuleType | Same as parent rule type |
| InstallmentAmount | Fixed amount value (Fixed Selection or Predefined per term) |
| StartingInstallmentAmount | Starting Amount (Ranged / Progressive) |
| EndingInstallmentAmount | Ending Amount (Ranged / Progressive) |
| MultipleWith | Multiple With value (Ranged / Progressive) |
| MasterDataValueID_ADPInstallmentProgressionType | Progression Type (Progressive only) |
| MasterDataValueID_CalculationType | Calculation Type (Progressive only) |
| ProgressionValue | Progressive Value per row (Progressive only) |
| FormulaExpressionJsonFormat | JSON formula expression string |
| FormulaExpressionStringFormat | Human-readable formula string |
8.2.3 VRL Tables
emaADPPlanInstallmentRuleValueFormulaDTL — One row per formula component for Progressive Term Formula installments. Stores the individual expression components used to build the progressive formula.
| Column | Value on Save |
| ADPPlanInstallmentRuleValueFormulaID | New GUID |
| ADPPlanInstallmentRuleValueID | FK to emaADPPlanInstallmentRuleValueDTL |
| MasterDataValueID_ADPInstallmentFormulaComponentType | Formula component type MasterDataValueID |
| ADPPlanInstallmentID | FK to emaADPPlanInstallmentDTL (the instalment this formula applies to) |
| TermNo | Instalment term number |
| decimal(18,9) value | Numeric component value |
| MasterDataValueID_Operator | Operator MasterDataValueID for formula expression |
| SortOrder | Sequence of component within formula |
emaADPPlanChannelAccessDTL — One row per action type (Enrollment, Collection, Closing). Stores online/offline blocking per action.
| Column | Value on Save |
| ADPPlanChannelAccessID | New GUID |
| ADPPlanID | FK to emaADPPlanHDR.ADPPlanID |
| MasterDataValueID_ADPActionType | Action Type MasterDataValueID (one row each for Enrollment, Collection, Closing) |
| IsOnlineBlocked | True / False from grid checkbox |
| IsOfflineBlocked | True / False from grid checkbox |
emaADPPlanEarlyClosureConditionDTL — One row per condition line added in the Early Plan Closure popup. Visible only when AllowEarlyPlanClosure = True.
| Column | Value on Save |
| ADPPlanEarlyClosureConditionID | New GUID |
| ADPPlanID | FK to emaADPPlanHDR.ADPPlanID |
| MasterDataValueID_ADPClosureEligibilityBasis | Selected Closure Eligibility Basis |
| MasterDataValueID_ComparisionOperator | Selected Comparison Operator |
| Value | Entered numeric value |
| MasterDataValueID_ComparisionConnector | Selected Connector (null for first row) |
| SortOrder | Auto-incremented row sequence |
9. Account Stock Group & Average Cost Functional Specifications
Not applicable for this module. The Advance Plan form is a master configuration module and does not involve stock, inventory, or average cost transactions.
10. Transaction Type Settings
Not applicable for this module. The Advance Plan form is a master setup form and does not generate financial transactions or utilise transaction type configurations.
— End of Technical Design Document — Advance Plan — SioniqAdminDB —