Loan Builder - Request

Please see the Legend to understand the conventions used to document each element and attribute. Note that for requests, the XML elements are documented in alphabetical order by parent element.

ElementAttributes
🟥 <inLOAN_BUILDER>🔹Country
|- 🟥 <Advance>[]🔹Amount, 🔹Compute, 🔸Date, 🔹ExtraDays, 🔹NewPmt, 🔹Position
|- 🟦 <APR>🔹Code, 🔹Decimals, 🔹MAPR_Max, 🔹Max, 🔹SinglePayFraction, 🔹StrictTime, 🔹UseMAPR
|- 🟦 <BalAdj>[]🔹Adjust, 🔸Date, 🔹NewPmt, 🔹Target
|- 🟦 <BusinessRules>🔹AmError, 🔹AmortizeOnly, 🔹CanSkipFirst, 🔹CanSkipLast, 🔹ClosedFormEqn, 🔹LeapYearRound, 🔹MinFinChg, 🔹MinIntChg, 🔹MYED, 🔹PmtAccrualCode, 🔹OddFirstPmt, 🔹ProtMandatory, 🔹UsRuleAprException, 🔹YieldPPY, 🔹ZeroInterestRule
|- 🟦 <Capitalize>[]🔹AllowFeb29, 🔸Date, 🔹Holidays, 🔹PPY, 🔹SemimonthlyDay, 🔹Term, 🔹Weekends
|- 🟦 <Construction>🔸EndDate, 🔹HalfCommitment
|- 🟦 <EditInterest>[]🔹AccrualCode, 🔹Capitalize, 🔹Date, 🔹ExtraDays, 🔹IntRate, 🔹IntRound, 🔹NewPmt, 🔹PmtRound
|- |- 🟦 <Tier>[]🔸Ceiling, 🔸Rate
|- 🟦 <EditOutput>🔹EarlyPayoffDate, 🔹KeepSlush, 🔹Merge, 🔹PmtDollarRound, 🔹ShowAmTable, 🔹ShowFees, 🔹ShowGrandTot, 🔹ShowSubTot, 🔹ShowTap, 🔹ShowType, 🔹TagPmts
|- 🟦 <EndBal>
|- 🟦 <Fee>[]🔹AddToFinChg, 🔹AddToPrin, 🔹Adjust, 🔹AllowFeb29, 🔸Amount, 🔹Blended, 🔹CalcType, 🔹Date, 🔹EqualServChg, 🔹Holidays, 🔹IsLoanCost, 🔹LastDay, 🔹MAPR, 🔹Max, 🔹Min, 🔹Name, 🔹Position, 🔹PPY, 🔹Round, 🔹RoundBasis, 🔹SemimonthlyDay, 🔹ServChgType, 🔹Term, 🔹Weekends
|- 🟦 <Format>🔹CurrencyDecimals, 🔹DateFormat, 🔹DateSeparator, 🔹DecimalSeparator, 🔹StrictDP, 🔹ThousandSeparator
|- 🟦 <Holiday>[]🔸Date
|- 🟦 <Mortgage_Insurance>🔹CashDown, 🔹LoanAmt, 🔸PropertyValue, 🔹Type
|- |- 🟥 <MI_Rate>[]🔸Switch
|- |- 🟦 <Periodic>🔹DropLTV, 🔹WarnLTV
|- |- 🟦 <UpFront>🔹Paid, 🔹Units
|- 🟦 <OddDaysPrepaid>🔹AccrualCode, 🔹AddToPmt, 🔹AddToPrin, 🔹AnchorDate, 🔹ForceUnitPeriod, 🔹NoCap, 🔹UseDailyCost, 🔹UseNegODI
|- 🟦 <PmtStream>[]🔹AllowFeb29, 🔹Amount, 🔸Begin, 🔹ComputeTerm, 🔹Holidays, 🔹LastDay, 🔹MinPmt, 🔹PmtType, 🔹PPY, 🔹ReplaceIdx, 🔹SemimonthlyDay, 🔹Term, 🔹Weekends
|- 🟦 <Protection>🔹DataDirPath, 🔹ShowDataPath
|- |- 🟦 <Product>[]🔹Account, 🔹Code, 🔹Dismemberment, 🔹Financed, 🔹Method, 🔹ShowFactor, 🔹Table, 🔹UseLevelRates
|- |- |- 🟦 <Benefit>
|- |- |- 🟥 <Birthday>[]
|- |- |- 🟦 <Coverage>
|- |- |- 🟦 <Term>🔹Units
|- 🟦 <TILARESPA2015>

🟥 <inLOAN_BUILDER>

Element TypeData Type
Parent-

This is the root element of the request, and is required. This contains child elements which specify the particulars of the requested loan.

Attributes: 🔹Country

🔹 Country

Data TypeValuesDefault
Alpha-2 or Numeric-3 codeSee tableUS

This attribute allows the calling application to specify a two (2) character or three (3) digit country code. If none is provided, then a default value of US will be used. Please see this table of supported countries and their associated codes.

Currently, the country code is used to determine the default value of the Code attribute of the <APR> element.


🟥 <Advance>[]

Element TypeData Type
Empty-

Cash advances to the customer are specified by using the following attributes of this empty element.

Attributes: 🔹Amount, 🔹Compute, 🔸Date, 🔹ExtraDays, 🔹NewPmt, 🔹Position

🔹 Amount

Data TypeValuesDefault
Currency>= 00

The proceeds to be advanced to the borrower is defined using this attribute. If the calling application requests that the advance be computed (see the Compute attribute below), then the value of this attribute will be added to the computed advance amount, which can be useful in multiple advance loans.

🔹 Compute

Data TypeValuesDefault
Booleantrue, false, 1, 0false

Some applications like to provide useful what-if calculations, such as, "how much can I afford to borrow given a specified loan term, interest rate, and payment stream?" Here at Sherman and Associates, we call this a Roll to Advance calculation.

If the value of this attribute is true, then the calling application is requesting that the SCEX calculate one or more advances given a specified term, interest rate, and payment stream. With this in mind, all <PmtStream> elements (which define the specified payment streams in the loan) may not have a PmtType of CalcPmt. Usually, all payment streams will be defined using a PmtType of FixedPmt.

We have provided several XML samples which illustrate various Roll to Advance calculations in the /samples directory included with the SCEX installer, for your reference.

🔸 Date

Data TypeValues
Date>= 1900-01-01

This attribute holds the XML date on which the advance is made. All dates must be in the form of YYYY-MM-DD, and be 10 characters long. Hence, an advance date of January 2, 2008 would be specified as Date="2008-01-02".

🔹 ExtraDays

Data TypeValuesDefault
Integerany0

Increase or decrease the number of days between this event and the next event by the value of this attribute. e.g. 1 will be considered one more day of interest.

🔹 NewPmt

Data TypeValuesDefault
Booleantrue, false, 1, 0false

If the payment should change to reflect a new advance, set this attribute to true; otherwise, the payment will not change after this event. If only one <Advance> element is being used, then this attribute should be omitted altogether.

🔹 Position

Data TypeValuesDefault
EnumBeforePmt, AfterPmtBeforePmt

If an advance and a payment fall on the same day, the value of this attribute determines which event occurs first in the amortization schedule. Note that the first advance of every loan is required to occur before the first scheduled payment.

  • BeforePmt - When the advance occurs on the same date as a payment, the advance is amortized before the payment.
  • AfterPmt - When the advance occurs on the same date as a payment, the payment is amortized before the advance.

🟦 <APR>

Element TypeData Type
Empty-

Settings related to the computed effective rate returned by the SCEX (most commonly, the Regulation Z APR in the United States of America) are contained in the attributes of this otherwise empty element.

Attributes: 🔹Code, 🔹Decimals, 🔹MAPR_Max, 🔹Max, 🔹SinglePayFraction, 🔹StrictTime, 🔹UseMAPR

🔹 Code

Data TypeValuesDefault
Enumsee table belowsee below

The method of APR computation is defined by this attribute. If this attribute is not set up, the default method depends upon the value of the Country attribute. For the United States of America, the default value is 100 (Actuarial). For a country in the European Union, the default value is 50 (European Union APR). For Canada, the default value is 60.

APR CodeDescription
0Not computed
10Account opening disclosure of open-end Loan (APR will equal the Interest Rate)
20Microsoft®@Excel extended internal rate of return (XIRR)
30Unit period 360 internal rate of return (XIRR360)
40Unit period internal rate of return (IRR)
41Yield unit period internal rate of return (IRR)
50European Union APR
60Canadian APR
100Actuarial
301UnitPeriod True/360/360 US Rule
302UnitPeriod True/360/365 US Rule
303UnitPeriod True/360/DaysPerPeriod (e.g. 91 for quarterly payment frequencies)
304UnitPeriod True/360/365.25 US Rule
305UnitPeriod True/365/360 US Rule
306UnitPeriod True/365/365 US Rule
307UnitPeriod True/365/DaysPerPeriod (e.g. 91 for quarterly payment frequencies)
308UnitPeriod/365.25 US Rule
309UnitPeriod True/365.25 US Rule
310Actual/360 US Rule
311True/365/360 US Rule
320Actual/365 US Rule
321True/365/365 US Rule
330Actual/Actual US Rule
331Midnight/366 US Rule
340Actual/365.25 US Rule

🔹 Decimals

Data TypeValuesDefault
Integer[1...5]3

The number of decimal places of accuracy for the disclosed APR is determined by this attribute. The default value of this attribute is 3.

🔹 MAPR_Max

Data TypeValuesDefault
Decimal[-99.999...600]36.0

If you are computing the Military APR (see UseMAPR below) and wish to override the default maximum APR value of 36%, then specify the desired maximum as the value of this attribute.

🔹 Max

Data TypeValuesDefault
Decimal[-99.999...600]0

If the calling application wants the SCE to check the computed APR against a specified maximum APR, then specify the maximum APR using this attribute. If a maximum is specified, then this maximum will be included in the <RegZAPR> response element in the Max attribute, and a MaxExceeded attribute will also be returned to inform the calling application whether or not the specified maximum was exceeded.

🔹 SinglePayFraction

Data TypeValuesDefault
EnumInDays, InMonthsInDays

This attribute only applies to single advance, single payment transactions of term less than one year. For these loans, when the term of the loan is a number of months, Appendix J allows for the term of the loan to be expressed as either a number of months over twelve, or the number of actual 24-hour days in the loan over 365. For the former, use InMonths. For the latter, use InDays.

🔹 StrictTime

Data TypeValuesDefault
Booleantrue, false, 1, 0false

When monthly payments are intended for the 29th or 30th of the month, how should the number of unit periods and fraction be calculated in February, when the day of the payment cannot be the intended day? (e.g. A non-leap year February where payments are meant for the 29th, but end up on the 28th). StrictTime acknowledges and disambiguates the calculation. Regular payments generally hold the fraction of a unit period constant, based on the date of the first payment. The SCEX allows for a constant fraction of a unit period or a strict time accounting, acknowledging that in February, the fraction of a unit period changes.

When the value of this attribute is true, the SCEX will calculate the fraction of a unit period strictly according to the rules of Appendix J of Regulation Z. A value of false instructs the SCEX to keep the fraction of a unit period constant, equal to the fraction obtained by the time calculated from the date of the first payment to the transaction date.

🔹 UseMAPR

Data TypeValuesDefault
Booleantrue, false, 1, 0false

If this attribute is set to a value of true, then the SCEX will compute the Military APR in addition to the Regulation Z APR. The <MAPR> element will be included in the XML loan response.


🟦 <BalAdj>[]

Element TypeData Type
Empty-

The balance that evolves with the amortizing of a loan may be adjusted to either a specific amount called a Target, or by a specific an amount called an Adjust. This element helps support open ended lending products, such as HELOCs.

Attributes: 🔹Adjust, 🔸Date, 🔹NewPmt, 🔹Target

🔹 Adjust

Data TypeValuesDefault
Currencyany0

The value of the Adjust attribute instructs Loan Builder to adjust the balance by the amount defined, arriving at a Target equal to the sum of the current balance and the Adjust value. Either a Target or an Adjust must be defined, but not both.

🔸 Date

Data TypeValues
Datesee below

The Date attribute for the <BalAdj> element is used to define the date on which the adjustment to the loan balance is expected to occur. When the date occurs on the same day as a payment, the payment occurs before the balance adjusts.

Because one often frames the balance adjusting ”after the 12th payment”, for instance, a date masking is provided to accomplish this objective. So, rather than defining the date in the usual YYYY-MM-DD date format, the date can be defined in a nnnn-00-00 format, where ”nnnn” is the left zero-filled payment index after which the adjustment occurs.

So, if we know the 12th payment occurs on February 1st, 2025, the following balance adjustments are equivalent:

<BalAdj Date="2025-02-01" Target="5000" />
<BalAdj Date="0012-00-00" Target="5000" />

🔹 NewPmt

Data TypeValuesDefault
Booleantrue, false, 1, 0false

If the payment should change to reflect the balance adjustment, set this attribute to true; otherwise, the payment will not change after this event.

🔹 Target

Data TypeValuesDefault
Currency>= 00

The value of the Target attribute instructs the SCE to adjust the balance to the target amount, calculating the necessary Adjust amount to meet that objective. Either a Target or an Adjust must be defined, but not both.


🟦 <BusinessRules>

Element TypeData Type
Empty-

Certain loan calculation business rules may be configured using the attributes of this otherwise empty element.

Attributes: 🔹AmError, 🔹AmortizeOnly, 🔹CanSkipFirst, 🔹CanSkipLast, 🔹ClosedFormEqn, 🔹LeapYearRound, 🔹MinFinChg, 🔹MinIntChg, 🔹MYED, 🔹PmtAccrualCode, 🔹OddFirstPmt, 🔹ProtMandatory, 🔹UsRuleAprException, 🔹YieldPPY, 🔹ZeroInterestRule

🔹 AmError

Data TypeValuesDefault
EnumAllow, AdjPmt, AdjPrin, AdjIntAllow

When amortizing a loan, often times there is a non-zero ending balance due to rounding. This attribute determines what to do (if anything) with a non-zero ending balance. This non-zero balance is referred to as the amortization error.

  • Allow - Do not do anything with the non-zero ending balance.
  • AdjPmt - Adjust the final payment to achieve perfect amortization, which will then result in an ending balance of zero.
  • AdjPrin - Adjust the final principal reduction amount to achieve perfect amortization, which will then result in an ending balance of zero.
  • AdjInt - Adjust the final interest reduction amount to achieve perfect amortization, which will then result in an ending balance of zero.

Note that using AdjPrin or AdjInt will cause the final payment to not equal the sum of the principal reduction amount and amount to interest in the amortization schedule.

🔹 AmortizeOnly

Data TypeValuesDefault
Booleantrue, false, 1, 0false

If the calling application sets the value of this attribute to true, then instead of computing a loan with payments that best amortize the principal balance to zero, the Loan Builder module is instructed to simply amortize the specified loan (all advances and payments specified by the calling application) and return the ending balance.

To use this functionality, there are a few requirements that must be met:

  • All specified payment streams must have a PmtType of other than CalcPmt. In AmortizeOnly mode, the Loan Builder will not compute "regular" principal and interest payments.
  • No protection products may be requested.
  • All advances must be specified, and not computed.
  • AmError must be set to Allow.

Furthermore, the output for an AmortizeOnly="true" Loan Builder request will omit the <FedBox> and <Moneys> output elements.

🔹 CanSkipFirst

Data TypeValuesDefault
Booleantrue, false, 1, 0false

Set this attribute to true to allow the first payment of a loan to be skipped. The default value of false does not allow a skipped first payment.

🔹 CanSkipLast

Data TypeValuesDefault
Booleantrue, false, 1, 0false

Set this attribute to true to allow the last payment of a loan to be skipped. The default value of false does not allow a skipped final payment.

🔹 ClosedFormEqn

Data TypeValuesDefault
Booleantrue, false, 1, 0false

When searching for the payment that best amortizes the loan to zero, this setting determines whether or not interest is rounded during the payment search algorithm. The default value of true indicates that the closed form equation should be matched, and interest will be left unrounded during the payment search algorithm. Setting this attribute value to false will cause interest to be rounded during the payment search algorithm.

🔹 LeapYearRound

Data TypeValuesDefault
Booleantrue, false, 1, 0false

If the value of this attribute is true and one of the actual/actual interest accrual calendars (including Midnight366) is used in the requested loan, then the interest accrued on a 365 days basis is rounded separately from the interest accrued on a 366 days basis. Note that this option is encountered very rarely in the marketplace.

If the value of this attribute is false, then interest computed on a 365 day basis will be added to the interest computed on a 366 day basis, and then rounded.

🔹 MinFinChg

Data TypeValuesDefault
Currency>= 00

This attribute allows the calling application to specify a minimum allowed finance charge for the loan. If a value greater than zero is specified, then the loan will be computed in the normal manner, along with the finance charge. If the computed finance charge falls below the specified minimum, then the final payment's interest charge will be adjusted to meet the specified minimum.

Note that the minimum interest charge is checked before the minimum finance charge. If the loan triggered a minimum finance charge adjustment, then the amount of this adjustment will be disclosed in the <MinFinChgAdj> child element of the <Moneys> response element.

Note that since the minimum finance charge check is done after the loan payment and protection calculations have been completed, certain protection products whose calculations may vary due to a modified final payment will not reflect any minimum finance charge adjustments made to the final payment.

🔹 MinIntChg

Data TypeValuesDefault
Currency>= 00

This attribute allows the calling application to specify a minimum allowed interest charge for the loan. If a value greater than zero is specified, then the loan will be computed in the normal manner, along with the interest charge. If the computed interest charge falls below the specified minimum, then the final payment's interest charge will be adjusted to meet the specified minimum.

Note that the minimum interest charge is checked before the minimum finance charge. If the loan triggered a minimum interest charge adjustment, then the amount of this adjustment will be disclosed in the <MinIntChgAdj> child element of the <Moneys> response element.

Note that since the minimum interest charge check is done after the loan payment and protection calculations have been completed, certain protection products whose calculations may vary due to a modified final payment will not reflect any minimum interest charge adjustments made to the final payment.

🔹 MYED

Data TypeValuesDefault
MM-DDsee belown/a

The MYED attribute represents the Mortgage Year End Date when computing an annual rest loan, a loan which is commonly encountered in the United Kingdom. If you do not need to compute an annual rest loan, then this attribute need not be included in the request XML.

If included in the XML, then the value of the attribute must be in the format of "MM-DD" where MM is a valid month number from 1 to 12, and DD is a valid day number in the month specified. The month and day specified is the annual date on which escrowed payments and interest are applied to the outstanding principal balance. When the MYED is specified, you must also specify a <PmtStream> element with a PmtType attribute value of PmtEsc, which indicates an escrowed payment.

🔹 OddFirstPmt

Data TypeValuesDefault
Enumtrue, false, OnlyPositivefalse

If the first payment should be adjusted (up or down) due to odd days interest in the same manner that interest is accruing in the loan, then set the value of this attribute to true. A value of OnlyPositive instructs the SCE to only adjust the first payment due to odd days if there are positive odd days. Finally, a value of false instructs the SCE to not adjust the first payment using this method.

Note that you cannot specify an odd first payment using this attribute and include <OddDaysPrepaid> in the same request.

🔹 PmtAccrualCode

Data TypeValuesDefault
Enumsee accrual code tabledefault

In rare instances, the calculated payment for a given loan is based upon a different accrual calendar than the one used to amortize interest in the amortization schedule. This is most commonly encountered when a system is not able to compute the ‘best’ payment, and instead uses a simpler accrual calendar with a closed form equation (such as unit period simple). An estimated payment is computed, then used in the amortization schedule where interest is accrued on a different calendar. Note that this will almost always generate an ending balance of greater magnitude that the ‘correct’ payment, unless the AmError attribute is used to adjust the final payment.

A value of default means that the payment will be computed using the same accrual calendar as interest. Any other value will cause the computed payment to be calculated using the accrual code specified.

🔹 ProtMandatory

Data TypeValuesDefault
Booleantrue, false, 1, 0false

If the value of this attribute is set to true, then protection premiums/fees will be considered to be a part of the Finance Charge, and thus affect the Regulation Z APR.

🔹 UsRuleAprException

Data TypeValuesDefault
Booleantrue, false, 1, 0false

The US Rule APR Exception is an option used by some financial institutions that accrue interest in a US Rule manner, and also disclose the US Rule APR. If this attribute is omitted or set to false, the US Rule APR will always be computed.

If the value of this attribute is set to true and the following conditions are met: (i) interest is accrued via a US Rule method, (ii) A US Rule APR method matching the accrual method has been specified, (iii) the Regulation Z Finance Charge is equal to the interest charge, and (iv) there is only a single <EditInterest> event, then the US Rule APR will be disclosed as the interest rate.

🔹 YieldPPY

Data TypeValuesDefault
Enum[0, 2, 4, 6, 12]0

Canadian mortgages may compute periodic interest using a fractional power of a periodic yield. If set to a value other than 0, this value determines the period. Please contact us for further information if you support mortgage calculations in Canada. Note that when using this attribute with a value other than zero, the calling application must include an odd days prepaid fee in the request.

🔹 ZeroInterestRule

Data TypeValuesDefault
Booleantrue, false, 1, 0false

If the value of this attribute is true and (i) the interest rate for the entire term of the loan is 0%, or (ii) the computed interest charge for the loan is less than zero, then the interest charge will be set to a value of zero, and the Regulation Z Finance Charge will be adjusted in an identical manner.

Note that setting the value of this attribute to true will likely cause the sum of the principal and interest to no longer equal the total of payments (similarly for the Amount Financed and Finance Charge). Sherman and Associates do not recommend that you set the value of this attribute to true before consulting with your legal counsel in regards to these and other unforseen consequences.

Lastly, all payment rounding is forced to be rounded down to the nearest penny. This adjustment ensures that the sum of payments never exceeds the Principal Balance of the loan.


🟦 <Capitalize>[]

Element TypeData Type
Empty-

Some loans require interest to be capitalized on specific dates, irrespective of any other considerations. For these events, use the <Capitalize> element.

Attributes: 🔹AllowFeb29, 🔸Date, 🔹Holidays, 🔹PPY, 🔹SemimonthlyDay, 🔹Term, 🔹Weekends

🔹 AllowFeb29

Data TypeValuesDefault
Booleantrue, false, 1, 0true

This attribute is used when generating event dates in a capitalization stream (if any) beyond the specified Date date of the <Capitalize> element. If the value of this attribute is true, then February 29th is an allowed date.

On the other hand, if the value of this attribute is set to false and a computed date in the given capitalization stream is scheduled to fall on February 29th, then the scheduled date will be altered in one of the following manners:

If the number of payments per year is 1, 2, 4, 6, 12, or 24 then the scheduled date of February 29 will be moved back one day to February 28. This is the only date that will be adjusted.

If the number of payments per year is 26 or 52 then the scheduled date of February 29 will be moved forward one day to March 1, and all subsequent dates will be a multiple of 7 or 14 days from this date (depending upon the specified payment frequency).

🔸 Date

Data TypeValues
Date>= 1900-01-01

The Date attribute for the <Capitalize> element is used to specify the date on which to capitalize interest. (For a stream of Capitalize events, see the Term attribute.) As an example, if interest is to be capitalized on Feb. 1, 2008, the attribute should be specified as Date="2008-02-01".

🔹 Holidays

Data TypeValuesDefault
EnumIgnore, Prev, NextIgnore

If capitalization dates (including the specified start date) are not allowed to fall on specified holidays (see the <Holiday> element for more information on how to specify holidays), then set the value of this field to something other than Ignore. The meaning of the other two values are defined below:

  • Ignore - No holidays will be considered.
  • Prev - The date will be moved to the day before the holiday.
  • Next - The date will be moved to the Monday after the holiday.

Note that two other <Capitalize> element attributes can cause the computed dates to be adjusted - AllowFeb29 and Weekends. The rules for how these three fields interact are described below in detail.

For every date required in our payment stream, the SCEX goes through the following steps:

  1. Generate the next date in our date stream, called the target date.
  2. If February 29th is not allowed and if the target date is 2/29, then adjust the target date forward or backward one day based upon the date generation frequency. If the frequency is a monthly multiple, then the target date is moved backward one day to 2/28. Weekly and biweekly frequencies move the target date forward one day to 3/1.
  3. If weekend dates are not allowed (e.g. the Weekends attribute holds a value other than Ignore) and the target date falls on a Saturday or Sunday:
    • (a) then adjust the target date according to the attribute value.
    • (b) if February 29th is not allowed and if the target date is 2/29, then adjust the target date in the same direction as in 3(a) above.
  4. If holidays are not allowed (e.g. the Holidays attribute holds a value other than Ignore) and the target date falls on a specified holiday:
    • (a) then adjust the target date according to the Holidays attribute value.
    • (b) If weekend dates are not allowed (e.g. the Weekends attribute holds a value other than Ignore) and the target date falls on a Saturday or Sunday, then adjust the target date in the same direction as in 4(a) above.
    • (c) if February 29th is not allowed and if the target date is 2/29, then adjust the target date in the same direction as in 4(a) above.
    • (d) Step 4 is repeated until the target date is not adjusted.

🔹 PPY

Data TypeValuesDefault
Enum1, 2, 4, 6, 12, 24, 26, 5212

PPY is an abbreviation for payments per year, and as one might surmise, determines the capitalization frequency for the loan. If only one capitalization event occurs or the stream of capitilization events are monthly, this attribute may be ignored.

🔹 SemimonthlyDay

Data TypeValuesDefault
Integer[0...31]0

When specifying a semimonthly stream, the day number on which the first capitalization event occurs determines the day number for all of the following odd numbered events. If you omit this attribute or specify a value of 0, then the even numbered events will be generated using the default method within the SCEX.

If you wish to specify the day number on which even numbered events fall (overriding the default method used in the SCEX), then set the value of this attribute to the desired day number. Setting the value of this attribute to 31 will cause all even events to fall on the last day of the month.

As an example, if you want to specify a semi-monthly capitalization stream beginning on January 1, 2014 with events that fall on the 1st and 15th of each month for 24 events, the element should look something like this:

<Capitalize Date="2014-01-01" Term="24" PPY="24" SemimonthlyDay="15" />

🔹 Term

Data TypeValuesDefault
Integer>= 11

The Term attribute indicates the the number of capitalization events to be made at the specified frequency (see PPY above). The default value is 1. If only one capitalization event is to be used, ignore this attribute.

🔹 Weekends

Data TypeValuesDefault
EnumIgnore, Prev, Near, NextIgnore

If capitalization stream dates (including the specified start date) are not allowed to fall on a Saturday or Sunday, then set the value of this field to something other than Ignore. The meaning of the other three values are defined below:

  • Prev - The date will be moved to the Friday before the computed weekend date.
  • Near - The date will be moved to the Friday before the computed weekend date if the computed weekend date falls on a Saturday, otherwise it will be moved to the Monday after.
  • Next - The date will be moved to the Monday after the computed weekend date.

Note that two other attributes can cause the computed dates to be adjusted - AllowFeb29 and Holidays. For a complete description of how these three fields work together, please see the documentation for the Holidays attribute.


🟦 <Construction>

Element TypeData Type
Empty-

This element is used when a loan features a construction period, during which time interest only payments are made by the borrower. Construction periods always begin on the date of the first advance.

Generally speaking, there are two methods used to disclose construction loans. The first method computes the total estimated interest due during the construction period, and treats it as an unfinanced prepaid fee. The second method discloses discrete interest only payments in the amortization schedule during the construction period.

To emulate the first method, simply include the <Construction> element and ensure that no payment events are set up to occur during the construction period. The construction interest will be computed and returned in the <ConInterest> response element with the IsPrepaid field set to true.

To emulate the second method, set up an interest only payment stream which begins during the construction period, with the final interest only payment occurring on the construction period's ending date. The interest only payments will then appear in the resulting amortization schedule, and the total construction interest will be returned in the <ConInterest> response element with the IsPrepaid field set to false.

Attributes: 🔸EndDate, 🔹HalfCommitment

🔸 EndDate

Data TypeValues
Datesee below

The date on which the construction period terminates.

All dates must be in the form of YYYY-MM-DD, and be 10 characters long. Hence, to end the construction period on July 4, 2011, the attribute would be specified as EndDate="2011-07-04". If the calling application sets up discrete interest only payments during the construction period, then the EndDate may also be specified as occurring on a given payment number nnnn as EndDate="nnnn-00-00".

🔹 HalfCommitment

Data TypeValuesDefault
Booleantrue, false, 1, 0false

During the term of the construction loan, the estimated interest for disclosure purposes may be either computed on the full or half commitment amounts. By setting this attribute to true, interest will be estimated using half of the initial commitment amount (i.e. the principal balance). The default value of false will cause interest to be estimated using the entire initial commitment amount.


🟦 <EditInterest>[]

Element TypeData Type
Empty-

This element is used to specify how interest is calculated. The element itself is empty, with all data for interest accrual specified in the following attributes.

Attributes: 🔹AccrualCode, 🔹Capitalize, 🔹Date, 🔹ExtraDays, 🔹IntRate, 🔹IntRound, 🔹NewPmt, 🔹PmtRound

🔹 AccrualCode

Data TypeValuesDefault
Enumsee accrual codes tabledefault

The method of interest accrual is defined by this attribute. default means one of two things: (i) if no accrual method has beend defined at all, then use the system default of 201, or (ii) if an accrual code has been previously defined, then continue to use that method. Please see the Loan Builder Accrual Codes and Descriptions table for the meanings of each code.

Add-on interest methods 401..406 have restrictions that apply. Only equal payment loans with one <EditInterest> element may use add-on interest. In addition, construction loans may not be used with add-on interest. Protection products (if any) must be single premium.

🔹 Capitalize

Data TypeValuesDefault
Booleantrue, false, 1, 0false

If interest due is to be added to principal (capitalized) on the specified Date, set this attribute’s value to true.

🔹 Date

Data TypeValuesDefault
Datesee belowsee below

Set the date of this event. If the date is omitted, the system will use the date of the earliest advance. If an advance has not yet been specified, the system will return an error message.

All dates must be in the form of YYYY-MM-DD, and be 10 characters long. Hence, to change the interest rate on January 2, 2008, the attribute would be specified as Date="2008-01-02".

However, to provide power and flexibility to the calling application, the SCEX will also understand Date values in the following formats:

  • nnnn-00-00 - If you wish to change an interest accrual parameter on the date of a specific payment number (n), use a value of nnnn-00-00. Thus, an attribute value of 0012-00-00 instructs the engine to set the date of this event equal to that of the 12’th payment. A value of 0000-00-00 will set the date of the event equal to the date of the first advance.

🔹 ExtraDays (integer, 0)

Data TypeValuesDefault
Integerany0

Increase or decrease the number of days between this event and the next event by the value of this attribute. e.g. 1 will be considered one more day of interest.

🔹 IntRate

Data TypeValuesDefault
Decimal[-99.999...600]see below

Defines the interest rate that applies at and beyond this event. If no IntRate is specified, the previously defined interest rate is used. A value of zero will be used if no previous IntRate has been defined.

🔹 IntRound

Data TypeValuesDefault
Enumnearest, up, downnearest

Defines how the computed interest amount is to be rounded.

🔹 NewPmt

Data TypeValuesDefault
Booleantrue, false, 1, 0false

If the payment should change to reflect a new interest rate, set this attribute to true; otherwise, the payment will not change after this event. If only one <EditInterest> element is being used, then this attribute should be omitted altogether.

🔹 PmtRound

Data TypeValuesDefault
Enumdefault, nearest, up, down, bestdefault

This attribute allows the calling application to specify a payment rounding option which will override the value found in the setup file. If not specified, then the value of default will be used. The linked table lists all valid payment rounding codes available.

  • default - Use method specified in setup file
  • nearest - Round computed payment to the nearest penny, using 5/4 rounding. e.g. 300.242 = 300.24, 300.245 = 300.25.
  • up - Round computed payment up to the next penny. e.g. 300.241 = 300.25.
  • down - Round computed payment down to the previous penny. e.g. 300.249 = 300.24.
  • best - Once the unrounded payment has been computed, amortize the loan using the rounded down and rounded up payment, and then return the payment which amortizes the loan’s ending balance closest to zero.

Note: If the ZeroInterestRule attribute of the <BusinessRules> element is set to true and all interest rates are zero, payments are forced to be rounded down. This rule ensures the total of payments never exceeds the amounts of the loan to pay off (the principal balance).


🟦 <EditInterest>[]<Tier>[]

Element TypeData Type
Empty-

To compute interest using a split rate method, where different rates are applied to different parts of the balance, the calling application will need to specify a <Tier> element with its associated Rate and Ceiling attributes. Note that the IntRate which is used above the final Ceiling is the one specified in the <EditInterest> element. Furthermore, the <Tier> elements must be ordered in ascending order based upon the Ceiling amount.

As an example, assume that the calling application needs to charge 20% on the first $100, 15% up to $250, and 10% for the remaining balance. The XML needed to implement this split rate structure is:

<EditInterest Date="2020-04-01" IntRate="10.000" AccrualCode="201">
  <Tier Rate="20.000" Ceiling="100" />
  <Tier Rate="15.000" Ceiling="250" />
</EditInterest>

Attributes: 🔸Ceiling, 🔸Rate

🔸 Ceiling

Data TypeValues
Currency>= 0

Defines the upper bound of the principal to which the specified split rate tier will apply.

🔸 Rate

Data TypeValues
Decimal[-99.999...600]

Defines the interest rate that applies to this split rate tier.


🟦 <EditOutput>

Element TypeData Type
Empty-

Changes to the presentation of the output data are contained in the attributes of this otherwise empty element.

Attributes: 🔹EarlyPayoffDate, 🔹KeepSlush, 🔹Merge, 🔹PmtDollarRound, 🔹ShowAmTable, 🔹ShowFees, 🔹ShowGrandTot, 🔹ShowSubTot, 🔹ShowTap, 🔹ShowType, 🔹TagPmts

🔹 EarlyPayoffDate

Data TypeValuesDefault
Datesee belowno early payoff

Specifying an EarlyPayoffDate results in a two-step computation: compute the loan completely ignoring the EarlyPayoffDate, then eliminate all events subsequent to the early payoff date and payoff the loan on that early payoff date. One common use of this attribute is to generate computed regular payments based upon a longer amortization term, with a final balloon payment made on the early payoff date (much like the <inBALLOON_SPECIFY_AMORT> query).

  • omitted - If EarlyPayoffDate is omitted, no early payoff will be computed.
  • YYYY-MM-DD - If an early payoff date is in the format of a valid XML date (i.e. YYYY-MM-DD), the loan will be paid off on the specified date.
  • nnnn-00-00 - If the early payoff date is in the format of nnnn-00-00, then the loan will be paid off by the n'th payment.

🔹 KeepSlush

Data TypeValuesDefault
Booleantrue, false, 1, 0false

Rounding interest each period numerically eliminates values beyond two decimal places. This amount is referred to as slush. To keep this amount and add it to next period’s unrounded interest, set KeepSlush to true.

🔹 Merge

Data TypeValuesDefault
Booleantrue, false, 1, 0false

If the value of this attribute is set to true, then payment elements will be merged together whenever possible. For example, if one event is of type CalcPmt, and another on the same day is PayPrin, then this attribute determines whether or not these two events will be combined into a single payment event or left as separate and distinct events.

🔹 PmtDollarRound

Data TypeValuesDefault
Booleantrue, false, 1, 0false

Payments are normally rounded to the penny, according to the method specified by the PmtRound attribute of the <EditInterest> element. If the payment should be rounded to the dollar instead of the penny, then set the value of this attribute to true. Note that for some loans (such as those with longer terms or relatively small proceeds), rounding the payment up or to the nearest dollar may require a shortened loan term to prevent one or more negative payments at the end of the loan.

🔹 ShowAmTable

Data TypeValuesDefault
Booleantrue, false, 1, 0true

To suppress the entire amortization schedule from the response, set this attribute value to false; otherwise, the amortization schedule will be returned.

🔹 ShowFees

Data TypeValuesDefault
Booleantrue, false, 1, 0false

If this attribute is set to false, then fees will not explicitly appear in the amortization schedule, unless they do not occur on the date of an advance or the date of a payment. They will also not be individually listed under the <Moneys> element of the outputs.

A value of true means that all fees will be explicitly accounted for, both in the <Moneys> element as child elements and in the amortization table. The Type attribute will have the name of the fee as its value.

🔹 ShowGrandTot

Data TypeValuesDefault
Booleantrue, false, 1, 0false

To show the amortization schedule grand totals in the response, set this attribute value to true; otherwise, the grand totals will not be returned.

🔹 ShowSubTot

Data TypeValuesDefault
Booleantrue, false, 1, 0false

To show the amortization schedule annual subtotals in the response, set this attribute to true; otherwise, annual subtotals will not be returned.

🔹 ShowTap

Data TypeValuesDefault
Booleantrue, false, 1, 0see below

If not specified, the default value of this attribute is determined by the Country specified. If the Country is GB (United Kingdom), then the default value is true. All other country values will default this attribute to false.

The value of this attribute determines if the total amount payable output element (i.e. <TAP>) will be computed and disclosed in the response. This quantity is broadly defined as the total of payments plus fees that do not enter into the amortization table in any way.

🔹 ShowType

Data TypeValuesDefault
Booleantrue, false, 1, 0false

Each line of the amortization schedule is characterized by a type, which describes the particular amortization event. An EditInterest event is different from a FixedPmt event, for example. Set this attribute to true to report the Type of each amortization event. A value of false will suppress output of the Type attribute in the amortization schedule.

🔹 TagPmts

Data TypeValuesDefault
Booleantrue, false, 1, 0false

If the value of this attribute is set to true, then each <PmtStream> result element will include an Idx attribute which identifies the input payment element which gave rise to it. If this attribute is set to true, then the Merge attribute must be set to false. If both are set to true, then an error will be returned.


🟦 <EndBal>

Element TypeData TypeValuesDefault
CurrencyInteger>= 00

When computing a loan, the usual intention is to compute a payment which produces an ending balance of zero at the end of the repayment schedule. However, in some international markets (such as Australia / New Zealand), some loans are computed with a specified ending balance greater than zero. To support these types of loans, the <EndBal> element is provided.

If omitted, the desired ending balance at the end of the repayment schedule is defaulted to 0. To specify a desired ending balance greater than zero, simply specify the desired ending balance as an appropriately formatted currency value as the element’s value.

For example, if the desired ending balance is $50,000.00, then you would include <EndBal>50000.00</EndBal> in your request.

Note that if an ending balance greater than zero has been specified, then no protection products are allowed to be written with the loan, and the APR (and MAPR if requested) are not computed.

Attributes: None


🟦 <Fee>[]

Element TypeData Type
Empty-

Single occurrence and recurring fees are passed to the engine using the attributes of this empty element.

Attributes: 🔹AddToFinChg, 🔹AddToPrin, 🔹Adjust, 🔹AllowFeb29, 🔸Amount, 🔹Blended, 🔹CalcType, 🔹Date, 🔹EqualServChg, 🔹Holidays, 🔹LastDay, 🔹MAPR, 🔹Max, 🔹Min, 🔹Name, 🔹Position, 🔹PPY, 🔹Round, 🔹RoundBasis, 🔹SemimonthlyDay, 🔹ServChgType, 🔹Term, 🔹Weekends

🔹 AddToFinChg

Data TypeValuesDefault
Booleantrue, false, 1, 0false

If this fee should be included in the Reg. Z Finance Charge (and hence, affect the APR), then set this attribute to true. The default value of false indicates that the fee does not affect the Finance Charge nor APR.

🔹 AddToPrin

Data TypeValuesDefault
Booleantrue, false, 1, 0false

If this fee should be added to the principal balance (e.g. the fee is financed along with the advance(s)), then set this attribute to true. If set to false, then the fee is paid up front out of the borrower’s pocket.

🔹 Adjust

Data TypeValuesDefault
Currencyany0

The optional Adjust attribute allows the calling application to increase or decrease the base amount on which a fee is calculated. If a negative value is specified and this adjustment would produce a negative base amount, then a value of zero is returned for the given fee. This attribute has no effect on fees with a CalcType of Dollar.

As an example, in Tennessee you may need to define a financed, non-APR affecting fee to be computed by decreasing the amount financed by $2,000, and then multiplying this reduced amount by 0.115. The way to accomplish this in the SCEX is as follows:

<Fee Name="TN_Fee" CalcType="OnAmtFin" Adjust="-2000" Amount="0.115"
  AddToPrin="true" AddToFinChg="false" />

🔹 AllowFeb29

Data TypeValuesDefault
Booleantrue, false, 1, 0true

This attribute is used when generating fee dates in a fee stream (if any) beyond the specified Date date of the <Fee> element. If the value of this attribute is true, then February 29th is an allowed fee date.

On the other hand, if the value of this attribute is set to false and a computed date in the given fee stream is scheduled to fall on February 29th, then the scheduled fee date will be altered in one of the following manners:

  • If the number of payments per year is 1, 2, 4, 6, 12, or 24 then the scheduled fee date of February 29 will be moved back one day to February 28. This is the only date that will be adjusted.
  • If the number of payments per year is 26 or 52 then the scheduled fee date of February 29 will be moved forward one day to March 1, and all subsequent fee dates will be a multiple of 7 or 14 days from this date (depending upon the specified payment frequency).

🔸 Amount

Data TypeValuesDefault
see below>= 00

How this attribute is interpreted depends upon the CalcType attribute.

🔹 Blended

Data TypeValuesDefault
Booleantrue, false, 1, 0false

The Blended attribute determines how the SCEX will include the fee with a payment or advance.

  • true in an advance tells the SCEX that the amount of the advance already includes the fee. false means to add the fee on top of the existing advance.
  • true in a payment means that the payment has the fee already included in it. false means the fee is added on top of the payment.

🔹 CalcType

Data TypeValuesDefault
EnumDollar, OnProceeds, OnPrincipal, OnAmtFin, OnBalance, OnBalanceFlatDollar

This attribute specifies how the fee is to be computed, as described in the table below:

  • Dollar - The Amount attribute is understood as a flat currency amount.
  • OnProceeds - The Amount attribute is understood as a percentage value, to be applied to the loan’s proceeds, defined as the sum of advances. An Amount of 0.25 would represent a fee of 0.25% of the total proceeds.
  • OnPrincipal - The Amount attribute is understood as a percentage value, to be applied to the loan’s principal balance. An Amount of 0.125 would represent a fee of 0.125% of the principal balance.
  • OnAmtFin - The Amount attribute is understood as a percentage value, to be applied to the loan’s Regulation Z Amount Financed. An Amount of 0.33 would represent a fee of 0.33% of the amount financed.
  • OnBalance - The Amount attribute is understood as an annual percentage value, to be applied to the current balance of the loan when the fee is assessed, and accrued using the interest accrual calendar in effect. An Amount of 12.0 would represent a fee accrued at an annual rate of 12.0% of the current balance.
  • OnBalanceFlat - The Amount attribute is understood as a flat percentage value, to be applied to the current balance of the loan when the fee is assessed. An Amount of 1.0 would represent a fee of 1.0% of the current balance.

🔹 Date

Data TypeValuesDefault
Datesee belowsee below

The date on which a fee occurs. If this element defines a stream of more than one fee, then this attribute defines the date on which the first fee occurs. If the date is the same as an advance or payment, the fee is loaded into the advance or payment event; otherwise, the fee is a stand-alone event. All dates must be in the form of YYYY-MM-DD, and be 10 characters long. Hence, a fee date of January 2, 2008 would be specified as Date="2008-01-02".

A special format is accepted for annual fees (PPY value of 1) paid on a specific calendar month of the year. Using 0000-MM-00 as a value for Date instructs the SCE to pay the fee on the MM payment of the payment stream. For example, 0000-06-00 instructs the system to pay this fee on June Payments.

If the Date attribute is not specified, then it will default to the earliest specified Advance Date.

🔹 EqualServChg

Data TypeValuesDefault
Booleantrue, false, 1, 0false

When a fee is set up as a service charge of type ByTerm (see ServChgType), this attribute determines if all the service charge fee payments should be forced to be equal (a value of true), or if the final service charge fee payment can be different from the others due to rounding (a value of false).

🔹 Holidays

Data TypeValuesDefault
EnumIgnore, Prev, NextIgnore

If capitalization dates (including the specified start date) are not allowed to fall on specified holidays (see the <Holiday> element for more information on how to specify holidays), then set the value of this field to something other than Ignore. The meaning of the other two values are defined below:

  • Ignore - No holidays will be considered.
  • Prev - The date will be moved to the day before the holiday.
  • Next - The date will be moved to the Monday after the holiday.

Note that two other element attributes can cause the computed dates to be adjusted - AllowFeb29 and Weekends. The rules for how these three fields interact are described below in detail.

For every date required in our payment stream, the SCE goes through the following steps:

  1. Generate the next date in our date stream, called the target date.
  2. If February 29th is not allowed and if the target date is 2/29, then adjust the target date forward or backward one day based upon the date generation frequency. If the frequency is a monthly multiple, then the target date is moved backward one day to 2/28. Weekly and biweekly frequencies move the target date forward one day to 3/1.
  3. If weekend dates are not allowed (e.g. the Weekends attribute holds a value other than Ignore) and the target date falls on a Saturday or Sunday:
  • (a) then adjust the target date according to the attribute value.
  • (b) if February 29th is not allowed and if the target date is 2/29, then adjust the target date in the same direction as in 3(a) above.
  1. If holidays are not allowed (e.g. the Holidays attribute holds a value other than Ignore) and the target date falls on a specified holiday:
  • (a) then adjust the target date according to the Holidays attribute value.
  • (b) If weekend dates are not allowed (e.g. the Weekends attribute holds a value other than Ignore) and the target date falls on a Saturday or Sunday, then adjust the target date in the same direction as in 4(a) above.
  • (c) if February 29th is not allowed and if the target date is 2/29, then adjust the target date in the same direction as in 4(a) above.
  • (d) Step 4 is repeated until the target date is not adjusted.

🔹 IsLoanCost

Data TypeValuesDefault
Booleantrue, false, 1, 0false

When requesting the new TILA RESPA outputs (via the <TILARESPA2015> element), the SCEX needs to know which fees need to be considered "borrower paid loan costs", as defined in the rule. Please note that if the fee is paid by a lender or other third party, then the fee does not affect the loan calculation and should not be sent to the SCEX. If it is sent, then the value of this attribute should be set to false.

🔹 LastDay

Data TypeValuesDefault
Booleantrue, false, 1, 0false

This attribute is used to resolve ambiguities in subsequent fee dates when the Date falls on the last day of a month with fewer than 31 days. If the value of the Date attribute is not a valid date, then the value of this attribute is ignored. If the value of the Term attribute is 1, then the value of this attribute is ignored.

Set this attribute’s value to true if the intent was to make subsequent fees occur on the last day of the month. A value of false indicates that subsequent fee dates will fall on the day number specified by the Date date.

As an example, if the calling application specifies a Date of 2010-02-28, then subsequent fee dates for a monthly fee frequency will be:

  • on the 28th of each subsequent month if LastDay="false".
  • on the last day of each subsequent month if LastDay="true".

🔹 MAPR

Data TypeValuesDefault
Booleantrue, false, 1, 0false

If you wish to compute the Military APR, then certain fees may not be considered Regulation Z APR affecting fees, but are considered Military APR affecting fees. In this case, you will need to set the value of this attribute to true.

Fees which are added to the finance charge (see AddToFinChg) are always considered MAPR fees, regardless of the stated value of this attribute.

Note that debt protection products are automatically included in the calculation of the Military APR, no matter what method is used for payment (e.g. single premium vs. monthly outstanding balance).

🔹 Max

Data TypeValuesDefault
Currency>= 00

If a maximum value for the fee is specified and is greater than zero, then if the computed fee exceeds this maximum value, then the maximum value will be used instead. If no maximum value is specified or is set to a value of zero, then no maximum will be enforced. Please note that this attribute is applied to all fee types supported. Also, note that a specified maximum value is checked after enforcing a specified minimum value, and hence a specified maximum value trumps a specified minimum.

🔹 Min

Data TypeValuesDefault
Currency>= 00

If a minimum value for the fee is specified and is greater than zero, then if the computed fee is less than this minimum value, then the minimum value will be used instead. If no minimum value is specified or is set to a value of zero, then no minimum will be enforced. Please note that this attribute is applied to all fee types supported. Also, note that a specified minimum value is checked before enforcing a specified maximum value, and hence a specified maximum value trumps a specified minimum.

🔹 Name

Data TypeValuesDefault
Textanyn/a

This attribute is for convenience purposes only, and does not affect the calculation of the fee in any manner. However, the value of this attribute will be used to identify the fee in the returned response, and hence it is highly recommended that you name your fees accordingly.

🔹 Position

Data TypeValuesDefault
EnumDefault, OnAdvance, BeforePmt, InPmt, AfterPmt, NotInPmtDefault

Fees influence a loan depending on when they are applied.

  • OnAdvance - The fee is included in the application of an advance.
  • BeforePmt - When the fee occurs on the same date as a payment, the fee is calculated before the payment amortizes the loan.
  • InPmt - The fee is included as part of the payment.
  • AfterPmt - When the fee occurs on the same date as a payment, the payment first amortizes the loan, then the fee is calculated and applied.
  • NotInPmt - The fee is paid on the same date as a payment but is not reflected in that payment. If the fee has AddToFinChg="true", it is called a “Pocket APR” fee; otherwise it is a straight “Pocket Fee”.
  • Default - means different things, depending on when the fee occurs. A fee on an advance is treated as if OnAdvance were selected. A fee on a payment is treated as if InPmt were selected.

🔹 PPY

Data TypeValuesDefault
Enum1, 2, 4, 6, 12, 24, 26, 5212

PPY is an abbreviation for payments per year, and in the case of the <Fee> element, determines the frequency for the fee stream. If the value of the Term field is 1, then the value of this field is ignored.

🔹 Round

Data TypeValuesDefault
Enumnearest, up, downnearest

The value of this attribute, along with the with the RoundBasis attribute described below, determine how the amount on which the fee is based is to be rounded.

For fee calculation types of OnPrincipal, OnProceeds, OnAmtFin, OnBalance, and OnBalanceFlat, the amount on which the fee is based is fairly self evident: the starting principal balance, proceeds, amount financed, or the outstanding balance at the time that the fee is assessed. Thus, if the calling application requires a fee to be computed based upon 0.35% of the principal balance rounded to the nearest $100, then the fee element would look something like this:

<Fee Name="DocStamp" CalcType="OnPrincipal" Amount="0.35" RoundBasis="100.00"
   Round="nearest" AddToPrin="true" AddToFinChg="false" />

For the Dollar fee calculation type, the amount on which the fee is based is defined as the fee amount passed into the engine. This allows the calling application to pass in a precomputed fee amount and have the SCEX round it as directed. As an example, here is the definition of a dollar fee which is rounded up to the next dollar (the value of the fee below would then be $25 after rounding):

<Fee Name="DocStamp" CalcType="Dollar" Amount="24.25" RoundBasis="1.00"
   Round="up" AddToPrin="true" AddToFinChg="false" />

For the ServChg fee calculation type, the amount on which the fee is based is defined as the computed service charge amount, as defined by the Amount and ServChgType attributes.

🔹 RoundBasis

Data TypeValuesDefault
Currency> 00.01

When rounding the amount on which the fee is based, the value of this attribute determines the precision to which rounding is performed. The default value of 0.01 indicates that the rounding should be done to the penny, whereas a value of 100.0 indicates that rounding should take place to the nearest hundred dollars.

🔹 SemimonthlyDay

Data TypeValuesDefault
Integer[0...31]0

When specifying a semimonthly fee stream, the day number on which the first fee is added determines the day number for all of the following odd numbered events. If you omit this attribute or specify a value of 0, then the even numbered events will be generated using the default method within the SCE.

If you wish to specify the day number on which even numbered events fall (overriding the default method used in the SCE), then set the value of this attribute to the desired day number. Setting the value of this attribute to 31 will cause all even events to fall on the last day of the month.

As an example, if you want to specify a semi-monthly $10 fee stream beginning on January 1, 2015 with fees that fall on the 1st and 15th of each month for 48 fees, the element should look something like this:

<Fee Name="Test Fee" Date="2015-01-01" Amount="10" Term="48" PPY="24"
   SemimonthlyDay="15" />

🔹 ServChgType

Data TypeValuesDefault
EnumNone, ByTerm, ByDaysNone

This attribute dictates whether or not a fee is treated as a service charge, and if so, determines how the service charge dollar amount is paid off over the term of the loan. If a fee should not be treated as a service charge, then the default value of None should be specified.

  • ByTerm - means that the service charge is paid off by dividing the amount by the Term attribute of the same <Fee> element.
  • ByDays - means that the service charge is paid off on payment dates. The amount of the fee is calculated as the number of days from the previous payment (or advance) divided by the total number of days in the term of the fee.

🔹 Term

Data TypeValuesDefault
Integer>= 11

The term attribute determines the the number of fees to be included at the specified frequency (see PPY below), after which the fee stream is completed. The default value is 1. If the value of the Date attribute is not a valid date, then the value of this attribute is ignored.

🔹 Weekends

Data TypeValuesDefault
EnumIgnore, Prev, Near, NextIgnore

If fee dates (including the specified start date) are not allowed to fall on a Saturday or Sunday, then set the value of this field to something other than Ignore. The meaning of the other three values are defined below:

  • Prev - The date will be moved to the Friday before the computed weekend date.
  • Near - The date will be moved to the Friday before the computed weekend date if the computed weekend date falls on a Saturday, otherwise it will be moved to the Monday after.
  • Next - The date will be moved to the Monday after the computed weekend date.

Note that two other attributes can cause the computed dates to be adjusted - AllowFeb29 and Weekends. For a complete description of how these three ideas work together, please see the documentation for the Holidays attribute.


🟦 <Format>

Element TypeData TypeValuesDefault
Empty--See attributes

The <Format> element is one of the first elements parsed from a request, as the attributes of this empty element affect how date and numeric values are parsed and validated.

Attributes: 🔹CurrencyDecimals, 🔹DateFormat, 🔹DateSeparator, 🔹DecimalSeparator, 🔹StrictDP, 🔹ThousandSeparator

🔹 CurrencyDecimals

Data TypeValuesDefault
Enum0, 22

When displaying and parsing Currency values, the value of this attribute determines the maximum number of decimal places allowed after the DecimalSeparator.

🔹 DateFormat

Data TypeValuesDefault
EnumYMD, MDY, DMYYMD

When displaying and parsing Date values, this field determines the expected format for all Date fields. The following DateFormat options are allowed:

  • YMD - All dates should be formatted as YYYY-MM-DD.
  • MDY - All dates should be formatted as MM-DD-YYYY.
  • DMY - All dates should be formatted as DD-MM-YYYY.

Note that the character which separates the individual month, day, and year portions of the date is configurable via the DateSeparator attribute.

🔹 DateSeparator

Data TypeValuesDefault
CharOne character-

When displaying and parsing Date values, this attribute determines the character used to separate the individual month, day, and year portions of a date.

🔹 DecimalSeparator

Data TypeValuesDefault
CharOne character.

When displaying and parsing Currency or Decimal numeric values, this attribute determines the character used to separate the fractional part from the whole.

🔹 StrictDP

Data TypeValuesDefault
Booleantrue, false, 1, 0,false

If the value of this attribute is true, then the SCE will strictly verify the number of decimal places allowed for currency input values. Thus, if the calling application sends in a request with a currency amount of 1000.005, the SCE will return an error code.

If the value of this attribute is false, then currency values sent in with an invalid number of decimal places will be rounded to the correct number of decimal places by the SCE (using five/four rounding), and a warning message with this information will be returned with the response.

🔹 ThousandSeparator

Data TypeValuesDefault
CharOne character,

When displaying numeric values, this attribute determines the character used to separate the thousands places from the hundreds. Note that when parsing numeric values, the value of this attribute is ignored.


🟦 <Holiday>[]

Element TypeData Type
Empty-

If dates for <PmtStream> and <Fee> elements have requested that holidays be skipped (e.g., the Holidays attribute for the element in question is set to a value other than Ignore), then the request must specify each holiday to be considered, with each holiday requiring at least one <Holiday> element.

The <Holiday> element itself is empty, as all required information for each holiday is specified as an attribute of this element.

Attributes: 🔸Date

🔸 Date

Data TypeValues
Datesee below

The Date attribute lets the calling application specify a holiday using one of the following formats:

  • YYYY-MM-DD - A holiday can be defined by sending in a valid date, where YYYY is greater than or equal to 1900, MM is a valid month, and DD is a valid day for the given year and month.
  • 0000-MM-DD - A holiday that occurs annually on the same month and day can be defined by sending in a valid month and day, with the year passed in as 0000. As an example, in the United States of America, Christmas is a Federal holiday celebrated on December 25th of each year. To pass this holiday into the SCEX, the <Holiday> element would look like <Holiday Date="0000-12-25" />.
  • 0001-MM-PD - A holiday that occurs annually in the same month on a given day of the week (D) in a given position in the month (P) can be defined by sending in a valid month, position, and day of the week, with the year passed in as 0001. The value of D can be from 0 to 6, where 0 = Sunday, 1 = Monday, ..., 6 = Saturday. The value of P can be from 1 to 6, where 1 = 1st, 2 = Second, ..., 5 = 5th, 6 = last. As an example, in the United States of America, Thanksgiving is a Federal holiday celebrated on the 4th (P=4) Thursday (D=4) of November (MM=11) every year. To pass this holiday into the SCEX, the <Holiday> element would look like <Holiday Date="0001-11-44" />.
  • 0002-NN-NN - A holiday that occurs annually but cannot be expressed using any of the above methods. Currently, the following special holidays are recognized by the SCEX:
  • 0001 - Good Friday
  • 0002 - Easter Sunday
  • 0003 - Easter Monday

🟦 <Mortgage_Insurance>

Element TypeData TypeValuesDefault
Parent--No mortgage insurance

The <Mortgage_Insurance> element determines if this loan includes one of the supported types of mortgage insurance (MI) - PMI or FHA. This element contains child elements which further specify mortgage insurance options.

NOTE: Mortgage insurance is only supported on equal, balloon, and interest only loan builder requests at this time.

Attributes: 🔹CashDown, 🔹LoanAmt, 🔸PropertyValue, 🔹Type

🔹 CashDown

Data TypeValuesDefault
Currency>= 00

The CashDown attribute represents a cash down payment made at closing. If specified and greater than zero, this amount will be deducted from the principal balance. If not specified, the cash down payment will default to zero.

🔹 LoanAmt

Data TypeValuesDefault
Currency>= 0Principal balance

The LoanAmt attribute represents the amount by which the PMI rates are multiplied to produce a level PMI premium. If not specified, then the principal balance will be used to compute the annual premium.

🔹 PropertyValue

Data TypeValuesDefault
Currency>= 00

This attribute’s value represents the appraised property value, and will be used in the calculation of the loan to value ratio.

🔹 Type

Data TypeValuesDefault
Enumpmi, fhapmi

This attribute determines the type of mortgage insurance to include with the loan. If the Type attribute is set to FHA, a different MI premium is computed every twelve months based upon the average outstanding principal balance during that same term. The MI calculation adheres strictly to the HUD regulation.


🟥 <Mortgage_Insurance><MI_Rate>[]

Element TypeData TypeValues
DataDecimal>= 0

The value of this element specifies the cost of mortgage insurance per $100 of the loan amount. Note that there may be more than one <MI_Rate> element defined in an XML loan request (see the Switch attribute below).

As an example, a loan computed with a MI rate of $1.50 per $100 would be specified as <MI_Rate>1.50</MI_Rate>.

Attributes: 🔸Switch

🔹 Switch

Data TypeValuesDefault
Integer> 00

This optional attribute defines the payment number beyond which the associated MI rate will apply. If not specified, the value will default to zero.

Thus, if there is only a single MI rate, one may omit this attribute. Single rate example (use a rate of $1.50 for the entire term of MI coverage):

<MI_Rate>1.50</MI_Rate>

Multiple rate example (use a rate of $1.50 for the first 10 years, with a rate of $0.20 for coverage beyond 10 years):

<MI_Rate>1.50</MI_Rate>
<MI_Rate Switch="120">0.20</MI_Rate>

🟦 <Mortgage_Insurance><Periodic>

Element TypeData TypeValuesDefault
DataInteger>= 00

The value of this element represents the term beyond which MI is no longer included. As an example, if mortgage insurance must be removed after the 180th payment, then the calling application should specify <Periodic>180</Periodic> in the XML loan request. 0 means no term removal is in effect.

Attributes: 🔹DropLTV, 🔹WarnLTV

🔹 DropLTV

Data TypeValuesDefault
Decimal>= 0 and <= 1000

The value of this attribute determines the loan to value ratio at which MI should be removed, and is expressed as a percentage. For example, if you wish to automatically drop MI when the loan to value ratio first equals or falls below 78%, then you would specify DropLTV="78.0".

🔹 WarnLTV

Data TypeValuesDefault
Decimal>= 0 and <= 1000

The value of this attribute determines the loan to value ratio at which a warning should be issued, and is expressed as a percentage of LTV (loan to value). For example,if you wish to know when the loan to value ratio first equals or falls below 80%, then you would specify WarnLTV="80.0".


🟦 <Mortgage_Insurance><UpFront>

Element TypeData TypeValuesDefault
DataDecimal>= 00

This element determines the up front fee for mortgage insurance, as disclosed in the <PMI_Fee> element in the results. If this element is not specified, no up front fee will be computed. Note that ZOMP (zero option monthly premium) products do not have an up front fee, which means that this element can be omitted or set to zero.

The following attributes define how the fee is computed and disclosed.

Attributes: 🔹Paid, 🔹Units

🔹 Paid

Data TypeValuesDefault
EnumFinanced, AtClosing, ByLenderAtClosing

If the value of this attribute is set to Financed, then the computed up front fee will be added to the principal balance and the finance charge. A value of AtClosing will cause the value of the fee to be added to the finance charge alone. Finally, a value of ByLender means that the up front fee is to be paid by the lender; hence, the value of the fee is a Pocket Fee that is not added to either the principal balance nor the finance charge.

🔹 Units

Data TypeValuesDefault
EnumMonths, Points, YearsMonths

If the Units attribute is set to Months, the value of the <UpFront> element represents the number of periodic MI premiums to be paid at closing.

If the Units attribute is set to Years, the value of the <UpFront> element represents the number of annual MI premiums to be paid at closing.

Many single premium products define the up front fee as a number of years of MI to be paid up front.

Finally, if the Units attribute is set to Points, the value of the <UpFront> element represents the percentage of principal to be paid up front. As of October 3, 2011, FHA loans use points.


🟦 <OddDaysPrepaid>

Element TypeData TypeValuesDefault
Empty--No odd days prepaid interest

If odd days interest should be treated as a prepaid finance charge or added to the first payment, then include this empty element in the request. The attributes of this element determine how odd days interest is computed and handled.

Attributes: 🔹AccrualCode, 🔹AddToPmt, 🔹AddToPrin, 🔹AnchorDate, 🔹ForceUnitPeriod, 🔹NoCap, 🔹UseDailyCost, 🔹UseNegODI

🔹 AccrualCode

Data TypeValuesDefault
EnumSee below220

The accrual code defines how the odd days interest is computed.

Note that accrual code 250 ("Variable Days Per Year") defines the basis divisor days to be equal to 12 multiplied by the number of days in the month of the date on which interest begins to accrue. Thus, if the interest start date falls in November, then the number of basis days is 360. If the interest start date falls in a month with 31 days, then the number of basis days is 372. For an interest start date in February, the number of basis days will either be 336 or 348, depending upon whether or not it is a leap year.

AccrualCodeDescription
204Unit period simple w/ true 360 calendar and 360 day divisor
205Unit period simple w/ true 360 calendar and 365 day divisor
210Actual / 360 simple
211True 365 / 360 simple
220Actual / 365 simple
221True 365 / 365 simple
230Actual / Actual simple
231Midnight 366 simple
250Unit period simple w/ variable DPY divisor

🔹 AddToPmt

Data TypeValuesDefault
Booleantrue, false, 1, 0false

If the calling application wants the odd days interest to be added to the first payment, then set the value of this attribute to true. A value of false indicates that the odd days interest will be treated as a prepaid fee.

🔹 AddToPrin

Data TypeValuesDefault
Booleantrue, false, 1, 0false

If any odd days interest should be treated as a financed prepaid fee, then set the value of this attribute to true. Note that if both AddToPmt and AddToPrin are set to true, then a warning message will be returned by the SCEX and the value of AddToPrin will be set to false.

🔹 AnchorDate

Data TypeValuesDefault
EnumBackUnitPeriod, BackDaysPerPeriodBackUnitPeriod

The computed number of odd days is the number of days between the loan date and the anchor date. This attribute determines how to arrive at the anchor date.

  • BackUnitPeriod - The anchor date is one unit period prior to the specified first payment date.
  • BackDaysPerPeriod - The anchor date is the number of days per period prior to the first payment date.

Please note that for both of these methods, the period used will be that associated with the payment stream in which the first payment occurs.

🔹 ForceUnitPeriod

Data TypeValuesDefault
Booleantrue, false, 1, 0false

If the loan's interest accrual is unit period, this attribute forces the period to the first payment to be 1/12 (or 1/(PmtsPerYear) in general). Without this attribute an accrual code of 202 (Unit Period /365) would use a factor of Days/365 rather than the expected 1/12.

🔹 NoCap

Data TypeValuesDefault
Booleantrue, false, 1, 0false

When an odd days interest fee is present and financed, the value of this attribute determines if the ODI fee is added to the principal balance for the purposes of computing the ODI fee (e.g. if it is capitalized). If this value is true, the ODI is computed on the true principal balance less the ODI; false means "compute ODI on the true principal balance.

🔹 UseDailyCost

Data TypeValuesDefault
Booleantrue, false, 1, 0false

If the total odd days prepaid fee is computed by first generating a rounded (to the nearest penny) daily cost and then multiplying this value by the computed number of odd days, then set the value of this property to true.

A value of false means that the daily cost is left unrounded, and the total prepaid fee is rounded after the computation is complete.

🔹 UseNegODI

Data TypeValuesDefault
Booleantrue, false, 1, 0false

If there are negative odd days in the loan, then the value of this attribute determines if a negative odd days interest fee is computed. If the value of this attribute is false, then negative odd days fees are not allowed, the SCEX will return a value of zero in this situation, and the computed payment will be adjusted to take into account the negative odd days. A value of true will return a negative odd days interest fee (in effect, it then becomes an odd days interest credit) when there are negative odd days in a loan.


🟦 <PmtStream>[]

Element TypeData Type
Empty-

Payment streams are defined using the attributes of this empty element, including individually defined payments.

Attributes: 🔹AllowFeb29, 🔹Amount, 🔸Begin, 🔹ComputeTerm, 🔹Holidays, 🔹LastDay, 🔹MinPmt, 🔹PmtType, 🔹PPY, 🔹ReplaceIdx, 🔹SemimonthlyDay, 🔹Term, 🔹Weekends

🔹 AllowFeb29

Data TypeValuesDefault
Booleantrue, false, 1, 0true

This attribute is used when generating payment dates (if any) beyond the specified Begin date of the <PmtStream> element. If the value of this attribute is true, then February 29th is an allowed payment date.

On the other hand, if the value of this attribute is set to false and a computed date in the given payment stream is scheduled to fall on February 29th, then the scheduled payment date will be altered in one of the following manners:

  • If the number of payments per year is 1, 2, 4, 6, 12, or 24 then the scheduled payment date of February 29 will be moved back one day to February 28. This is the only date that will be adjusted.
  • If the number of payments per year is 26 or 52 then the scheduled payment date of February 29 will be moved forward one day to March 1, and all subsequent payment dates will be a multiple of 7 or 14 days from this date (depending upon the specified payment frequency).

🔹 Amount

Data TypeValuesDefault
Currencysee below0

The meaning of the Amount attribute depends on the PmtType attribute.

  • CalcPmt - If the value of this attribute is a currency value (e.g. Amount="####.##"), then the value will be added to the calculated payment (also known as a "pickup payment"). If the suffix of the value is % (e.g. Amount="50%) then the value before the % suffix will be treated as a percentage, and the payment will be equal to the specified percentage of the computed payment.
  • FixedPmt - The amount of the fixed payment. An Amount="0" means a skipped payment. If the suffix of the value is % (e.g. Amount="1.0%") then the value before the % suffix will be treated as a percentage, and the payment will be equal to the specified percentage of the loan's disclosed principal balance. Similarly, if the suffix of the value is %B (e.g. Amount="5.0%B") then the value before the %B suffix will be treated as a percentage, and the payment will be equal to the specified percentage of the loan's outstanding principal balance at the time the payment is made.
  • PayInt - Addition to the interest only payment. If Amount="0", then it is an interest only payment. If the suffix of the value is % (e.g. Amount="1.0%") then the value before the % suffix will be treated as a percentage, and the principal portion of the payment will be equal to the specified percentage of the loan's disclosed principal balance. Similarly, if the suffix of the value is %B (e.g. Amount="5.0%B") then the value before the %B suffix will be treated as a percentage, and the principal portion of the payment will be equal to the specified percentage of the loan's outstanding principal balance at the time the payment is made. If the suffix of the value is %C (e.g. Amount="50%C) then the value before the %C suffix will be treated as a percentage, and the principal portion of the payment will be equal to the specified percentage of the computed payment.
  • PayPrin - The amount of the pure principal reduction (no interest is paid, only principal). These payments may also use the %, %B, and %C suffixes described above for the PayInt payment type.
  • PayEsc - Special payment type associated with MYED attribute of the <BusinessRules> element.

🔸 Begin

Data TypeValues
Datesee below

The Begin attribute defines when the <PmtStream> begins, and has four ways to express when the payment stream begins: on a standard date, on a payment number, every month or the month of a particular year. The special formats are used following a full payment stream of type CalcPmt. As an example of how convenient these special format are, consider a ten year teacher's loan that skips summer months. This task would require a voluminous list of <PmtStream> elements, were it not for the Month Number format described below.

The formats are as follows:

  • Standard Date (YYYY-MM-DD)

The Begin attribute for the <PmtStream> element is generally used to specify the starting date for the payment stream in question. As an example, if the payment stream should begin on Feb. 1, 2008, the attribute should be specified as Begin="2008-02-01".

For payment frequencies that are monthly multiples, the day number specified in this attribute specifies the desired day number of all future payments, if this day number does not exceed the number of days in the computed month. As an example, if the first payment is scheduled to be made in February of 2022 and the desired day for all payments is the 30th, then the attribute would be specified as Begin="2022-02-30".

  • Payment Number (nnnn-00-00)

If you wish to replace a previously defined payment by specifying the payment number (n), use a value of nnnn-00-00. For example, an attribute value of 0012-00-00 instructs the engine to replace payments starting on the 12’th payment. If the value of the Term attribute is greater than one, then that number of payments will continue to be replaced.

Example: To define a stream of 12 interest only payments followed by 48 computed payments, the following XML could be used:

<PmtStream PmtType="CalcPmt" Begin="2014-12-20" Term="60" PPY="12" />
<PmtStream PmtType="PayInt" Begin="0001-00-00" Term="12" PPY="12" />
  • Month Number (0000-mm-00)

If a special payment is to occur on a specific month every year, use this format. The following example skips the summer months of June, July and August on a ten-year teacher's loan:

<PmtStream PmtType="CalcPmt" Begin="2014-12-20" Term="120" />
<PmtStream PmtType="FixedPmt" Begin="0000-06-00" Amount="0" />
<PmtStream PmtType="FixedPmt" Begin="0000-07-00" Amount="0" />
<PmtStream PmtType="FixedPmt" Begin="0000-08-00" Amount="0" />
  • Month of a Year (yyyy-mm-00)

If only the month of a particular year needs adjusting, use the "yyyy-mm-00" format. e.g. A value of 2011-08-00 instructs the SCEX to use the defined payment for every payment occurring in August of 2011 (there can be more than one payment if the payment frequency is greater than monthly).

NOTE - if the value of the Begin attribute is not a valid date (i.e. it is instead of one of the three formats mentioned above), then the LastDay, Term, and PPY attributes will be ignored, unless otherwise noted above.

🔹 ComputeTerm

Data TypeValuesDefault
Booleantrue, false, 1, 0false

If set to true, then the ComputeTerm attribute is used to inform the Loan Builder module that the calling application is requesting an equal payment “roll to term” loan calculation. In this loan scenario, the calling application specifies the interest rate, amount requested, maximum desired payment amount, and maximum loan term. The Loan Builder module will then compute the shortest term to produce an equal payment amount less than or equal to the specified maximum payment.

As an example, the following partial XML request would direct the Loan Builder module to compute the term for an equal payment loan with an interest rate of 5.00%, an advance of $5,000, a maximum desired payment amount of $300, and a maximum allowed loan term of 60 monthly payments:

<Advance Date="2021-08-01" Amount="5000.00" />
<EditInterest Date="2021-08-01" IntRate="5.000" />
<PmtStream Begin="2021-09-01" PmtType="FixedPmt"
           Amount="300.00" Term="60" ComputeTerm="true" />

Note that in the above partial XML request, the PmtType must be set to FixedPmt, the value of the Amount attribute is set to the maximum desired payment amount, and the value of the Term attribute is set to the maximum term allowed.

🔹 Holidays

Data TypeValuesDefault
EnumIgnore, Prev, NextIgnore

If payment dates (including the specified start date) are not allowed to fall on specified holidays (see the <Holiday> element for more information on how to specify holidays), then set the value of this field to something other than Ignore. The meaning of the other two values are defined below:

  • Ignore - No holidays will be considered.
  • Prev - The date will be moved to the day before the holiday.
  • Next - The date will be moved to the Monday after the holiday.

Note that two other <PmtStream> element attributes can cause the computed dates to be adjusted - AllowFeb29 and Weekends. The rules for how these three fields interact are described below in detail.

For every date required in our payment stream, the SCE goes through the following steps:

  1. Generate the next date in our date stream, called the target date.
  2. If February 29th is not allowed and if the target date is 2/29, then adjust the target date forward or backward one day based upon the date generation frequency. If the frequency is a monthly multiple, then the target date is moved backward one day to 2/28. Weekly and biweekly frequencies move the target date forward one day to 3/1.
  3. If weekend dates are not allowed (e.g. the Weekends attribute holds a value other than Ignore) and the target date falls on a Saturday or Sunday:
    • (a) then adjust the target date according to the attribute value.
    • (b) if February 29th is not allowed and if the target date is 2/29, then adjust the target date in the same direction as in 3(a) above.
  4. If holidays are not allowed (e.g. the Holidays attribute holds a value other than Ignore) and the target date falls on a specified holiday:
    • (a) then adjust the target date according to the Holidays attribute value.
    • (b) If weekend dates are not allowed (e.g. the Weekends attribute holds a value other than Ignore) and the target date falls on a Saturday or Sunday, then adjust the target date in the same direction as in 4(a) above.
    • (c) if February 29th is not allowed and if the target date is 2/29, then adjust the target date in the same direction as in 4(a) above.
    • (d) Step 4 is repeated until the target date is not adjusted.

🔹 LastDay

Data TypeValuesDefault
Booleantrue, false, 1, 0false

This attribute is used to resolve ambiguities in subsequent payment dates when the Begin date falls on the last day of a month with fewer than 31 days. If the value of the Begin attribute is not a valid date, then the value of this attribute is ignored. If the value of the Term attribute is 1, then the value of this attribute is ignored.

Set this attribute’s value to true if the intent was to make subsequent payments occur on the last day of the month. A value of false indicates that subsequent payment dates will fall on the day number specified by the Begin date.

As an example, if the calling application specifies a Begin date of 2010-02-28, then subsequent payment dates for a monthly payment frequency will be:

  • on the 28th of each subsequent month if LastDay="false".
  • on the last day of each subsequent month if LastDay="true".

🔹 MinPmt

Data TypeValuesDefault
Currency>= 00

If specified, this field will dictate a minimum payment. If a calculated payment falls below the specified minimum payment value, then the minimum payment value will be used instead.

When a minimum payment is used, the principal reduction of the loan will be accelerated. In some loan scenarios, this will result in an early payoff of the loan before the specified Term of the payment stream. In this situation, the final payment will always pay off the loan, and will be smaller than the specified minimum payment.

🔹 PmtType

Data TypeValuesDefault
EnumCalcPmt, FixedPmt, PayInt, PayPrin, PmtEscCalcPmt

Various types of payment streams may be requested by use of this attribute.

  • CalcPmt - Compute target payment(s) that defines a common payment.
  • FixedPmt - Payments in this stream are specified as the Amount attribute. If the Amount="0", the payment is skipped.
  • PayInt - Interest only payments with or without additional principal defined as the Amount attribute.
  • PayPrin - Pure principal payment. Interest accrued will persist as unpaid interest beyond the pure principal payment.
  • PmtEsc - Escrow the payments. Each payment will increase a pool of escrowed payments that amortize the loan on the year-end date. (See MYED attribute of the <BusinessRules> element).

Same Day Payments - By design or chance, payments can land on the same calendar day. How they behave depends on the combination of PmtType attributes. All possible combinations are considered below:

  • CalcPmt + CalcPmt - Merge into one CalcPmt event whose Amount is equal to the sum of the individual Amount attributes.

  • CalcPmt + FixedPmt - Replace the CalcPmt with the FixedPmt.

  • CalcPmt + PayInt - Replace the CalcPmt with the PayInt.

  • CalcPmt + PayPrin - If the PayPrin Amount is specified as a fixed dollar amount, increase the CalcPmt Amount by the PayPrin Amount and delete the PayPrin event. Otherwise, keep both payments.

  • FixedPmt + FixedPmt - Retain both payments separately.

  • FixedPmt + PayInt - Retain both payments separately.

  • FixedPmt + PayPrin - Retain both payments separately.

  • PayInt + PayInt - Merge into one PayInt event whose Amount is the sum of the two PayInt Amount attributes.

  • PayInt + PayPrin - Merge into one PayInt event, with the PayPrin Amount added to the PayInt Amount.

  • PayPrin + PayPrin - Merge into one payment, adding the Amount attributes together.

🔹 PPY

Data TypeValuesDefault
Enum1, 2, 4, 6, 12, 24, 26, 5212

PPY is an abbreviation for payments per year, and as one might surmise, determines the payment frequency for the payment stream. If the value of theBegin attribute is not a valid date, then the value of this attribute is ignored.

🔹 ReplaceIdx

Data TypeValuesDefault
Integer>= 0-1

The ReplaceIdx attribute allows applications to restrict the enforcement of a replacement payment to a specific <PmtStream>. If specified, the value of ReplaceIdx must be an integer >= 0. If not included in the request, then ReplaceIdx will be set internally to a value of -1, which means that this replacement payment rule will be applied to all matching payments.

If specified, the value of ReplaceIdx represents the numeric index of the <PmtStream> element to which the replacement payment will only be applied.

Example 1:

<!-- 2 overlapping payment streams -->
<PmtStream Begin="2024-01-01" Term="36" PmtType="PayInt" />
<PmtStream Begin="2024-01-01" Term="36" PmtType="PayPrin" Amount="1000" />

<!-- Replacement payment streams target only the “PayPrin” stream above -->
<PmtStream Begin="0000-01-00" PmtType="FixedPmt" ReplaceIdx="1"/>
<PmtStream Begin="0000-03-00" PmtType="FixedPmt" ReplaceIdx="1"/>
<PmtStream Begin="0000-04-00" PmtType="FixedPmt" ReplaceIdx="1"/>

In the example above, the first <PmtStream> with a PmtType of PayInt has an index of 0, with the PayPrin payment stream having an index of 1, etc.

All three replacement payment streams (with indexes of 2, 3, and 4) indicate that they are targeting the PayPrin payment stream only by specifying ReplaceIdx="1". Also note that once the replacement payments are applied to the applicable payments, those payments will no longer be considered to be a part of the original payment stream, but instead will be considered to be a part of the replacement payment stream that was applied.

Example 2:

Assume we wanted to build a repayment schedule of 24 interest only payments, followed by 36 computed equal payments. Also, assume that we wanted to skip the interest only payments made in December. Then, we could build a request in the following manner:

<PmtStream Begin="2024-06-01" PmtType="CalcPmt" Term="60" />
<PmtStream Begin="0001-00-00" PmtType="PayInt" Term="24" />
<PmtStream Begin="0000-12-00" PmtType="FixedPmt" ReplaceIdx="1" />

Above, PmtStream[0] sets up the basic repayment schedule with 60 computed equal payments. Then, PmtStream[1] replaces payments 1-24 with interest only payments. Finally, PmtStream[2] replaces the December payment in the interest only period with a skipped payment.

If you are creating overlapping payment streams with payments that fall on the same day, then we recommend that you set the value of the Merge attribute of the <EditOutput> element to false. If Merge is left at its default value of true, merging of payments occurs before replacement payments are enforced, thus making targeting a given payment stream much more difficult if they are merged with a payment from a second payment stream.

🔹 SemimonthlyDay ([0..31], 0)

Data TypeValuesDefault
Integer[0...31]0

When specifying a semimonthly payment stream, the day number on which the first payment is made determines the day number for all of the following odd numbered payments. If you omit this attribute or specify a value of 0, then the even numbered payments will be generated using the default method within the SCEX.

If you wish to specify the day number on which even numbered payments fall (overriding the default method used in the SCEX), then set the value of this attribute to the desired day number. Setting the value of this attribute to 31 will cause all even payments to fall on the last day of the month.

As an example, if you want to specify a semi-monthly payment stream beginning on January 1, 2014 with payments that fall on the 1st and 15th of each month for 24 payments, the element should look something like this:

<PmtStream PmtType="CalcPmt" Begin="2014-01-01" Amount="0" 
    Term="24" PPY="24" SemimonthlyDay="15" />

🔹 Term

Data TypeValuesDefault
Integer>= 11

The term attribute indicates the the number of payments to be made at the specified payment frequency (see PPY above), after which the payment stream is completed. The default value is 1. If the value of the Begin attribute is not a valid date, then the value of this attribute is ignored.

🔹 Weekends

Data TypeValuesDefault
EnumIgnore, Prev, Near, NextIgnore

If payment stream dates (including the specified start date) are not allowed to fall on a Saturday or Sunday, then set the value of this field to something other than Ignore. The meaning of the other three values are defined below:

  • Prev - The date will be moved to the Friday before the computed weekend date.
  • Near - The date will be moved to the Friday before the computed weekend date if the computed weekend date falls on a Saturday, otherwise it will be moved to the Monday after.
  • Next - The date will be moved to the Monday after the computed weekend date.

Note that two other attributes can cause the computed dates to be adjusted - AllowFeb29 and Weekends. For a complete description of how these three fields work together, please see the documentation for the Holidays attribute.


🟦 <Protection>

Element TypeData Type
Parent-

If the calling application wishes to add any payment protection products to the loan (e.g. credit insurance or debt protection), then this element and at least one <Product> child element must be present.

Attributes: 🔹DataDirPath, 🔹ShowDataPath

🔹 DataDirPath

Data TypeValuesDefault
Stringanydefault data directory

If this attribute is set, the SCEX will look for a data folder containing the setup files in the path specified. Thus, if the DataDirPath is set to C:\SCEX\, the SCEX will look for the setup files in C:\SCEX\data.

If the calling application wishes to specify the data directory path in its entirety (e.g. the calling app does not want the SCEX to append \data to the provided path), then simply terminate the specified DataDirPath with an asterisk (*). Thus, if the DataDirPath is set to C:\SCEX\bank1\*, the SCEX will look for the setup files in C:\SCEX\bank1\.

If this attribute is not set, the SCEX will attempt to locate the data folder in the default data directory path location, which can be retrieved using the <inVERSION> module query, and set via the SCEX API.

This attribute is useful if you wish to use only a single installation of the SCEX, but have many different setup file groupings. By specifying a different DataDirPath for each grouping, you can easily separate the groups from one another instead of grouping them all together in a single directory.

🔹 ShowDataPath

Data TypeValuesDefault
Booleantrue, false, 1, 0false

This attribute determines if the data directory path used in the calculation of the loan will be disclosed in the response as an attribute of the <Protection> element.


🟦 <Protection><Product>[]

Element TypeData Type
Parent-

Each protection product is individually defined through the use of a <Product> element (along with its child elements).

As an example, if a loan was requested with single decreasing life, single disability, single involuntary unemployment, and joint property insurances, then the input XML detailing the protection requests would look similar to the following:

<Protection DataDirPath="c:\scex\">
  <!-- Credit Life -->
  <Product Code="CL">
      <Birthday>1966-04-16</Birthday>
  </Product>
  <!-- Accident and Helth -->
  <Product Code="AH">
      <Birthday>1969-11-21</Birthday>
  </Product>
  <!-- Involuntary Unemployment -->
  <Product Code="IU">
      <Birthday>1966-04-16</Birthday>
  </Product>
  <!-- Personal Property -->
  <Product Code="PP">
      <Birthday>1966-04-16</Birthday>
      <Birthday>1969-11-21</Birthday>
  </Product>
</Protection>

Note: Life (Code="CL") may end up with two resulting products - decreasing and level, depending on the loan type and protection parameters.

Attributes: 🔹Account, 🔹Code, 🔹Dismemberment, 🔹Financed, 🔹Method, 🔹ShowFactor, 🔹Table, 🔹UseLevelRates

🔹 Account

Data TypeValuesDefault
Integer[1...9999]1

This attribute specifies the account number that will be used to define the requested product. Each account is numbered from 1 to 9,999, and each account corresponds to a set of setup file which define numerous settings which define the product and how it is calculated, such as the insurance rates, caps, formulas used, etc. If this attribute is not specified, a default value of 1 will be used.

🔹 Code

Data TypeValuesDefault
EnumLI, AH, IU, PPLI

This attribute defines the type of payment protection product, and which setup files are references for calculation, rate, and cap purposes. In the description of each product below, ‘NNNN’ is the Account number (see above, an account number of 1 would thus be ‘0001’).

  • LI – The requested product is treated as decreasing credit life and will reference the clNNNN.ini setup file.
  • AH – The requested product is treated as accident and health and will reference the ahNNNN.ini setup file.
  • IU – The requested product is treated as involuntary unemployment and will reference the iuNNNN.ini setup file.
  • PP – The requested product is treated as property insurance and will reference the ppNNNN.ini setup file.

🔹 Dismemberment

Data TypeValuesDefault
Booleantrue, false, 1, 0false

If the account specified has been set up to offer life protection products with optional dismemberment coverage, and if the optional dismemberment coverage is desired, then set this attribute’s value to true. Otherwise, use the default value of false.

🔹 Financed

Data TypeValuesDefault
Booleantrue, false, 1, 0true

Single premium protection products are typically financed (added to the principal balance). If you wish to have the premiums paid up front at loan cloasing, then set the value of this field to false.

🔹 Method

Data TypeValuesDefault
EnumDefault, Gross, Net, LevelDefault

Some accounts are configured to offer different types of credit life products (usually gross and net). In these accounts, this field allows the calling application to specify which method to use for a given loan. If no method is present in the request, then the default method will be used.

🔹 ShowFactor

Data TypeValuesDefault
Booleantrue, false, 1, 0false

If this attribute is set to true, then the <Cost> output element (child element of <Product>) will include a Factor attribute which is useful to Sherman and Associates when debugging protection calculations.

🔹 Table

Data TypeValuesDefault
Integer[0...19]0

When requesting the accident and health product (e.g. the Code attribute of <Product> element is set to AH), if the specified account has been set up with multiple disability or debt cancellation plans, then this attribute determines which plan number will be used. If no table number is specified, the first table (table zero) will be used. To find out the number of available plans, use the <AHSetCount> element returned from an <inINPUT_TOOL> query.

If the requested product Code is not AH, then this attribute is ignored.

🔹 UseLevelRates

Data TypeValuesDefault
Booleantrue, false, 1, 0false

If the account specified has been set up to offer single premium credit life using level rates instead of the normal decreasing rates, then set this attribute’s value to true. Otherwise, use the default value of false.


🟦 <Product><Benefit>

Element TypeData TypeValuesDefault
DataCurrency>= 00

If you wish to specify a benefit amount less than the maximum allowed, then do so with this element. Omitting this element will assure that the maximum benefit amount allowed will be used in the loan calculation. Note that if the specified account has not been set up to allow for user specified benefit amounts for the product in question, or if the product itself does not have the notion of a monthly benefit (such as life and property products), then this element will be ignored.

Attributes: None


🟥 <Product><Birthday>[]

Element TypeData TypeValues
DataDate>= 1900-01-01

This element contains the date of birth for a borrower who is requesting a payment protection product. The type of coverage provided (e.g. single or joint) is determined by the number of <Birthday> child elements for each <Product> element. Thus, to request single accident and health coverage, the <Product> element (with Code=“AH”) requires a single <Birthday> child element containing the birthday of the borrower seeking coverage. Similarly, to request joint decreasing life coverage, the <Product> element (with Code=“CL”) requires two <Birthday> child elements, each of which contains the birthday of a borrower seeking coverage.

Since the type of coverage depends upon the number of <Birthday> elements present, at lease one must appear and no more than two are allowed (as the only coverage options are single or joint).

All dates must be in the form of YYYY-MM-DD, and be 10 characters long.

Attributes: None


🟦 <Product><Coverage>

Element TypeData TypeValuesDefault
DataCurrency>= 00

If you wish to specify a coverage amount less than the maximum allowed, then do so with this element. Omitting this element will assure that the maximum coverage amount allowed will be used in the loan calculation. Note that if the specified account has not been set up to allow for user specified coverage amounts for the product in question, then this element will be ignored.

Attributes: None


🟦 <Product><Term> (integer, 0)

Element TypeData TypeValuesDefault
DataInteger>= 00

If you need to specify a coverage term (in months or payments) less than the maximum allowed, then do so using this element. If this element is omitted, then the loan will be covered for the maximum term allowed. Note that if the specified account has not been set up to allow for user specified coverage terms for this product, then this element will be ignored.

Attributes: 🔹Units

🔹 Units

Data TypeValuesDefault
EnumPmts, MonthsPmts

The specified numeric coverage term will be interpreted as a number of payments or months, depending upon the value of this attribute.


🟦 <TILARESPA2015>

Element TypeData Type
Empty-

If this element is present in the request, then the SCE will return data for the Integrated Mortgage Disclosures under the Real Estate Settlement Procedures Act (Regulation X) and the Truth In Lending Act (Regulation Z) rule, which is required as of August 1st, 2015. If this element is not present, then the TILA RESPA outputs will not be generated.

Attributes: None