TREASURY · INVESTMENT · GOVT SECURITY / NON-SLR / BOND / MUTUAL FUND

Govt. Security / Bond Entry

Purchase, Redemption, Interest Calculation, Sell, Write-off, Amortize, Yearly Amortize Process, GOI Category Transfer, Investment Depreciation and Mutual Fund Transfer.

@if (activeTab === 'holdings') { }
@if (activeTab === 'holdings') {
@for (h of holdingsForType; track h.certNo) { } @empty { }
Cert No Script Party Units Face Value Book Value Rate Settlement Date Maturity Date Accrued Interest Maturity Value Status Settlement
{{ h.certNo }} {{ h.scriptName }} {{ h.party }} {{ h.units | number }} ₹{{ h.faceValue | number: '1.2-2' }} ₹{{ carryingValue(h) | number: '1.2-2' }} {{ h.interestRate }}% {{ h.purchaseDate }} {{ h.maturityDate }} ₹{{ accrued(h) | number: '1.2-2' }} ₹{{ maturity(h) | number: '1.2-2' }} {{ h.status === 'PENDING_SETTLEMENT' ? 'PENDING SETTLEMENT' : h.status }} @if (h.status === 'PENDING_SETTLEMENT') { } @else if (h.glTransactionId) { GL {{ h.glTransactionId }} }
No {{ instrumentLabel(bondType) }} holdings yet.
} @if (activeTab === 'purchase') {
@if (isMutualFund) { } @else { } @if (!isMutualFund) { }
@if (purchaseMarketRate) {

Market rate (Daily Script Master) as on {{ purchaseMarketRate.rateDate }}: Close {{ purchaseMarketRate.closeRate | number: '1.2-4' }} @if (purchaseMarketRate.lowRate && purchaseMarketRate.highRate) { (Low {{ purchaseMarketRate.lowRate | number: '1.2-4' }} – High {{ purchaseMarketRate.highRate | number: '1.2-4' }}) } @if (purchaseMarketRate.rateDate !== purchaseForm.dealDate) { — no rate entered for the deal date, the latest earlier rate is used. }

@if (purchaseRateOutOfRange) {

Warning: the rate entered is outside the day's market range.

} } @else if (purchaseMarketRate === null) {

No rate in the Daily Script Master for this script — enter the day's rate there first.

}
@if (!isMutualFund) { } @if (!isMutualFund) { }
@if (!isMutualFund && purchaseCouponDates) {
} @if (purchaseAccountingPreview.length) { @for (l of purchaseAccountingPreview; track l.side + l.glCode) { }
Dr / Cr GL Code GL Name Amount
{{ l.side }} {{ l.glCode }} {{ l.glName || '—' }} ₹{{ l.amount | number: '1.2-2' }}
} @else {

Select a script, enter the amount and CR. To A/c to see the entry.

}
@if (showMoreDetails) {
@if (isMutualFund) { } @else { } @if (purchaseForm.lien === 'YES') { }
}
} @if (activeTab === 'redemption') {
@if (redeemQuote; as q) { }
@if (redeemError) {

{{ redeemError }}

} @if (redeemQuote; as q) {

Dr {{ redeemBankGlCode }} Bank ₹{{ q.netAmount | number: '1.2-2' }} · Cr {{ q.investmentGlCode }} Investment ₹{{ q.bookValueSold - (splitPremium(q) ? q.premiumCleared! : 0) | number: '1.2-2' }} @if (splitPremium(q)) { · Cr {{ q.premiumGlCode }} Premium ₹{{ q.premiumCleared | number: '1.2-2' }} } @if (q.profitLoss > 0) { · Cr 400405 Profit on Redemption ₹{{ q.profitLoss | number: '1.2-2' }} } @else if (q.profitLoss < 0) { · Dr 500604 Premium Amortisation ₹{{ -q.profitLoss | number: '1.2-2' }} }

}
} @if (activeTab === 'interest') {
@if (intDueTasks.length) { @for (t of intDueTasks; track t.purchaseId) { }
Deal No Script Type Int Date Amount Status
{{ t.dealNo }} {{ t.scriptCode }} — {{ t.scriptDesc }} {{ t.lineType === 'COUPON' ? 'Coupon' : 'Provision' }} {{ t.intDate }} ₹{{ (t.lineType === 'COUPON' ? t.grossInterest : t.amount) | number: '1.2-2' }} {{ t.overdue ? 'Overdue — post now' : t.postable ? 'Due today' : 'Due on ' + t.intDate }}
}
@if (intSchedule; as sc) {

Days are 30/360. A provision books the interest earned since the last coupon; the coupon then clears what is already booked. Post each line with Generate Voucher on or after its date, in date order — the JV voucher is passed as it is raised.

@for (r of intVisibleRows; track r.type + r.intDate) { } @empty { }
Type Int Date From To Days Int % Gross Interest Already Booked Amount Accounting Voucher
{{ r.type === 'COUPON' ? 'Coupon' : 'Provision' }} @if (r.due && !r.posted) { Due } {{ r.intDate }} {{ r.fromDate }} {{ r.toDate }} {{ r.days }} {{ sc.intRate }} ₹{{ r.grossInterest | number: '1.2-2' }} ₹{{ r.alreadyBooked | number: '1.2-2' }} ₹{{ r.amount | number: '1.2-2' }} @if (r.type === 'COUPON') {
Dr Bank ₹{{ r.grossInterest | number: '1.0-0' }}
@if (r.alreadyBooked > 0) {
Cr {{ interestReceivableGl.glCode }} Int. Receivable ₹{{ r.alreadyBooked | number: '1.0-0' }}
}
Cr {{ sc.interestGlCode }} Int. Income ₹{{ r.amount | number: '1.0-0' }}
} @else {
Dr {{ interestReceivableGl.glCode }} Int. Receivable ₹{{ r.amount | number: '1.0-0' }}
Cr {{ sc.interestGlCode }} Int. Income ₹{{ r.amount | number: '1.0-0' }}
}
@if (r.posted) { Posted · {{ r.voucherNo }} } @else if (r.postable) { } @else if (r.dueSoon) { 🔔 Due {{ r.intDate }} }
No interest lines — check the rate, last interest date and maturity date.

Interest income GL: {{ sc.interestGlCode }} — {{ sc.interestGlName }} · Interest receivable GL: {{ interestReceivableGl.glCode }}.

} @else {

Select a Deal No and press Retrieve to see its interest schedule.

}
} @if (activeTab === 'sell') {
@if (saleIsHtm) {

HTM securities are not sold except under liquidity stress, with the Board's permission and the reason recorded.

} @if (saleQuoteError) {

{{ saleQuoteError }}

} @if (saleQuote; as q) {

On Settle: Dr Bank ₹{{ q.netAmount | number: '1.2-2' }} @if (q.brokerage) { · Dr 500602 Brokerage ₹{{ q.brokerage | number: '1.2-2' }} } · Cr {{ q.investmentGlCode }} Investment ₹{{ q.bookValueSold - (splitPremium(q) ? q.premiumCleared! : 0) | number: '1.2-2' }} @if (splitPremium(q)) { · Cr {{ q.premiumGlCode }} Premium ₹{{ q.premiumCleared | number: '1.2-2' }} } @if (q.profitLoss > 0) { · Cr 400405 Profit ₹{{ q.profitLoss | number: '1.2-2' }} } @else if (q.profitLoss < 0) { · Dr 500605 Loss ₹{{ -q.profitLoss | number: '1.2-2' }} }

@if (q.accruedInterest) {

Interest — manual entry: the buyer also pays interest for {{ q.accruedDays }} days since the last coupon, ₹{{ q.accruedInterest | number: '1.2-2' }}. It is not in this voucher; when it reaches the bank, pass a journal entry: Dr Bank ₹{{ q.accruedInterest | number: '1.2-2' }} @if (q.receivableCleared) { · Cr 100603 Int. Receivable ₹{{ q.receivableCleared | number: '1.2-2' }} (already provisioned) } · Cr Int. Income ₹{{ q.interestIncome | number: '1.2-2' }}

} }
@for (s of pendingSalesForType; track s.id) { } @empty { }
Deal No Script Buyer Units Rate Settlement Date Net Amount Profit / Loss
{{ s.dealNo }} {{ s.scriptCode }} — {{ s.scriptDesc }} {{ s.partyName }} {{ s.units | number: '1.0-6' }} {{ s.saleRate }} {{ s.settlementDate }} ₹{{ s.netAmount | number: '1.2-2' }} ₹{{ s.profitLoss | number: '1.2-2' }}
No pending sales.
} @if (activeTab === 'writeoff') {
@if (writeoffHolding; as h) { }
@if (writeoffHolding && writeoffAmount) {

Voucher: Dr 500605 Loss on Investments ₹{{ writeoffAmount | number: '1.2-2' }} / Cr {{ writeoffHolding!.glCode }} Investment ₹{{ writeoffAmount | number: '1.2-2' }}. The loss is an expense of the year; the units stay held and later sales or the redemption work from the lower book value.

}
} @if (activeTab === 'amortize') {
@if (amortSchedule; as d) { }
@if (!premiumHoldings.length) {

No active HTM holding was bought above face value, so there is no premium to amortise.

} @if (amortSchedule; as d) {

Each 31 March: premium still to amortise × days in the period ÷ days left to maturity. Voucher: Dr 500604 Amortisation of Premium / Cr {{ d.premiumGlCode }}. The last part is written off with the redemption.

@for (r of d.rows; track r.fyEnd) { }
Year End Period Days Amortisation Premium Left Status
{{ r.kind === 'MATURITY' ? 'Maturity ' + r.fyEnd : r.fyEnd }} {{ r.fromDate }} → {{ r.toDate }} {{ r.days }} ₹{{ r.amount | number: '1.2-2' }} {{ r.premiumAfter === null || r.premiumAfter === undefined ? '' : '₹' + (r.premiumAfter | number: '1.2-2') }} @if (r.posted) { Posted {{ r.voucherNo }} } @else if (r.kind === 'MATURITY') { With redemption } @else { Projected } @if (r.postable) { }
}
} @if (activeTab === 'amortizeYearly') {
@for (d of amortizeDue; track d.purchaseId) { } @empty { }
Deal No Script Period Days Premium Left Amortisation
{{ d.dealNo }} {{ d.scriptCode }} {{ d.scriptDesc }} {{ d.fromDate }} → {{ d.fyEnd }} {{ d.days }} ₹{{ d.unamortisedPremium | number: '1.2-2' }} ₹{{ d.amount | number: '1.2-2' }}
{{ amortizeDueLoaded ? 'No holding has amortisation due for ' + amortizeFyEnd + '.' : 'Enter the year end and click Show Due.' }}
} @if (activeTab === 'goiTransfer') {
@if (goiHolding; as h) { @if (goiToScript; as to) { } }
@if (goiHolding && !goiTargetScripts.length) {

No other active security with the same coupon rate, maturity date and unit value. Add it in Script Master first.

} @if (goiHolding && goiToScript; as to) {

@if (to.glCode === goiHolding!.glCode) { Same GL — the deal moves to {{ to.scriptCode }}; no accounting entry is needed. } @else { Voucher on transfer: Dr {{ to.glCode }} / Cr {{ goiHolding!.glCode }} at the book value of the holding; any premium not yet amortised stays in 100707. } Units, book value and the interest schedule stay the same.

}
} @if (activeTab === 'depreciation') {
@for (t of depreciationTargets; track t.holding.certNo) { } @empty { }
Cert No Script Book Rate Market Price Depreciation
{{ t.holding.certNo }} {{ t.holding.scriptName }} {{ t.holding.purchaseRate }} {{ t.marketPrice }} ₹{{ t.depreciation | number: '1.2-2' }}
No holdings require depreciation provisioning.
} @if (activeTab === 'mfTransfer') {
@if (mfFromHolding; as h) { }
} @if (activeTab !== 'holdings') {
@for (t of txnsForType; track t.voucherNo) { } @empty { }
Date Voucher No Cert No Type Particulars GL Posted Amount
{{ t.txnDate }} {{ t.voucherNo }} {{ t.certNo }} {{ t.txnType }} {{ t.particulars }} {{ t.glCode ? t.glCode + ' — ' + t.glName : t.glName || '—' }} ₹{{ t.amount | number: '1.2-2' }}
No transactions yet.
}
{{ toastMsg }}