S++Business systems language
DEMO SOURCE · SPP / APP / PHYRead the book

cboddeposit-45-agreement-window.spp

cboddeposit/accrual/cboddeposit-45-agreement-window.spp

Download original file · Bank deposit source contents

1domain cboddeposit;23// Zero date encodes absent agreement dates; clipping is business policy, not APP routing.45Role AgreementTerm {6    int effectiveDate;7    int cancelDate;8}910atomic calculate prepareAgreementWindow(11    BankDate normalStart,12    BankDate normalEnd,13    AgreementTerm,14    BankDate clippedStart,15    BankDate clippedEnd,16    InterestPeriod normal,17    InterestPeriod overlap,18    AgreementPolicy19) {20    clippedStart.encoded = normalStart.encoded;21    clippedEnd.encoded = normalStart.encoded;22    overlap.amount = normal.amount;23    overlap.unit = normal.unit;24    overlap.days = 0;25    AgreementPolicy.enabled = AgreementPolicy.enabled && AgreementTerm.effectiveDate > 0;26    if (AgreementPolicy.enabled) {27        clippedStart.encoded = max(normalStart.encoded, AgreementTerm.effectiveDate);28        clippedEnd.encoded = normalEnd.encoded;29        if (AgreementTerm.cancelDate > 0) {30            clippedEnd.encoded = min(normalEnd.encoded, AgreementTerm.cancelDate);31        }32        if (clippedStart.encoded >= clippedEnd.encoded) {33            AgreementPolicy.enabled = false;34            clippedStart.encoded = normalStart.encoded;35            clippedEnd.encoded = normalStart.encoded;36        }37    }38}